'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 }; } } var codemirror = CodeMirror; CodeMirror.modeInfo = [ {name: "APL", mime: "text/apl", mode: "apl", ext: ["dyalog", "apl"]}, {name: "PGP", mimes: ["application/pgp", "application/pgp-encrypted", "application/pgp-keys", "application/pgp-signature"], mode: "asciiarmor", ext: ["asc", "pgp", "sig"]}, {name: "ASN.1", mime: "text/x-ttcn-asn", mode: "asn.1", ext: ["asn", "asn1"]}, {name: "Asterisk", mime: "text/x-asterisk", mode: "asterisk", file: /^extensions\.conf$/i}, {name: "Brainfuck", mime: "text/x-brainfuck", mode: "brainfuck", ext: ["b", "bf"]}, {name: "C", mime: "text/x-csrc", mode: "clike", ext: ["c", "h", "ino"]}, {name: "C++", mime: "text/x-c++src", mode: "clike", ext: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"], alias: ["cpp"]}, {name: "Cobol", mime: "text/x-cobol", mode: "cobol", ext: ["cob", "cpy"]}, {name: "C#", mime: "text/x-csharp", mode: "clike", ext: ["cs"], alias: ["csharp", "cs"]}, {name: "Clojure", mime: "text/x-clojure", mode: "clojure", ext: ["clj", "cljc", "cljx"]}, {name: "ClojureScript", mime: "text/x-clojurescript", mode: "clojure", ext: ["cljs"]}, {name: "Closure Stylesheets (GSS)", mime: "text/x-gss", mode: "css", ext: ["gss"]}, {name: "CMake", mime: "text/x-cmake", mode: "cmake", ext: ["cmake", "cmake.in"], file: /^CMakeLists\.txt$/}, {name: "CoffeeScript", mimes: ["application/vnd.coffeescript", "text/coffeescript", "text/x-coffeescript"], mode: "coffeescript", ext: ["coffee"], alias: ["coffee", "coffee-script"]}, {name: "Common Lisp", mime: "text/x-common-lisp", mode: "commonlisp", ext: ["cl", "lisp", "el"], alias: ["lisp"]}, {name: "Cypher", mime: "application/x-cypher-query", mode: "cypher", ext: ["cyp", "cypher"]}, {name: "Cython", mime: "text/x-cython", mode: "python", ext: ["pyx", "pxd", "pxi"]}, {name: "Crystal", mime: "text/x-crystal", mode: "crystal", ext: ["cr"]}, {name: "CSS", mime: "text/css", mode: "css", ext: ["css"]}, {name: "CQL", mime: "text/x-cassandra", mode: "sql", ext: ["cql"]}, {name: "D", mime: "text/x-d", mode: "d", ext: ["d"]}, {name: "Dart", mimes: ["application/dart", "text/x-dart"], mode: "dart", ext: ["dart"]}, {name: "diff", mime: "text/x-diff", mode: "diff", ext: ["diff", "patch"]}, {name: "Django", mime: "text/x-django", mode: "django"}, {name: "Dockerfile", mime: "text/x-dockerfile", mode: "dockerfile", file: /^Dockerfile$/}, {name: "DTD", mime: "application/xml-dtd", mode: "dtd", ext: ["dtd"]}, {name: "Dylan", mime: "text/x-dylan", mode: "dylan", ext: ["dylan", "dyl", "intr"]}, {name: "EBNF", mime: "text/x-ebnf", mode: "ebnf"}, {name: "ECL", mime: "text/x-ecl", mode: "ecl", ext: ["ecl"]}, {name: "edn", mime: "application/edn", mode: "clojure", ext: ["edn"]}, {name: "Eiffel", mime: "text/x-eiffel", mode: "eiffel", ext: ["e"]}, {name: "Elixir", mime: "text/x-elixir", mode: "elixir", ext: ["ex", "exs"]}, {name: "Elm", mime: "text/x-elm", mode: "elm", ext: ["elm"]}, {name: "Embedded Javascript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"]}, {name: "Embedded Ruby", mime: "application/x-erb", mode: "htmlembedded", ext: ["erb"]}, {name: "Erlang", mime: "text/x-erlang", mode: "erlang", ext: ["erl"]}, {name: "Esper", mime: "text/x-esper", mode: "sql"}, {name: "Factor", mime: "text/x-factor", mode: "factor", ext: ["factor"]}, {name: "FCL", mime: "text/x-fcl", mode: "fcl"}, {name: "Forth", mime: "text/x-forth", mode: "forth", ext: ["forth", "fth", "4th"]}, {name: "Fortran", mime: "text/x-fortran", mode: "fortran", ext: ["f", "for", "f77", "f90", "f95"]}, {name: "F#", mime: "text/x-fsharp", mode: "mllike", ext: ["fs"], alias: ["fsharp"]}, {name: "Gas", mime: "text/x-gas", mode: "gas", ext: ["s"]}, {name: "Gherkin", mime: "text/x-feature", mode: "gherkin", ext: ["feature"]}, {name: "GitHub Flavored Markdown", mime: "text/x-gfm", mode: "gfm", file: /^(readme|contributing|history)\.md$/i}, {name: "Go", mime: "text/x-go", mode: "go", ext: ["go"]}, {name: "Groovy", mime: "text/x-groovy", mode: "groovy", ext: ["groovy", "gradle"], file: /^Jenkinsfile$/}, {name: "HAML", mime: "text/x-haml", mode: "haml", ext: ["haml"]}, {name: "Haskell", mime: "text/x-haskell", mode: "haskell", ext: ["hs"]}, {name: "Haskell (Literate)", mime: "text/x-literate-haskell", mode: "haskell-literate", ext: ["lhs"]}, {name: "Haxe", mime: "text/x-haxe", mode: "haxe", ext: ["hx"]}, {name: "HXML", mime: "text/x-hxml", mode: "haxe", ext: ["hxml"]}, {name: "ASP.NET", mime: "application/x-aspx", mode: "htmlembedded", ext: ["aspx"], alias: ["asp", "aspx"]}, {name: "HTML", mime: "text/html", mode: "htmlmixed", ext: ["html", "htm", "handlebars", "hbs"], alias: ["xhtml"]}, {name: "HTTP", mime: "message/http", mode: "http"}, {name: "IDL", mime: "text/x-idl", mode: "idl", ext: ["pro"]}, {name: "Pug", mime: "text/x-pug", mode: "pug", ext: ["jade", "pug"], alias: ["jade"]}, {name: "Java", mime: "text/x-java", mode: "clike", ext: ["java"]}, {name: "Java Server Pages", mime: "application/x-jsp", mode: "htmlembedded", ext: ["jsp"], alias: ["jsp"]}, {name: "JavaScript", mimes: ["text/javascript", "text/ecmascript", "application/javascript", "application/x-javascript", "application/ecmascript"], mode: "javascript", ext: ["js"], alias: ["ecmascript", "js", "node", "dataviewjs"]}, {name: "JSON", mimes: ["application/json", "application/x-json"], mode: "javascript", ext: ["json", "map"], alias: ["json5"]}, {name: "JSON-LD", mime: "application/ld+json", mode: "javascript", ext: ["jsonld"], alias: ["jsonld"]}, {name: "JSX", mime: "text/jsx", mode: "jsx", ext: ["jsx"]}, {name: "Jinja2", mime: "text/jinja2", mode: "jinja2", ext: ["j2", "jinja", "jinja2"]}, {name: "Julia", mime: "text/x-julia", mode: "julia", ext: ["jl"]}, {name: "Kotlin", mime: "text/x-kotlin", mode: "clike", ext: ["kt"]}, {name: "LESS", mime: "text/x-less", mode: "css", ext: ["less"]}, {name: "LiveScript", mime: "text/x-livescript", mode: "livescript", ext: ["ls"], alias: ["ls"]}, {name: "Lua", mime: "text/x-lua", mode: "lua", ext: ["lua"]}, {name: "Markdown", mime: "text/x-markdown", mode: "markdown", ext: ["markdown", "md", "mkd"]}, {name: "mIRC", mime: "text/mirc", mode: "mirc"}, {name: "MariaDB SQL", mime: "text/x-mariadb", mode: "sql"}, {name: "Mathematica", mime: "text/x-mathematica", mode: "mathematica", ext: ["m", "nb", "wl", "wls"]}, {name: "Modelica", mime: "text/x-modelica", mode: "modelica", ext: ["mo"]}, {name: "MUMPS", mime: "text/x-mumps", mode: "mumps", ext: ["mps"]}, {name: "MS SQL", mime: "text/x-mssql", mode: "sql"}, {name: "mbox", mime: "application/mbox", mode: "mbox", ext: ["mbox"]}, {name: "MySQL", mime: "text/x-mysql", mode: "sql"}, {name: "Nginx", mime: "text/x-nginx-conf", mode: "nginx", file: /nginx.*\.conf$/i}, {name: "NSIS", mime: "text/x-nsis", mode: "nsis", ext: ["nsh", "nsi"]}, {name: "NTriples", mimes: ["application/n-triples", "application/n-quads", "text/n-triples"], mode: "ntriples", ext: ["nt", "nq"]}, {name: "Objective-C", mime: "text/x-objectivec", mode: "clike", ext: ["m"], alias: ["objective-c", "objc"]}, {name: "Objective-C++", mime: "text/x-objectivec++", mode: "clike", ext: ["mm"], alias: ["objective-c++", "objc++"]}, {name: "OCaml", mime: "text/x-ocaml", mode: "mllike", ext: ["ml", "mli", "mll", "mly"]}, {name: "Octave", mime: "text/x-octave", mode: "octave", ext: ["m"]}, {name: "Oz", mime: "text/x-oz", mode: "oz", ext: ["oz"]}, {name: "Pascal", mime: "text/x-pascal", mode: "pascal", ext: ["p", "pas"]}, {name: "PEG.js", mime: "null", mode: "pegjs", ext: ["jsonld"]}, {name: "Perl", mime: "text/x-perl", mode: "perl", ext: ["pl", "pm"]}, {name: "PHP", mimes: ["text/x-php", "application/x-httpd-php", "application/x-httpd-php-open"], mode: "php", ext: ["php", "php3", "php4", "php5", "php7", "phtml"]}, {name: "Pig", mime: "text/x-pig", mode: "pig", ext: ["pig"]}, {name: "Plain Text", mime: "text/plain", mode: "null", ext: ["txt", "text", "conf", "def", "list", "log"]}, {name: "PLSQL", mime: "text/x-plsql", mode: "sql", ext: ["pls"]}, {name: "PostgreSQL", mime: "text/x-pgsql", mode: "sql"}, {name: "PowerShell", mime: "application/x-powershell", mode: "powershell", ext: ["ps1", "psd1", "psm1"]}, {name: "Properties files", mime: "text/x-properties", mode: "properties", ext: ["properties", "ini", "in"], alias: ["ini", "properties"]}, {name: "ProtoBuf", mime: "text/x-protobuf", mode: "protobuf", ext: ["proto"]}, {name: "Python", mime: "text/x-python", mode: "python", ext: ["BUILD", "bzl", "py", "pyw"], file: /^(BUCK|BUILD)$/}, {name: "Puppet", mime: "text/x-puppet", mode: "puppet", ext: ["pp"]}, {name: "Q", mime: "text/x-q", mode: "q", ext: ["q"]}, {name: "R", mime: "text/x-rsrc", mode: "r", ext: ["r", "R"], alias: ["rscript"]}, {name: "reStructuredText", mime: "text/x-rst", mode: "rst", ext: ["rst"], alias: ["rst"]}, {name: "RPM Changes", mime: "text/x-rpm-changes", mode: "rpm"}, {name: "RPM Spec", mime: "text/x-rpm-spec", mode: "rpm", ext: ["spec"]}, {name: "Ruby", mime: "text/x-ruby", mode: "ruby", ext: ["rb"], alias: ["jruby", "macruby", "rake", "rb", "rbx"]}, {name: "Rust", mime: "text/x-rustsrc", mode: "rust", ext: ["rs"]}, {name: "SAS", mime: "text/x-sas", mode: "sas", ext: ["sas"]}, {name: "Sass", mime: "text/x-sass", mode: "sass", ext: ["sass"]}, {name: "Scala", mime: "text/x-scala", mode: "clike", ext: ["scala"]}, {name: "Scheme", mime: "text/x-scheme", mode: "scheme", ext: ["scm", "ss"]}, {name: "SCSS", mime: "text/x-scss", mode: "css", ext: ["scss"]}, {name: "Shell", mimes: ["text/x-sh", "application/x-sh"], mode: "shell", ext: ["sh", "ksh", "bash"], alias: ["bash", "sh", "zsh"], file: /^PKGBUILD$/}, {name: "Sieve", mime: "application/sieve", mode: "sieve", ext: ["siv", "sieve"]}, {name: "Slim", mimes: ["text/x-slim", "application/x-slim"], mode: "slim", ext: ["slim"]}, {name: "Smalltalk", mime: "text/x-stsrc", mode: "smalltalk", ext: ["st"]}, {name: "Smarty", mime: "text/x-smarty", mode: "smarty", ext: ["tpl"]}, {name: "Solr", mime: "text/x-solr", mode: "solr"}, {name: "SML", mime: "text/x-sml", mode: "mllike", ext: ["sml", "sig", "fun", "smackspec"]}, {name: "Soy", mime: "text/x-soy", mode: "soy", ext: ["soy"], alias: ["closure template"]}, {name: "SPARQL", mime: "application/sparql-query", mode: "sparql", ext: ["rq", "sparql"], alias: ["sparul"]}, {name: "Spreadsheet", mime: "text/x-spreadsheet", mode: "spreadsheet", alias: ["excel", "formula"]}, {name: "SQL", mime: "text/x-sql", mode: "sql", ext: ["sql"]}, {name: "SQLite", mime: "text/x-sqlite", mode: "sql"}, {name: "Squirrel", mime: "text/x-squirrel", mode: "clike", ext: ["nut"]}, {name: "Stylus", mime: "text/x-styl", mode: "stylus", ext: ["styl"]}, {name: "Swift", mime: "text/x-swift", mode: "swift", ext: ["swift"]}, {name: "sTeX", mime: "text/x-stex", mode: "stex"}, {name: "LaTeX", mime: "text/x-latex", mode: "stex", ext: ["text", "ltx", "tex"], alias: ["tex"]}, {name: "SystemVerilog", mime: "text/x-systemverilog", mode: "verilog", ext: ["v", "sv", "svh"]}, {name: "Tcl", mime: "text/x-tcl", mode: "tcl", ext: ["tcl"]}, {name: "Textile", mime: "text/x-textile", mode: "textile", ext: ["textile"]}, {name: "TiddlyWiki", mime: "text/x-tiddlywiki", mode: "tiddlywiki"}, {name: "Tiki wiki", mime: "text/tiki", mode: "tiki"}, {name: "TOML", mime: "text/x-toml", mode: "toml", ext: ["toml"]}, {name: "Tornado", mime: "text/x-tornado", mode: "tornado"}, {name: "troff", mime: "text/troff", mode: "troff", ext: ["1", "2", "3", "4", "5", "6", "7", "8", "9"]}, {name: "TTCN", mime: "text/x-ttcn", mode: "ttcn", ext: ["ttcn", "ttcn3", "ttcnpp"]}, {name: "TTCN_CFG", mime: "text/x-ttcn-cfg", mode: "ttcn-cfg", ext: ["cfg"]}, {name: "Turtle", mime: "text/turtle", mode: "turtle", ext: ["ttl"]}, {name: "TypeScript", mime: "application/typescript", mode: "javascript", ext: ["ts"], alias: ["ts"]}, {name: "TypeScript-JSX", mime: "text/typescript-jsx", mode: "jsx", ext: ["tsx"], alias: ["tsx"]}, {name: "Twig", mime: "text/x-twig", mode: "twig"}, {name: "Web IDL", mime: "text/x-webidl", mode: "webidl", ext: ["webidl"]}, {name: "VB.NET", mime: "text/x-vb", mode: "vb", ext: ["vb"]}, {name: "VBScript", mime: "text/vbscript", mode: "vbscript", ext: ["vbs"]}, {name: "Velocity", mime: "text/velocity", mode: "velocity", ext: ["vtl"]}, {name: "Verilog", mime: "text/x-verilog", mode: "verilog", ext: ["v"]}, {name: "VHDL", mime: "text/x-vhdl", mode: "vhdl", ext: ["vhd", "vhdl"]}, {name: "Vue.js Component", mimes: ["script/x-vue", "text/x-vue"], mode: "vue", ext: ["vue"]}, {name: "XML", mimes: ["application/xml", "text/xml"], mode: "xml", ext: ["xml", "xsl", "xsd", "svg"], alias: ["rss", "wsdl", "xsd"]}, {name: "XQuery", mime: "application/xquery", mode: "xquery", ext: ["xy", "xquery"]}, {name: "Yacas", mime: "text/x-yacas", mode: "yacas", ext: ["ys"]}, {name: "YAML", mimes: ["text/x-yaml", "text/yaml"], mode: "yaml", ext: ["yaml", "yml"], alias: ["yml", "tracker", "dataview"]}, {name: "Z80", mime: "text/x-z80", mode: "z80", ext: ["z80"]}, {name: "mscgen", mime: "text/x-mscgen", mode: "mscgen", ext: ["mscgen", "mscin", "msc"]}, {name: "xu", mime: "text/x-xu", mode: "mscgen", ext: ["xu"]}, {name: "msgenny", mime: "text/x-msgenny", mode: "mscgen", ext: ["msgenny"]}, {name: "WebAssembly", mime: "text/webassembly", mode: "wast", ext: ["wat", "wast"]}, ]; // Ensure all modes have a mime property for backwards compatibility for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.mimes) info.mime = info.mimes[0]; } CodeMirror.findModeByMIME = function(mime) { mime = mime.toLowerCase(); for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.mime == mime) return info; if (info.mimes) for (var j = 0; j < info.mimes.length; j++) if (info.mimes[j] == mime) return info; } if (/\+xml$/.test(mime)) return CodeMirror.findModeByMIME("application/xml") if (/\+json$/.test(mime)) return CodeMirror.findModeByMIME("application/json") }; CodeMirror.findModeByExtension = function(ext) { ext = ext.toLowerCase(); for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.ext) for (var j = 0; j < info.ext.length; j++) if (info.ext[j] == ext) return info; } }; CodeMirror.findModeByFileName = function(filename) { for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.file && info.file.test(filename)) return info; } var dot = filename.lastIndexOf("."); var ext = dot > -1 && filename.substring(dot + 1, filename.length); if (ext) return CodeMirror.findModeByExtension(ext); }; CodeMirror.findModeByName = function(name) { name = name.toLowerCase(); for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.name.toLowerCase() == name) return info; if (info.alias) for (var j = 0; j < info.alias.length; j++) if (info.alias[j].toLowerCase() == name) return info; } }; 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'); } createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("apl", function() { var builtInOps = { ".": "innerProduct", "\\": "scan", "/": "reduce", "⌿": "reduce1Axis", "⍀": "scan1Axis", "¨": "each", "⍣": "power" }; var builtInFuncs = { "+": ["conjugate", "add"], "−": ["negate", "subtract"], "×": ["signOf", "multiply"], "÷": ["reciprocal", "divide"], "⌈": ["ceiling", "greaterOf"], "⌊": ["floor", "lesserOf"], "∣": ["absolute", "residue"], "⍳": ["indexGenerate", "indexOf"], "?": ["roll", "deal"], "⋆": ["exponentiate", "toThePowerOf"], "⍟": ["naturalLog", "logToTheBase"], "○": ["piTimes", "circularFuncs"], "!": ["factorial", "binomial"], "⌹": ["matrixInverse", "matrixDivide"], "<": [null, "lessThan"], "≤": [null, "lessThanOrEqual"], "=": [null, "equals"], ">": [null, "greaterThan"], "≥": [null, "greaterThanOrEqual"], "≠": [null, "notEqual"], "≡": ["depth", "match"], "≢": [null, "notMatch"], "∈": ["enlist", "membership"], "⍷": [null, "find"], "∪": ["unique", "union"], "∩": [null, "intersection"], "∼": ["not", "without"], "∨": [null, "or"], "∧": [null, "and"], "⍱": [null, "nor"], "⍲": [null, "nand"], "⍴": ["shapeOf", "reshape"], ",": ["ravel", "catenate"], "⍪": [null, "firstAxisCatenate"], "⌽": ["reverse", "rotate"], "⊖": ["axis1Reverse", "axis1Rotate"], "⍉": ["transpose", null], "↑": ["first", "take"], "↓": [null, "drop"], "⊂": ["enclose", "partitionWithAxis"], "⊃": ["diclose", "pick"], "⌷": [null, "index"], "⍋": ["gradeUp", null], "⍒": ["gradeDown", null], "⊤": ["encode", null], "⊥": ["decode", null], "⍕": ["format", "formatByExample"], "⍎": ["execute", null], "⊣": ["stop", "left"], "⊢": ["pass", "right"] }; var isOperator = /[\.\/⌿⍀¨⍣]/; var isNiladic = /⍬/; var isFunction = /[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/; var isArrow = /←/; var isComment = /[⍝#].*$/; var stringEater = function(type) { var prev; prev = false; return function(c) { prev = c; if (c === type) { return prev === "\\"; } return true; }; }; return { startState: function() { return { prev: false, func: false, op: false, string: false, escape: false }; }, token: function(stream, state) { var ch, funcName; if (stream.eatSpace()) { return null; } ch = stream.next(); if (ch === '"' || ch === "'") { stream.eatWhile(stringEater(ch)); stream.next(); state.prev = true; return "string"; } if (/[\[{\(]/.test(ch)) { state.prev = false; return null; } if (/[\]}\)]/.test(ch)) { state.prev = true; return null; } if (isNiladic.test(ch)) { state.prev = false; return "niladic"; } if (/[¯\d]/.test(ch)) { if (state.func) { state.func = false; state.prev = false; } else { state.prev = true; } stream.eatWhile(/[\w\.]/); return "number"; } if (isOperator.test(ch)) { return "operator apl-" + builtInOps[ch]; } if (isArrow.test(ch)) { return "apl-arrow"; } if (isFunction.test(ch)) { funcName = "apl-"; if (builtInFuncs[ch] != null) { if (state.prev) { funcName += builtInFuncs[ch][1]; } else { funcName += builtInFuncs[ch][0]; } } state.func = true; state.prev = false; return "function " + funcName; } if (isComment.test(ch)) { stream.skipToEnd(); return "comment"; } if (ch === "∘" && stream.peek() === ".") { stream.next(); return "function jot-dot"; } stream.eatWhile(/[\w\$_]/); state.prev = true; return "keyword"; } }; }); CodeMirror.defineMIME("text/apl", "apl"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { function errorIfNotEmpty(stream) { var nonWS = stream.match(/^\s*\S/); stream.skipToEnd(); return nonWS ? "error" : null; } CodeMirror.defineMode("asciiarmor", function() { return { token: function(stream, state) { var m; if (state.state == "top") { if (stream.sol() && (m = stream.match(/^-----BEGIN (.*)?-----\s*$/))) { state.state = "headers"; state.type = m[1]; return "tag"; } return errorIfNotEmpty(stream); } else if (state.state == "headers") { if (stream.sol() && stream.match(/^\w+:/)) { state.state = "header"; return "atom"; } else { var result = errorIfNotEmpty(stream); if (result) state.state = "body"; return result; } } else if (state.state == "header") { stream.skipToEnd(); state.state = "headers"; return "string"; } else if (state.state == "body") { if (stream.sol() && (m = stream.match(/^-----END (.*)?-----\s*$/))) { if (m[1] != state.type) return "error"; state.state = "end"; return "tag"; } else { if (stream.eatWhile(/[A-Za-z0-9+\/=]/)) { return null; } else { stream.next(); return "error"; } } } else if (state.state == "end") { return errorIfNotEmpty(stream); } }, blankLine: function(state) { if (state.state == "headers") state.state = "body"; }, startState: function() { return {state: "top", type: null}; } }; }); CodeMirror.defineMIME("application/pgp", "asciiarmor"); CodeMirror.defineMIME("application/pgp-encrypted", "asciiarmor"); CodeMirror.defineMIME("application/pgp-keys", "asciiarmor"); CodeMirror.defineMIME("application/pgp-signature", "asciiarmor"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("asn.1", function(config, parserConfig) { var indentUnit = config.indentUnit, keywords = parserConfig.keywords || {}, cmipVerbs = parserConfig.cmipVerbs || {}, compareTypes = parserConfig.compareTypes || {}, status = parserConfig.status || {}, tags = parserConfig.tags || {}, storage = parserConfig.storage || {}, modifier = parserConfig.modifier || {}, accessTypes = parserConfig.accessTypes|| {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false; var isOperatorChar = /[\|\^]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]\(\){}:=,;]/.test(ch)) { curPunc = ch; return "punctuation"; } if (ch == "-"){ if (stream.eat("-")) { stream.skipToEnd(); return "comment"; } } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\-]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (cmipVerbs.propertyIsEnumerable(cur)) return "variable cmipVerbs"; if (compareTypes.propertyIsEnumerable(cur)) return "atom compareTypes"; if (status.propertyIsEnumerable(cur)) return "comment status"; if (tags.propertyIsEnumerable(cur)) return "variable-3 tags"; if (storage.propertyIsEnumerable(cur)) return "builtin storage"; if (modifier.propertyIsEnumerable(cur)) return "string-2 modifier"; if (accessTypes.propertyIsEnumerable(cur)) return "atom accessTypes"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped){ var afterNext = stream.peek(); //look if the character if the quote is like the B in '10100010'B if (afterNext){ afterNext = afterNext.toLowerCase(); if(afterNext == "b" || afterNext == "h" || afterNext == "o") stream.next(); } end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } //Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement"){ popContext(state); } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement"))) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, electricChars: "{}", lineComment: "--", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } CodeMirror.defineMIME("text/x-ttcn-asn", { name: "asn.1", keywords: words("DEFINITIONS OBJECTS IF DERIVED INFORMATION ACTION" + " REPLY ANY NAMED CHARACTERIZED BEHAVIOUR REGISTERED" + " WITH AS IDENTIFIED CONSTRAINED BY PRESENT BEGIN" + " IMPORTS FROM UNITS SYNTAX MIN-ACCESS MAX-ACCESS" + " MINACCESS MAXACCESS REVISION STATUS DESCRIPTION" + " SEQUENCE SET COMPONENTS OF CHOICE DistinguishedName" + " ENUMERATED SIZE MODULE END INDEX AUGMENTS EXTENSIBILITY" + " IMPLIED EXPORTS"), cmipVerbs: words("ACTIONS ADD GET NOTIFICATIONS REPLACE REMOVE"), compareTypes: words("OPTIONAL DEFAULT MANAGED MODULE-TYPE MODULE_IDENTITY" + " MODULE-COMPLIANCE OBJECT-TYPE OBJECT-IDENTITY" + " OBJECT-COMPLIANCE MODE CONFIRMED CONDITIONAL" + " SUBORDINATE SUPERIOR CLASS TRUE FALSE NULL" + " TEXTUAL-CONVENTION"), status: words("current deprecated mandatory obsolete"), tags: words("APPLICATION AUTOMATIC EXPLICIT IMPLICIT PRIVATE TAGS" + " UNIVERSAL"), storage: words("BOOLEAN INTEGER OBJECT IDENTIFIER BIT OCTET STRING" + " UTCTime InterfaceIndex IANAifType CMIP-Attribute" + " REAL PACKAGE PACKAGES IpAddress PhysAddress" + " NetworkAddress BITS BMPString TimeStamp TimeTicks" + " TruthValue RowStatus DisplayString GeneralString" + " GraphicString IA5String NumericString" + " PrintableString SnmpAdminAtring TeletexString" + " UTF8String VideotexString VisibleString StringStore" + " ISO646String T61String UniversalString Unsigned32" + " Integer32 Gauge Gauge32 Counter Counter32 Counter64"), modifier: words("ATTRIBUTE ATTRIBUTES MANDATORY-GROUP MANDATORY-GROUPS" + " GROUP GROUPS ELEMENTS EQUALITY ORDERING SUBSTRINGS" + " DEFINED"), accessTypes: words("not-accessible accessible-for-notify read-only" + " read-create read-write"), multiLineStrings: true }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /* * ===================================================================================== * * Filename: mode/asterisk/asterisk.js * * Description: CodeMirror mode for Asterisk dialplan * * Created: 05/17/2012 09:20:25 PM * Revision: 08/05/2019 AstLinux Project: Support block-comments * * Author: Stas Kobzar (stas@modulis.ca), * Company: Modulis.ca Inc. * * ===================================================================================== */ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("asterisk", function() { var atoms = ["exten", "same", "include","ignorepat","switch"], dpcmd = ["#include","#exec"], apps = [ "addqueuemember","adsiprog","aelsub","agentlogin","agentmonitoroutgoing","agi", "alarmreceiver","amd","answer","authenticate","background","backgrounddetect", "bridge","busy","callcompletioncancel","callcompletionrequest","celgenuserevent", "changemonitor","chanisavail","channelredirect","chanspy","clearhash","confbridge", "congestion","continuewhile","controlplayback","dahdiacceptr2call","dahdibarge", "dahdiras","dahdiscan","dahdisendcallreroutingfacility","dahdisendkeypadfacility", "datetime","dbdel","dbdeltree","deadagi","dial","dictate","directory","disa", "dumpchan","eagi","echo","endwhile","exec","execif","execiftime","exitwhile","extenspy", "externalivr","festival","flash","followme","forkcdr","getcpeid","gosub","gosubif", "goto","gotoif","gotoiftime","hangup","iax2provision","ices","importvar","incomplete", "ivrdemo","jabberjoin","jabberleave","jabbersend","jabbersendgroup","jabberstatus", "jack","log","macro","macroexclusive","macroexit","macroif","mailboxexists","meetme", "meetmeadmin","meetmechanneladmin","meetmecount","milliwatt","minivmaccmess","minivmdelete", "minivmgreet","minivmmwi","minivmnotify","minivmrecord","mixmonitor","monitor","morsecode", "mp3player","mset","musiconhold","nbscat","nocdr","noop","odbc","odbc","odbcfinish", "originate","ospauth","ospfinish","osplookup","ospnext","page","park","parkandannounce", "parkedcall","pausemonitor","pausequeuemember","pickup","pickupchan","playback","playtones", "privacymanager","proceeding","progress","queue","queuelog","raiseexception","read","readexten", "readfile","receivefax","receivefax","receivefax","record","removequeuemember", "resetcdr","retrydial","return","ringing","sayalpha","saycountedadj","saycountednoun", "saycountpl","saydigits","saynumber","sayphonetic","sayunixtime","senddtmf","sendfax", "sendfax","sendfax","sendimage","sendtext","sendurl","set","setamaflags", "setcallerpres","setmusiconhold","sipaddheader","sipdtmfmode","sipremoveheader","skel", "slastation","slatrunk","sms","softhangup","speechactivategrammar","speechbackground", "speechcreate","speechdeactivategrammar","speechdestroy","speechloadgrammar","speechprocessingsound", "speechstart","speechunloadgrammar","stackpop","startmusiconhold","stopmixmonitor","stopmonitor", "stopmusiconhold","stopplaytones","system","testclient","testserver","transfer","tryexec", "trysystem","unpausemonitor","unpausequeuemember","userevent","verbose","vmauthenticate", "vmsayname","voicemail","voicemailmain","wait","waitexten","waitfornoise","waitforring", "waitforsilence","waitmusiconhold","waituntil","while","zapateller" ]; function basicToken(stream,state){ var cur = ''; var ch = stream.next(); // comment if (state.blockComment) { if (ch == "-" && stream.match("-;", true)) { state.blockComment = false; } else if (stream.skipTo("--;")) { stream.next(); stream.next(); stream.next(); state.blockComment = false; } else { stream.skipToEnd(); } return "comment"; } if(ch == ";") { if (stream.match("--", true)) { if (!stream.match("-", false)) { // Except ;--- is not a block comment state.blockComment = true; return "comment"; } } stream.skipToEnd(); return "comment"; } // context if(ch == '[') { stream.skipTo(']'); stream.eat(']'); return "header"; } // string if(ch == '"') { stream.skipTo('"'); return "string"; } if(ch == "'") { stream.skipTo("'"); return "string-2"; } // dialplan commands if(ch == '#') { stream.eatWhile(/\w/); cur = stream.current(); if(dpcmd.indexOf(cur) !== -1) { stream.skipToEnd(); return "strong"; } } // application args if(ch == '$'){ var ch1 = stream.peek(); if(ch1 == '{'){ stream.skipTo('}'); stream.eat('}'); return "variable-3"; } } // extension stream.eatWhile(/\w/); cur = stream.current(); if(atoms.indexOf(cur) !== -1) { state.extenStart = true; switch(cur) { case 'same': state.extenSame = true; break; case 'include': case 'switch': case 'ignorepat': state.extenInclude = true;break; } return "atom"; } } return { startState: function() { return { blockComment: false, extenStart: false, extenSame: false, extenInclude: false, extenExten: false, extenPriority: false, extenApplication: false }; }, token: function(stream, state) { var cur = ''; if(stream.eatSpace()) return null; // extension started if(state.extenStart){ stream.eatWhile(/[^\s]/); cur = stream.current(); if(/^=>?$/.test(cur)){ state.extenExten = true; state.extenStart = false; return "strong"; } else { state.extenStart = false; stream.skipToEnd(); return "error"; } } else if(state.extenExten) { // set exten and priority state.extenExten = false; state.extenPriority = true; stream.eatWhile(/[^,]/); if(state.extenInclude) { stream.skipToEnd(); state.extenPriority = false; state.extenInclude = false; } if(state.extenSame) { state.extenPriority = false; state.extenSame = false; state.extenApplication = true; } return "tag"; } else if(state.extenPriority) { state.extenPriority = false; state.extenApplication = true; stream.next(); // get comma if(state.extenSame) return null; stream.eatWhile(/[^,]/); return "number"; } else if(state.extenApplication) { stream.eatWhile(/,/); cur = stream.current(); if(cur === ',') return null; stream.eatWhile(/\w/); cur = stream.current().toLowerCase(); state.extenApplication = false; if(apps.indexOf(cur) !== -1){ return "def strong"; } } else { return basicToken(stream,state); } return null; }, blockCommentStart: ";--", blockCommentEnd: "--;", lineComment: ";" }; }); CodeMirror.defineMIME("text/x-asterisk", "asterisk"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Brainfuck mode created by Michael Kaminsky https://github.com/mkaminsky11 (function(mod) { mod(codemirror); })(function(CodeMirror) { var reserve = "><+-.,[]".split(""); /* comments can be either: placed behind lines +++ this is a comment where reserved characters cannot be used or in a loop [ this is ok to use [ ] and stuff ] or preceded by # */ CodeMirror.defineMode("brainfuck", function() { return { startState: function() { return { commentLine: false, left: 0, right: 0, commentLoop: false } }, token: function(stream, state) { if (stream.eatSpace()) return null if(stream.sol()){ state.commentLine = false; } var ch = stream.next().toString(); if(reserve.indexOf(ch) !== -1){ if(state.commentLine === true){ if(stream.eol()){ state.commentLine = false; } return "comment"; } if(ch === "]" || ch === "["){ if(ch === "["){ state.left++; } else { state.right++; } return "bracket"; } else if(ch === "+" || ch === "-"){ return "keyword"; } else if(ch === "<" || ch === ">"){ return "atom"; } else if(ch === "." || ch === ","){ return "def"; } } else { state.commentLine = true; if(stream.eol()){ state.commentLine = false; } return "comment"; } if(stream.eol()){ state.commentLine = false; } } }; }); CodeMirror.defineMIME("text/x-brainfuck","brainfuck"); }); }); var clike = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { function Context(indented, column, type, info, align, prev) { this.indented = indented; this.column = column; this.type = type; this.info = info; this.align = align; this.prev = prev; } function pushContext(state, col, type, info) { var indent = state.indented; if (state.context && state.context.type == "statement" && type != "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, info, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } function typeBefore(stream, state, pos) { if (state.prevToken == "variable" || state.prevToken == "type") return true; if (/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(stream.string.slice(0, pos))) return true; if (state.typeAtEndOfLine && stream.column() == stream.indentation()) return true; } function isTopScope(context) { for (;;) { if (!context || context.type == "top") return true; if (context.type == "}" && context.prev.info != "namespace") return false; context = context.prev; } } CodeMirror.defineMode("clike", function(config, parserConfig) { var indentUnit = config.indentUnit, statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, dontAlignCalls = parserConfig.dontAlignCalls, keywords = parserConfig.keywords || {}, types = parserConfig.types || {}, builtin = parserConfig.builtin || {}, blockKeywords = parserConfig.blockKeywords || {}, defKeywords = parserConfig.defKeywords || {}, atoms = parserConfig.atoms || {}, hooks = parserConfig.hooks || {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false, indentSwitch = parserConfig.indentSwitch !== false, namespaceSeparator = parserConfig.namespaceSeparator, isPunctuationChar = parserConfig.isPunctuationChar || /[\[\]{}\(\),;\:\.]/, numberStart = parserConfig.numberStart || /[\d\.]/, number = parserConfig.number || /^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i, isOperatorChar = parserConfig.isOperatorChar || /[+\-*&%=<>!?|\/]/, isIdentifierChar = parserConfig.isIdentifierChar || /[\w\$_\xa1-\uffff]/, // An optional function that takes a {string} token and returns true if it // should be treated as a builtin. isReservedIdentifier = parserConfig.isReservedIdentifier || false; var curPunc, isDefKeyword; function tokenBase(stream, state) { var ch = stream.next(); if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (isPunctuationChar.test(ch)) { curPunc = ch; return null; } if (numberStart.test(ch)) { stream.backUp(1); if (stream.match(number)) return "number" stream.next(); } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { while (!stream.match(/^\/[\/*]/, false) && stream.eat(isOperatorChar)) {} return "operator"; } stream.eatWhile(isIdentifierChar); if (namespaceSeparator) while (stream.match(namespaceSeparator)) stream.eatWhile(isIdentifierChar); var cur = stream.current(); if (contains(keywords, cur)) { if (contains(blockKeywords, cur)) curPunc = "newstatement"; if (contains(defKeywords, cur)) isDefKeyword = true; return "keyword"; } if (contains(types, cur)) return "type"; if (contains(builtin, cur) || (isReservedIdentifier && isReservedIdentifier(cur))) { if (contains(blockKeywords, cur)) curPunc = "newstatement"; return "builtin"; } if (contains(atoms, cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function maybeEOL(stream, state) { if (parserConfig.typeFirstDefinitions && stream.eol() && isTopScope(state.context)) state.typeAtEndOfLine = typeBefore(stream, state, stream.pos); } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", null, false), indented: 0, startOfLine: true, prevToken: null }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) { maybeEOL(stream, state); return null; } curPunc = isDefKeyword = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; if (ctx.align == null) ctx.align = true; if (curPunc == ";" || curPunc == ":" || (curPunc == "," && stream.match(/^\s*(?:\/\/.*)?$/, false))) while (state.context.type == "statement") popContext(state); else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ";") || (ctx.type == "statement" && curPunc == "newstatement"))) { pushContext(state, stream.column(), "statement", stream.current()); } if (style == "variable" && ((state.prevToken == "def" || (parserConfig.typeFirstDefinitions && typeBefore(stream, state, stream.start) && isTopScope(state.context) && stream.match(/^\s*\(/, false))))) style = "def"; if (hooks.token) { var result = hooks.token(stream, state, style); if (result !== undefined) style = result; } if (style == "def" && parserConfig.styleDefs === false) style = "variable"; state.startOfLine = false; state.prevToken = isDefKeyword ? "def" : style || curPunc; maybeEOL(stream, state); return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null || state.typeAtEndOfLine) return CodeMirror.Pass; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); var closing = firstChar == ctx.type; if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; if (parserConfig.dontIndentStatements) while (ctx.type == "statement" && parserConfig.dontIndentStatements.test(ctx.info)) ctx = ctx.prev; if (hooks.indent) { var hook = hooks.indent(state, ctx, textAfter, indentUnit); if (typeof hook == "number") return hook } var switchBlock = ctx.prev && ctx.prev.info == "switch"; if (parserConfig.allmanIndentation && /[{(]/.test(firstChar)) { while (ctx.type != "top" && ctx.type != "}") ctx = ctx.prev; return ctx.indented } if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); if (ctx.align && (!dontAlignCalls || ctx.type != ")")) return ctx.column + (closing ? 0 : 1); if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit; return ctx.indented + (closing ? 0 : indentUnit) + (!closing && switchBlock && !/^(?:case|default)\b/.test(textAfter) ? indentUnit : 0); }, electricInput: indentSwitch ? /^\s*(?:case .*?:|default:|\{\}?|\})$/ : /^\s*[{}]$/, blockCommentStart: "/*", blockCommentEnd: "*/", blockCommentContinue: " * ", lineComment: "//", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function contains(words, word) { if (typeof words === "function") { return words(word); } else { return words.propertyIsEnumerable(word); } } var cKeywords = "auto if break case register continue return default do sizeof " + "static else struct switch extern typedef union for goto while enum const " + "volatile inline restrict asm fortran"; // Keywords from https://en.cppreference.com/w/cpp/keyword includes C++20. var cppKeywords = "alignas alignof and and_eq audit axiom bitand bitor catch " + "class compl concept constexpr const_cast decltype delete dynamic_cast " + "explicit export final friend import module mutable namespace new noexcept " + "not not_eq operator or or_eq override private protected public " + "reinterpret_cast requires static_assert static_cast template this " + "thread_local throw try typeid typename using virtual xor xor_eq"; var objCKeywords = "bycopy byref in inout oneway out self super atomic nonatomic retain copy " + "readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd " + "@interface @implementation @end @protocol @encode @property @synthesize @dynamic @class " + "@public @package @private @protected @required @optional @try @catch @finally @import " + "@selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available"; var objCBuiltins = "FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION " + " NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER " + "NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION " + "NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT"; // Do not use this. Use the cTypes function below. This is global just to avoid // excessive calls when cTypes is being called multiple times during a parse. var basicCTypes = words("int long char short double float unsigned signed " + "void bool"); // Do not use this. Use the objCTypes function below. This is global just to avoid // excessive calls when objCTypes is being called multiple times during a parse. var basicObjCTypes = words("SEL instancetype id Class Protocol BOOL"); // Returns true if identifier is a "C" type. // C type is defined as those that are reserved by the compiler (basicTypes), // and those that end in _t (Reserved by POSIX for types) // http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html function cTypes(identifier) { return contains(basicCTypes, identifier) || /.+_t$/.test(identifier); } // Returns true if identifier is a "Objective C" type. function objCTypes(identifier) { return cTypes(identifier) || contains(basicObjCTypes, identifier); } var cBlockKeywords = "case do else for if switch while struct enum union"; var cDefKeywords = "struct enum union"; function cppHook(stream, state) { if (!state.startOfLine) return false for (var ch, next = null; ch = stream.peek();) { if (ch == "\\" && stream.match(/^.$/)) { next = cppHook; break } else if (ch == "/" && stream.match(/^\/[\/\*]/, false)) { break } stream.next(); } state.tokenize = next; return "meta" } function pointerHook(_stream, state) { if (state.prevToken == "type") return "type"; return false; } // For C and C++ (and ObjC): identifiers starting with __ // or _ followed by a capital letter are reserved for the compiler. function cIsReservedIdentifier(token) { if (!token || token.length < 2) return false; if (token[0] != '_') return false; return (token[1] == '_') || (token[1] !== token[1].toLowerCase()); } function cpp14Literal(stream) { stream.eatWhile(/[\w\.']/); return "number"; } function cpp11StringHook(stream, state) { stream.backUp(1); // Raw strings. if (stream.match(/(R|u8R|uR|UR|LR)/)) { var match = stream.match(/"([^\s\\()]{0,16})\(/); if (!match) { return false; } state.cpp11RawStringDelim = match[1]; state.tokenize = tokenRawString; return tokenRawString(stream, state); } // Unicode strings/chars. if (stream.match(/(u8|u|U|L)/)) { if (stream.match(/["']/, /* eat */ false)) { return "string"; } return false; } // Ignore this hook. stream.next(); return false; } function cppLooksLikeConstructor(word) { var lastTwo = /(\w+)::~?(\w+)$/.exec(word); return lastTwo && lastTwo[1] == lastTwo[2]; } // C#-style strings where "" escapes a quote. function tokenAtString(stream, state) { var next; while ((next = stream.next()) != null) { if (next == '"' && !stream.eat('"')) { state.tokenize = null; break; } } return "string"; } // C++11 raw string literal is "( anything )", where // can be a string up to 16 characters long. function tokenRawString(stream, state) { // Escape characters that have special regex meanings. var delim = state.cpp11RawStringDelim.replace(/[^\w\s]/g, '\\$&'); var match = stream.match(new RegExp(".*?\\)" + delim + '"')); if (match) state.tokenize = null; else stream.skipToEnd(); return "string"; } function def(mimes, mode) { if (typeof mimes == "string") mimes = [mimes]; var words = []; function add(obj) { if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) words.push(prop); } add(mode.keywords); add(mode.types); add(mode.builtin); add(mode.atoms); if (words.length) { mode.helperType = mimes[0]; CodeMirror.registerHelper("hintWords", mimes[0], words); } for (var i = 0; i < mimes.length; ++i) CodeMirror.defineMIME(mimes[i], mode); } def(["text/x-csrc", "text/x-c", "text/x-chdr"], { name: "clike", keywords: words(cKeywords), types: cTypes, blockKeywords: words(cBlockKeywords), defKeywords: words(cDefKeywords), typeFirstDefinitions: true, atoms: words("NULL true false"), isReservedIdentifier: cIsReservedIdentifier, hooks: { "#": cppHook, "*": pointerHook, }, modeProps: {fold: ["brace", "include"]} }); def(["text/x-c++src", "text/x-c++hdr"], { name: "clike", keywords: words(cKeywords + " " + cppKeywords), types: cTypes, blockKeywords: words(cBlockKeywords + " class try catch"), defKeywords: words(cDefKeywords + " class namespace"), typeFirstDefinitions: true, atoms: words("true false NULL nullptr"), dontIndentStatements: /^template$/, isIdentifierChar: /[\w\$_~\xa1-\uffff]/, isReservedIdentifier: cIsReservedIdentifier, hooks: { "#": cppHook, "*": pointerHook, "u": cpp11StringHook, "U": cpp11StringHook, "L": cpp11StringHook, "R": cpp11StringHook, "0": cpp14Literal, "1": cpp14Literal, "2": cpp14Literal, "3": cpp14Literal, "4": cpp14Literal, "5": cpp14Literal, "6": cpp14Literal, "7": cpp14Literal, "8": cpp14Literal, "9": cpp14Literal, token: function(stream, state, style) { if (style == "variable" && stream.peek() == "(" && (state.prevToken == ";" || state.prevToken == null || state.prevToken == "}") && cppLooksLikeConstructor(stream.current())) return "def"; } }, namespaceSeparator: "::", modeProps: {fold: ["brace", "include"]} }); def("text/x-java", { name: "clike", keywords: words("abstract assert break case catch class const continue default " + "do else enum extends final finally for goto if implements import " + "instanceof interface native new package private protected public " + "return static strictfp super switch synchronized this throw throws transient " + "try volatile while @interface"), types: words("byte short int long float double boolean char void Boolean Byte Character Double Float " + "Integer Long Number Object Short String StringBuffer StringBuilder Void"), blockKeywords: words("catch class do else finally for if switch try while"), defKeywords: words("class interface enum @interface"), typeFirstDefinitions: true, atoms: words("true false null"), number: /^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+\.?\d*|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i, hooks: { "@": function(stream) { // Don't match the @interface keyword. if (stream.match('interface', false)) return false; stream.eatWhile(/[\w\$_]/); return "meta"; } }, modeProps: {fold: ["brace", "import"]} }); def("text/x-csharp", { name: "clike", keywords: words("abstract as async await base break case catch checked class const continue" + " default delegate do else enum event explicit extern finally fixed for" + " foreach goto if implicit in interface internal is lock namespace new" + " operator out override params private protected public readonly ref return sealed" + " sizeof stackalloc static struct switch this throw try typeof unchecked" + " unsafe using virtual void volatile while add alias ascending descending dynamic from get" + " global group into join let orderby partial remove select set value var yield"), types: words("Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func" + " Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32" + " UInt64 bool byte char decimal double short int long object" + " sbyte float string ushort uint ulong"), blockKeywords: words("catch class do else finally for foreach if struct switch try while"), defKeywords: words("class interface namespace struct var"), typeFirstDefinitions: true, atoms: words("true false null"), hooks: { "@": function(stream, state) { if (stream.eat('"')) { state.tokenize = tokenAtString; return tokenAtString(stream, state); } stream.eatWhile(/[\w\$_]/); return "meta"; } } }); function tokenTripleString(stream, state) { var escaped = false; while (!stream.eol()) { if (!escaped && stream.match('"""')) { state.tokenize = null; break; } escaped = stream.next() == "\\" && !escaped; } return "string"; } function tokenNestedComment(depth) { return function (stream, state) { var ch; while (ch = stream.next()) { if (ch == "*" && stream.eat("/")) { if (depth == 1) { state.tokenize = null; break } else { state.tokenize = tokenNestedComment(depth - 1); return state.tokenize(stream, state) } } else if (ch == "/" && stream.eat("*")) { state.tokenize = tokenNestedComment(depth + 1); return state.tokenize(stream, state) } } return "comment" } } def("text/x-scala", { name: "clike", keywords: words( /* scala */ "abstract case catch class def do else extends final finally for forSome if " + "implicit import lazy match new null object override package private protected return " + "sealed super this throw trait try type val var while with yield _ " + /* package scala */ "assert assume require print println printf readLine readBoolean readByte readShort " + "readChar readInt readLong readFloat readDouble" ), types: words( "AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either " + "Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable " + "Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering " + "Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder " + "StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector " + /* package java.lang */ "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" ), multiLineStrings: true, blockKeywords: words("catch class enum do else finally for forSome if match switch try while"), defKeywords: words("class enum def object package trait type val var"), atoms: words("true false null"), indentStatements: false, indentSwitch: false, isOperatorChar: /[+\-*&%=<>!?|\/#:@]/, hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; }, '"': function(stream, state) { if (!stream.match('""')) return false; state.tokenize = tokenTripleString; return state.tokenize(stream, state); }, "'": function(stream) { stream.eatWhile(/[\w\$_\xa1-\uffff]/); return "atom"; }, "=": function(stream, state) { var cx = state.context; if (cx.type == "}" && cx.align && stream.eat(">")) { state.context = new Context(cx.indented, cx.column, cx.type, cx.info, null, cx.prev); return "operator" } else { return false } }, "/": function(stream, state) { if (!stream.eat("*")) return false state.tokenize = tokenNestedComment(1); return state.tokenize(stream, state) } }, modeProps: {closeBrackets: {pairs: '()[]{}""', triples: '"'}} }); function tokenKotlinString(tripleString){ return function (stream, state) { var escaped = false, next, end = false; while (!stream.eol()) { if (!tripleString && !escaped && stream.match('"') ) {end = true; break;} if (tripleString && stream.match('"""')) {end = true; break;} next = stream.next(); if(!escaped && next == "$" && stream.match('{')) stream.skipTo("}"); escaped = !escaped && next == "\\" && !tripleString; } if (end || !tripleString) state.tokenize = null; return "string"; } } def("text/x-kotlin", { name: "clike", keywords: words( /*keywords*/ "package as typealias class interface this super val operator " + "var fun for is in This throw return annotation " + "break continue object if else while do try when !in !is as? " + /*soft keywords*/ "file import where by get set abstract enum open inner override private public internal " + "protected catch finally out final vararg reified dynamic companion constructor init " + "sealed field property receiver param sparam lateinit data inline noinline tailrec " + "external annotation crossinline const operator infix suspend actual expect setparam" ), types: words( /* package java.lang */ "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray " + "ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy " + "LazyThreadSafetyMode LongArray Nothing ShortArray Unit" ), intendSwitch: false, indentStatements: false, multiLineStrings: true, number: /^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i, blockKeywords: words("catch class do else finally for if where try while enum"), defKeywords: words("class val var object interface fun"), atoms: words("true false null this"), hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; }, '*': function(_stream, state) { return state.prevToken == '.' ? 'variable' : 'operator'; }, '"': function(stream, state) { state.tokenize = tokenKotlinString(stream.match('""')); return state.tokenize(stream, state); }, "/": function(stream, state) { if (!stream.eat("*")) return false; state.tokenize = tokenNestedComment(1); return state.tokenize(stream, state) }, indent: function(state, ctx, textAfter, indentUnit) { var firstChar = textAfter && textAfter.charAt(0); if ((state.prevToken == "}" || state.prevToken == ")") && textAfter == "") return state.indented; if ((state.prevToken == "operator" && textAfter != "}" && state.context.type != "}") || state.prevToken == "variable" && firstChar == "." || (state.prevToken == "}" || state.prevToken == ")") && firstChar == ".") return indentUnit * 2 + ctx.indented; if (ctx.align && ctx.type == "}") return ctx.indented + (state.context.type == (textAfter || "").charAt(0) ? 0 : indentUnit); } }, modeProps: {closeBrackets: {triples: '"'}} }); def(["x-shader/x-vertex", "x-shader/x-fragment"], { name: "clike", keywords: words("sampler1D sampler2D sampler3D samplerCube " + "sampler1DShadow sampler2DShadow " + "const attribute uniform varying " + "break continue discard return " + "for while do if else struct " + "in out inout"), types: words("float int bool void " + "vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 " + "mat2 mat3 mat4"), blockKeywords: words("for while do if else struct"), builtin: words("radians degrees sin cos tan asin acos atan " + "pow exp log exp2 sqrt inversesqrt " + "abs sign floor ceil fract mod min max clamp mix step smoothstep " + "length distance dot cross normalize ftransform faceforward " + "reflect refract matrixCompMult " + "lessThan lessThanEqual greaterThan greaterThanEqual " + "equal notEqual any all not " + "texture1D texture1DProj texture1DLod texture1DProjLod " + "texture2D texture2DProj texture2DLod texture2DProjLod " + "texture3D texture3DProj texture3DLod texture3DProjLod " + "textureCube textureCubeLod " + "shadow1D shadow2D shadow1DProj shadow2DProj " + "shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod " + "dFdx dFdy fwidth " + "noise1 noise2 noise3 noise4"), atoms: words("true false " + "gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex " + "gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 " + "gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 " + "gl_FogCoord gl_PointCoord " + "gl_Position gl_PointSize gl_ClipVertex " + "gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor " + "gl_TexCoord gl_FogFragCoord " + "gl_FragCoord gl_FrontFacing " + "gl_FragData gl_FragDepth " + "gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix " + "gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse " + "gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse " + "gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose " + "gl_ProjectionMatrixInverseTranspose " + "gl_ModelViewProjectionMatrixInverseTranspose " + "gl_TextureMatrixInverseTranspose " + "gl_NormalScale gl_DepthRange gl_ClipPlane " + "gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel " + "gl_FrontLightModelProduct gl_BackLightModelProduct " + "gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ " + "gl_FogParameters " + "gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords " + "gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats " + "gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits " + "gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits " + "gl_MaxDrawBuffers"), indentSwitch: false, hooks: {"#": cppHook}, modeProps: {fold: ["brace", "include"]} }); def("text/x-nesc", { name: "clike", keywords: words(cKeywords + " as atomic async call command component components configuration event generic " + "implementation includes interface module new norace nx_struct nx_union post provides " + "signal task uses abstract extends"), types: cTypes, blockKeywords: words(cBlockKeywords), atoms: words("null true false"), hooks: {"#": cppHook}, modeProps: {fold: ["brace", "include"]} }); def("text/x-objectivec", { name: "clike", keywords: words(cKeywords + " " + objCKeywords), types: objCTypes, builtin: words(objCBuiltins), blockKeywords: words(cBlockKeywords + " @synthesize @try @catch @finally @autoreleasepool @synchronized"), defKeywords: words(cDefKeywords + " @interface @implementation @protocol @class"), dontIndentStatements: /^@.*$/, typeFirstDefinitions: true, atoms: words("YES NO NULL Nil nil true false nullptr"), isReservedIdentifier: cIsReservedIdentifier, hooks: { "#": cppHook, "*": pointerHook, }, modeProps: {fold: ["brace", "include"]} }); def("text/x-objectivec++", { name: "clike", keywords: words(cKeywords + " " + objCKeywords + " " + cppKeywords), types: objCTypes, builtin: words(objCBuiltins), blockKeywords: words(cBlockKeywords + " @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch"), defKeywords: words(cDefKeywords + " @interface @implementation @protocol @class class namespace"), dontIndentStatements: /^@.*$|^template$/, typeFirstDefinitions: true, atoms: words("YES NO NULL Nil nil true false nullptr"), isReservedIdentifier: cIsReservedIdentifier, hooks: { "#": cppHook, "*": pointerHook, "u": cpp11StringHook, "U": cpp11StringHook, "L": cpp11StringHook, "R": cpp11StringHook, "0": cpp14Literal, "1": cpp14Literal, "2": cpp14Literal, "3": cpp14Literal, "4": cpp14Literal, "5": cpp14Literal, "6": cpp14Literal, "7": cpp14Literal, "8": cpp14Literal, "9": cpp14Literal, token: function(stream, state, style) { if (style == "variable" && stream.peek() == "(" && (state.prevToken == ";" || state.prevToken == null || state.prevToken == "}") && cppLooksLikeConstructor(stream.current())) return "def"; } }, namespaceSeparator: "::", modeProps: {fold: ["brace", "include"]} }); def("text/x-squirrel", { name: "clike", keywords: words("base break clone continue const default delete enum extends function in class" + " foreach local resume return this throw typeof yield constructor instanceof static"), types: cTypes, blockKeywords: words("case catch class else for foreach if switch try while"), defKeywords: words("function local class"), typeFirstDefinitions: true, atoms: words("true false null"), hooks: {"#": cppHook}, modeProps: {fold: ["brace", "include"]} }); // Ceylon Strings need to deal with interpolation var stringTokenizer = null; function tokenCeylonString(type) { return function(stream, state) { var escaped = false, next, end = false; while (!stream.eol()) { if (!escaped && stream.match('"') && (type == "single" || stream.match('""'))) { end = true; break; } if (!escaped && stream.match('``')) { stringTokenizer = tokenCeylonString(type); end = true; break; } next = stream.next(); escaped = type == "single" && !escaped && next == "\\"; } if (end) state.tokenize = null; return "string"; } } def("text/x-ceylon", { name: "clike", keywords: words("abstracts alias assembly assert assign break case catch class continue dynamic else" + " exists extends finally for function given if import in interface is let module new" + " nonempty object of out outer package return satisfies super switch then this throw" + " try value void while"), types: function(word) { // In Ceylon all identifiers that start with an uppercase are types var first = word.charAt(0); return (first === first.toUpperCase() && first !== first.toLowerCase()); }, blockKeywords: words("case catch class dynamic else finally for function if interface module new object switch try while"), defKeywords: words("class dynamic function interface module object package value"), builtin: words("abstract actual aliased annotation by default deprecated doc final formal late license" + " native optional sealed see serializable shared suppressWarnings tagged throws variable"), isPunctuationChar: /[\[\]{}\(\),;\:\.`]/, isOperatorChar: /[+\-*&%=<>!?|^~:\/]/, numberStart: /[\d#$]/, number: /^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i, multiLineStrings: true, typeFirstDefinitions: true, atoms: words("true false null larger smaller equal empty finished"), indentSwitch: false, styleDefs: false, hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; }, '"': function(stream, state) { state.tokenize = tokenCeylonString(stream.match('""') ? "triple" : "single"); return state.tokenize(stream, state); }, '`': function(stream, state) { if (!stringTokenizer || !stream.match('`')) return false; state.tokenize = stringTokenizer; stringTokenizer = null; return state.tokenize(stream, state); }, "'": function(stream) { stream.eatWhile(/[\w\$_\xa1-\uffff]/); return "atom"; }, token: function(_stream, state, style) { if ((style == "variable" || style == "type") && state.prevToken == ".") { return "variable-2"; } } }, modeProps: { fold: ["brace", "import"], closeBrackets: {triples: '"'} } }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("clojure", function (options) { var atoms = ["false", "nil", "true"]; var specialForms = [".", "catch", "def", "do", "if", "monitor-enter", "monitor-exit", "new", "quote", "recur", "set!", "throw", "try", "var"]; var coreSymbols = ["*", "*'", "*1", "*2", "*3", "*agent*", "*allow-unresolved-vars*", "*assert*", "*clojure-version*", "*command-line-args*", "*compile-files*", "*compile-path*", "*compiler-options*", "*data-readers*", "*default-data-reader-fn*", "*e", "*err*", "*file*", "*flush-on-newline*", "*fn-loader*", "*in*", "*math-context*", "*ns*", "*out*", "*print-dup*", "*print-length*", "*print-level*", "*print-meta*", "*print-namespace-maps*", "*print-readably*", "*read-eval*", "*reader-resolver*", "*source-path*", "*suppress-read*", "*unchecked-math*", "*use-context-classloader*", "*verbose-defrecords*", "*warn-on-reflection*", "+", "+'", "-", "-'", "->", "->>", "->ArrayChunk", "->Eduction", "->Vec", "->VecNode", "->VecSeq", "-cache-protocol-fn", "-reset-methods", "..", "/", "<", "<=", "=", "==", ">", ">=", "EMPTY-NODE", "Inst", "StackTraceElement->vec", "Throwable->map", "accessor", "aclone", "add-classpath", "add-watch", "agent", "agent-error", "agent-errors", "aget", "alength", "alias", "all-ns", "alter", "alter-meta!", "alter-var-root", "amap", "ancestors", "and", "any?", "apply", "areduce", "array-map", "as->", "aset", "aset-boolean", "aset-byte", "aset-char", "aset-double", "aset-float", "aset-int", "aset-long", "aset-short", "assert", "assoc", "assoc!", "assoc-in", "associative?", "atom", "await", "await-for", "await1", "bases", "bean", "bigdec", "bigint", "biginteger", "binding", "bit-and", "bit-and-not", "bit-clear", "bit-flip", "bit-not", "bit-or", "bit-set", "bit-shift-left", "bit-shift-right", "bit-test", "bit-xor", "boolean", "boolean-array", "boolean?", "booleans", "bound-fn", "bound-fn*", "bound?", "bounded-count", "butlast", "byte", "byte-array", "bytes", "bytes?", "case", "cast", "cat", "char", "char-array", "char-escape-string", "char-name-string", "char?", "chars", "chunk", "chunk-append", "chunk-buffer", "chunk-cons", "chunk-first", "chunk-next", "chunk-rest", "chunked-seq?", "class", "class?", "clear-agent-errors", "clojure-version", "coll?", "comment", "commute", "comp", "comparator", "compare", "compare-and-set!", "compile", "complement", "completing", "concat", "cond", "cond->", "cond->>", "condp", "conj", "conj!", "cons", "constantly", "construct-proxy", "contains?", "count", "counted?", "create-ns", "create-struct", "cycle", "dec", "dec'", "decimal?", "declare", "dedupe", "default-data-readers", "definline", "definterface", "defmacro", "defmethod", "defmulti", "defn", "defn-", "defonce", "defprotocol", "defrecord", "defstruct", "deftype", "delay", "delay?", "deliver", "denominator", "deref", "derive", "descendants", "destructure", "disj", "disj!", "dissoc", "dissoc!", "distinct", "distinct?", "doall", "dorun", "doseq", "dosync", "dotimes", "doto", "double", "double-array", "double?", "doubles", "drop", "drop-last", "drop-while", "eduction", "empty", "empty?", "ensure", "ensure-reduced", "enumeration-seq", "error-handler", "error-mode", "eval", "even?", "every-pred", "every?", "ex-data", "ex-info", "extend", "extend-protocol", "extend-type", "extenders", "extends?", "false?", "ffirst", "file-seq", "filter", "filterv", "find", "find-keyword", "find-ns", "find-protocol-impl", "find-protocol-method", "find-var", "first", "flatten", "float", "float-array", "float?", "floats", "flush", "fn", "fn?", "fnext", "fnil", "for", "force", "format", "frequencies", "future", "future-call", "future-cancel", "future-cancelled?", "future-done?", "future?", "gen-class", "gen-interface", "gensym", "get", "get-in", "get-method", "get-proxy-class", "get-thread-bindings", "get-validator", "group-by", "halt-when", "hash", "hash-combine", "hash-map", "hash-ordered-coll", "hash-set", "hash-unordered-coll", "ident?", "identical?", "identity", "if-let", "if-not", "if-some", "ifn?", "import", "in-ns", "inc", "inc'", "indexed?", "init-proxy", "inst-ms", "inst-ms*", "inst?", "instance?", "int", "int-array", "int?", "integer?", "interleave", "intern", "interpose", "into", "into-array", "ints", "io!", "isa?", "iterate", "iterator-seq", "juxt", "keep", "keep-indexed", "key", "keys", "keyword", "keyword?", "last", "lazy-cat", "lazy-seq", "let", "letfn", "line-seq", "list", "list*", "list?", "load", "load-file", "load-reader", "load-string", "loaded-libs", "locking", "long", "long-array", "longs", "loop", "macroexpand", "macroexpand-1", "make-array", "make-hierarchy", "map", "map-entry?", "map-indexed", "map?", "mapcat", "mapv", "max", "max-key", "memfn", "memoize", "merge", "merge-with", "meta", "method-sig", "methods", "min", "min-key", "mix-collection-hash", "mod", "munge", "name", "namespace", "namespace-munge", "nat-int?", "neg-int?", "neg?", "newline", "next", "nfirst", "nil?", "nnext", "not", "not-any?", "not-empty", "not-every?", "not=", "ns", "ns-aliases", "ns-imports", "ns-interns", "ns-map", "ns-name", "ns-publics", "ns-refers", "ns-resolve", "ns-unalias", "ns-unmap", "nth", "nthnext", "nthrest", "num", "number?", "numerator", "object-array", "odd?", "or", "parents", "partial", "partition", "partition-all", "partition-by", "pcalls", "peek", "persistent!", "pmap", "pop", "pop!", "pop-thread-bindings", "pos-int?", "pos?", "pr", "pr-str", "prefer-method", "prefers", "primitives-classnames", "print", "print-ctor", "print-dup", "print-method", "print-simple", "print-str", "printf", "println", "println-str", "prn", "prn-str", "promise", "proxy", "proxy-call-with-super", "proxy-mappings", "proxy-name", "proxy-super", "push-thread-bindings", "pvalues", "qualified-ident?", "qualified-keyword?", "qualified-symbol?", "quot", "rand", "rand-int", "rand-nth", "random-sample", "range", "ratio?", "rational?", "rationalize", "re-find", "re-groups", "re-matcher", "re-matches", "re-pattern", "re-seq", "read", "read-line", "read-string", "reader-conditional", "reader-conditional?", "realized?", "record?", "reduce", "reduce-kv", "reduced", "reduced?", "reductions", "ref", "ref-history-count", "ref-max-history", "ref-min-history", "ref-set", "refer", "refer-clojure", "reify", "release-pending-sends", "rem", "remove", "remove-all-methods", "remove-method", "remove-ns", "remove-watch", "repeat", "repeatedly", "replace", "replicate", "require", "reset!", "reset-meta!", "reset-vals!", "resolve", "rest", "restart-agent", "resultset-seq", "reverse", "reversible?", "rseq", "rsubseq", "run!", "satisfies?", "second", "select-keys", "send", "send-off", "send-via", "seq", "seq?", "seqable?", "seque", "sequence", "sequential?", "set", "set-agent-send-executor!", "set-agent-send-off-executor!", "set-error-handler!", "set-error-mode!", "set-validator!", "set?", "short", "short-array", "shorts", "shuffle", "shutdown-agents", "simple-ident?", "simple-keyword?", "simple-symbol?", "slurp", "some", "some->", "some->>", "some-fn", "some?", "sort", "sort-by", "sorted-map", "sorted-map-by", "sorted-set", "sorted-set-by", "sorted?", "special-symbol?", "spit", "split-at", "split-with", "str", "string?", "struct", "struct-map", "subs", "subseq", "subvec", "supers", "swap!", "swap-vals!", "symbol", "symbol?", "sync", "tagged-literal", "tagged-literal?", "take", "take-last", "take-nth", "take-while", "test", "the-ns", "thread-bound?", "time", "to-array", "to-array-2d", "trampoline", "transduce", "transient", "tree-seq", "true?", "type", "unchecked-add", "unchecked-add-int", "unchecked-byte", "unchecked-char", "unchecked-dec", "unchecked-dec-int", "unchecked-divide-int", "unchecked-double", "unchecked-float", "unchecked-inc", "unchecked-inc-int", "unchecked-int", "unchecked-long", "unchecked-multiply", "unchecked-multiply-int", "unchecked-negate", "unchecked-negate-int", "unchecked-remainder-int", "unchecked-short", "unchecked-subtract", "unchecked-subtract-int", "underive", "unquote", "unquote-splicing", "unreduced", "unsigned-bit-shift-right", "update", "update-in", "update-proxy", "uri?", "use", "uuid?", "val", "vals", "var-get", "var-set", "var?", "vary-meta", "vec", "vector", "vector-of", "vector?", "volatile!", "volatile?", "vreset!", "vswap!", "when", "when-first", "when-let", "when-not", "when-some", "while", "with-bindings", "with-bindings*", "with-in-str", "with-loading-context", "with-local-vars", "with-meta", "with-open", "with-out-str", "with-precision", "with-redefs", "with-redefs-fn", "xml-seq", "zero?", "zipmap"]; var haveBodyParameter = [ "->", "->>", "as->", "binding", "bound-fn", "case", "catch", "comment", "cond", "cond->", "cond->>", "condp", "def", "definterface", "defmethod", "defn", "defmacro", "defprotocol", "defrecord", "defstruct", "deftype", "do", "doseq", "dotimes", "doto", "extend", "extend-protocol", "extend-type", "fn", "for", "future", "if", "if-let", "if-not", "if-some", "let", "letfn", "locking", "loop", "ns", "proxy", "reify", "struct-map", "some->", "some->>", "try", "when", "when-first", "when-let", "when-not", "when-some", "while", "with-bindings", "with-bindings*", "with-in-str", "with-loading-context", "with-local-vars", "with-meta", "with-open", "with-out-str", "with-precision", "with-redefs", "with-redefs-fn"]; CodeMirror.registerHelper("hintWords", "clojure", [].concat(atoms, specialForms, coreSymbols)); var atom = createLookupMap(atoms); var specialForm = createLookupMap(specialForms); var coreSymbol = createLookupMap(coreSymbols); var hasBodyParameter = createLookupMap(haveBodyParameter); var delimiter = /^(?:[\\\[\]\s"(),;@^`{}~]|$)/; var numberLiteral = /^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/; var characterLiteral = /^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/; // simple-namespace := /^[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*/ // simple-symbol := /^(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)/ // qualified-symbol := ((<.>)*)? var qualifiedSymbol = /^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/; function base(stream, state) { if (stream.eatSpace() || stream.eat(",")) return ["space", null]; if (stream.match(numberLiteral)) return [null, "number"]; if (stream.match(characterLiteral)) return [null, "string-2"]; if (stream.eat(/^"/)) return (state.tokenize = inString)(stream, state); if (stream.eat(/^[(\[{]/)) return ["open", "bracket"]; if (stream.eat(/^[)\]}]/)) return ["close", "bracket"]; if (stream.eat(/^;/)) {stream.skipToEnd(); return ["space", "comment"];} if (stream.eat(/^[#'@^`~]/)) return [null, "meta"]; var matches = stream.match(qualifiedSymbol); var symbol = matches && matches[0]; if (!symbol) { // advance stream by at least one character so we don't get stuck. stream.next(); stream.eatWhile(function (c) {return !is(c, delimiter);}); return [null, "error"]; } if (symbol === "comment" && state.lastToken === "(") return (state.tokenize = inComment)(stream, state); if (is(symbol, atom) || symbol.charAt(0) === ":") return ["symbol", "atom"]; if (is(symbol, specialForm) || is(symbol, coreSymbol)) return ["symbol", "keyword"]; if (state.lastToken === "(") return ["symbol", "builtin"]; // other operator return ["symbol", "variable"]; } function inString(stream, state) { var escaped = false, next; while (next = stream.next()) { if (next === "\"" && !escaped) {state.tokenize = base; break;} escaped = !escaped && next === "\\"; } return [null, "string"]; } function inComment(stream, state) { var parenthesisCount = 1; var next; while (next = stream.next()) { if (next === ")") parenthesisCount--; if (next === "(") parenthesisCount++; if (parenthesisCount === 0) { stream.backUp(1); state.tokenize = base; break; } } return ["space", "comment"]; } function createLookupMap(words) { var obj = {}; for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function is(value, test) { if (test instanceof RegExp) return test.test(value); if (test instanceof Object) return test.propertyIsEnumerable(value); } return { startState: function () { return { ctx: {prev: null, start: 0, indentTo: 0}, lastToken: null, tokenize: base }; }, token: function (stream, state) { if (stream.sol() && (typeof state.ctx.indentTo !== "number")) state.ctx.indentTo = state.ctx.start + 1; var typeStylePair = state.tokenize(stream, state); var type = typeStylePair[0]; var style = typeStylePair[1]; var current = stream.current(); if (type !== "space") { if (state.lastToken === "(" && state.ctx.indentTo === null) { if (type === "symbol" && is(current, hasBodyParameter)) state.ctx.indentTo = state.ctx.start + options.indentUnit; else state.ctx.indentTo = "next"; } else if (state.ctx.indentTo === "next") { state.ctx.indentTo = stream.column(); } state.lastToken = current; } if (type === "open") state.ctx = {prev: state.ctx, start: stream.column(), indentTo: null}; else if (type === "close") state.ctx = state.ctx.prev || state.ctx; return style; }, indent: function (state) { var i = state.ctx.indentTo; return (typeof i === "number") ? i : state.ctx.start + 1; }, closeBrackets: {pairs: "()[]{}\"\""}, lineComment: ";;" }; }); CodeMirror.defineMIME("text/x-clojure", "clojure"); CodeMirror.defineMIME("text/x-clojurescript", "clojure"); CodeMirror.defineMIME("application/edn", "clojure"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("cmake", function () { var variable_regex = /({)?[a-zA-Z0-9_]+(})?/; function tokenString(stream, state) { var current, prev, found_var = false; while (!stream.eol() && (current = stream.next()) != state.pending) { if (current === '$' && prev != '\\' && state.pending == '"') { found_var = true; break; } prev = current; } if (found_var) { stream.backUp(1); } if (current == state.pending) { state.continueString = false; } else { state.continueString = true; } return "string"; } function tokenize(stream, state) { var ch = stream.next(); // Have we found a variable? if (ch === '$') { if (stream.match(variable_regex)) { return 'variable-2'; } return 'variable'; } // Should we still be looking for the end of a string? if (state.continueString) { // If so, go through the loop again stream.backUp(1); return tokenString(stream, state); } // Do we just have a function on our hands? // In 'cmake_minimum_required (VERSION 2.8.8)', 'cmake_minimum_required' is matched if (stream.match(/(\s+)?\w+\(/) || stream.match(/(\s+)?\w+\ \(/)) { stream.backUp(1); return 'def'; } if (ch == "#") { stream.skipToEnd(); return "comment"; } // Have we found a string? if (ch == "'" || ch == '"') { // Store the type (single or double) state.pending = ch; // Perform the looping function to find the end return tokenString(stream, state); } if (ch == '(' || ch == ')') { return 'bracket'; } if (ch.match(/[0-9]/)) { return 'number'; } stream.eatWhile(/[\w-]/); return null; } return { startState: function () { var state = {}; state.inDefinition = false; state.inInclude = false; state.continueString = false; state.pending = false; return state; }, token: function (stream, state) { if (stream.eatSpace()) return null; return tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-cmake", "cmake"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /** * Author: Gautam Mehta * Branched from CodeMirror's Scheme mode */ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("cobol", function () { var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", ATOM = "atom", NUMBER = "number", KEYWORD = "keyword", MODTAG = "header", COBOLLINENUM = "def", PERIOD = "link"; function makeKeywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var atoms = makeKeywords("TRUE FALSE ZEROES ZEROS ZERO SPACES SPACE LOW-VALUE LOW-VALUES "); var keywords = makeKeywords( "ACCEPT ACCESS ACQUIRE ADD ADDRESS " + "ADVANCING AFTER ALIAS ALL ALPHABET " + "ALPHABETIC ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED " + "ALSO ALTER ALTERNATE AND ANY " + "ARE AREA AREAS ARITHMETIC ASCENDING " + "ASSIGN AT ATTRIBUTE AUTHOR AUTO " + "AUTO-SKIP AUTOMATIC B-AND B-EXOR B-LESS " + "B-NOT B-OR BACKGROUND-COLOR BACKGROUND-COLOUR BEEP " + "BEFORE BELL BINARY BIT BITS " + "BLANK BLINK BLOCK BOOLEAN BOTTOM " + "BY CALL CANCEL CD CF " + "CH CHARACTER CHARACTERS CLASS CLOCK-UNITS " + "CLOSE COBOL CODE CODE-SET COL " + "COLLATING COLUMN COMMA COMMIT COMMITMENT " + "COMMON COMMUNICATION COMP COMP-0 COMP-1 " + "COMP-2 COMP-3 COMP-4 COMP-5 COMP-6 " + "COMP-7 COMP-8 COMP-9 COMPUTATIONAL COMPUTATIONAL-0 " + "COMPUTATIONAL-1 COMPUTATIONAL-2 COMPUTATIONAL-3 COMPUTATIONAL-4 COMPUTATIONAL-5 " + "COMPUTATIONAL-6 COMPUTATIONAL-7 COMPUTATIONAL-8 COMPUTATIONAL-9 COMPUTE " + "CONFIGURATION CONNECT CONSOLE CONTAINED CONTAINS " + "CONTENT CONTINUE CONTROL CONTROL-AREA CONTROLS " + "CONVERTING COPY CORR CORRESPONDING COUNT " + "CRT CRT-UNDER CURRENCY CURRENT CURSOR " + "DATA DATE DATE-COMPILED DATE-WRITTEN DAY " + "DAY-OF-WEEK DB DB-ACCESS-CONTROL-KEY DB-DATA-NAME DB-EXCEPTION " + "DB-FORMAT-NAME DB-RECORD-NAME DB-SET-NAME DB-STATUS DBCS " + "DBCS-EDITED DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE " + "DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING " + "DECIMAL-POINT DECLARATIVES DEFAULT DELETE DELIMITED " + "DELIMITER DEPENDING DESCENDING DESCRIBED DESTINATION " + "DETAIL DISABLE DISCONNECT DISPLAY DISPLAY-1 " + "DISPLAY-2 DISPLAY-3 DISPLAY-4 DISPLAY-5 DISPLAY-6 " + "DISPLAY-7 DISPLAY-8 DISPLAY-9 DIVIDE DIVISION " + "DOWN DROP DUPLICATE DUPLICATES DYNAMIC " + "EBCDIC EGI EJECT ELSE EMI " + "EMPTY EMPTY-CHECK ENABLE END END. END-ACCEPT END-ACCEPT. " + "END-ADD END-CALL END-COMPUTE END-DELETE END-DISPLAY " + "END-DIVIDE END-EVALUATE END-IF END-INVOKE END-MULTIPLY " + "END-OF-PAGE END-PERFORM END-READ END-RECEIVE END-RETURN " + "END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT " + "END-UNSTRING END-WRITE END-XML ENTER ENTRY " + "ENVIRONMENT EOP EQUAL EQUALS ERASE " + "ERROR ESI EVALUATE EVERY EXCEEDS " + "EXCEPTION EXCLUSIVE EXIT EXTEND EXTERNAL " + "EXTERNALLY-DESCRIBED-KEY FD FETCH FILE FILE-CONTROL " + "FILE-STREAM FILES FILLER FINAL FIND " + "FINISH FIRST FOOTING FOR FOREGROUND-COLOR " + "FOREGROUND-COLOUR FORMAT FREE FROM FULL " + "FUNCTION GENERATE GET GIVING GLOBAL " + "GO GOBACK GREATER GROUP HEADING " + "HIGH-VALUE HIGH-VALUES HIGHLIGHT I-O I-O-CONTROL " + "ID IDENTIFICATION IF IN INDEX " + "INDEX-1 INDEX-2 INDEX-3 INDEX-4 INDEX-5 " + "INDEX-6 INDEX-7 INDEX-8 INDEX-9 INDEXED " + "INDIC INDICATE INDICATOR INDICATORS INITIAL " + "INITIALIZE INITIATE INPUT INPUT-OUTPUT INSPECT " + "INSTALLATION INTO INVALID INVOKE IS " + "JUST JUSTIFIED KANJI KEEP KEY " + "LABEL LAST LD LEADING LEFT " + "LEFT-JUSTIFY LENGTH LENGTH-CHECK LESS LIBRARY " + "LIKE LIMIT LIMITS LINAGE LINAGE-COUNTER " + "LINE LINE-COUNTER LINES LINKAGE LOCAL-STORAGE " + "LOCALE LOCALLY LOCK " + "MEMBER MEMORY MERGE MESSAGE METACLASS " + "MODE MODIFIED MODIFY MODULES MOVE " + "MULTIPLE MULTIPLY NATIONAL NATIVE NEGATIVE " + "NEXT NO NO-ECHO NONE NOT " + "NULL NULL-KEY-MAP NULL-MAP NULLS NUMBER " + "NUMERIC NUMERIC-EDITED OBJECT OBJECT-COMPUTER OCCURS " + "OF OFF OMITTED ON ONLY " + "OPEN OPTIONAL OR ORDER ORGANIZATION " + "OTHER OUTPUT OVERFLOW OWNER PACKED-DECIMAL " + "PADDING PAGE PAGE-COUNTER PARSE PERFORM " + "PF PH PIC PICTURE PLUS " + "POINTER POSITION POSITIVE PREFIX PRESENT " + "PRINTING PRIOR PROCEDURE PROCEDURE-POINTER PROCEDURES " + "PROCEED PROCESS PROCESSING PROGRAM PROGRAM-ID " + "PROMPT PROTECTED PURGE QUEUE QUOTE " + "QUOTES RANDOM RD READ READY " + "REALM RECEIVE RECONNECT RECORD RECORD-NAME " + "RECORDS RECURSIVE REDEFINES REEL REFERENCE " + "REFERENCE-MONITOR REFERENCES RELATION RELATIVE RELEASE " + "REMAINDER REMOVAL RENAMES REPEATED REPLACE " + "REPLACING REPORT REPORTING REPORTS REPOSITORY " + "REQUIRED RERUN RESERVE RESET RETAINING " + "RETRIEVAL RETURN RETURN-CODE RETURNING REVERSE-VIDEO " + "REVERSED REWIND REWRITE RF RH " + "RIGHT RIGHT-JUSTIFY ROLLBACK ROLLING ROUNDED " + "RUN SAME SCREEN SD SEARCH " + "SECTION SECURE SECURITY SEGMENT SEGMENT-LIMIT " + "SELECT SEND SENTENCE SEPARATE SEQUENCE " + "SEQUENTIAL SET SHARED SIGN SIZE " + "SKIP1 SKIP2 SKIP3 SORT SORT-MERGE " + "SORT-RETURN SOURCE SOURCE-COMPUTER SPACE-FILL " + "SPECIAL-NAMES STANDARD STANDARD-1 STANDARD-2 " + "START STARTING STATUS STOP STORE " + "STRING SUB-QUEUE-1 SUB-QUEUE-2 SUB-QUEUE-3 SUB-SCHEMA " + "SUBFILE SUBSTITUTE SUBTRACT SUM SUPPRESS " + "SYMBOLIC SYNC SYNCHRONIZED SYSIN SYSOUT " + "TABLE TALLYING TAPE TENANT TERMINAL " + "TERMINATE TEST TEXT THAN THEN " + "THROUGH THRU TIME TIMES TITLE " + "TO TOP TRAILING TRAILING-SIGN TRANSACTION " + "TYPE TYPEDEF UNDERLINE UNEQUAL UNIT " + "UNSTRING UNTIL UP UPDATE UPON " + "USAGE USAGE-MODE USE USING VALID " + "VALIDATE VALUE VALUES VARYING VLR " + "WAIT WHEN WHEN-COMPILED WITH WITHIN " + "WORDS WORKING-STORAGE WRITE XML XML-CODE " + "XML-EVENT XML-NTEXT XML-TEXT ZERO ZERO-FILL " ); var builtins = makeKeywords("- * ** / + < <= = > >= "); var tests = { digit: /\d/, digit_or_colon: /[\d:]/, hex: /[0-9a-f]/i, sign: /[+-]/, exponent: /e/i, keyword_char: /[^\s\(\[\;\)\]]/, symbol: /[\w*+\-]/ }; function isNumber(ch, stream){ // hex if ( ch === '0' && stream.eat(/x/i) ) { stream.eatWhile(tests.hex); return true; } // leading sign if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) { stream.eat(tests.sign); ch = stream.next(); } if ( tests.digit.test(ch) ) { stream.eat(ch); stream.eatWhile(tests.digit); if ( '.' == stream.peek()) { stream.eat('.'); stream.eatWhile(tests.digit); } if ( stream.eat(tests.exponent) ) { stream.eat(tests.sign); stream.eatWhile(tests.digit); } return true; } return false; } return { startState: function () { return { indentStack: null, indentation: 0, mode: false }; }, token: function (stream, state) { if (state.indentStack == null && stream.sol()) { // update indentation, but only if indentStack is empty state.indentation = 6 ; //stream.indentation(); } // skip spaces if (stream.eatSpace()) { return null; } var returnType = null; switch(state.mode){ case "string": // multi-line string parsing mode var next = false; while ((next = stream.next()) != null) { if (next == "\"" || next == "\'") { state.mode = false; break; } } returnType = STRING; // continue on in string mode break; default: // default parsing mode var ch = stream.next(); var col = stream.column(); if (col >= 0 && col <= 5) { returnType = COBOLLINENUM; } else if (col >= 72 && col <= 79) { stream.skipToEnd(); returnType = MODTAG; } else if (ch == "*" && col == 6) { // comment stream.skipToEnd(); // rest of the line is a comment returnType = COMMENT; } else if (ch == "\"" || ch == "\'") { state.mode = "string"; returnType = STRING; } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) { returnType = ATOM; } else if (ch == ".") { returnType = PERIOD; } else if (isNumber(ch,stream)){ returnType = NUMBER; } else { if (stream.current().match(tests.symbol)) { while (col < 71) { if (stream.eat(tests.symbol) === undefined) { break; } else { col++; } } } if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { returnType = KEYWORD; } else if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) { returnType = BUILTIN; } else if (atoms && atoms.propertyIsEnumerable(stream.current().toUpperCase())) { returnType = ATOM; } else returnType = null; } } return returnType; }, indent: function (state) { if (state.indentStack == null) return state.indentation; return state.indentStack.indent; } }; }); CodeMirror.defineMIME("text/x-cobol", "cobol"); }); }); var coffeescript = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /** * Link to the project's GitHub page: * https://github.com/pickhardt/coffeescript-codemirror-mode */ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("coffeescript", function(conf, parserConf) { var ERRORCLASS = "error"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var operators = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/; var delimiters = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/; var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/; var atProp = /^@[_A-Za-z$][_A-Za-z$0-9]*/; var wordOperators = wordRegexp(["and", "or", "not", "is", "isnt", "in", "instanceof", "typeof"]); var indentKeywords = ["for", "while", "loop", "if", "unless", "else", "switch", "try", "catch", "finally", "class"]; var commonKeywords = ["break", "by", "continue", "debugger", "delete", "do", "in", "of", "new", "return", "then", "this", "@", "throw", "when", "until", "extends"]; var keywords = wordRegexp(indentKeywords.concat(commonKeywords)); indentKeywords = wordRegexp(indentKeywords); var stringPrefixes = /^('{3}|\"{3}|['\"])/; var regexPrefixes = /^(\/{3}|\/)/; var commonConstants = ["Infinity", "NaN", "undefined", "null", "true", "false", "on", "off", "yes", "no"]; var constants = wordRegexp(commonConstants); // Tokenizers function tokenBase(stream, state) { // Handle scope changes if (stream.sol()) { if (state.scope.align === null) state.scope.align = false; var scopeOffset = state.scope.offset; if (stream.eatSpace()) { var lineOffset = stream.indentation(); if (lineOffset > scopeOffset && state.scope.type == "coffee") { return "indent"; } else if (lineOffset < scopeOffset) { return "dedent"; } return null; } else { if (scopeOffset > 0) { dedent(stream, state); } } } if (stream.eatSpace()) { return null; } var ch = stream.peek(); // Handle docco title comment (single line) if (stream.match("####")) { stream.skipToEnd(); return "comment"; } // Handle multi line comments if (stream.match("###")) { state.tokenize = longComment; return state.tokenize(stream, state); } // Single line comment if (ch === "#") { stream.skipToEnd(); return "comment"; } // Handle number literals if (stream.match(/^-?[0-9\.]/, false)) { var floatLiteral = false; // Floats if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } if (stream.match(/^-?\d+\.\d*/)) { floatLiteral = true; } if (stream.match(/^-?\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // prevent from getting extra . on 1.. if (stream.peek() == "."){ stream.backUp(1); } return "number"; } // Integers var intLiteral = false; // Hex if (stream.match(/^-?0x[0-9a-f]+/i)) { intLiteral = true; } // Decimal if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) { intLiteral = true; } // Zero by itself with no other piece of number. if (stream.match(/^-?0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { return "number"; } } // Handle strings if (stream.match(stringPrefixes)) { state.tokenize = tokenFactory(stream.current(), false, "string"); return state.tokenize(stream, state); } // Handle regex literals if (stream.match(regexPrefixes)) { if (stream.current() != "/" || stream.match(/^.*\//, false)) { // prevent highlight of division state.tokenize = tokenFactory(stream.current(), true, "string-2"); return state.tokenize(stream, state); } else { stream.backUp(1); } } // Handle operators and delimiters if (stream.match(operators) || stream.match(wordOperators)) { return "operator"; } if (stream.match(delimiters)) { return "punctuation"; } if (stream.match(constants)) { return "atom"; } if (stream.match(atProp) || state.prop && stream.match(identifiers)) { return "property"; } if (stream.match(keywords)) { return "keyword"; } if (stream.match(identifiers)) { return "variable"; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenFactory(delimiter, singleline, outclass) { return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"\/\\]/); if (stream.eat("\\")) { stream.next(); if (singleline && stream.eol()) { return outclass; } } else if (stream.match(delimiter)) { state.tokenize = tokenBase; return outclass; } else { stream.eat(/['"\/]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { outclass = ERRORCLASS; } else { state.tokenize = tokenBase; } } return outclass; }; } function longComment(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^#]/); if (stream.match("###")) { state.tokenize = tokenBase; break; } stream.eatWhile("#"); } return "comment"; } function indent(stream, state, type) { type = type || "coffee"; var offset = 0, align = false, alignOffset = null; for (var scope = state.scope; scope; scope = scope.prev) { if (scope.type === "coffee" || scope.type == "}") { offset = scope.offset + conf.indentUnit; break; } } if (type !== "coffee") { align = null; alignOffset = stream.column() + stream.current().length; } else if (state.scope.align) { state.scope.align = false; } state.scope = { offset: offset, type: type, prev: state.scope, align: align, alignOffset: alignOffset }; } function dedent(stream, state) { if (!state.scope.prev) return; if (state.scope.type === "coffee") { var _indent = stream.indentation(); var matched = false; for (var scope = state.scope; scope; scope = scope.prev) { if (_indent === scope.offset) { matched = true; break; } } if (!matched) { return true; } while (state.scope.prev && state.scope.offset !== _indent) { state.scope = state.scope.prev; } return false; } else { state.scope = state.scope.prev; return false; } } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle scope changes. if (current === "return") { state.dedent = true; } if (((current === "->" || current === "=>") && stream.eol()) || style === "indent") { indent(stream, state); } var delimiter_index = "[({".indexOf(current); if (delimiter_index !== -1) { indent(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); } if (indentKeywords.exec(current)){ indent(stream, state); } if (current == "then"){ dedent(stream, state); } if (style === "dedent") { if (dedent(stream, state)) { return ERRORCLASS; } } delimiter_index = "])}".indexOf(current); if (delimiter_index !== -1) { while (state.scope.type == "coffee" && state.scope.prev) state.scope = state.scope.prev; if (state.scope.type == current) state.scope = state.scope.prev; } if (state.dedent && stream.eol()) { if (state.scope.type == "coffee" && state.scope.prev) state.scope = state.scope.prev; state.dedent = false; } return style; } var external = { startState: function(basecolumn) { return { tokenize: tokenBase, scope: {offset:basecolumn || 0, type:"coffee", prev: null, align: false}, prop: false, dedent: 0 }; }, token: function(stream, state) { var fillAlign = state.scope.align === null && state.scope; if (fillAlign && stream.sol()) fillAlign.align = false; var style = tokenLexer(stream, state); if (style && style != "comment") { if (fillAlign) fillAlign.align = true; state.prop = style == "punctuation" && stream.current() == "."; } return style; }, indent: function(state, text) { if (state.tokenize != tokenBase) return 0; var scope = state.scope; var closer = text && "])}".indexOf(text.charAt(0)) > -1; if (closer) while (scope.type == "coffee" && scope.prev) scope = scope.prev; var closes = closer && scope.type === text.charAt(0); if (scope.align) return scope.alignOffset - (closes ? 1 : 0); else return (closes ? scope.prev : scope).offset; }, lineComment: "#", fold: "indent" }; return external; }); // IANA registered media type // https://www.iana.org/assignments/media-types/ CodeMirror.defineMIME("application/vnd.coffeescript", "coffeescript"); CodeMirror.defineMIME("text/x-coffeescript", "coffeescript"); CodeMirror.defineMIME("text/coffeescript", "coffeescript"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("commonlisp", function (config) { var specialForm = /^(block|let*|return-from|catch|load-time-value|setq|eval-when|locally|symbol-macrolet|flet|macrolet|tagbody|function|multiple-value-call|the|go|multiple-value-prog1|throw|if|progn|unwind-protect|labels|progv|let|quote)$/; var assumeBody = /^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/; var numLiteral = /^(?:[+\-]?(?:\d+|\d*\.\d+)(?:[efd][+\-]?\d+)?|[+\-]?\d+(?:\/[+\-]?\d+)?|#b[+\-]?[01]+|#o[+\-]?[0-7]+|#x[+\-]?[\da-f]+)/; var symbol = /[^\s'`,@()\[\]";]/; var type; function readSym(stream) { var ch; while (ch = stream.next()) { if (ch == "\\") stream.next(); else if (!symbol.test(ch)) { stream.backUp(1); break; } } return stream.current(); } function base(stream, state) { if (stream.eatSpace()) {type = "ws"; return null;} if (stream.match(numLiteral)) return "number"; var ch = stream.next(); if (ch == "\\") ch = stream.next(); if (ch == '"') return (state.tokenize = inString)(stream, state); else if (ch == "(") { type = "open"; return "bracket"; } else if (ch == ")" || ch == "]") { type = "close"; return "bracket"; } else if (ch == ";") { stream.skipToEnd(); type = "ws"; return "comment"; } else if (/['`,@]/.test(ch)) return null; else if (ch == "|") { if (stream.skipTo("|")) { stream.next(); return "symbol"; } else { stream.skipToEnd(); return "error"; } } else if (ch == "#") { var ch = stream.next(); if (ch == "(") { type = "open"; return "bracket"; } else if (/[+\-=\.']/.test(ch)) return null; else if (/\d/.test(ch) && stream.match(/^\d*#/)) return null; else if (ch == "|") return (state.tokenize = inComment)(stream, state); else if (ch == ":") { readSym(stream); return "meta"; } else if (ch == "\\") { stream.next(); readSym(stream); return "string-2" } else return "error"; } else { var name = readSym(stream); if (name == ".") return null; type = "symbol"; if (name == "nil" || name == "t" || name.charAt(0) == ":") return "atom"; if (state.lastType == "open" && (specialForm.test(name) || assumeBody.test(name))) return "keyword"; if (name.charAt(0) == "&") return "variable-2"; return "variable"; } } function inString(stream, state) { var escaped = false, next; while (next = stream.next()) { if (next == '"' && !escaped) { state.tokenize = base; break; } escaped = !escaped && next == "\\"; } return "string"; } function inComment(stream, state) { var next, last; while (next = stream.next()) { if (next == "#" && last == "|") { state.tokenize = base; break; } last = next; } type = "ws"; return "comment"; } return { startState: function () { return {ctx: {prev: null, start: 0, indentTo: 0}, lastType: null, tokenize: base}; }, token: function (stream, state) { if (stream.sol() && typeof state.ctx.indentTo != "number") state.ctx.indentTo = state.ctx.start + 1; type = null; var style = state.tokenize(stream, state); if (type != "ws") { if (state.ctx.indentTo == null) { if (type == "symbol" && assumeBody.test(stream.current())) state.ctx.indentTo = state.ctx.start + config.indentUnit; else state.ctx.indentTo = "next"; } else if (state.ctx.indentTo == "next") { state.ctx.indentTo = stream.column(); } state.lastType = type; } if (type == "open") state.ctx = {prev: state.ctx, start: stream.column(), indentTo: null}; else if (type == "close") state.ctx = state.ctx.prev || state.ctx; return style; }, indent: function (state, _textAfter) { var i = state.ctx.indentTo; return typeof i == "number" ? i : state.ctx.start + 1; }, closeBrackets: {pairs: "()[]{}\"\""}, lineComment: ";;", blockCommentStart: "#|", blockCommentEnd: "|#" }; }); CodeMirror.defineMIME("text/x-common-lisp", "commonlisp"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("crystal", function(config) { function wordRegExp(words, end) { return new RegExp((end ? "" : "^") + "(?:" + words.join("|") + ")" + (end ? "$" : "\\b")); } function chain(tokenize, stream, state) { state.tokenize.push(tokenize); return tokenize(stream, state); } var operators = /^(?:[-+/%|&^]|\*\*?|[<>]{2})/; var conditionalOperators = /^(?:[=!]~|===|<=>|[<>=!]=?|[|&]{2}|~)/; var indexingOperators = /^(?:\[\][?=]?)/; var anotherOperators = /^(?:\.(?:\.{2})?|->|[?:])/; var idents = /^[a-z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/; var types = /^[A-Z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/; var keywords = wordRegExp([ "abstract", "alias", "as", "asm", "begin", "break", "case", "class", "def", "do", "else", "elsif", "end", "ensure", "enum", "extend", "for", "fun", "if", "include", "instance_sizeof", "lib", "macro", "module", "next", "of", "out", "pointerof", "private", "protected", "rescue", "return", "require", "select", "sizeof", "struct", "super", "then", "type", "typeof", "uninitialized", "union", "unless", "until", "when", "while", "with", "yield", "__DIR__", "__END_LINE__", "__FILE__", "__LINE__" ]); var atomWords = wordRegExp(["true", "false", "nil", "self"]); var indentKeywordsArray = [ "def", "fun", "macro", "class", "module", "struct", "lib", "enum", "union", "do", "for" ]; var indentKeywords = wordRegExp(indentKeywordsArray); var indentExpressionKeywordsArray = ["if", "unless", "case", "while", "until", "begin", "then"]; var indentExpressionKeywords = wordRegExp(indentExpressionKeywordsArray); var dedentKeywordsArray = ["end", "else", "elsif", "rescue", "ensure"]; var dedentKeywords = wordRegExp(dedentKeywordsArray); var dedentPunctualsArray = ["\\)", "\\}", "\\]"]; var dedentPunctuals = new RegExp("^(?:" + dedentPunctualsArray.join("|") + ")$"); var nextTokenizer = { "def": tokenFollowIdent, "fun": tokenFollowIdent, "macro": tokenMacroDef, "class": tokenFollowType, "module": tokenFollowType, "struct": tokenFollowType, "lib": tokenFollowType, "enum": tokenFollowType, "union": tokenFollowType }; var matching = {"[": "]", "{": "}", "(": ")", "<": ">"}; function tokenBase(stream, state) { if (stream.eatSpace()) { return null; } // Macros if (state.lastToken != "\\" && stream.match("{%", false)) { return chain(tokenMacro("%", "%"), stream, state); } if (state.lastToken != "\\" && stream.match("{{", false)) { return chain(tokenMacro("{", "}"), stream, state); } // Comments if (stream.peek() == "#") { stream.skipToEnd(); return "comment"; } // Variables and keywords var matched; if (stream.match(idents)) { stream.eat(/[?!]/); matched = stream.current(); if (stream.eat(":")) { return "atom"; } else if (state.lastToken == ".") { return "property"; } else if (keywords.test(matched)) { if (indentKeywords.test(matched)) { if (!(matched == "fun" && state.blocks.indexOf("lib") >= 0) && !(matched == "def" && state.lastToken == "abstract")) { state.blocks.push(matched); state.currentIndent += 1; } } else if ((state.lastStyle == "operator" || !state.lastStyle) && indentExpressionKeywords.test(matched)) { state.blocks.push(matched); state.currentIndent += 1; } else if (matched == "end") { state.blocks.pop(); state.currentIndent -= 1; } if (nextTokenizer.hasOwnProperty(matched)) { state.tokenize.push(nextTokenizer[matched]); } return "keyword"; } else if (atomWords.test(matched)) { return "atom"; } return "variable"; } // Class variables and instance variables // or attributes if (stream.eat("@")) { if (stream.peek() == "[") { return chain(tokenNest("[", "]", "meta"), stream, state); } stream.eat("@"); stream.match(idents) || stream.match(types); return "variable-2"; } // Constants and types if (stream.match(types)) { return "tag"; } // Symbols or ':' operator if (stream.eat(":")) { if (stream.eat("\"")) { return chain(tokenQuote("\"", "atom", false), stream, state); } else if (stream.match(idents) || stream.match(types) || stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators)) { return "atom"; } stream.eat(":"); return "operator"; } // Strings if (stream.eat("\"")) { return chain(tokenQuote("\"", "string", true), stream, state); } // Strings or regexps or macro variables or '%' operator if (stream.peek() == "%") { var style = "string"; var embed = true; var delim; if (stream.match("%r")) { // Regexps style = "string-2"; delim = stream.next(); } else if (stream.match("%w")) { embed = false; delim = stream.next(); } else if (stream.match("%q")) { embed = false; delim = stream.next(); } else { if(delim = stream.match(/^%([^\w\s=])/)) { delim = delim[1]; } else if (stream.match(/^%[a-zA-Z0-9_\u009F-\uFFFF]*/)) { // Macro variables return "meta"; } else { // '%' operator return "operator"; } } if (matching.hasOwnProperty(delim)) { delim = matching[delim]; } return chain(tokenQuote(delim, style, embed), stream, state); } // Here Docs if (matched = stream.match(/^<<-('?)([A-Z]\w*)\1/)) { return chain(tokenHereDoc(matched[2], !matched[1]), stream, state) } // Characters if (stream.eat("'")) { stream.match(/^(?:[^']|\\(?:[befnrtv0'"]|[0-7]{3}|u(?:[0-9a-fA-F]{4}|\{[0-9a-fA-F]{1,6}\})))/); stream.eat("'"); return "atom"; } // Numbers if (stream.eat("0")) { if (stream.eat("x")) { stream.match(/^[0-9a-fA-F]+/); } else if (stream.eat("o")) { stream.match(/^[0-7]+/); } else if (stream.eat("b")) { stream.match(/^[01]+/); } return "number"; } if (stream.eat(/^\d/)) { stream.match(/^\d*(?:\.\d+)?(?:[eE][+-]?\d+)?/); return "number"; } // Operators if (stream.match(operators)) { stream.eat("="); // Operators can follow assign symbol. return "operator"; } if (stream.match(conditionalOperators) || stream.match(anotherOperators)) { return "operator"; } // Parens and braces if (matched = stream.match(/[({[]/, false)) { matched = matched[0]; return chain(tokenNest(matched, matching[matched], null), stream, state); } // Escapes if (stream.eat("\\")) { stream.next(); return "meta"; } stream.next(); return null; } function tokenNest(begin, end, style, started) { return function (stream, state) { if (!started && stream.match(begin)) { state.tokenize[state.tokenize.length - 1] = tokenNest(begin, end, style, true); state.currentIndent += 1; return style; } var nextStyle = tokenBase(stream, state); if (stream.current() === end) { state.tokenize.pop(); state.currentIndent -= 1; nextStyle = style; } return nextStyle; }; } function tokenMacro(begin, end, started) { return function (stream, state) { if (!started && stream.match("{" + begin)) { state.currentIndent += 1; state.tokenize[state.tokenize.length - 1] = tokenMacro(begin, end, true); return "meta"; } if (stream.match(end + "}")) { state.currentIndent -= 1; state.tokenize.pop(); return "meta"; } return tokenBase(stream, state); }; } function tokenMacroDef(stream, state) { if (stream.eatSpace()) { return null; } var matched; if (matched = stream.match(idents)) { if (matched == "def") { return "keyword"; } stream.eat(/[?!]/); } state.tokenize.pop(); return "def"; } function tokenFollowIdent(stream, state) { if (stream.eatSpace()) { return null; } if (stream.match(idents)) { stream.eat(/[!?]/); } else { stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators); } state.tokenize.pop(); return "def"; } function tokenFollowType(stream, state) { if (stream.eatSpace()) { return null; } stream.match(types); state.tokenize.pop(); return "def"; } function tokenQuote(end, style, embed) { return function (stream, state) { var escaped = false; while (stream.peek()) { if (!escaped) { if (stream.match("{%", false)) { state.tokenize.push(tokenMacro("%", "%")); return style; } if (stream.match("{{", false)) { state.tokenize.push(tokenMacro("{", "}")); return style; } if (embed && stream.match("#{", false)) { state.tokenize.push(tokenNest("#{", "}", "meta")); return style; } var ch = stream.next(); if (ch == end) { state.tokenize.pop(); return style; } escaped = embed && ch == "\\"; } else { stream.next(); escaped = false; } } return style; }; } function tokenHereDoc(phrase, embed) { return function (stream, state) { if (stream.sol()) { stream.eatSpace(); if (stream.match(phrase)) { state.tokenize.pop(); return "string"; } } var escaped = false; while (stream.peek()) { if (!escaped) { if (stream.match("{%", false)) { state.tokenize.push(tokenMacro("%", "%")); return "string"; } if (stream.match("{{", false)) { state.tokenize.push(tokenMacro("{", "}")); return "string"; } if (embed && stream.match("#{", false)) { state.tokenize.push(tokenNest("#{", "}", "meta")); return "string"; } escaped = embed && stream.next() == "\\"; } else { stream.next(); escaped = false; } } return "string"; } } return { startState: function () { return { tokenize: [tokenBase], currentIndent: 0, lastToken: null, lastStyle: null, blocks: [] }; }, token: function (stream, state) { var style = state.tokenize[state.tokenize.length - 1](stream, state); var token = stream.current(); if (style && style != "comment") { state.lastToken = token; state.lastStyle = style; } return style; }, indent: function (state, textAfter) { textAfter = textAfter.replace(/^\s*(?:\{%)?\s*|\s*(?:%\})?\s*$/g, ""); if (dedentKeywords.test(textAfter) || dedentPunctuals.test(textAfter)) { return config.indentUnit * (state.currentIndent - 1); } return config.indentUnit * state.currentIndent; }, fold: "indent", electricInput: wordRegExp(dedentPunctualsArray.concat(dedentKeywordsArray), true), lineComment: '#' }; }); CodeMirror.defineMIME("text/x-crystal", "crystal"); }); }); var css = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("css", function(config, parserConfig) { var inline = parserConfig.inline; if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); var indentUnit = config.indentUnit, tokenHooks = parserConfig.tokenHooks, documentTypes = parserConfig.documentTypes || {}, mediaTypes = parserConfig.mediaTypes || {}, mediaFeatures = parserConfig.mediaFeatures || {}, mediaValueKeywords = parserConfig.mediaValueKeywords || {}, propertyKeywords = parserConfig.propertyKeywords || {}, nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {}, fontProperties = parserConfig.fontProperties || {}, counterDescriptors = parserConfig.counterDescriptors || {}, colorKeywords = parserConfig.colorKeywords || {}, valueKeywords = parserConfig.valueKeywords || {}, allowNested = parserConfig.allowNested, lineComment = parserConfig.lineComment, supportsAtComponent = parserConfig.supportsAtComponent === true, highlightNonStandardPropertyKeywords = config.highlightNonStandardPropertyKeywords !== false; var type, override; function ret(style, tp) { type = tp; return style; } // Tokenizers function tokenBase(stream, state) { var ch = stream.next(); if (tokenHooks[ch]) { var result = tokenHooks[ch](stream, state); if (result !== false) return result; } if (ch == "@") { stream.eatWhile(/[\w\\\-]/); return ret("def", stream.current()); } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { return ret(null, "compare"); } else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "#") { stream.eatWhile(/[\w\\\-]/); return ret("atom", "hash"); } else if (ch == "!") { stream.match(/^\s*\w*/); return ret("keyword", "important"); } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (ch === "-") { if (/[\d.]/.test(stream.peek())) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (stream.match(/^-[\w\\\-]*/)) { stream.eatWhile(/[\w\\\-]/); if (stream.match(/^\s*:/, false)) return ret("variable-2", "variable-definition"); return ret("variable-2", "variable"); } else if (stream.match(/^\w+-/)) { return ret("meta", "meta"); } } else if (/[,+>*\/]/.test(ch)) { return ret(null, "select-op"); } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { return ret("qualifier", "qualifier"); } else if (/[:;{}\[\]\(\)]/.test(ch)) { return ret(null, ch); } else if (stream.match(/[\w-.]+(?=\()/)) { if (/^(url(-prefix)?|domain|regexp)$/.test(stream.current().toLowerCase())) { state.tokenize = tokenParenthesized; } return ret("variable callee", "variable"); } else if (/[\w\\\-]/.test(ch)) { stream.eatWhile(/[\w\\\-]/); return ret("property", "word"); } else { return ret(null, null); } } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { if (quote == ")") stream.backUp(1); break; } escaped = !escaped && ch == "\\"; } if (ch == quote || !escaped && quote != ")") state.tokenize = null; return ret("string", "string"); }; } function tokenParenthesized(stream, state) { stream.next(); // Must be '(' if (!stream.match(/\s*[\"\')]/, false)) state.tokenize = tokenString(")"); else state.tokenize = null; return ret(null, "("); } // Context management function Context(type, indent, prev) { this.type = type; this.indent = indent; this.prev = prev; } function pushContext(state, stream, type, indent) { state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context); return type; } function popContext(state) { if (state.context.prev) state.context = state.context.prev; return state.context.type; } function pass(type, stream, state) { return states[state.context.type](type, stream, state); } function popAndPass(type, stream, state, n) { for (var i = n || 1; i > 0; i--) state.context = state.context.prev; return pass(type, stream, state); } // Parser function wordAsValue(stream) { var word = stream.current().toLowerCase(); if (valueKeywords.hasOwnProperty(word)) override = "atom"; else if (colorKeywords.hasOwnProperty(word)) override = "keyword"; else override = "variable"; } var states = {}; states.top = function(type, stream, state) { if (type == "{") { return pushContext(state, stream, "block"); } else if (type == "}" && state.context.prev) { return popContext(state); } else if (supportsAtComponent && /@component/i.test(type)) { return pushContext(state, stream, "atComponentBlock"); } else if (/^@(-moz-)?document$/i.test(type)) { return pushContext(state, stream, "documentTypes"); } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) { return pushContext(state, stream, "atBlock"); } else if (/^@(font-face|counter-style)/i.test(type)) { state.stateArg = type; return "restricted_atBlock_before"; } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) { return "keyframes"; } else if (type && type.charAt(0) == "@") { return pushContext(state, stream, "at"); } else if (type == "hash") { override = "builtin"; } else if (type == "word") { override = "tag"; } else if (type == "variable-definition") { return "maybeprop"; } else if (type == "interpolation") { return pushContext(state, stream, "interpolation"); } else if (type == ":") { return "pseudo"; } else if (allowNested && type == "(") { return pushContext(state, stream, "parens"); } return state.context.type; }; states.block = function(type, stream, state) { if (type == "word") { var word = stream.current().toLowerCase(); if (propertyKeywords.hasOwnProperty(word)) { override = "property"; return "maybeprop"; } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) { override = highlightNonStandardPropertyKeywords ? "string-2" : "property"; return "maybeprop"; } else if (allowNested) { override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; return "block"; } else { override += " error"; return "maybeprop"; } } else if (type == "meta") { return "block"; } else if (!allowNested && (type == "hash" || type == "qualifier")) { override = "error"; return "block"; } else { return states.top(type, stream, state); } }; states.maybeprop = function(type, stream, state) { if (type == ":") return pushContext(state, stream, "prop"); return pass(type, stream, state); }; states.prop = function(type, stream, state) { if (type == ";") return popContext(state); if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); if (type == "}" || type == "{") return popAndPass(type, stream, state); if (type == "(") return pushContext(state, stream, "parens"); if (type == "hash" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) { override += " error"; } else if (type == "word") { wordAsValue(stream); } else if (type == "interpolation") { return pushContext(state, stream, "interpolation"); } return "prop"; }; states.propBlock = function(type, _stream, state) { if (type == "}") return popContext(state); if (type == "word") { override = "property"; return "maybeprop"; } return state.context.type; }; states.parens = function(type, stream, state) { if (type == "{" || type == "}") return popAndPass(type, stream, state); if (type == ")") return popContext(state); if (type == "(") return pushContext(state, stream, "parens"); if (type == "interpolation") return pushContext(state, stream, "interpolation"); if (type == "word") wordAsValue(stream); return "parens"; }; states.pseudo = function(type, stream, state) { if (type == "meta") return "pseudo"; if (type == "word") { override = "variable-3"; return state.context.type; } return pass(type, stream, state); }; states.documentTypes = function(type, stream, state) { if (type == "word" && documentTypes.hasOwnProperty(stream.current())) { override = "tag"; return state.context.type; } else { return states.atBlock(type, stream, state); } }; states.atBlock = function(type, stream, state) { if (type == "(") return pushContext(state, stream, "atBlock_parens"); if (type == "}" || type == ";") return popAndPass(type, stream, state); if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); if (type == "interpolation") return pushContext(state, stream, "interpolation"); if (type == "word") { var word = stream.current().toLowerCase(); if (word == "only" || word == "not" || word == "and" || word == "or") override = "keyword"; else if (mediaTypes.hasOwnProperty(word)) override = "attribute"; else if (mediaFeatures.hasOwnProperty(word)) override = "property"; else if (mediaValueKeywords.hasOwnProperty(word)) override = "keyword"; else if (propertyKeywords.hasOwnProperty(word)) override = "property"; else if (nonStandardPropertyKeywords.hasOwnProperty(word)) override = highlightNonStandardPropertyKeywords ? "string-2" : "property"; else if (valueKeywords.hasOwnProperty(word)) override = "atom"; else if (colorKeywords.hasOwnProperty(word)) override = "keyword"; else override = "error"; } return state.context.type; }; states.atComponentBlock = function(type, stream, state) { if (type == "}") return popAndPass(type, stream, state); if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false); if (type == "word") override = "error"; return state.context.type; }; states.atBlock_parens = function(type, stream, state) { if (type == ")") return popContext(state); if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); return states.atBlock(type, stream, state); }; states.restricted_atBlock_before = function(type, stream, state) { if (type == "{") return pushContext(state, stream, "restricted_atBlock"); if (type == "word" && state.stateArg == "@counter-style") { override = "variable"; return "restricted_atBlock_before"; } return pass(type, stream, state); }; states.restricted_atBlock = function(type, stream, state) { if (type == "}") { state.stateArg = null; return popContext(state); } if (type == "word") { if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) || (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase()))) override = "error"; else override = "property"; return "maybeprop"; } return "restricted_atBlock"; }; states.keyframes = function(type, stream, state) { if (type == "word") { override = "variable"; return "keyframes"; } if (type == "{") return pushContext(state, stream, "top"); return pass(type, stream, state); }; states.at = function(type, stream, state) { if (type == ";") return popContext(state); if (type == "{" || type == "}") return popAndPass(type, stream, state); if (type == "word") override = "tag"; else if (type == "hash") override = "builtin"; return "at"; }; states.interpolation = function(type, stream, state) { if (type == "}") return popContext(state); if (type == "{" || type == ";") return popAndPass(type, stream, state); if (type == "word") override = "variable"; else if (type != "variable" && type != "(" && type != ")") override = "error"; return "interpolation"; }; return { startState: function(base) { return {tokenize: null, state: inline ? "block" : "top", stateArg: null, context: new Context(inline ? "block" : "top", base || 0, null)}; }, token: function(stream, state) { if (!state.tokenize && stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style && typeof style == "object") { type = style[1]; style = style[0]; } override = style; if (type != "comment") state.state = states[state.state](type, stream, state); return override; }, indent: function(state, textAfter) { var cx = state.context, ch = textAfter && textAfter.charAt(0); var indent = cx.indent; if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; if (cx.prev) { if (ch == "}" && (cx.type == "block" || cx.type == "top" || cx.type == "interpolation" || cx.type == "restricted_atBlock")) { // Resume indentation from parent context. cx = cx.prev; indent = cx.indent; } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || ch == "{" && (cx.type == "at" || cx.type == "atBlock")) { // Dedent relative to current context. indent = Math.max(0, cx.indent - indentUnit); } } return indent; }, electricChars: "}", blockCommentStart: "/*", blockCommentEnd: "*/", blockCommentContinue: " * ", lineComment: lineComment, fold: "brace" }; }); function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) { keys[array[i].toLowerCase()] = true; } return keys; } var documentTypes_ = [ "domain", "regexp", "url", "url-prefix" ], documentTypes = keySet(documentTypes_); var mediaTypes_ = [ "all", "aural", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "embossed" ], mediaTypes = keySet(mediaTypes_); var mediaFeatures_ = [ "width", "min-width", "max-width", "height", "min-height", "max-height", "device-width", "min-device-width", "max-device-width", "device-height", "min-device-height", "max-device-height", "aspect-ratio", "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", "max-color", "color-index", "min-color-index", "max-color-index", "monochrome", "min-monochrome", "max-monochrome", "resolution", "min-resolution", "max-resolution", "scan", "grid", "orientation", "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", "pointer", "any-pointer", "hover", "any-hover", "prefers-color-scheme" ], mediaFeatures = keySet(mediaFeatures_); var mediaValueKeywords_ = [ "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", "interlace", "progressive", "dark", "light" ], mediaValueKeywords = keySet(mediaValueKeywords_); var propertyKeywords_ = [ "align-content", "align-items", "align-self", "alignment-adjust", "alignment-baseline", "all", "anchor-point", "animation", "animation-delay", "animation-direction", "animation-duration", "animation-fill-mode", "animation-iteration-count", "animation-name", "animation-play-state", "animation-timing-function", "appearance", "azimuth", "backdrop-filter", "backface-visibility", "background", "background-attachment", "background-blend-mode", "background-clip", "background-color", "background-image", "background-origin", "background-position", "background-position-x", "background-position-y", "background-repeat", "background-size", "baseline-shift", "binding", "bleed", "block-size", "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", "border-image-source", "border-image-width", "border-left", "border-left-color", "border-left-style", "border-left-width", "border-radius", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", "caption-side", "caret-color", "clear", "clip", "color", "color-profile", "column-count", "column-fill", "column-gap", "column-rule", "column-rule-color", "column-rule-style", "column-rule-width", "column-span", "column-width", "columns", "contain", "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "dominant-baseline", "drop-initial-after-adjust", "drop-initial-after-align", "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", "drop-initial-value", "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into", "font", "font-family", "font-feature-settings", "font-kerning", "font-language-override", "font-optical-sizing", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-synthesis", "font-variant", "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", "font-variant-position", "font-variation-settings", "font-weight", "gap", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-gap", "grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon", "image-orientation", "image-rendering", "image-resolution", "inline-box-align", "inset", "inset-block", "inset-block-end", "inset-block-start", "inset-inline", "inset-inline-end", "inset-inline-start", "isolation", "justify-content", "justify-items", "justify-self", "left", "letter-spacing", "line-break", "line-height", "line-height-step", "line-stacking", "line-stacking-ruby", "line-stacking-shift", "line-stacking-strategy", "list-style", "list-style-image", "list-style-position", "list-style-type", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "marks", "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", "marquee-style", "mask-clip", "mask-composite", "mask-image", "mask-mode", "mask-origin", "mask-position", "mask-repeat", "mask-size","mask-type", "max-block-size", "max-height", "max-inline-size", "max-width", "min-block-size", "min-height", "min-inline-size", "min-width", "mix-blend-mode", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", "nav-up", "object-fit", "object-position", "offset", "offset-anchor", "offset-distance", "offset-path", "offset-position", "offset-rotate", "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", "outline-style", "outline-width", "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "page", "page-break-after", "page-break-before", "page-break-inside", "page-policy", "pause", "pause-after", "pause-before", "perspective", "perspective-origin", "pitch", "pitch-range", "place-content", "place-items", "place-self", "play-during", "position", "presentation-level", "punctuation-trim", "quotes", "region-break-after", "region-break-before", "region-break-inside", "region-fragment", "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", "right", "rotate", "rotation", "rotation-point", "row-gap", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span", "scale", "scroll-behavior", "scroll-margin", "scroll-margin-block", "scroll-margin-block-end", "scroll-margin-block-start", "scroll-margin-bottom", "scroll-margin-inline", "scroll-margin-inline-end", "scroll-margin-inline-start", "scroll-margin-left", "scroll-margin-right", "scroll-margin-top", "scroll-padding", "scroll-padding-block", "scroll-padding-block-end", "scroll-padding-block-start", "scroll-padding-bottom", "scroll-padding-inline", "scroll-padding-inline-end", "scroll-padding-inline-start", "scroll-padding-left", "scroll-padding-right", "scroll-padding-top", "scroll-snap-align", "scroll-snap-type", "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside", "size", "speak", "speak-as", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size", "table-layout", "target", "target-name", "target-new", "target-position", "text-align", "text-align-last", "text-combine-upright", "text-decoration", "text-decoration-color", "text-decoration-line", "text-decoration-skip", "text-decoration-skip-ink", "text-decoration-style", "text-emphasis", "text-emphasis-color", "text-emphasis-position", "text-emphasis-style", "text-height", "text-indent", "text-justify", "text-orientation", "text-outline", "text-overflow", "text-rendering", "text-shadow", "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", "text-wrap", "top", "touch-action", "transform", "transform-origin", "transform-style", "transition", "transition-delay", "transition-duration", "transition-property", "transition-timing-function", "translate", "unicode-bidi", "user-select", "vertical-align", "visibility", "voice-balance", "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", "voice-volume", "volume", "white-space", "widows", "width", "will-change", "word-break", "word-spacing", "word-wrap", "writing-mode", "z-index", // SVG-specific "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", "color-interpolation", "color-interpolation-filters", "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", "marker", "marker-end", "marker-mid", "marker-start", "paint-order", "shape-rendering", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", "glyph-orientation-vertical", "text-anchor", "writing-mode", ], propertyKeywords = keySet(propertyKeywords_); var nonStandardPropertyKeywords_ = [ "border-block", "border-block-color", "border-block-end", "border-block-end-color", "border-block-end-style", "border-block-end-width", "border-block-start", "border-block-start-color", "border-block-start-style", "border-block-start-width", "border-block-style", "border-block-width", "border-inline", "border-inline-color", "border-inline-end", "border-inline-end-color", "border-inline-end-style", "border-inline-end-width", "border-inline-start", "border-inline-start-color", "border-inline-start-style", "border-inline-start-width", "border-inline-style", "border-inline-width", "margin-block", "margin-block-end", "margin-block-start", "margin-inline", "margin-inline-end", "margin-inline-start", "padding-block", "padding-block-end", "padding-block-start", "padding-inline", "padding-inline-end", "padding-inline-start", "scroll-snap-stop", "scrollbar-3d-light-color", "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", "scrollbar-track-color", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "shape-inside", "zoom" ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); var fontProperties_ = [ "font-display", "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", "font-stretch", "font-weight", "font-style" ], fontProperties = keySet(fontProperties_); var counterDescriptors_ = [ "additive-symbols", "fallback", "negative", "pad", "prefix", "range", "speak-as", "suffix", "symbols", "system" ], counterDescriptors = keySet(counterDescriptors_); var colorKeywords_ = [ "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen" ], colorKeywords = keySet(colorKeywords_); var valueKeywords_ = [ "above", "absolute", "activeborder", "additive", "activecaption", "afar", "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page", "avoid-region", "axis-pan", "background", "backwards", "baseline", "below", "bidi-override", "binary", "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", "compact", "condensed", "contain", "content", "contents", "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", "destination-in", "destination-out", "destination-over", "devanagari", "difference", "disc", "discard", "disclosure-closed", "disclosure-open", "document", "dot-dash", "dot-dot-dash", "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", "ethiopic-halehame-gez", "ethiopic-halehame-om-et", "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", "extra-expanded", "fantasy", "fast", "fill", "fill-box", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove", "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", "help", "hidden", "hide", "higher", "highlight", "highlighttext", "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", "italic", "japanese-formal", "japanese-informal", "justify", "kannada", "katakana", "katakana-iroha", "keep-all", "khmer", "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "manipulation", "match", "matrix", "matrix3d", "media-controls-background", "media-current-time-display", "media-fullscreen-button", "media-mute-button", "media-play-button", "media-return-to-realtime-button", "media-rewind-button", "media-seek-back-button", "media-seek-forward-button", "media-slider", "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", "media-volume-slider-container", "media-volume-sliderthumb", "medium", "menu", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", "mix", "mongolian", "monospace", "move", "multiple", "multiple_mask_images", "multiply", "myanmar", "n-resize", "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote", "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", "painted", "page", "paused", "persian", "perspective", "pinch-zoom", "plus-darker", "plus-lighter", "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", "radial-gradient", "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end", "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", "simp-chinese-formal", "simp-chinese-informal", "single", "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square", "square-button", "start", "static", "status-bar", "stretch", "stroke", "stroke-box", "sub", "subpixel-antialiased", "svg_masks", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "tamil", "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", "trad-chinese-formal", "trad-chinese-informal", "transform", "translate", "translate3d", "translateX", "translateY", "translateZ", "transparent", "ultra-condensed", "ultra-expanded", "underline", "unidirectional-pan", "unset", "up", "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", "var", "vertical", "vertical-text", "view-box", "visible", "visibleFill", "visiblePainted", "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", "xx-large", "xx-small" ], valueKeywords = keySet(valueKeywords_); var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_) .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_) .concat(valueKeywords_); CodeMirror.registerHelper("hintWords", "css", allWords); function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return ["comment", "comment"]; } CodeMirror.defineMIME("text/css", { documentTypes: documentTypes, mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, mediaValueKeywords: mediaValueKeywords, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, fontProperties: fontProperties, counterDescriptors: counterDescriptors, colorKeywords: colorKeywords, valueKeywords: valueKeywords, tokenHooks: { "/": function(stream, state) { if (!stream.eat("*")) return false; state.tokenize = tokenCComment; return tokenCComment(stream, state); } }, name: "css" }); CodeMirror.defineMIME("text/x-scss", { mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, mediaValueKeywords: mediaValueKeywords, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, colorKeywords: colorKeywords, valueKeywords: valueKeywords, fontProperties: fontProperties, allowNested: true, lineComment: "//", tokenHooks: { "/": function(stream, state) { if (stream.eat("/")) { stream.skipToEnd(); return ["comment", "comment"]; } else if (stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else { return ["operator", "operator"]; } }, ":": function(stream) { if (stream.match(/\s*\{/, false)) return [null, null] return false; }, "$": function(stream) { stream.match(/^[\w-]+/); if (stream.match(/^\s*:/, false)) return ["variable-2", "variable-definition"]; return ["variable-2", "variable"]; }, "#": function(stream) { if (!stream.eat("{")) return false; return [null, "interpolation"]; } }, name: "css", helperType: "scss" }); CodeMirror.defineMIME("text/x-less", { mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, mediaValueKeywords: mediaValueKeywords, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, colorKeywords: colorKeywords, valueKeywords: valueKeywords, fontProperties: fontProperties, allowNested: true, lineComment: "//", tokenHooks: { "/": function(stream, state) { if (stream.eat("/")) { stream.skipToEnd(); return ["comment", "comment"]; } else if (stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else { return ["operator", "operator"]; } }, "@": function(stream) { if (stream.eat("{")) return [null, "interpolation"]; if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false; stream.eatWhile(/[\w\\\-]/); if (stream.match(/^\s*:/, false)) return ["variable-2", "variable-definition"]; return ["variable-2", "variable"]; }, "&": function() { return ["atom", "atom"]; } }, name: "css", helperType: "less" }); CodeMirror.defineMIME("text/x-gss", { documentTypes: documentTypes, mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, fontProperties: fontProperties, counterDescriptors: counterDescriptors, colorKeywords: colorKeywords, valueKeywords: valueKeywords, supportsAtComponent: true, tokenHooks: { "/": function(stream, state) { if (!stream.eat("*")) return false; state.tokenize = tokenCComment; return tokenCComment(stream, state); } }, name: "css", helperType: "gss" }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // By the Neo4j Team and contributors. // https://github.com/neo4j-contrib/CodeMirror (function(mod) { mod(codemirror); })(function(CodeMirror) { var wordRegexp = function(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); }; CodeMirror.defineMode("cypher", function(config) { var tokenBase = function(stream/*, state*/) { var ch = stream.next(); if (ch ==='"') { stream.match(/.*?"/); return "string"; } if (ch === "'") { stream.match(/.*?'/); return "string"; } if (/[{}\(\),\.;\[\]]/.test(ch)) { curPunc = ch; return "node"; } else if (ch === "/" && stream.eat("/")) { stream.skipToEnd(); return "comment"; } else if (operatorChars.test(ch)) { stream.eatWhile(operatorChars); return null; } else { stream.eatWhile(/[_\w\d]/); if (stream.eat(":")) { stream.eatWhile(/[\w\d_\-]/); return "atom"; } var word = stream.current(); if (funcs.test(word)) return "builtin"; if (preds.test(word)) return "def"; if (keywords.test(word) || systemKeywords.test(word)) return "keyword"; return "variable"; } }; var pushContext = function(state, type, col) { return state.context = { prev: state.context, indent: state.indent, col: col, type: type }; }; var popContext = function(state) { state.indent = state.context.indent; return state.context = state.context.prev; }; var indentUnit = config.indentUnit; var curPunc; var funcs = wordRegexp(["abs", "acos", "allShortestPaths", "asin", "atan", "atan2", "avg", "ceil", "coalesce", "collect", "cos", "cot", "count", "degrees", "e", "endnode", "exp", "extract", "filter", "floor", "haversin", "head", "id", "keys", "labels", "last", "left", "length", "log", "log10", "lower", "ltrim", "max", "min", "node", "nodes", "percentileCont", "percentileDisc", "pi", "radians", "rand", "range", "reduce", "rel", "relationship", "relationships", "replace", "reverse", "right", "round", "rtrim", "shortestPath", "sign", "sin", "size", "split", "sqrt", "startnode", "stdev", "stdevp", "str", "substring", "sum", "tail", "tan", "timestamp", "toFloat", "toInt", "toString", "trim", "type", "upper"]); var preds = wordRegexp(["all", "and", "any", "contains", "exists", "has", "in", "none", "not", "or", "single", "xor"]); var keywords = wordRegexp(["as", "asc", "ascending", "assert", "by", "case", "commit", "constraint", "create", "csv", "cypher", "delete", "desc", "descending", "detach", "distinct", "drop", "else", "end", "ends", "explain", "false", "fieldterminator", "foreach", "from", "headers", "in", "index", "is", "join", "limit", "load", "match", "merge", "null", "on", "optional", "order", "periodic", "profile", "remove", "return", "scan", "set", "skip", "start", "starts", "then", "true", "union", "unique", "unwind", "using", "when", "where", "with", "call", "yield"]); var systemKeywords = wordRegexp(["access", "active", "assign", "all", "alter", "as", "catalog", "change", "copy", "create", "constraint", "constraints", "current", "database", "databases", "dbms", "default", "deny", "drop", "element", "elements", "exists", "from", "grant", "graph", "graphs", "if", "index", "indexes", "label", "labels", "management", "match", "name", "names", "new", "node", "nodes", "not", "of", "on", "or", "password", "populated", "privileges", "property", "read", "relationship", "relationships", "remove", "replace", "required", "revoke", "role", "roles", "set", "show", "start", "status", "stop", "suspended", "to", "traverse", "type", "types", "user", "users", "with", "write"]); var operatorChars = /[*+\-<>=&|~%^]/; return { startState: function(/*base*/) { return { tokenize: tokenBase, context: null, indent: 0, col: 0 }; }, token: function(stream, state) { if (stream.sol()) { if (state.context && (state.context.align == null)) { state.context.align = false; } state.indent = stream.indentation(); } if (stream.eatSpace()) { return null; } var style = state.tokenize(stream, state); if (style !== "comment" && state.context && (state.context.align == null) && state.context.type !== "pattern") { state.context.align = true; } if (curPunc === "(") { pushContext(state, ")", stream.column()); } else if (curPunc === "[") { pushContext(state, "]", stream.column()); } else if (curPunc === "{") { pushContext(state, "}", stream.column()); } else if (/[\]\}\)]/.test(curPunc)) { while (state.context && state.context.type === "pattern") { popContext(state); } if (state.context && curPunc === state.context.type) { popContext(state); } } else if (curPunc === "." && state.context && state.context.type === "pattern") { popContext(state); } else if (/atom|string|variable/.test(style) && state.context) { if (/[\}\]]/.test(state.context.type)) { pushContext(state, "pattern", stream.column()); } else if (state.context.type === "pattern" && !state.context.align) { state.context.align = true; state.context.col = stream.column(); } } return style; }, indent: function(state, textAfter) { var firstChar = textAfter && textAfter.charAt(0); var context = state.context; if (/[\]\}]/.test(firstChar)) { while (context && context.type === "pattern") { context = context.prev; } } var closing = context && firstChar === context.type; if (!context) return 0; if (context.type === "keywords") return CodeMirror.commands.newlineAndIndent; if (context.align) return context.col + (closing ? 0 : 1); return context.indent + (closing ? 0 : indentUnit); } }; }); CodeMirror.modeExtensions["cypher"] = { autoFormatLineBreaks: function(text) { var i, lines, reProcessedPortion; var lines = text.split("\n"); var reProcessedPortion = /\s+\b(return|where|order by|match|with|skip|limit|create|delete|set)\b\s/g; for (var i = 0; i < lines.length; i++) lines[i] = lines[i].replace(reProcessedPortion, " \n$1 ").trim(); return lines.join("\n"); } }; CodeMirror.defineMIME("application/x-cypher-query", "cypher"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("d", function(config, parserConfig) { var indentUnit = config.indentUnit, statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, keywords = parserConfig.keywords || {}, builtin = parserConfig.builtin || {}, blockKeywords = parserConfig.blockKeywords || {}, atoms = parserConfig.atoms || {}, hooks = parserConfig.hooks || {}, multiLineStrings = parserConfig.multiLineStrings; var isOperatorChar = /[+\-*&%=<>!?|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (ch == '"' || ch == "'" || ch == "`") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("+")) { state.tokenize = tokenNestedComment; return tokenNestedComment(stream, state); } if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "keyword"; } if (builtin.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "builtin"; } if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenNestedComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "+"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement") popContext(state); else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}", blockCommentStart: "/*", blockCommentEnd: "*/", blockCommentContinue: " * ", lineComment: "//", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var blockKeywords = "body catch class do else enum for foreach foreach_reverse if in interface mixin " + "out scope struct switch try union unittest version while with"; CodeMirror.defineMIME("text/x-d", { name: "d", keywords: words("abstract alias align asm assert auto break case cast cdouble cent cfloat const continue " + "debug default delegate delete deprecated export extern final finally function goto immutable " + "import inout invariant is lazy macro module new nothrow override package pragma private " + "protected public pure ref return shared short static super synchronized template this " + "throw typedef typeid typeof volatile __FILE__ __LINE__ __gshared __traits __vector __parameters " + blockKeywords), blockKeywords: words(blockKeywords), builtin: words("bool byte char creal dchar double float idouble ifloat int ireal long real short ubyte " + "ucent uint ulong ushort wchar wstring void size_t sizediff_t"), atoms: words("exit failure success true false null"), hooks: { "@": function(stream, _state) { stream.eatWhile(/[\w\$_]/); return "meta"; } } }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, clike); })(function(CodeMirror) { var keywords = ("this super static final const abstract class extends external factory " + "implements mixin get native set typedef with enum throw rethrow " + "assert break case continue default in return new deferred async await covariant " + "try catch finally do else for if switch while import library export " + "part of show hide is as extension on yield late required").split(" "); var blockKeywords = "try catch finally do else for if switch while".split(" "); var atoms = "true false null".split(" "); var builtins = "void bool num int double dynamic var String Null Never".split(" "); function set(words) { var obj = {}; for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function pushInterpolationStack(state) { (state.interpolationStack || (state.interpolationStack = [])).push(state.tokenize); } function popInterpolationStack(state) { return (state.interpolationStack || (state.interpolationStack = [])).pop(); } function sizeInterpolationStack(state) { return state.interpolationStack ? state.interpolationStack.length : 0; } CodeMirror.defineMIME("application/dart", { name: "clike", keywords: set(keywords), blockKeywords: set(blockKeywords), builtin: set(builtins), atoms: set(atoms), hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_\.]/); return "meta"; }, // custom string handling to deal with triple-quoted strings and string interpolation "'": function(stream, state) { return tokenString("'", stream, state, false); }, "\"": function(stream, state) { return tokenString("\"", stream, state, false); }, "r": function(stream, state) { var peek = stream.peek(); if (peek == "'" || peek == "\"") { return tokenString(stream.next(), stream, state, true); } return false; }, "}": function(_stream, state) { // "}" is end of interpolation, if interpolation stack is non-empty if (sizeInterpolationStack(state) > 0) { state.tokenize = popInterpolationStack(state); return null; } return false; }, "/": function(stream, state) { if (!stream.eat("*")) return false state.tokenize = tokenNestedComment(1); return state.tokenize(stream, state) }, token: function(stream, _, style) { if (style == "variable") { // Assume uppercase symbols are classes using variable-2 var isUpper = RegExp('^[_$]*[A-Z][a-zA-Z0-9_$]*$','g'); if (isUpper.test(stream.current())) { return 'variable-2'; } } } } }); function tokenString(quote, stream, state, raw) { var tripleQuoted = false; if (stream.eat(quote)) { if (stream.eat(quote)) tripleQuoted = true; else return "string"; //empty string } function tokenStringHelper(stream, state) { var escaped = false; while (!stream.eol()) { if (!raw && !escaped && stream.peek() == "$") { pushInterpolationStack(state); state.tokenize = tokenInterpolation; return "string"; } var next = stream.next(); if (next == quote && !escaped && (!tripleQuoted || stream.match(quote + quote))) { state.tokenize = null; break; } escaped = !raw && !escaped && next == "\\"; } return "string"; } state.tokenize = tokenStringHelper; return tokenStringHelper(stream, state); } function tokenInterpolation(stream, state) { stream.eat("$"); if (stream.eat("{")) { // let clike handle the content of ${...}, // we take over again when "}" appears (see hooks). state.tokenize = null; } else { state.tokenize = tokenInterpolationIdentifier; } return null; } function tokenInterpolationIdentifier(stream, state) { stream.eatWhile(/[\w_]/); state.tokenize = popInterpolationStack(state); return "variable"; } function tokenNestedComment(depth) { return function (stream, state) { var ch; while (ch = stream.next()) { if (ch == "*" && stream.eat("/")) { if (depth == 1) { state.tokenize = null; break } else { state.tokenize = tokenNestedComment(depth - 1); return state.tokenize(stream, state) } } else if (ch == "/" && stream.eat("*")) { state.tokenize = tokenNestedComment(depth + 1); return state.tokenize(stream, state) } } return "comment" } } CodeMirror.registerHelper("hintWords", "application/dart", keywords.concat(atoms).concat(builtins)); // This is needed to make loading through meta.js work. CodeMirror.defineMode("dart", function(conf) { return CodeMirror.getMode(conf, "application/dart"); }, "clike"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("diff", function() { var TOKEN_NAMES = { '+': 'positive', '-': 'negative', '@': 'meta' }; return { token: function(stream) { var tw_pos = stream.string.search(/[\t ]+?$/); if (!stream.sol() || tw_pos === 0) { stream.skipToEnd(); return ("error " + ( TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); } var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); if (tw_pos === -1) { stream.skipToEnd(); } else { stream.pos = tw_pos; } return token_name; } }; }); CodeMirror.defineMIME("text/x-diff", "diff"); }); }); var xml = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { var htmlConfig = { autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, 'track': true, 'wbr': true, 'menuitem': true}, implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, 'th': true, 'tr': true}, contextGrabbers: { 'dd': {'dd': true, 'dt': true}, 'dt': {'dd': true, 'dt': true}, 'li': {'li': true}, 'option': {'option': true, 'optgroup': true}, 'optgroup': {'optgroup': true}, 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, 'rp': {'rp': true, 'rt': true}, 'rt': {'rp': true, 'rt': true}, 'tbody': {'tbody': true, 'tfoot': true}, 'td': {'td': true, 'th': true}, 'tfoot': {'tbody': true}, 'th': {'td': true, 'th': true}, 'thead': {'tbody': true, 'tfoot': true}, 'tr': {'tr': true} }, doNotIndent: {"pre": true}, allowUnquoted: true, allowMissing: true, caseFold: true }; var xmlConfig = { autoSelfClosers: {}, implicitlyClosed: {}, contextGrabbers: {}, doNotIndent: {}, allowUnquoted: false, allowMissing: false, allowMissingTagName: false, caseFold: false }; CodeMirror.defineMode("xml", function(editorConf, config_) { var indentUnit = editorConf.indentUnit; var config = {}; var defaults = config_.htmlMode ? htmlConfig : xmlConfig; for (var prop in defaults) config[prop] = defaults[prop]; for (var prop in config_) config[prop] = config_[prop]; // Return variables for tokenizers var type, setStyle; function inText(stream, state) { function chain(parser) { state.tokenize = parser; return parser(stream, state); } var ch = stream.next(); if (ch == "<") { if (stream.eat("!")) { if (stream.eat("[")) { if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); else return null; } else if (stream.match("--")) { return chain(inBlock("comment", "-->")); } else if (stream.match("DOCTYPE", true, true)) { stream.eatWhile(/[\w\._\-]/); return chain(doctype(1)); } else { return null; } } else if (stream.eat("?")) { stream.eatWhile(/[\w\._\-]/); state.tokenize = inBlock("meta", "?>"); return "meta"; } else { type = stream.eat("/") ? "closeTag" : "openTag"; state.tokenize = inTag; return "tag bracket"; } } else if (ch == "&") { var ok; if (stream.eat("#")) { if (stream.eat("x")) { ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); } else { ok = stream.eatWhile(/[\d]/) && stream.eat(";"); } } else { ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); } return ok ? "atom" : "error"; } else { stream.eatWhile(/[^&<]/); return null; } } inText.isInText = true; function inTag(stream, state) { var ch = stream.next(); if (ch == ">" || (ch == "/" && stream.eat(">"))) { state.tokenize = inText; type = ch == ">" ? "endTag" : "selfcloseTag"; return "tag bracket"; } else if (ch == "=") { type = "equals"; return null; } else if (ch == "<") { state.tokenize = inText; state.state = baseState; state.tagName = state.tagStart = null; var next = state.tokenize(stream, state); return next ? next + " tag error" : "tag error"; } else if (/[\'\"]/.test(ch)) { state.tokenize = inAttribute(ch); state.stringStartCol = stream.column(); return state.tokenize(stream, state); } else { stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/); return "word"; } } function inAttribute(quote) { var closure = function(stream, state) { while (!stream.eol()) { if (stream.next() == quote) { state.tokenize = inTag; break; } } return "string"; }; closure.isInAttribute = true; return closure; } function inBlock(style, terminator) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = inText; break; } stream.next(); } return style; } } function doctype(depth) { return function(stream, state) { var ch; while ((ch = stream.next()) != null) { if (ch == "<") { state.tokenize = doctype(depth + 1); return state.tokenize(stream, state); } else if (ch == ">") { if (depth == 1) { state.tokenize = inText; break; } else { state.tokenize = doctype(depth - 1); return state.tokenize(stream, state); } } } return "meta"; }; } function Context(state, tagName, startOfLine) { this.prev = state.context; this.tagName = tagName; this.indent = state.indented; this.startOfLine = startOfLine; if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent)) this.noIndent = true; } function popContext(state) { if (state.context) state.context = state.context.prev; } function maybePopContext(state, nextTagName) { var parentTagName; while (true) { if (!state.context) { return; } parentTagName = state.context.tagName; if (!config.contextGrabbers.hasOwnProperty(parentTagName) || !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) { return; } popContext(state); } } function baseState(type, stream, state) { if (type == "openTag") { state.tagStart = stream.column(); return tagNameState; } else if (type == "closeTag") { return closeTagNameState; } else { return baseState; } } function tagNameState(type, stream, state) { if (type == "word") { state.tagName = stream.current(); setStyle = "tag"; return attrState; } else if (config.allowMissingTagName && type == "endTag") { setStyle = "tag bracket"; return attrState(type, stream, state); } else { setStyle = "error"; return tagNameState; } } function closeTagNameState(type, stream, state) { if (type == "word") { var tagName = stream.current(); if (state.context && state.context.tagName != tagName && config.implicitlyClosed.hasOwnProperty(state.context.tagName)) popContext(state); if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) { setStyle = "tag"; return closeState; } else { setStyle = "tag error"; return closeStateErr; } } else if (config.allowMissingTagName && type == "endTag") { setStyle = "tag bracket"; return closeState(type, stream, state); } else { setStyle = "error"; return closeStateErr; } } function closeState(type, _stream, state) { if (type != "endTag") { setStyle = "error"; return closeState; } popContext(state); return baseState; } function closeStateErr(type, stream, state) { setStyle = "error"; return closeState(type, stream, state); } function attrState(type, _stream, state) { if (type == "word") { setStyle = "attribute"; return attrEqState; } else if (type == "endTag" || type == "selfcloseTag") { var tagName = state.tagName, tagStart = state.tagStart; state.tagName = state.tagStart = null; if (type == "selfcloseTag" || config.autoSelfClosers.hasOwnProperty(tagName)) { maybePopContext(state, tagName); } else { maybePopContext(state, tagName); state.context = new Context(state, tagName, tagStart == state.indented); } return baseState; } setStyle = "error"; return attrState; } function attrEqState(type, stream, state) { if (type == "equals") return attrValueState; if (!config.allowMissing) setStyle = "error"; return attrState(type, stream, state); } function attrValueState(type, stream, state) { if (type == "string") return attrContinuedState; if (type == "word" && config.allowUnquoted) {setStyle = "string"; return attrState;} setStyle = "error"; return attrState(type, stream, state); } function attrContinuedState(type, stream, state) { if (type == "string") return attrContinuedState; return attrState(type, stream, state); } return { startState: function(baseIndent) { var state = {tokenize: inText, state: baseState, indented: baseIndent || 0, tagName: null, tagStart: null, context: null}; if (baseIndent != null) state.baseIndent = baseIndent; return state }, token: function(stream, state) { if (!state.tagName && stream.sol()) state.indented = stream.indentation(); if (stream.eatSpace()) return null; type = null; var style = state.tokenize(stream, state); if ((style || type) && style != "comment") { setStyle = null; state.state = state.state(type || style, stream, state); if (setStyle) style = setStyle == "error" ? style + " error" : setStyle; } return style; }, indent: function(state, textAfter, fullLine) { var context = state.context; // Indent multi-line strings (e.g. css). if (state.tokenize.isInAttribute) { if (state.tagStart == state.indented) return state.stringStartCol + 1; else return state.indented + indentUnit; } if (context && context.noIndent) return CodeMirror.Pass; if (state.tokenize != inTag && state.tokenize != inText) return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; // Indent the starts of attribute names. if (state.tagName) { if (config.multilineTagIndentPastTag !== false) return state.tagStart + state.tagName.length + 2; else return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1); } if (config.alignCDATA && /$/, blockCommentStart: "", configuration: config.htmlMode ? "html" : "xml", helperType: config.htmlMode ? "html" : "xml", skipAttribute: function(state) { if (state.state == attrValueState) state.state = attrState; }, xmlCurrentTag: function(state) { return state.tagName ? {name: state.tagName, close: state.type == "closeTag"} : null }, xmlCurrentContext: function(state) { var context = []; for (var cx = state.context; cx; cx = cx.prev) if (cx.tagName) context.push(cx.tagName); return context.reverse() } }; }); CodeMirror.defineMIME("text/xml", "xml"); CodeMirror.defineMIME("application/xml", "xml"); if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); }); }); var javascript = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("javascript", function(config, parserConfig) { var indentUnit = config.indentUnit; var statementIndent = parserConfig.statementIndent; var jsonldMode = parserConfig.jsonld; var jsonMode = parserConfig.json || jsonldMode; var isTS = parserConfig.typescript; var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; // Tokenizer var keywords = function(){ function kw(type) {return {type: type, style: "keyword"};} var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"), D = kw("keyword d"); var operator = kw("operator"), atom = {type: "atom", style: "atom"}; return { "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, "return": D, "break": D, "continue": D, "new": kw("new"), "delete": C, "void": C, "throw": C, "debugger": kw("debugger"), "var": kw("var"), "const": kw("var"), "let": kw("var"), "function": kw("function"), "catch": kw("catch"), "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), "in": operator, "typeof": operator, "instanceof": operator, "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, "this": kw("this"), "class": kw("class"), "super": kw("atom"), "yield": C, "export": kw("export"), "import": kw("import"), "extends": C, "await": C }; }(); var isOperatorChar = /[+\-*&%=<>!?|~^@]/; var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; function readRegexp(stream) { var escaped = false, next, inSet = false; while ((next = stream.next()) != null) { if (!escaped) { if (next == "/" && !inSet) return; if (next == "[") inSet = true; else if (inSet && next == "]") inSet = false; } escaped = !escaped && next == "\\"; } } // Used as scratch variables to communicate multiple values without // consing up tons of objects. var type, content; function ret(tp, style, cont) { type = tp; content = cont; return style; } function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "." && stream.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)) { return ret("number", "number"); } else if (ch == "." && stream.match("..")) { return ret("spread", "meta"); } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { return ret(ch); } else if (ch == "=" && stream.eat(">")) { return ret("=>", "operator"); } else if (ch == "0" && stream.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) { return ret("number", "number"); } else if (/\d/.test(ch)) { stream.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/); return ret("number", "number"); } else if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } else if (stream.eat("/")) { stream.skipToEnd(); return ret("comment", "comment"); } else if (expressionAllowed(stream, state, 1)) { readRegexp(stream); stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/); return ret("regexp", "string-2"); } else { stream.eat("="); return ret("operator", "operator", stream.current()); } } else if (ch == "`") { state.tokenize = tokenQuasi; return tokenQuasi(stream, state); } else if (ch == "#" && stream.peek() == "!") { stream.skipToEnd(); return ret("meta", "meta"); } else if (ch == "#" && stream.eatWhile(wordRE)) { return ret("variable", "property") } else if (ch == "<" && stream.match("!--") || (ch == "-" && stream.match("->") && !/\S/.test(stream.string.slice(0, stream.start)))) { stream.skipToEnd(); return ret("comment", "comment") } else if (isOperatorChar.test(ch)) { if (ch != ">" || !state.lexical || state.lexical.type != ">") { if (stream.eat("=")) { if (ch == "!" || ch == "=") stream.eat("="); } else if (/[<>*+\-|&?]/.test(ch)) { stream.eat(ch); if (ch == ">") stream.eat(ch); } } if (ch == "?" && stream.eat(".")) return ret(".") return ret("operator", "operator", stream.current()); } else if (wordRE.test(ch)) { stream.eatWhile(wordRE); var word = stream.current(); if (state.lastType != ".") { if (keywords.propertyIsEnumerable(word)) { var kw = keywords[word]; return ret(kw.type, kw.style, word) } if (word == "async" && stream.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/, false)) return ret("async", "keyword", word) } return ret("variable", "variable", word) } } function tokenString(quote) { return function(stream, state) { var escaped = false, next; if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ state.tokenize = tokenBase; return ret("jsonld-keyword", "meta"); } while ((next = stream.next()) != null) { if (next == quote && !escaped) break; escaped = !escaped && next == "\\"; } if (!escaped) state.tokenize = tokenBase; return ret("string", "string"); }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } function tokenQuasi(stream, state) { var escaped = false, next; while ((next = stream.next()) != null) { if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { state.tokenize = tokenBase; break; } escaped = !escaped && next == "\\"; } return ret("quasi", "string-2", stream.current()); } var brackets = "([{}])"; // This is a crude lookahead trick to try and notice that we're // parsing the argument patterns for a fat-arrow function before we // actually hit the arrow token. It only works if the arrow is on // the same line as the arguments and there's no strange noise // (comments) in between. Fallback is to only notice when we hit the // arrow, and not declare the arguments as locals for the arrow // body. function findFatArrow(stream, state) { if (state.fatArrowAt) state.fatArrowAt = null; var arrow = stream.string.indexOf("=>", stream.start); if (arrow < 0) return; if (isTS) { // Try to skip TypeScript return type declarations after the arguments var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow)); if (m) arrow = m.index; } var depth = 0, sawSomething = false; for (var pos = arrow - 1; pos >= 0; --pos) { var ch = stream.string.charAt(pos); var bracket = brackets.indexOf(ch); if (bracket >= 0 && bracket < 3) { if (!depth) { ++pos; break; } if (--depth == 0) { if (ch == "(") sawSomething = true; break; } } else if (bracket >= 3 && bracket < 6) { ++depth; } else if (wordRE.test(ch)) { sawSomething = true; } else if (/["'\/`]/.test(ch)) { for (;; --pos) { if (pos == 0) return var next = stream.string.charAt(pos - 1); if (next == ch && stream.string.charAt(pos - 2) != "\\") { pos--; break } } } else if (sawSomething && !depth) { ++pos; break; } } if (sawSomething && !depth) state.fatArrowAt = pos; } // Parser var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true}; function JSLexical(indented, column, type, align, prev, info) { this.indented = indented; this.column = column; this.type = type; this.prev = prev; this.info = info; if (align != null) this.align = align; } function inScope(state, varname) { for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; for (var cx = state.context; cx; cx = cx.prev) { for (var v = cx.vars; v; v = v.next) if (v.name == varname) return true; } } function parseJS(state, style, type, content, stream) { var cc = state.cc; // Communicate our context to the combinators. // (Less wasteful than consing up a hundred closures on every call.) cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; while(true) { var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; if (combinator(type, content)) { while(cc.length && cc[cc.length - 1].lex) cc.pop()(); if (cx.marked) return cx.marked; if (type == "variable" && inScope(state, content)) return "variable-2"; return style; } } } // Combinator utils var cx = {state: null, column: null, marked: null, cc: null}; function pass() { for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function inList(name, list) { for (var v = list; v; v = v.next) if (v.name == name) return true return false; } function register(varname) { var state = cx.state; cx.marked = "def"; if (state.context) { if (state.lexical.info == "var" && state.context && state.context.block) { // FIXME function decls are also not block scoped var newContext = registerVarScoped(varname, state.context); if (newContext != null) { state.context = newContext; return } } else if (!inList(varname, state.localVars)) { state.localVars = new Var(varname, state.localVars); return } } // Fall through means this is global if (parserConfig.globalVars && !inList(varname, state.globalVars)) state.globalVars = new Var(varname, state.globalVars); } function registerVarScoped(varname, context) { if (!context) { return null } else if (context.block) { var inner = registerVarScoped(varname, context.prev); if (!inner) return null if (inner == context.prev) return context return new Context(inner, context.vars, true) } else if (inList(varname, context.vars)) { return context } else { return new Context(context.prev, new Var(varname, context.vars), false) } } function isModifier(name) { return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly" } // Combinators function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block; } function Var(name, next) { this.name = name; this.next = next; } var defaultVars = new Var("this", new Var("arguments", null)); function pushcontext() { cx.state.context = new Context(cx.state.context, cx.state.localVars, false); cx.state.localVars = defaultVars; } function pushblockcontext() { cx.state.context = new Context(cx.state.context, cx.state.localVars, true); cx.state.localVars = null; } function popcontext() { cx.state.localVars = cx.state.context.vars; cx.state.context = cx.state.context.prev; } popcontext.lex = true; function pushlex(type, info) { var result = function() { var state = cx.state, indent = state.indented; if (state.lexical.type == "stat") indent = state.lexical.indented; else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) indent = outer.indented; state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); }; result.lex = true; return result; } function poplex() { var state = cx.state; if (state.lexical.prev) { if (state.lexical.type == ")") state.indented = state.lexical.indented; state.lexical = state.lexical.prev; } } poplex.lex = true; function expect(wanted) { function exp(type) { if (type == wanted) return cont(); else if (wanted == ";" || type == "}" || type == ")" || type == "]") return pass(); else return cont(exp); } return exp; } function statement(type, value) { if (type == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex); if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex); if (type == "keyword b") return cont(pushlex("form"), statement, poplex); if (type == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex); if (type == "debugger") return cont(expect(";")); if (type == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext); if (type == ";") return cont(); if (type == "if") { if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) cx.state.cc.pop()(); return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse); } if (type == "function") return cont(functiondef); if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); if (type == "class" || (isTS && value == "interface")) { cx.marked = "keyword"; return cont(pushlex("form", type == "class" ? type : value), className, poplex) } if (type == "variable") { if (isTS && value == "declare") { cx.marked = "keyword"; return cont(statement) } else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) { cx.marked = "keyword"; if (value == "enum") return cont(enumdef); else if (value == "type") return cont(typename, expect("operator"), typeexpr, expect(";")); else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex) } else if (isTS && value == "namespace") { cx.marked = "keyword"; return cont(pushlex("form"), expression, statement, poplex) } else if (isTS && value == "abstract") { cx.marked = "keyword"; return cont(statement) } else { return cont(pushlex("stat"), maybelabel); } } if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext, block, poplex, poplex, popcontext); if (type == "case") return cont(expression, expect(":")); if (type == "default") return cont(expect(":")); if (type == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext); if (type == "export") return cont(pushlex("stat"), afterExport, poplex); if (type == "import") return cont(pushlex("stat"), afterImport, poplex); if (type == "async") return cont(statement) if (value == "@") return cont(expression, statement) return pass(pushlex("stat"), expression, expect(";"), poplex); } function maybeCatchBinding(type) { if (type == "(") return cont(funarg, expect(")")) } function expression(type, value) { return expressionInner(type, value, false); } function expressionNoComma(type, value) { return expressionInner(type, value, true); } function parenExpr(type) { if (type != "(") return pass() return cont(pushlex(")"), maybeexpression, expect(")"), poplex) } function expressionInner(type, value, noComma) { if (cx.state.fatArrowAt == cx.stream.start) { var body = noComma ? arrowBodyNoComma : arrowBody; if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext); else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); } var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); if (type == "function") return cont(functiondef, maybeop); if (type == "class" || (isTS && value == "interface")) { cx.marked = "keyword"; return cont(pushlex("form"), classExpression, poplex); } if (type == "keyword c" || type == "async") return cont(noComma ? expressionNoComma : expression); if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); if (type == "{") return contCommasep(objprop, "}", null, maybeop); if (type == "quasi") return pass(quasi, maybeop); if (type == "new") return cont(maybeTarget(noComma)); if (type == "import") return cont(expression); return cont(); } function maybeexpression(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expression); } function maybeoperatorComma(type, value) { if (type == ",") return cont(maybeexpression); return maybeoperatorNoComma(type, value, false); } function maybeoperatorNoComma(type, value, noComma) { var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; var expr = noComma == false ? expression : expressionNoComma; if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); if (type == "operator") { if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me); if (isTS && value == "<" && cx.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/, false)) return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me); if (value == "?") return cont(expression, expect(":"), expr); return cont(expr); } if (type == "quasi") { return pass(quasi, me); } if (type == ";") return; if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); if (type == ".") return cont(property, me); if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); if (isTS && value == "as") { cx.marked = "keyword"; return cont(typeexpr, me) } if (type == "regexp") { cx.state.lastType = cx.marked = "operator"; cx.stream.backUp(cx.stream.pos - cx.stream.start - 1); return cont(expr) } } function quasi(type, value) { if (type != "quasi") return pass(); if (value.slice(value.length - 2) != "${") return cont(quasi); return cont(expression, continueQuasi); } function continueQuasi(type) { if (type == "}") { cx.marked = "string-2"; cx.state.tokenize = tokenQuasi; return cont(quasi); } } function arrowBody(type) { findFatArrow(cx.stream, cx.state); return pass(type == "{" ? statement : expression); } function arrowBodyNoComma(type) { findFatArrow(cx.stream, cx.state); return pass(type == "{" ? statement : expressionNoComma); } function maybeTarget(noComma) { return function(type) { if (type == ".") return cont(noComma ? targetNoComma : target); else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma) else return pass(noComma ? expressionNoComma : expression); }; } function target(_, value) { if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); } } function targetNoComma(_, value) { if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); } } function maybelabel(type) { if (type == ":") return cont(poplex, statement); return pass(maybeoperatorComma, expect(";"), poplex); } function property(type) { if (type == "variable") {cx.marked = "property"; return cont();} } function objprop(type, value) { if (type == "async") { cx.marked = "property"; return cont(objprop); } else if (type == "variable" || cx.style == "keyword") { cx.marked = "property"; if (value == "get" || value == "set") return cont(getterSetter); var m; // Work around fat-arrow-detection complication for detecting typescript typed arrow params if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false))) cx.state.fatArrowAt = cx.stream.pos + m[0].length; return cont(afterprop); } else if (type == "number" || type == "string") { cx.marked = jsonldMode ? "property" : (cx.style + " property"); return cont(afterprop); } else if (type == "jsonld-keyword") { return cont(afterprop); } else if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(objprop) } else if (type == "[") { return cont(expression, maybetype, expect("]"), afterprop); } else if (type == "spread") { return cont(expressionNoComma, afterprop); } else if (value == "*") { cx.marked = "keyword"; return cont(objprop); } else if (type == ":") { return pass(afterprop) } } function getterSetter(type) { if (type != "variable") return pass(afterprop); cx.marked = "property"; return cont(functiondef); } function afterprop(type) { if (type == ":") return cont(expressionNoComma); if (type == "(") return pass(functiondef); } function commasep(what, end, sep) { function proceed(type, value) { if (sep ? sep.indexOf(type) > -1 : type == ",") { var lex = cx.state.lexical; if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; return cont(function(type, value) { if (type == end || value == end) return pass() return pass(what) }, proceed); } if (type == end || value == end) return cont(); if (sep && sep.indexOf(";") > -1) return pass(what) return cont(expect(end)); } return function(type, value) { if (type == end || value == end) return cont(); return pass(what, proceed); }; } function contCommasep(what, end, info) { for (var i = 3; i < arguments.length; i++) cx.cc.push(arguments[i]); return cont(pushlex(end, info), commasep(what, end), poplex); } function block(type) { if (type == "}") return cont(); return pass(statement, block); } function maybetype(type, value) { if (isTS) { if (type == ":") return cont(typeexpr); if (value == "?") return cont(maybetype); } } function maybetypeOrIn(type, value) { if (isTS && (type == ":" || value == "in")) return cont(typeexpr) } function mayberettype(type) { if (isTS && type == ":") { if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr) else return cont(typeexpr) } } function isKW(_, value) { if (value == "is") { cx.marked = "keyword"; return cont() } } function typeexpr(type, value) { if (value == "keyof" || value == "typeof" || value == "infer") { cx.marked = "keyword"; return cont(value == "typeof" ? expressionNoComma : typeexpr) } if (type == "variable" || value == "void") { cx.marked = "type"; return cont(afterType) } if (value == "|" || value == "&") return cont(typeexpr) if (type == "string" || type == "number" || type == "atom") return cont(afterType); if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType) if (type == "{") return cont(pushlex("}"), commasep(typeprop, "}", ",;"), poplex, afterType) if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType, afterType) if (type == "<") return cont(commasep(typeexpr, ">"), typeexpr) } function maybeReturnType(type) { if (type == "=>") return cont(typeexpr) } function typeprop(type, value) { if (type == "variable" || cx.style == "keyword") { cx.marked = "property"; return cont(typeprop) } else if (value == "?" || type == "number" || type == "string") { return cont(typeprop) } else if (type == ":") { return cont(typeexpr) } else if (type == "[") { return cont(expect("variable"), maybetypeOrIn, expect("]"), typeprop) } else if (type == "(") { return pass(functiondecl, typeprop) } } function typearg(type, value) { if (type == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg) if (type == ":") return cont(typeexpr) if (type == "spread") return cont(typearg) return pass(typeexpr) } function afterType(type, value) { if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType) if (value == "|" || type == "." || value == "&") return cont(typeexpr) if (type == "[") return cont(typeexpr, expect("]"), afterType) if (value == "extends" || value == "implements") { cx.marked = "keyword"; return cont(typeexpr) } if (value == "?") return cont(typeexpr, expect(":"), typeexpr) } function maybeTypeArgs(_, value) { if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType) } function typeparam() { return pass(typeexpr, maybeTypeDefault) } function maybeTypeDefault(_, value) { if (value == "=") return cont(typeexpr) } function vardef(_, value) { if (value == "enum") {cx.marked = "keyword"; return cont(enumdef)} return pass(pattern, maybetype, maybeAssign, vardefCont); } function pattern(type, value) { if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(pattern) } if (type == "variable") { register(value); return cont(); } if (type == "spread") return cont(pattern); if (type == "[") return contCommasep(eltpattern, "]"); if (type == "{") return contCommasep(proppattern, "}"); } function proppattern(type, value) { if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { register(value); return cont(maybeAssign); } if (type == "variable") cx.marked = "property"; if (type == "spread") return cont(pattern); if (type == "}") return pass(); if (type == "[") return cont(expression, expect(']'), expect(':'), proppattern); return cont(expect(":"), pattern, maybeAssign); } function eltpattern() { return pass(pattern, maybeAssign) } function maybeAssign(_type, value) { if (value == "=") return cont(expressionNoComma); } function vardefCont(type) { if (type == ",") return cont(vardef); } function maybeelse(type, value) { if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); } function forspec(type, value) { if (value == "await") return cont(forspec); if (type == "(") return cont(pushlex(")"), forspec1, poplex); } function forspec1(type) { if (type == "var") return cont(vardef, forspec2); if (type == "variable") return cont(forspec2); return pass(forspec2) } function forspec2(type, value) { if (type == ")") return cont() if (type == ";") return cont(forspec2) if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression, forspec2) } return pass(expression, forspec2) } function functiondef(type, value) { if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} if (type == "variable") {register(value); return cont(functiondef);} if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext); if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef) } function functiondecl(type, value) { if (value == "*") {cx.marked = "keyword"; return cont(functiondecl);} if (type == "variable") {register(value); return cont(functiondecl);} if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, popcontext); if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondecl) } function typename(type, value) { if (type == "keyword" || type == "variable") { cx.marked = "type"; return cont(typename) } else if (value == "<") { return cont(pushlex(">"), commasep(typeparam, ">"), poplex) } } function funarg(type, value) { if (value == "@") cont(expression, funarg); if (type == "spread") return cont(funarg); if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(funarg); } if (isTS && type == "this") return cont(maybetype, maybeAssign) return pass(pattern, maybetype, maybeAssign); } function classExpression(type, value) { // Class expressions may have an optional name. if (type == "variable") return className(type, value); return classNameAfter(type, value); } function className(type, value) { if (type == "variable") {register(value); return cont(classNameAfter);} } function classNameAfter(type, value) { if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter) if (value == "extends" || value == "implements" || (isTS && type == ",")) { if (value == "implements") cx.marked = "keyword"; return cont(isTS ? typeexpr : expression, classNameAfter); } if (type == "{") return cont(pushlex("}"), classBody, poplex); } function classBody(type, value) { if (type == "async" || (type == "variable" && (value == "static" || value == "get" || value == "set" || (isTS && isModifier(value))) && cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false))) { cx.marked = "keyword"; return cont(classBody); } if (type == "variable" || cx.style == "keyword") { cx.marked = "property"; return cont(classfield, classBody); } if (type == "number" || type == "string") return cont(classfield, classBody); if (type == "[") return cont(expression, maybetype, expect("]"), classfield, classBody) if (value == "*") { cx.marked = "keyword"; return cont(classBody); } if (isTS && type == "(") return pass(functiondecl, classBody) if (type == ";" || type == ",") return cont(classBody); if (type == "}") return cont(); if (value == "@") return cont(expression, classBody) } function classfield(type, value) { if (value == "?") return cont(classfield) if (type == ":") return cont(typeexpr, maybeAssign) if (value == "=") return cont(expressionNoComma) var context = cx.state.lexical.prev, isInterface = context && context.info == "interface"; return pass(isInterface ? functiondecl : functiondef) } function afterExport(type, value) { if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";")); return pass(statement); } function exportField(type, value) { if (value == "as") { cx.marked = "keyword"; return cont(expect("variable")); } if (type == "variable") return pass(expressionNoComma, exportField); } function afterImport(type) { if (type == "string") return cont(); if (type == "(") return pass(expression); return pass(importSpec, maybeMoreImports, maybeFrom); } function importSpec(type, value) { if (type == "{") return contCommasep(importSpec, "}"); if (type == "variable") register(value); if (value == "*") cx.marked = "keyword"; return cont(maybeAs); } function maybeMoreImports(type) { if (type == ",") return cont(importSpec, maybeMoreImports) } function maybeAs(_type, value) { if (value == "as") { cx.marked = "keyword"; return cont(importSpec); } } function maybeFrom(_type, value) { if (value == "from") { cx.marked = "keyword"; return cont(expression); } } function arrayLiteral(type) { if (type == "]") return cont(); return pass(commasep(expressionNoComma, "]")); } function enumdef() { return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex) } function enummember() { return pass(pattern, maybeAssign); } function isContinuedStatement(state, textAfter) { return state.lastType == "operator" || state.lastType == "," || isOperatorChar.test(textAfter.charAt(0)) || /[,.]/.test(textAfter.charAt(0)); } function expressionAllowed(stream, state, backUp) { return state.tokenize == tokenBase && /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) || (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0)))) } // Interface return { startState: function(basecolumn) { var state = { tokenize: tokenBase, lastType: "sof", cc: [], lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), localVars: parserConfig.localVars, context: parserConfig.localVars && new Context(null, null, false), indented: basecolumn || 0 }; if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; return state; }, token: function(stream, state) { if (stream.sol()) { if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; state.indented = stream.indentation(); findFatArrow(stream, state); } if (state.tokenize != tokenComment && stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (type == "comment") return style; state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; return parseJS(state, style, type, content, stream); }, indent: function(state, textAfter) { if (state.tokenize == tokenComment || state.tokenize == tokenQuasi) return CodeMirror.Pass; if (state.tokenize != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top; // Kludge to prevent 'maybelse' from blocking lexical scope pops if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { var c = state.cc[i]; if (c == poplex) lexical = lexical.prev; else if (c != maybeelse) break; } while ((lexical.type == "stat" || lexical.type == "form") && (firstChar == "}" || ((top = state.cc[state.cc.length - 1]) && (top == maybeoperatorComma || top == maybeoperatorNoComma) && !/^[,\.=+\-*:?[\(]/.test(textAfter)))) lexical = lexical.prev; if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") lexical = lexical.prev; var type = lexical.type, closing = firstChar == type; if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0); else if (type == "form" && firstChar == "{") return lexical.indented; else if (type == "form") return lexical.indented + indentUnit; else if (type == "stat") return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); else if (lexical.align) return lexical.column + (closing ? 0 : 1); else return lexical.indented + (closing ? 0 : indentUnit); }, electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, blockCommentStart: jsonMode ? null : "/*", blockCommentEnd: jsonMode ? null : "*/", blockCommentContinue: jsonMode ? null : " * ", lineComment: jsonMode ? null : "//", fold: "brace", closeBrackets: "()[]{}''\"\"``", helperType: jsonMode ? "json" : "javascript", jsonldMode: jsonldMode, jsonMode: jsonMode, expressionAllowed: expressionAllowed, skipExpression: function(state) { var top = state.cc[state.cc.length - 1]; if (top == expression || top == expressionNoComma) state.cc.pop(); } }; }); CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); CodeMirror.defineMIME("text/javascript", "javascript"); CodeMirror.defineMIME("text/ecmascript", "javascript"); CodeMirror.defineMIME("application/javascript", "javascript"); CodeMirror.defineMIME("application/x-javascript", "javascript"); CodeMirror.defineMIME("application/ecmascript", "javascript"); CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true}); CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); }); }); var htmlmixed = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, xml, javascript, css); })(function(CodeMirror) { var defaultTags = { script: [ ["lang", /(javascript|babel)/i, "javascript"], ["type", /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, "javascript"], ["type", /./, "text/plain"], [null, null, "javascript"] ], style: [ ["lang", /^css$/i, "css"], ["type", /^(text\/)?(x-)?(stylesheet|css)$/i, "css"], ["type", /./, "text/plain"], [null, null, "css"] ] }; function maybeBackup(stream, pat, style) { var cur = stream.current(), close = cur.search(pat); if (close > -1) { stream.backUp(cur.length - close); } else if (cur.match(/<\/?$/)) { stream.backUp(cur.length); if (!stream.match(pat, false)) stream.match(cur); } return style; } var attrRegexpCache = {}; function getAttrRegexp(attr) { var regexp = attrRegexpCache[attr]; if (regexp) return regexp; return attrRegexpCache[attr] = new RegExp("\\s+" + attr + "\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"); } function getAttrValue(text, attr) { var match = text.match(getAttrRegexp(attr)); return match ? /^\s*(.*?)\s*$/.exec(match[2])[1] : "" } function getTagRegexp(tagName, anchored) { return new RegExp((anchored ? "^" : "") + "<\/\s*" + tagName + "\s*>", "i"); } function addTags(from, to) { for (var tag in from) { var dest = to[tag] || (to[tag] = []); var source = from[tag]; for (var i = source.length - 1; i >= 0; i--) dest.unshift(source[i]); } } function findMatchingMode(tagInfo, tagText) { for (var i = 0; i < tagInfo.length; i++) { var spec = tagInfo[i]; if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2]; } } CodeMirror.defineMode("htmlmixed", function (config, parserConfig) { var htmlMode = CodeMirror.getMode(config, { name: "xml", htmlMode: true, multilineTagIndentFactor: parserConfig.multilineTagIndentFactor, multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag }); var tags = {}; var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes; addTags(defaultTags, tags); if (configTags) addTags(configTags, tags); if (configScript) for (var i = configScript.length - 1; i >= 0; i--) tags.script.unshift(["type", configScript[i].matches, configScript[i].mode]); function html(stream, state) { var style = htmlMode.token(stream, state.htmlState), tag = /\btag\b/.test(style), tagName; if (tag && !/[<>\s\/]/.test(stream.current()) && (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) && tags.hasOwnProperty(tagName)) { state.inTag = tagName + " "; } else if (state.inTag && tag && />$/.test(stream.current())) { var inTag = /^([\S]+) (.*)/.exec(state.inTag); state.inTag = null; var modeSpec = stream.current() == ">" && findMatchingMode(tags[inTag[1]], inTag[2]); var mode = CodeMirror.getMode(config, modeSpec); var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false); state.token = function (stream, state) { if (stream.match(endTagA, false)) { state.token = html; state.localState = state.localMode = null; return null; } return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState)); }; state.localMode = mode; state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, "", "")); } else if (state.inTag) { state.inTag += stream.current(); if (stream.eol()) state.inTag += " "; } return style; } return { startState: function () { var state = CodeMirror.startState(htmlMode); return {token: html, inTag: null, localMode: null, localState: null, htmlState: state}; }, copyState: function (state) { var local; if (state.localState) { local = CodeMirror.copyState(state.localMode, state.localState); } return {token: state.token, inTag: state.inTag, localMode: state.localMode, localState: local, htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; }, token: function (stream, state) { return state.token(stream, state); }, indent: function (state, textAfter, line) { if (!state.localMode || /^\s*<\//.test(textAfter)) return htmlMode.indent(state.htmlState, textAfter, line); else if (state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line); else return CodeMirror.Pass; }, innerMode: function (state) { return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode}; } }; }, "xml", "javascript", "css"); CodeMirror.defineMIME("text/html", "htmlmixed"); }); }); var overlay = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Utility function that allows modes to be combined. The mode given // as the base argument takes care of most of the normal mode // functionality, but a second (typically simple) mode is used, which // can override the style of text. Both modes get to parse all of the // text, but when both assign a non-null style to a piece of code, the // overlay wins, unless the combine argument was true and not overridden, // or state.overlay.combineTokens was true, in which case the styles are // combined. (function(mod) { mod(codemirror); })(function(CodeMirror) { }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, htmlmixed, overlay); })(function(CodeMirror) { CodeMirror.defineMode("django:inner", function() { var keywords = ["block", "endblock", "for", "endfor", "true", "false", "filter", "endfilter", "loop", "none", "self", "super", "if", "elif", "endif", "as", "else", "import", "with", "endwith", "without", "context", "ifequal", "endifequal", "ifnotequal", "endifnotequal", "extends", "include", "load", "comment", "endcomment", "empty", "url", "static", "trans", "blocktrans", "endblocktrans", "now", "regroup", "lorem", "ifchanged", "endifchanged", "firstof", "debug", "cycle", "csrf_token", "autoescape", "endautoescape", "spaceless", "endspaceless", "ssi", "templatetag", "verbatim", "endverbatim", "widthratio"], filters = ["add", "addslashes", "capfirst", "center", "cut", "date", "default", "default_if_none", "dictsort", "dictsortreversed", "divisibleby", "escape", "escapejs", "filesizeformat", "first", "floatformat", "force_escape", "get_digit", "iriencode", "join", "last", "length", "length_is", "linebreaks", "linebreaksbr", "linenumbers", "ljust", "lower", "make_list", "phone2numeric", "pluralize", "pprint", "random", "removetags", "rjust", "safe", "safeseq", "slice", "slugify", "stringformat", "striptags", "time", "timesince", "timeuntil", "title", "truncatechars", "truncatechars_html", "truncatewords", "truncatewords_html", "unordered_list", "upper", "urlencode", "urlize", "urlizetrunc", "wordcount", "wordwrap", "yesno"], operators = ["==", "!=", "<", ">", "<=", ">="], wordOperators = ["in", "not", "or", "and"]; keywords = new RegExp("^\\b(" + keywords.join("|") + ")\\b"); filters = new RegExp("^\\b(" + filters.join("|") + ")\\b"); operators = new RegExp("^\\b(" + operators.join("|") + ")\\b"); wordOperators = new RegExp("^\\b(" + wordOperators.join("|") + ")\\b"); // We have to return "null" instead of null, in order to avoid string // styling as the default, when using Django templates inside HTML // element attributes function tokenBase (stream, state) { // Attempt to identify a variable, template or comment tag respectively if (stream.match("{{")) { state.tokenize = inVariable; return "tag"; } else if (stream.match("{%")) { state.tokenize = inTag; return "tag"; } else if (stream.match("{#")) { state.tokenize = inComment; return "comment"; } // Ignore completely any stream series that do not match the // Django template opening tags. while (stream.next() != null && !stream.match(/\{[{%#]/, false)) {} return null; } // A string can be included in either single or double quotes (this is // the delimiter). Mark everything as a string until the start delimiter // occurs again. function inString (delimiter, previousTokenizer) { return function (stream, state) { if (!state.escapeNext && stream.eat(delimiter)) { state.tokenize = previousTokenizer; } else { if (state.escapeNext) { state.escapeNext = false; } var ch = stream.next(); // Take into account the backslash for escaping characters, such as // the string delimiter. if (ch == "\\") { state.escapeNext = true; } } return "string"; }; } // Apply Django template variable syntax highlighting function inVariable (stream, state) { // Attempt to match a dot that precedes a property if (state.waitDot) { state.waitDot = false; if (stream.peek() != ".") { return "null"; } // Dot followed by a non-word character should be considered an error. if (stream.match(/\.\W+/)) { return "error"; } else if (stream.eat(".")) { state.waitProperty = true; return "null"; } else { throw Error ("Unexpected error while waiting for property."); } } // Attempt to match a pipe that precedes a filter if (state.waitPipe) { state.waitPipe = false; if (stream.peek() != "|") { return "null"; } // Pipe followed by a non-word character should be considered an error. if (stream.match(/\.\W+/)) { return "error"; } else if (stream.eat("|")) { state.waitFilter = true; return "null"; } else { throw Error ("Unexpected error while waiting for filter."); } } // Highlight properties if (state.waitProperty) { state.waitProperty = false; if (stream.match(/\b(\w+)\b/)) { state.waitDot = true; // A property can be followed by another property state.waitPipe = true; // A property can be followed by a filter return "property"; } } // Highlight filters if (state.waitFilter) { state.waitFilter = false; if (stream.match(filters)) { return "variable-2"; } } // Ignore all white spaces if (stream.eatSpace()) { state.waitProperty = false; return "null"; } // Identify numbers if (stream.match(/\b\d+(\.\d+)?\b/)) { return "number"; } // Identify strings if (stream.match("'")) { state.tokenize = inString("'", state.tokenize); return "string"; } else if (stream.match('"')) { state.tokenize = inString('"', state.tokenize); return "string"; } // Attempt to find the variable if (stream.match(/\b(\w+)\b/) && !state.foundVariable) { state.waitDot = true; state.waitPipe = true; // A property can be followed by a filter return "variable"; } // If found closing tag reset if (stream.match("}}")) { state.waitProperty = null; state.waitFilter = null; state.waitDot = null; state.waitPipe = null; state.tokenize = tokenBase; return "tag"; } // If nothing was found, advance to the next character stream.next(); return "null"; } function inTag (stream, state) { // Attempt to match a dot that precedes a property if (state.waitDot) { state.waitDot = false; if (stream.peek() != ".") { return "null"; } // Dot followed by a non-word character should be considered an error. if (stream.match(/\.\W+/)) { return "error"; } else if (stream.eat(".")) { state.waitProperty = true; return "null"; } else { throw Error ("Unexpected error while waiting for property."); } } // Attempt to match a pipe that precedes a filter if (state.waitPipe) { state.waitPipe = false; if (stream.peek() != "|") { return "null"; } // Pipe followed by a non-word character should be considered an error. if (stream.match(/\.\W+/)) { return "error"; } else if (stream.eat("|")) { state.waitFilter = true; return "null"; } else { throw Error ("Unexpected error while waiting for filter."); } } // Highlight properties if (state.waitProperty) { state.waitProperty = false; if (stream.match(/\b(\w+)\b/)) { state.waitDot = true; // A property can be followed by another property state.waitPipe = true; // A property can be followed by a filter return "property"; } } // Highlight filters if (state.waitFilter) { state.waitFilter = false; if (stream.match(filters)) { return "variable-2"; } } // Ignore all white spaces if (stream.eatSpace()) { state.waitProperty = false; return "null"; } // Identify numbers if (stream.match(/\b\d+(\.\d+)?\b/)) { return "number"; } // Identify strings if (stream.match("'")) { state.tokenize = inString("'", state.tokenize); return "string"; } else if (stream.match('"')) { state.tokenize = inString('"', state.tokenize); return "string"; } // Attempt to match an operator if (stream.match(operators)) { return "operator"; } // Attempt to match a word operator if (stream.match(wordOperators)) { return "keyword"; } // Attempt to match a keyword var keywordMatch = stream.match(keywords); if (keywordMatch) { if (keywordMatch[0] == "comment") { state.blockCommentTag = true; } return "keyword"; } // Attempt to match a variable if (stream.match(/\b(\w+)\b/)) { state.waitDot = true; state.waitPipe = true; // A property can be followed by a filter return "variable"; } // If found closing tag reset if (stream.match("%}")) { state.waitProperty = null; state.waitFilter = null; state.waitDot = null; state.waitPipe = null; // If the tag that closes is a block comment tag, we want to mark the // following code as comment, until the tag closes. if (state.blockCommentTag) { state.blockCommentTag = false; // Release the "lock" state.tokenize = inBlockComment; } else { state.tokenize = tokenBase; } return "tag"; } // If nothing was found, advance to the next character stream.next(); return "null"; } // Mark everything as comment inside the tag and the tag itself. function inComment (stream, state) { if (stream.match(/^.*?#\}/)) state.tokenize = tokenBase; else stream.skipToEnd(); return "comment"; } // Mark everything as a comment until the `blockcomment` tag closes. function inBlockComment (stream, state) { if (stream.match(/\{%\s*endcomment\s*%\}/, false)) { state.tokenize = inTag; stream.match("{%"); return "tag"; } else { stream.next(); return "comment"; } } return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { return state.tokenize(stream, state); }, blockCommentStart: "{% comment %}", blockCommentEnd: "{% endcomment %}" }; }); CodeMirror.defineMode("django", function(config) { var htmlBase = CodeMirror.getMode(config, "text/html"); var djangoInner = CodeMirror.getMode(config, "django:inner"); return CodeMirror.overlayMode(htmlBase, djangoInner); }); CodeMirror.defineMIME("text/x-django", "django"); }); }); var simple = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineSimpleMode = function(name, states) { CodeMirror.defineMode(name, function(config) { return CodeMirror.simpleMode(config, states); }); }; CodeMirror.simpleMode = function(config, states) { ensureState(states, "start"); var states_ = {}, meta = states.meta || {}, hasIndentation = false; for (var state in states) if (state != meta && states.hasOwnProperty(state)) { var list = states_[state] = [], orig = states[state]; for (var i = 0; i < orig.length; i++) { var data = orig[i]; list.push(new Rule(data, states)); if (data.indent || data.dedent) hasIndentation = true; } } var mode = { startState: function() { return {state: "start", pending: null, local: null, localState: null, indent: hasIndentation ? [] : null}; }, copyState: function(state) { var s = {state: state.state, pending: state.pending, local: state.local, localState: null, indent: state.indent && state.indent.slice(0)}; if (state.localState) s.localState = CodeMirror.copyState(state.local.mode, state.localState); if (state.stack) s.stack = state.stack.slice(0); for (var pers = state.persistentStates; pers; pers = pers.next) s.persistentStates = {mode: pers.mode, spec: pers.spec, state: pers.state == state.localState ? s.localState : CodeMirror.copyState(pers.mode, pers.state), next: s.persistentStates}; return s; }, token: tokenFunction(states_, config), innerMode: function(state) { return state.local && {mode: state.local.mode, state: state.localState}; }, indent: indentFunction(states_, meta) }; if (meta) for (var prop in meta) if (meta.hasOwnProperty(prop)) mode[prop] = meta[prop]; return mode; }; function ensureState(states, name) { if (!states.hasOwnProperty(name)) throw new Error("Undefined state " + name + " in simple mode"); } function toRegex(val, caret) { if (!val) return /(?:)/; var flags = ""; if (val instanceof RegExp) { if (val.ignoreCase) flags = "i"; val = val.source; } else { val = String(val); } return new RegExp((caret === false ? "" : "^") + "(?:" + val + ")", flags); } function asToken(val) { if (!val) return null; if (val.apply) return val if (typeof val == "string") return val.replace(/\./g, " "); var result = []; for (var i = 0; i < val.length; i++) result.push(val[i] && val[i].replace(/\./g, " ")); return result; } function Rule(data, states) { if (data.next || data.push) ensureState(states, data.next || data.push); this.regex = toRegex(data.regex); this.token = asToken(data.token); this.data = data; } function tokenFunction(states, config) { return function(stream, state) { if (state.pending) { var pend = state.pending.shift(); if (state.pending.length == 0) state.pending = null; stream.pos += pend.text.length; return pend.token; } if (state.local) { if (state.local.end && stream.match(state.local.end)) { var tok = state.local.endToken || null; state.local = state.localState = null; return tok; } else { var tok = state.local.mode.token(stream, state.localState), m; if (state.local.endScan && (m = state.local.endScan.exec(stream.current()))) stream.pos = stream.start + m.index; return tok; } } var curState = states[state.state]; for (var i = 0; i < curState.length; i++) { var rule = curState[i]; var matches = (!rule.data.sol || stream.sol()) && stream.match(rule.regex); if (matches) { if (rule.data.next) { state.state = rule.data.next; } else if (rule.data.push) { (state.stack || (state.stack = [])).push(state.state); state.state = rule.data.push; } else if (rule.data.pop && state.stack && state.stack.length) { state.state = state.stack.pop(); } if (rule.data.mode) enterLocalMode(config, state, rule.data.mode, rule.token); if (rule.data.indent) state.indent.push(stream.indentation() + config.indentUnit); if (rule.data.dedent) state.indent.pop(); var token = rule.token; if (token && token.apply) token = token(matches); if (matches.length > 2 && rule.token && typeof rule.token != "string") { state.pending = []; for (var j = 2; j < matches.length; j++) if (matches[j]) state.pending.push({text: matches[j], token: rule.token[j - 1]}); stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0)); return token[0]; } else if (token && token.join) { return token[0]; } else { return token; } } } stream.next(); return null; }; } function cmp(a, b) { if (a === b) return true; if (!a || typeof a != "object" || !b || typeof b != "object") return false; var props = 0; for (var prop in a) if (a.hasOwnProperty(prop)) { if (!b.hasOwnProperty(prop) || !cmp(a[prop], b[prop])) return false; props++; } for (var prop in b) if (b.hasOwnProperty(prop)) props--; return props == 0; } function enterLocalMode(config, state, spec, token) { var pers; if (spec.persistent) for (var p = state.persistentStates; p && !pers; p = p.next) if (spec.spec ? cmp(spec.spec, p.spec) : spec.mode == p.mode) pers = p; var mode = pers ? pers.mode : spec.mode || CodeMirror.getMode(config, spec.spec); var lState = pers ? pers.state : CodeMirror.startState(mode); if (spec.persistent && !pers) state.persistentStates = {mode: mode, spec: spec.spec, state: lState, next: state.persistentStates}; state.localState = lState; state.local = {mode: mode, end: spec.end && toRegex(spec.end), endScan: spec.end && spec.forceEnd !== false && toRegex(spec.end, false), endToken: token && token.join ? token[token.length - 1] : token}; } function indexOf(val, arr) { for (var i = 0; i < arr.length; i++) if (arr[i] === val) return true; } function indentFunction(states, meta) { return function(state, textAfter, line) { if (state.local && state.local.mode.indent) return state.local.mode.indent(state.localState, textAfter, line); if (state.indent == null || state.local || meta.dontIndentStates && indexOf(state.state, meta.dontIndentStates) > -1) return CodeMirror.Pass; var pos = state.indent.length - 1, rules = states[state.state]; scan: for (;;) { for (var i = 0; i < rules.length; i++) { var rule = rules[i]; if (rule.data.dedent && rule.data.dedentIfLineStart !== false) { var m = rule.regex.exec(textAfter); if (m && m[0]) { pos--; if (rule.next || rule.push) rules = states[rule.next || rule.push]; textAfter = textAfter.slice(m[0].length); continue scan; } } } break; } return pos < 0 ? 0 : state.indent[pos]; }; } }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, simple); })(function(CodeMirror) { var from = "from"; var fromRegex = new RegExp("^(\\s*)\\b(" + from + ")\\b", "i"); var shells = ["run", "cmd", "entrypoint", "shell"]; var shellsAsArrayRegex = new RegExp("^(\\s*)(" + shells.join('|') + ")(\\s+\\[)", "i"); var expose = "expose"; var exposeRegex = new RegExp("^(\\s*)(" + expose + ")(\\s+)", "i"); var others = [ "arg", "from", "maintainer", "label", "env", "add", "copy", "volume", "user", "workdir", "onbuild", "stopsignal", "healthcheck", "shell" ]; // Collect all Dockerfile directives var instructions = [from, expose].concat(shells).concat(others), instructionRegex = "(" + instructions.join('|') + ")", instructionOnlyLine = new RegExp("^(\\s*)" + instructionRegex + "(\\s*)(#.*)?$", "i"), instructionWithArguments = new RegExp("^(\\s*)" + instructionRegex + "(\\s+)", "i"); CodeMirror.defineSimpleMode("dockerfile", { start: [ // Block comment: This is a line starting with a comment { regex: /^\s*#.*$/, sol: true, token: "comment" }, { regex: fromRegex, token: [null, "keyword"], sol: true, next: "from" }, // Highlight an instruction without any arguments (for convenience) { regex: instructionOnlyLine, token: [null, "keyword", null, "error"], sol: true }, { regex: shellsAsArrayRegex, token: [null, "keyword", null], sol: true, next: "array" }, { regex: exposeRegex, token: [null, "keyword", null], sol: true, next: "expose" }, // Highlight an instruction followed by arguments { regex: instructionWithArguments, token: [null, "keyword", null], sol: true, next: "arguments" }, { regex: /./, token: null } ], from: [ { regex: /\s*$/, token: null, next: "start" }, { // Line comment without instruction arguments is an error regex: /(\s*)(#.*)$/, token: [null, "error"], next: "start" }, { regex: /(\s*\S+\s+)(as)/i, token: [null, "keyword"], next: "start" }, // Fail safe return to start { token: null, next: "start" } ], single: [ { regex: /(?:[^\\']|\\.)/, token: "string" }, { regex: /'/, token: "string", pop: true } ], double: [ { regex: /(?:[^\\"]|\\.)/, token: "string" }, { regex: /"/, token: "string", pop: true } ], array: [ { regex: /\]/, token: null, next: "start" }, { regex: /"(?:[^\\"]|\\.)*"?/, token: "string" } ], expose: [ { regex: /\d+$/, token: "number", next: "start" }, { regex: /[^\d]+$/, token: null, next: "start" }, { regex: /\d+/, token: "number" }, { regex: /[^\d]+/, token: null }, // Fail safe return to start { token: null, next: "start" } ], arguments: [ { regex: /^\s*#.*$/, sol: true, token: "comment" }, { regex: /"(?:[^\\"]|\\.)*"?$/, token: "string", next: "start" }, { regex: /"/, token: "string", push: "double" }, { regex: /'(?:[^\\']|\\.)*'?$/, token: "string", next: "start" }, { regex: /'/, token: "string", push: "single" }, { regex: /[^#"']+[\\`]$/, token: null }, { regex: /[^#"']+$/, token: null, next: "start" }, { regex: /[^#"']+/, token: null }, // Fail safe return to start { token: null, next: "start" } ], meta: { lineComment: "#" } }); CodeMirror.defineMIME("text/x-dockerfile", "dockerfile"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /* DTD mode Ported to CodeMirror by Peter Kroon Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues GitHub: @peterkroon */ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("dtd", function(config) { var indentUnit = config.indentUnit, type; function ret(style, tp) {type = tp; return style;} function tokenBase(stream, state) { var ch = stream.next(); if (ch == "<" && stream.eat("!") ) { if (stream.eatWhile(/[\-]/)) { state.tokenize = tokenSGMLComment; return tokenSGMLComment(stream, state); } else if (stream.eatWhile(/[\w]/)) return ret("keyword", "doindent"); } else if (ch == "<" && stream.eat("?")) { //xml declaration state.tokenize = inBlock("meta", "?>"); return ret("meta", ch); } else if (ch == "#" && stream.eatWhile(/[\w]/)) return ret("atom", "tag"); else if (ch == "|") return ret("keyword", "seperator"); else if (ch.match(/[\(\)\[\]\-\.,\+\?>]/)) return ret(null, ch);//if(ch === ">") return ret(null, "endtag"); else else if (ch.match(/[\[\]]/)) return ret("rule", ch); else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (stream.eatWhile(/[a-zA-Z\?\+\d]/)) { var sc = stream.current(); if( sc.substr(sc.length-1,sc.length).match(/\?|\+/) !== null )stream.backUp(1); return ret("tag", "tag"); } else if (ch == "%" || ch == "*" ) return ret("number", "number"); else { stream.eatWhile(/[\w\\\-_%.{,]/); return ret(null, null); } } function tokenSGMLComment(stream, state) { var dashes = 0, ch; while ((ch = stream.next()) != null) { if (dashes >= 2 && ch == ">") { state.tokenize = tokenBase; break; } dashes = (ch == "-") ? dashes + 1 : 0; } return ret("comment", "comment"); } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return ret("string", "tag"); }; } function inBlock(style, terminator) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = tokenBase; break; } stream.next(); } return style; }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, stack: []}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); var context = state.stack[state.stack.length-1]; if (stream.current() == "[" || type === "doindent" || type == "[") state.stack.push("rule"); else if (type === "endtag") state.stack[state.stack.length-1] = "endtag"; else if (stream.current() == "]" || type == "]" || (type == ">" && context == "rule")) state.stack.pop(); else if (type == "[") state.stack.push("["); return style; }, indent: function(state, textAfter) { var n = state.stack.length; if( textAfter.match(/\]\s+|\]/) )n=n-1; else if(textAfter.substr(textAfter.length-1, textAfter.length) === ">"){ if(textAfter.substr(0,1) === "<") ; else if( type == "doindent" && textAfter.length > 1 ) ; else if( type == "doindent")n--; else if( type == ">" && textAfter.length > 1) ; else if( type == "tag" && textAfter !== ">") ; else if( type == "tag" && state.stack[state.stack.length-1] == "rule")n--; else if( type == "tag")n++; else if( textAfter === ">" && state.stack[state.stack.length-1] == "rule" && type === ">")n--; else if( textAfter === ">" && state.stack[state.stack.length-1] == "rule") ; else if( textAfter.substr(0,1) !== "<" && textAfter.substr(0,1) === ">" )n=n-1; else if( textAfter === ">") ; else n=n-1; //over rule them all if(type == null || type == "]")n--; } return state.baseIndent + n * indentUnit; }, electricChars: "]>" }; }); CodeMirror.defineMIME("application/xml-dtd", "dtd"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { function forEach(arr, f) { for (var i = 0; i < arr.length; i++) f(arr[i], i); } function some(arr, f) { for (var i = 0; i < arr.length; i++) if (f(arr[i], i)) return true return false } CodeMirror.defineMode("dylan", function(_config) { // Words var words = { // Words that introduce unnamed definitions like "define interface" unnamedDefinition: ["interface"], // Words that introduce simple named definitions like "define library" namedDefinition: ["module", "library", "macro", "C-struct", "C-union", "C-function", "C-callable-wrapper" ], // Words that introduce type definitions like "define class". // These are also parameterized like "define method" and are // appended to otherParameterizedDefinitionWords typeParameterizedDefinition: ["class", "C-subtype", "C-mapped-subtype"], // Words that introduce trickier definitions like "define method". // These require special definitions to be added to startExpressions otherParameterizedDefinition: ["method", "function", "C-variable", "C-address" ], // Words that introduce module constant definitions. // These must also be simple definitions and are // appended to otherSimpleDefinitionWords constantSimpleDefinition: ["constant"], // Words that introduce module variable definitions. // These must also be simple definitions and are // appended to otherSimpleDefinitionWords variableSimpleDefinition: ["variable"], // Other words that introduce simple definitions // (without implicit bodies). otherSimpleDefinition: ["generic", "domain", "C-pointer-type", "table" ], // Words that begin statements with implicit bodies. statement: ["if", "block", "begin", "method", "case", "for", "select", "when", "unless", "until", "while", "iterate", "profiling", "dynamic-bind" ], // Patterns that act as separators in compound statements. // This may include any general pattern that must be indented // specially. separator: ["finally", "exception", "cleanup", "else", "elseif", "afterwards" ], // Keywords that do not require special indentation handling, // but which should be highlighted other: ["above", "below", "by", "from", "handler", "in", "instance", "let", "local", "otherwise", "slot", "subclass", "then", "to", "keyed-by", "virtual" ], // Condition signaling function calls signalingCalls: ["signal", "error", "cerror", "break", "check-type", "abort" ] }; words["otherDefinition"] = words["unnamedDefinition"] .concat(words["namedDefinition"]) .concat(words["otherParameterizedDefinition"]); words["definition"] = words["typeParameterizedDefinition"] .concat(words["otherDefinition"]); words["parameterizedDefinition"] = words["typeParameterizedDefinition"] .concat(words["otherParameterizedDefinition"]); words["simpleDefinition"] = words["constantSimpleDefinition"] .concat(words["variableSimpleDefinition"]) .concat(words["otherSimpleDefinition"]); words["keyword"] = words["statement"] .concat(words["separator"]) .concat(words["other"]); // Patterns var symbolPattern = "[-_a-zA-Z?!*@<>$%]+"; var symbol = new RegExp("^" + symbolPattern); var patterns = { // Symbols with special syntax symbolKeyword: symbolPattern + ":", symbolClass: "<" + symbolPattern + ">", symbolGlobal: "\\*" + symbolPattern + "\\*", symbolConstant: "\\$" + symbolPattern }; var patternStyles = { symbolKeyword: "atom", symbolClass: "tag", symbolGlobal: "variable-2", symbolConstant: "variable-3" }; // Compile all patterns to regular expressions for (var patternName in patterns) if (patterns.hasOwnProperty(patternName)) patterns[patternName] = new RegExp("^" + patterns[patternName]); // Names beginning "with-" and "without-" are commonly // used as statement macro patterns["keyword"] = [/^with(?:out)?-[-_a-zA-Z?!*@<>$%]+/]; var styles = {}; styles["keyword"] = "keyword"; styles["definition"] = "def"; styles["simpleDefinition"] = "def"; styles["signalingCalls"] = "builtin"; // protected words lookup table var wordLookup = {}; var styleLookup = {}; forEach([ "keyword", "definition", "simpleDefinition", "signalingCalls" ], function(type) { forEach(words[type], function(word) { wordLookup[word] = type; styleLookup[word] = styles[type]; }); }); function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { // String var ch = stream.peek(); if (ch == "'" || ch == '"') { stream.next(); return chain(stream, state, tokenString(ch, "string")); } // Comment else if (ch == "/") { stream.next(); if (stream.eat("*")) { return chain(stream, state, tokenComment); } else if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } stream.backUp(1); } // Decimal else if (/[+\-\d\.]/.test(ch)) { if (stream.match(/^[+-]?[0-9]*\.[0-9]*([esdx][+-]?[0-9]+)?/i) || stream.match(/^[+-]?[0-9]+([esdx][+-]?[0-9]+)/i) || stream.match(/^[+-]?\d+/)) { return "number"; } } // Hash else if (ch == "#") { stream.next(); // Symbol with string syntax ch = stream.peek(); if (ch == '"') { stream.next(); return chain(stream, state, tokenString('"', "string")); } // Binary number else if (ch == "b") { stream.next(); stream.eatWhile(/[01]/); return "number"; } // Hex number else if (ch == "x") { stream.next(); stream.eatWhile(/[\da-f]/i); return "number"; } // Octal number else if (ch == "o") { stream.next(); stream.eatWhile(/[0-7]/); return "number"; } // Token concatenation in macros else if (ch == '#') { stream.next(); return "punctuation"; } // Sequence literals else if ((ch == '[') || (ch == '(')) { stream.next(); return "bracket"; // Hash symbol } else if (stream.match(/f|t|all-keys|include|key|next|rest/i)) { return "atom"; } else { stream.eatWhile(/[-a-zA-Z]/); return "error"; } } else if (ch == "~") { stream.next(); ch = stream.peek(); if (ch == "=") { stream.next(); ch = stream.peek(); if (ch == "=") { stream.next(); return "operator"; } return "operator"; } return "operator"; } else if (ch == ":") { stream.next(); ch = stream.peek(); if (ch == "=") { stream.next(); return "operator"; } else if (ch == ":") { stream.next(); return "punctuation"; } } else if ("[](){}".indexOf(ch) != -1) { stream.next(); return "bracket"; } else if (".,".indexOf(ch) != -1) { stream.next(); return "punctuation"; } else if (stream.match("end")) { return "keyword"; } for (var name in patterns) { if (patterns.hasOwnProperty(name)) { var pattern = patterns[name]; if ((pattern instanceof Array && some(pattern, function(p) { return stream.match(p); })) || stream.match(pattern)) return patternStyles[name]; } } if (/[+\-*\/^=<>&|]/.test(ch)) { stream.next(); return "operator"; } if (stream.match("define")) { return "def"; } else { stream.eatWhile(/[\w\-]/); // Keyword if (wordLookup.hasOwnProperty(stream.current())) { return styleLookup[stream.current()]; } else if (stream.current().match(symbol)) { return "variable"; } else { stream.next(); return "variable-2"; } } } function tokenComment(stream, state) { var maybeEnd = false, maybeNested = false, nestedCount = 0, ch; while ((ch = stream.next())) { if (ch == "/" && maybeEnd) { if (nestedCount > 0) { nestedCount--; } else { state.tokenize = tokenBase; break; } } else if (ch == "*" && maybeNested) { nestedCount++; } maybeEnd = (ch == "*"); maybeNested = (ch == "/"); } return "comment"; } function tokenString(quote, style) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !escaped) { state.tokenize = tokenBase; } return style; }; } // Interface return { startState: function() { return { tokenize: tokenBase, currentIndent: 0 }; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; }, blockCommentStart: "/*", blockCommentEnd: "*/" }; }); CodeMirror.defineMIME("text/x-dylan", "dylan"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("ebnf", function (config) { var commentType = {slash: 0, parenthesis: 1}; var stateType = {comment: 0, _string: 1, characterClass: 2}; var bracesMode = null; if (config.bracesMode) bracesMode = CodeMirror.getMode(config, config.bracesMode); return { startState: function () { return { stringType: null, commentType: null, braced: 0, lhs: true, localState: null, stack: [], inDefinition: false }; }, token: function (stream, state) { if (!stream) return; //check for state changes if (state.stack.length === 0) { //strings if ((stream.peek() == '"') || (stream.peek() == "'")) { state.stringType = stream.peek(); stream.next(); // Skip quote state.stack.unshift(stateType._string); } else if (stream.match(/^\/\*/)) { //comments starting with /* state.stack.unshift(stateType.comment); state.commentType = commentType.slash; } else if (stream.match(/^\(\*/)) { //comments starting with (* state.stack.unshift(stateType.comment); state.commentType = commentType.parenthesis; } } //return state //stack has switch (state.stack[0]) { case stateType._string: while (state.stack[0] === stateType._string && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.stack.shift(); // Clear flag } else if (stream.peek() === "\\") { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return state.lhs ? "property string" : "string"; // Token style case stateType.comment: while (state.stack[0] === stateType.comment && !stream.eol()) { if (state.commentType === commentType.slash && stream.match(/\*\//)) { state.stack.shift(); // Clear flag state.commentType = null; } else if (state.commentType === commentType.parenthesis && stream.match(/\*\)/)) { state.stack.shift(); // Clear flag state.commentType = null; } else { stream.match(/^.[^\*]*/); } } return "comment"; case stateType.characterClass: while (state.stack[0] === stateType.characterClass && !stream.eol()) { if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) { state.stack.shift(); } } return "operator"; } var peek = stream.peek(); if (bracesMode !== null && (state.braced || peek === "{")) { if (state.localState === null) state.localState = CodeMirror.startState(bracesMode); var token = bracesMode.token(stream, state.localState), text = stream.current(); if (!token) { for (var i = 0; i < text.length; i++) { if (text[i] === "{") { if (state.braced === 0) { token = "matchingbracket"; } state.braced++; } else if (text[i] === "}") { state.braced--; if (state.braced === 0) { token = "matchingbracket"; } } } } return token; } //no stack switch (peek) { case "[": stream.next(); state.stack.unshift(stateType.characterClass); return "bracket"; case ":": case "|": case ";": stream.next(); return "operator"; case "%": if (stream.match("%%")) { return "header"; } else if (stream.match(/[%][A-Za-z]+/)) { return "keyword"; } else if (stream.match(/[%][}]/)) { return "matchingbracket"; } break; case "/": if (stream.match(/[\/][A-Za-z]+/)) { return "keyword"; } case "\\": if (stream.match(/[\][a-z]+/)) { return "string-2"; } case ".": if (stream.match(".")) { return "atom"; } case "*": case "-": case "+": case "^": if (stream.match(peek)) { return "atom"; } case "$": if (stream.match("$$")) { return "builtin"; } else if (stream.match(/[$][0-9]+/)) { return "variable-3"; } case "<": if (stream.match(/<<[a-zA-Z_]+>>/)) { return "builtin"; } } if (stream.match(/^\/\//)) { stream.skipToEnd(); return "comment"; } else if (stream.match(/return/)) { return "operator"; } else if (stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/)) { if (stream.match(/(?=[\(.])/)) { return "variable"; } else if (stream.match(/(?=[\s\n]*[:=])/)) { return "def"; } return "variable-2"; } else if (["[", "]", "(", ")"].indexOf(stream.peek()) != -1) { stream.next(); return "bracket"; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }); CodeMirror.defineMIME("text/x-ebnf", "ebnf"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("ecl", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function metaHook(stream, state) { if (!state.startOfLine) return false; stream.skipToEnd(); return "meta"; } var indentUnit = config.indentUnit; var keyword = words("abs acos allnodes ascii asin asstring atan atan2 ave case choose choosen choosesets clustersize combine correlation cos cosh count covariance cron dataset dedup define denormalize distribute distributed distribution ebcdic enth error evaluate event eventextra eventname exists exp failcode failmessage fetch fromunicode getisvalid global graph group hash hash32 hash64 hashcrc hashmd5 having if index intformat isvalid iterate join keyunicode length library limit ln local log loop map matched matchlength matchposition matchtext matchunicode max merge mergejoin min nolocal nonempty normalize parse pipe power preload process project pull random range rank ranked realformat recordof regexfind regexreplace regroup rejected rollup round roundup row rowdiff sample set sin sinh sizeof soapcall sort sorted sqrt stepped stored sum table tan tanh thisnode topn tounicode transfer trim truncate typeof ungroup unicodeorder variance which workunit xmldecode xmlencode xmltext xmlunicode"); var variable = words("apply assert build buildindex evaluate fail keydiff keypatch loadxml nothor notify output parallel sequential soapcall wait"); var variable_2 = words("__compressed__ all and any as atmost before beginc++ best between case const counter csv descend encrypt end endc++ endmacro except exclusive expire export extend false few first flat from full function group header heading hole ifblock import in interface joined keep keyed last left limit load local locale lookup macro many maxcount maxlength min skew module named nocase noroot noscan nosort not of only opt or outer overwrite packed partition penalty physicallength pipe quote record relationship repeat return right scan self separator service shared skew skip sql store terminator thor threshold token transform trim true type unicodeorder unsorted validate virtual whole wild within xml xpath"); var variable_3 = words("ascii big_endian boolean data decimal ebcdic integer pattern qstring real record rule set of string token udecimal unicode unsigned varstring varunicode"); var builtin = words("checkpoint deprecated failcode failmessage failure global independent onwarning persist priority recovery stored success wait when"); var blockKeywords = words("catch class do else finally for if switch try while"); var atoms = words("true false null"); var hooks = {"#": metaHook}; var isOperatorChar = /[+\-*&%=<>!?|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_]/); var cur = stream.current().toLowerCase(); if (keyword.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "keyword"; } else if (variable.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "variable"; } else if (variable_2.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "variable-2"; } else if (variable_3.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "variable-3"; } else if (builtin.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "builtin"; } else { //Data types are of from KEYWORD## var i = cur.length - 1; while(i >= 0 && (!isNaN(cur[i]) || cur[i] == '_')) --i; if (i > 0) { var cur2 = cur.substr(0, i + 1); if (variable_3.propertyIsEnumerable(cur2)) { if (blockKeywords.propertyIsEnumerable(cur2)) curPunc = "newstatement"; return "variable-3"; } } } if (atoms.propertyIsEnumerable(cur)) return "atom"; return null; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return 0; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : indentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}" }; }); CodeMirror.defineMIME("text/x-ecl", "ecl"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("eiffel", function() { function wordObj(words) { var o = {}; for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; return o; } var keywords = wordObj([ 'note', 'across', 'when', 'variant', 'until', 'unique', 'undefine', 'then', 'strip', 'select', 'retry', 'rescue', 'require', 'rename', 'reference', 'redefine', 'prefix', 'once', 'old', 'obsolete', 'loop', 'local', 'like', 'is', 'inspect', 'infix', 'include', 'if', 'frozen', 'from', 'external', 'export', 'ensure', 'end', 'elseif', 'else', 'do', 'creation', 'create', 'check', 'alias', 'agent', 'separate', 'invariant', 'inherit', 'indexing', 'feature', 'expanded', 'deferred', 'class', 'Void', 'True', 'Result', 'Precursor', 'False', 'Current', 'create', 'attached', 'detachable', 'as', 'and', 'implies', 'not', 'or' ]); var operators = wordObj([":=", "and then","and", "or","<<",">>"]); function chain(newtok, stream, state) { state.tokenize.push(newtok); return newtok(stream, state); } function tokenBase(stream, state) { if (stream.eatSpace()) return null; var ch = stream.next(); if (ch == '"'||ch == "'") { return chain(readQuoted(ch, "string"), stream, state); } else if (ch == "-"&&stream.eat("-")) { stream.skipToEnd(); return "comment"; } else if (ch == ":"&&stream.eat("=")) { return "operator"; } else if (/[0-9]/.test(ch)) { stream.eatWhile(/[xXbBCc0-9\.]/); stream.eat(/[\?\!]/); return "ident"; } else if (/[a-zA-Z_0-9]/.test(ch)) { stream.eatWhile(/[a-zA-Z_0-9]/); stream.eat(/[\?\!]/); return "ident"; } else if (/[=+\-\/*^%<>~]/.test(ch)) { stream.eatWhile(/[=+\-\/*^%<>~]/); return "operator"; } else { return null; } } function readQuoted(quote, style, unescaped) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && (unescaped || !escaped)) { state.tokenize.pop(); break; } escaped = !escaped && ch == "%"; } return style; }; } return { startState: function() { return {tokenize: [tokenBase]}; }, token: function(stream, state) { var style = state.tokenize[state.tokenize.length-1](stream, state); if (style == "ident") { var word = stream.current(); style = keywords.propertyIsEnumerable(stream.current()) ? "keyword" : operators.propertyIsEnumerable(stream.current()) ? "operator" : /^[A-Z][A-Z_0-9]*$/g.test(word) ? "tag" : /^0[bB][0-1]+$/g.test(word) ? "number" : /^0[cC][0-7]+$/g.test(word) ? "number" : /^0[xX][a-fA-F0-9]+$/g.test(word) ? "number" : /^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(word) ? "number" : /^[0-9]+$/g.test(word) ? "number" : "variable"; } return style; }, lineComment: "--" }; }); CodeMirror.defineMIME("text/x-eiffel", "eiffel"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror Mode Elixir, copyright (c) by Marijn Haverbeke, Ian Walter, and // others. Distributed under an MIT license: http://codemirror.net/LICENSE. (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode('elixir', config => { const wordObj = words => { let o = {}; for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; return o }; const keywords = wordObj([ 'alias', 'case', 'cond', 'def', 'defmodule', 'defp', 'defstruct', 'defprotocol', 'defimpl', 'defmacro', 'quote', 'unquote', 'receive', 'fn', 'do', 'else', 'else if', 'end', 'false', 'if', 'in', 'next', 'rescue', 'for', 'true', 'unless', 'when', 'nil', 'raise', 'throw', 'try', 'catch', 'after', 'with', 'require', 'use', '__MODULE__', '__FILE__', '__DIR__', '__ENV__', '__CALLER__' ]); const indentWords = wordObj([ 'def', 'defmodule', 'defp', 'case', 'cond', 'rescue', 'try', 'catch', '->' ]); const dedentWords = wordObj(['end']); const matching = {'[': ']', '{': '}', '(': ')'}; let curPunc; const chain = (newtok, stream, state) => { state.tokenize.push(newtok); return newtok(stream, state) }; const tokenBase = (stream, state) => { if (stream.sol() && stream.match('"""') && stream.eol()) { state.tokenize.push(readBlockComment); return 'comment' } if (stream.eatSpace()) { return null } let ch = stream.next(); let m; if (ch === '\'' || ch === '"') { return chain(readQuoted(ch, 'string', ch === '"'), stream, state) } else if (ch === '/') { let currentIndex = stream.current().length; if (stream.skipTo('/')) { let searchTill = stream.current().length; let balance = 0; // balance brackets stream.backUp(stream.current().length - currentIndex); while (stream.current().length < searchTill) { const chchr = stream.next(); if (chchr === '(') { balance += 1; } else if (chchr === ')') { balance -= 1; } if (balance < 0) { break } } stream.backUp(stream.current().length - currentIndex); if (balance === 0) { return chain(readQuoted(ch, 'string-2', true), stream, state) } } return 'operator' } else if (ch === '%') { let style = 'string'; let embed = true; if (stream.eat('s')) { style = 'atom'; } else if (stream.eat(/[WQ]/)) { style = 'string'; } else if (stream.eat(/[r]/)) { style = 'string-2'; } else if (stream.eat(/[wxq]/)) { style = 'string'; embed = false; } let delim = stream.eat(/[^\w\s=]/); if (!delim) { return 'operator' } if (matching.propertyIsEnumerable(delim)) { delim = matching[delim]; } return chain(readQuoted(delim, style, embed, true), stream, state) } else if (ch === '#') { stream.skipToEnd(); return 'comment' } else if ( ch === '<' && (m = stream.match(/^<-?[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/)) ) { return chain(readHereDoc(m[1]), stream, state) } else if (ch === '0') { if (stream.eat('x')) { stream.eatWhile(/[\da-fA-F]/); } else if (stream.eat('b')) { stream.eatWhile(/[01]/); } else { stream.eatWhile(/[0-7]/); } return 'number' } else if (/\d/.test(ch)) { stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/); return 'number' } else if (ch === '?') { while (stream.match(/^\\[CM]-/)) {} if (stream.eat('\\')) { stream.eatWhile(/\w/); } else { stream.next(); } return 'string' } else if (ch === ':') { if (stream.eat('\'')) { return chain(readQuoted('\'', 'atom', false), stream, state) } if (stream.eat('"')) { return chain(readQuoted('"', 'atom', true), stream, state) } // :> :>> :< :<< are valid symbols if (stream.eat(/[\<\>]/)) { stream.eat(/[\<\>]/); return 'atom' } // :+ :- :/ :* :| :& :! are valid symbols if (stream.eat(/[\+\-\*\/\&\|\:\!]/)) { return 'atom' } // Symbols can't start by a digit if (stream.eat(/[a-zA-Z$@_\xa1-\uffff]/)) { stream.eatWhile(/[\w$\xa1-\uffff]/); // Only one ? ! = is allowed and only as the last character stream.eat(/[\?\!\=]/); return 'atom' } return 'operator' } else if (ch === '@' && stream.match(/^@?[a-zA-Z_\xa1-\uffff]/)) { stream.eat('@'); stream.eatWhile(/[\w\xa1-\uffff]/); return 'variable-2' } else if (ch === '$') { if (stream.eat(/[a-zA-Z_]/)) { stream.eatWhile(/[\w]/); } else if (stream.eat(/\d/)) { stream.eat(/\d/); } else { stream.next(); // Must be a special global like $: or $! } return 'variable-3' } else if (/[a-zA-Z_\xa1-\uffff]/.test(ch)) { stream.eatWhile(/[\w\xa1-\uffff]/); stream.eat(/[\?\!]/); if (stream.eat(':')) { return 'atom' } return 'ident' } else if ( ch === '|' && (state.varList || state.lastTok === '{' || state.lastTok === 'do') ) { curPunc = '|'; return null } else if (/[\(\)\[\]{}\\;]/.test(ch)) { curPunc = ch; return null } else if (ch === '-' && stream.eat('>')) { return 'arrow' } else if (ch === '|' && stream.eat('>')) { return 'pipe' } else if (/[=+\-\/*:\.^%<>~|]/.test(ch)) { if (ch === '.' && !stream.eatWhile(/[=+\-\/*:\.^%<>~|]/)) { curPunc = '.'; } return 'operator' } else { return null } }; const tokenBaseUntilBrace = depth => { if (!depth) { depth = 1; } return (stream, state) => { if (stream.peek() === '}') { if (depth === 1) { state.tokenize.pop(); return state.tokenize[state.tokenize.length - 1](stream, state) } else { state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth - 1); } } else if (stream.peek() === '{') { state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth + 1); } return tokenBase(stream, state) } }; const tokenBaseOnce = () => { let alreadyCalled = false; return (stream, state) => { if (alreadyCalled) { state.tokenize.pop(); return state.tokenize[state.tokenize.length - 1](stream, state) } alreadyCalled = true; return tokenBase(stream, state) } }; const readQuoted = (quote, style, embed, unescaped) => { return (stream, state) => { let escaped = false; let ch; if (state.context.type === 'read-quoted-paused') { state.context = state.context.prev; stream.eat('}'); } while ((ch = stream.next()) != null) { // eslint-disable-line if (ch === quote && (unescaped || !escaped)) { state.tokenize.pop(); break } if (embed && ch === '#' && !escaped) { if (stream.eat('{')) { if (quote === '}') { state.context = {prev: state.context, type: 'read-quoted-paused'}; } state.tokenize.push(tokenBaseUntilBrace()); break } else if (/[@\$]/.test(stream.peek())) { state.tokenize.push(tokenBaseOnce()); break } } escaped = !escaped && ch === '\\'; } return style } }; const readHereDoc = phrase => { return (stream, state) => { if (stream.match(phrase)) { state.tokenize.pop(); } else { stream.skipToEnd(); } return 'string' } }; const readBlockComment = (stream, state) => { if (stream.sol() && stream.match('"""') && stream.eol()) { state.tokenize.pop(); } stream.skipToEnd(); return 'comment' }; return { startState: () => { return { tokenize: [tokenBase], indented: 0, context: {type: 'top', indented: -config.indentUnit}, continuedLine: false, lastTok: null, varList: false } }, token: (stream, state) => { curPunc = null; // if (stream.sol()) { // state.indented = stream.indentation() // } let style = state.tokenize[state.tokenize.length - 1](stream, state); let kwtype; let thisTok = curPunc; if (style === 'ident') { let word = stream.current(); style = state.lastTok === '.' ? 'property' : keywords.propertyIsEnumerable(stream.current()) ? 'keyword' : /^[A-Z]/.test(word) ? 'tag' : (state.lastTok === 'def' || state.lastTok === 'class' || state.varList) ? 'def' : 'variable'; const isColumnIndent = stream.column() === stream.indentation(); if (style === 'keyword') { thisTok = word; if (indentWords.propertyIsEnumerable(word)) { kwtype = 'indent'; } else if (dedentWords.propertyIsEnumerable(word)) { kwtype = 'dedent'; } else if ((word === 'if' || word === 'unless') && isColumnIndent) { kwtype = 'indent'; } else if (word === 'do' && state.context.indented < state.indented) { kwtype = 'indent'; } } } if (curPunc || (style && style !== 'comment')) { state.lastTok = thisTok; } if (curPunc === '|') { state.varList = !state.varList; } if (kwtype === 'indent' || /[\(\[\{]/.test(curPunc)) { state.context = { prev: state.context, type: curPunc || style, indented: state.indented }; } else if ( (kwtype === 'dedent' || /[\)\]\}]/.test(curPunc)) && state.context.prev ) { state.context = state.context.prev; } if (stream.eol()) { state.continuedLine = (curPunc === '\\' || style === 'operator'); } return style }, // indent: (state, textAfter) => { // if (state.tokenize[state.tokenize.length - 1] !== tokenBase) { // return 0 // } // let firstChar = textAfter && textAfter.charAt(0) // let ct = state.context // let closing = ct.type === matching[firstChar] || // ct.type === 'keyword' && /^(?:end|until|else|else if|when|rescue)\b/.test(textAfter) // return ct.indented + (closing ? 0 : config.indentUnit) + // (state.continuedLine ? config.indentUnit : 0) // }, electricInput: /^\s*(?:end|rescue|else if|else|catch\})$/, lineComment: '#' } }); CodeMirror.defineMIME('text/x-elixir', 'elixir'); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("elm", function() { function switchState(source, setState, f) { setState(f); return f(source, setState); } var lowerRE = /[a-z]/; var upperRE = /[A-Z]/; var innerRE = /[a-zA-Z0-9_]/; var digitRE = /[0-9]/; var hexRE = /[0-9A-Fa-f]/; var symbolRE = /[-&*+.\\/<>=?^|:]/; var specialRE = /[(),[\]{}]/; var spacesRE = /[ \v\f]/; // newlines are handled in tokenizer function normal() { return function(source, setState) { if (source.eatWhile(spacesRE)) { return null; } var char = source.next(); if (specialRE.test(char)) { return (char === '{' && source.eat('-')) ? switchState(source, setState, chompMultiComment(1)) : (char === '[' && source.match('glsl|')) ? switchState(source, setState, chompGlsl) : 'builtin'; } if (char === '\'') { return switchState(source, setState, chompChar); } if (char === '"') { return source.eat('"') ? source.eat('"') ? switchState(source, setState, chompMultiString) : 'string' : switchState(source, setState, chompSingleString); } if (upperRE.test(char)) { source.eatWhile(innerRE); return 'variable-2'; } if (lowerRE.test(char)) { var isDef = source.pos === 1; source.eatWhile(innerRE); return isDef ? "def" : "variable"; } if (digitRE.test(char)) { if (char === '0') { if (source.eat(/[xX]/)) { source.eatWhile(hexRE); // should require at least 1 return "number"; } } else { source.eatWhile(digitRE); } if (source.eat('.')) { source.eatWhile(digitRE); // should require at least 1 } if (source.eat(/[eE]/)) { source.eat(/[-+]/); source.eatWhile(digitRE); // should require at least 1 } return "number"; } if (symbolRE.test(char)) { if (char === '-' && source.eat('-')) { source.skipToEnd(); return "comment"; } source.eatWhile(symbolRE); return "keyword"; } if (char === '_') { return "keyword"; } return "error"; } } function chompMultiComment(nest) { if (nest == 0) { return normal(); } return function(source, setState) { while (!source.eol()) { var char = source.next(); if (char == '{' && source.eat('-')) { ++nest; } else if (char == '-' && source.eat('}')) { --nest; if (nest === 0) { setState(normal()); return 'comment'; } } } setState(chompMultiComment(nest)); return 'comment'; } } function chompMultiString(source, setState) { while (!source.eol()) { var char = source.next(); if (char === '"' && source.eat('"') && source.eat('"')) { setState(normal()); return 'string'; } } return 'string'; } function chompSingleString(source, setState) { while (source.skipTo('\\"')) { source.next(); source.next(); } if (source.skipTo('"')) { source.next(); setState(normal()); return 'string'; } source.skipToEnd(); setState(normal()); return 'error'; } function chompChar(source, setState) { while (source.skipTo("\\'")) { source.next(); source.next(); } if (source.skipTo("'")) { source.next(); setState(normal()); return 'string'; } source.skipToEnd(); setState(normal()); return 'error'; } function chompGlsl(source, setState) { while (!source.eol()) { var char = source.next(); if (char === '|' && source.eat(']')) { setState(normal()); return 'string'; } } return 'string'; } var wellKnownWords = { case: 1, of: 1, as: 1, if: 1, then: 1, else: 1, let: 1, in: 1, type: 1, alias: 1, module: 1, where: 1, import: 1, exposing: 1, port: 1 }; return { startState: function () { return { f: normal() }; }, copyState: function (s) { return { f: s.f }; }, token: function(stream, state) { var type = state.f(stream, function(s) { state.f = s; }); var word = stream.current(); return (wellKnownWords.hasOwnProperty(word)) ? 'keyword' : type; } }; }); CodeMirror.defineMIME("text/x-elm", "elm"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /*jshint unused:true, eqnull:true, curly:true, bitwise:true */ /*jshint undef:true, latedef:true, trailing:true */ /*global CodeMirror:true */ // erlang mode. // tokenizer -> token types -> CodeMirror styles // tokenizer maintains a parse stack // indenter uses the parse stack // TODO indenter: // bit syntax // old guard/bif/conversion clashes (e.g. "float/1") // type/spec/opaque (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMIME("text/x-erlang", "erlang"); CodeMirror.defineMode("erlang", function(cmCfg) { ///////////////////////////////////////////////////////////////////////////// // constants var typeWords = [ "-type", "-spec", "-export_type", "-opaque"]; var keywordWords = [ "after","begin","catch","case","cond","end","fun","if", "let","of","query","receive","try","when"]; var separatorRE = /[\->,;]/; var separatorWords = [ "->",";",","]; var operatorAtomWords = [ "and","andalso","band","bnot","bor","bsl","bsr","bxor", "div","not","or","orelse","rem","xor"]; var operatorSymbolRE = /[\+\-\*\/<>=\|:!]/; var operatorSymbolWords = [ "=","+","-","*","/",">",">=","<","=<","=:=","==","=/=","/=","||","<-","!"]; var openParenRE = /[<\(\[\{]/; var openParenWords = [ "<<","(","[","{"]; var closeParenRE = /[>\)\]\}]/; var closeParenWords = [ "}","]",")",">>"]; var guardWords = [ "is_atom","is_binary","is_bitstring","is_boolean","is_float", "is_function","is_integer","is_list","is_number","is_pid", "is_port","is_record","is_reference","is_tuple", "atom","binary","bitstring","boolean","function","integer","list", "number","pid","port","record","reference","tuple"]; var bifWords = [ "abs","adler32","adler32_combine","alive","apply","atom_to_binary", "atom_to_list","binary_to_atom","binary_to_existing_atom", "binary_to_list","binary_to_term","bit_size","bitstring_to_list", "byte_size","check_process_code","contact_binary","crc32", "crc32_combine","date","decode_packet","delete_module", "disconnect_node","element","erase","exit","float","float_to_list", "garbage_collect","get","get_keys","group_leader","halt","hd", "integer_to_list","internal_bif","iolist_size","iolist_to_binary", "is_alive","is_atom","is_binary","is_bitstring","is_boolean", "is_float","is_function","is_integer","is_list","is_number","is_pid", "is_port","is_process_alive","is_record","is_reference","is_tuple", "length","link","list_to_atom","list_to_binary","list_to_bitstring", "list_to_existing_atom","list_to_float","list_to_integer", "list_to_pid","list_to_tuple","load_module","make_ref","module_loaded", "monitor_node","node","node_link","node_unlink","nodes","notalive", "now","open_port","pid_to_list","port_close","port_command", "port_connect","port_control","pre_loaded","process_flag", "process_info","processes","purge_module","put","register", "registered","round","self","setelement","size","spawn","spawn_link", "spawn_monitor","spawn_opt","split_binary","statistics", "term_to_binary","time","throw","tl","trunc","tuple_size", "tuple_to_list","unlink","unregister","whereis"]; // upper case: [A-Z] [Ø-Þ] [À-Ö] // lower case: [a-z] [ß-ö] [ø-ÿ] var anumRE = /[\w@Ø-ÞÀ-Öß-öø-ÿ]/; var escapesRE = /[0-7]{1,3}|[bdefnrstv\\"']|\^[a-zA-Z]|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}/; ///////////////////////////////////////////////////////////////////////////// // tokenizer function tokenizer(stream,state) { // in multi-line string if (state.in_string) { state.in_string = (!doubleQuote(stream)); return rval(state,stream,"string"); } // in multi-line atom if (state.in_atom) { state.in_atom = (!singleQuote(stream)); return rval(state,stream,"atom"); } // whitespace if (stream.eatSpace()) { return rval(state,stream,"whitespace"); } // attributes and type specs if (!peekToken(state) && stream.match(/-\s*[a-zß-öø-ÿ][\wØ-ÞÀ-Öß-öø-ÿ]*/)) { if (is_member(stream.current(),typeWords)) { return rval(state,stream,"type"); }else { return rval(state,stream,"attribute"); } } var ch = stream.next(); // comment if (ch == '%') { stream.skipToEnd(); return rval(state,stream,"comment"); } // colon if (ch == ":") { return rval(state,stream,"colon"); } // macro if (ch == '?') { stream.eatSpace(); stream.eatWhile(anumRE); return rval(state,stream,"macro"); } // record if (ch == "#") { stream.eatSpace(); stream.eatWhile(anumRE); return rval(state,stream,"record"); } // dollar escape if (ch == "$") { if (stream.next() == "\\" && !stream.match(escapesRE)) { return rval(state,stream,"error"); } return rval(state,stream,"number"); } // dot if (ch == ".") { return rval(state,stream,"dot"); } // quoted atom if (ch == '\'') { if (!(state.in_atom = (!singleQuote(stream)))) { if (stream.match(/\s*\/\s*[0-9]/,false)) { stream.match(/\s*\/\s*[0-9]/,true); return rval(state,stream,"fun"); // 'f'/0 style fun } if (stream.match(/\s*\(/,false) || stream.match(/\s*:/,false)) { return rval(state,stream,"function"); } } return rval(state,stream,"atom"); } // string if (ch == '"') { state.in_string = (!doubleQuote(stream)); return rval(state,stream,"string"); } // variable if (/[A-Z_Ø-ÞÀ-Ö]/.test(ch)) { stream.eatWhile(anumRE); return rval(state,stream,"variable"); } // atom/keyword/BIF/function if (/[a-z_ß-öø-ÿ]/.test(ch)) { stream.eatWhile(anumRE); if (stream.match(/\s*\/\s*[0-9]/,false)) { stream.match(/\s*\/\s*[0-9]/,true); return rval(state,stream,"fun"); // f/0 style fun } var w = stream.current(); if (is_member(w,keywordWords)) { return rval(state,stream,"keyword"); }else if (is_member(w,operatorAtomWords)) { return rval(state,stream,"operator"); }else if (stream.match(/\s*\(/,false)) { // 'put' and 'erlang:put' are bifs, 'foo:put' is not if (is_member(w,bifWords) && ((peekToken(state).token != ":") || (peekToken(state,2).token == "erlang"))) { return rval(state,stream,"builtin"); }else if (is_member(w,guardWords)) { return rval(state,stream,"guard"); }else { return rval(state,stream,"function"); } }else if (lookahead(stream) == ":") { if (w == "erlang") { return rval(state,stream,"builtin"); } else { return rval(state,stream,"function"); } }else if (is_member(w,["true","false"])) { return rval(state,stream,"boolean"); }else { return rval(state,stream,"atom"); } } // number var digitRE = /[0-9]/; var radixRE = /[0-9a-zA-Z]/; // 36#zZ style int if (digitRE.test(ch)) { stream.eatWhile(digitRE); if (stream.eat('#')) { // 36#aZ style integer if (!stream.eatWhile(radixRE)) { stream.backUp(1); //"36#" - syntax error } } else if (stream.eat('.')) { // float if (!stream.eatWhile(digitRE)) { stream.backUp(1); // "3." - probably end of function } else { if (stream.eat(/[eE]/)) { // float with exponent if (stream.eat(/[-+]/)) { if (!stream.eatWhile(digitRE)) { stream.backUp(2); // "2e-" - syntax error } } else { if (!stream.eatWhile(digitRE)) { stream.backUp(1); // "2e" - syntax error } } } } } return rval(state,stream,"number"); // normal integer } // open parens if (nongreedy(stream,openParenRE,openParenWords)) { return rval(state,stream,"open_paren"); } // close parens if (nongreedy(stream,closeParenRE,closeParenWords)) { return rval(state,stream,"close_paren"); } // separators if (greedy(stream,separatorRE,separatorWords)) { return rval(state,stream,"separator"); } // operators if (greedy(stream,operatorSymbolRE,operatorSymbolWords)) { return rval(state,stream,"operator"); } return rval(state,stream,null); } ///////////////////////////////////////////////////////////////////////////// // utilities function nongreedy(stream,re,words) { if (stream.current().length == 1 && re.test(stream.current())) { stream.backUp(1); while (re.test(stream.peek())) { stream.next(); if (is_member(stream.current(),words)) { return true; } } stream.backUp(stream.current().length-1); } return false; } function greedy(stream,re,words) { if (stream.current().length == 1 && re.test(stream.current())) { while (re.test(stream.peek())) { stream.next(); } while (0 < stream.current().length) { if (is_member(stream.current(),words)) { return true; }else { stream.backUp(1); } } stream.next(); } return false; } function doubleQuote(stream) { return quote(stream, '"', '\\'); } function singleQuote(stream) { return quote(stream,'\'','\\'); } function quote(stream,quoteChar,escapeChar) { while (!stream.eol()) { var ch = stream.next(); if (ch == quoteChar) { return true; }else if (ch == escapeChar) { stream.next(); } } return false; } function lookahead(stream) { var m = stream.match(/([\n\s]+|%[^\n]*\n)*(.)/,false); return m ? m.pop() : ""; } function is_member(element,list) { return (-1 < list.indexOf(element)); } function rval(state,stream,type) { // parse stack pushToken(state,realToken(type,stream)); // map erlang token type to CodeMirror style class // erlang -> CodeMirror tag switch (type) { case "atom": return "atom"; case "attribute": return "attribute"; case "boolean": return "atom"; case "builtin": return "builtin"; case "close_paren": return null; case "colon": return null; case "comment": return "comment"; case "dot": return null; case "error": return "error"; case "fun": return "meta"; case "function": return "tag"; case "guard": return "property"; case "keyword": return "keyword"; case "macro": return "variable-2"; case "number": return "number"; case "open_paren": return null; case "operator": return "operator"; case "record": return "bracket"; case "separator": return null; case "string": return "string"; case "type": return "def"; case "variable": return "variable"; default: return null; } } function aToken(tok,col,ind,typ) { return {token: tok, column: col, indent: ind, type: typ}; } function realToken(type,stream) { return aToken(stream.current(), stream.column(), stream.indentation(), type); } function fakeToken(type) { return aToken(type,0,0,type); } function peekToken(state,depth) { var len = state.tokenStack.length; var dep = (depth ? depth : 1); if (len < dep) { return false; }else { return state.tokenStack[len-dep]; } } function pushToken(state,token) { if (!(token.type == "comment" || token.type == "whitespace")) { state.tokenStack = maybe_drop_pre(state.tokenStack,token); state.tokenStack = maybe_drop_post(state.tokenStack); } } function maybe_drop_pre(s,token) { var last = s.length-1; if (0 < last && s[last].type === "record" && token.type === "dot") { s.pop(); }else if (0 < last && s[last].type === "group") { s.pop(); s.push(token); }else { s.push(token); } return s; } function maybe_drop_post(s) { if (!s.length) return s var last = s.length-1; if (s[last].type === "dot") { return []; } if (last > 1 && s[last].type === "fun" && s[last-1].token === "fun") { return s.slice(0,last-1); } switch (s[last].token) { case "}": return d(s,{g:["{"]}); case "]": return d(s,{i:["["]}); case ")": return d(s,{i:["("]}); case ">>": return d(s,{i:["<<"]}); case "end": return d(s,{i:["begin","case","fun","if","receive","try"]}); case ",": return d(s,{e:["begin","try","when","->", ",","(","[","{","<<"]}); case "->": return d(s,{r:["when"], m:["try","if","case","receive"]}); case ";": return d(s,{E:["case","fun","if","receive","try","when"]}); case "catch":return d(s,{e:["try"]}); case "of": return d(s,{e:["case"]}); case "after":return d(s,{e:["receive","try"]}); default: return s; } } function d(stack,tt) { // stack is a stack of Token objects. // tt is an object; {type:tokens} // type is a char, tokens is a list of token strings. // The function returns (possibly truncated) stack. // It will descend the stack, looking for a Token such that Token.token // is a member of tokens. If it does not find that, it will normally (but // see "E" below) return stack. If it does find a match, it will remove // all the Tokens between the top and the matched Token. // If type is "m", that is all it does. // If type is "i", it will also remove the matched Token and the top Token. // If type is "g", like "i", but add a fake "group" token at the top. // If type is "r", it will remove the matched Token, but not the top Token. // If type is "e", it will keep the matched Token but not the top Token. // If type is "E", it behaves as for type "e", except if there is no match, // in which case it will return an empty stack. for (var type in tt) { var len = stack.length-1; var tokens = tt[type]; for (var i = len-1; -1 < i ; i--) { if (is_member(stack[i].token,tokens)) { var ss = stack.slice(0,i); switch (type) { case "m": return ss.concat(stack[i]).concat(stack[len]); case "r": return ss.concat(stack[len]); case "i": return ss; case "g": return ss.concat(fakeToken("group")); case "E": return ss.concat(stack[i]); case "e": return ss.concat(stack[i]); } } } } return (type == "E" ? [] : stack); } ///////////////////////////////////////////////////////////////////////////// // indenter function indenter(state,textAfter) { var t; var unit = cmCfg.indentUnit; var wordAfter = wordafter(textAfter); var currT = peekToken(state,1); var prevT = peekToken(state,2); if (state.in_string || state.in_atom) { return CodeMirror.Pass; }else if (!prevT) { return 0; }else if (currT.token == "when") { return currT.column+unit; }else if (wordAfter === "when" && prevT.type === "function") { return prevT.indent+unit; }else if (wordAfter === "(" && currT.token === "fun") { return currT.column+3; }else if (wordAfter === "catch" && (t = getToken(state,["try"]))) { return t.column; }else if (is_member(wordAfter,["end","after","of"])) { t = getToken(state,["begin","case","fun","if","receive","try"]); return t ? t.column : CodeMirror.Pass; }else if (is_member(wordAfter,closeParenWords)) { t = getToken(state,openParenWords); return t ? t.column : CodeMirror.Pass; }else if (is_member(currT.token,[",","|","||"]) || is_member(wordAfter,[",","|","||"])) { t = postcommaToken(state); return t ? t.column+t.token.length : unit; }else if (currT.token == "->") { if (is_member(prevT.token, ["receive","case","if","try"])) { return prevT.column+unit+unit; }else { return prevT.column+unit; } }else if (is_member(currT.token,openParenWords)) { return currT.column+currT.token.length; }else { t = defaultToken(state); return truthy(t) ? t.column+unit : 0; } } function wordafter(str) { var m = str.match(/,|[a-z]+|\}|\]|\)|>>|\|+|\(/); return truthy(m) && (m.index === 0) ? m[0] : ""; } function postcommaToken(state) { var objs = state.tokenStack.slice(0,-1); var i = getTokenIndex(objs,"type",["open_paren"]); return truthy(objs[i]) ? objs[i] : false; } function defaultToken(state) { var objs = state.tokenStack; var stop = getTokenIndex(objs,"type",["open_paren","separator","keyword"]); var oper = getTokenIndex(objs,"type",["operator"]); if (truthy(stop) && truthy(oper) && stop < oper) { return objs[stop+1]; } else if (truthy(stop)) { return objs[stop]; } else { return false; } } function getToken(state,tokens) { var objs = state.tokenStack; var i = getTokenIndex(objs,"token",tokens); return truthy(objs[i]) ? objs[i] : false; } function getTokenIndex(objs,propname,propvals) { for (var i = objs.length-1; -1 < i ; i--) { if (is_member(objs[i][propname],propvals)) { return i; } } return false; } function truthy(x) { return (x !== false) && (x != null); } ///////////////////////////////////////////////////////////////////////////// // this object defines the mode return { startState: function() { return {tokenStack: [], in_string: false, in_atom: false}; }, token: function(stream, state) { return tokenizer(stream, state); }, indent: function(state, textAfter) { return indenter(state,textAfter); }, lineComment: "%" }; }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Factor syntax highlight - simple mode // // by Dimage Sapelkin (https://github.com/kerabromsmu) (function(mod) { mod(codemirror, simple); })(function(CodeMirror) { CodeMirror.defineSimpleMode("factor", { // The start state contains the rules that are intially used start: [ // comments {regex: /#?!.*/, token: "comment"}, // strings """, multiline --> state {regex: /"""/, token: "string", next: "string3"}, {regex: /(STRING:)(\s)/, token: ["keyword", null], next: "string2"}, {regex: /\S*?"/, token: "string", next: "string"}, // numbers: dec, hex, unicode, bin, fractional, complex {regex: /(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\-?\d+.?\d*)(?=\s)/, token: "number"}, //{regex: /[+-]?/} //fractional // definition: defining word, defined word, etc {regex: /((?:GENERIC)|\:?\:)(\s+)(\S+)(\s+)(\()/, token: ["keyword", null, "def", null, "bracket"], next: "stack"}, // method definition: defining word, type, defined word, etc {regex: /(M\:)(\s+)(\S+)(\s+)(\S+)/, token: ["keyword", null, "def", null, "tag"]}, // vocabulary using --> state {regex: /USING\:/, token: "keyword", next: "vocabulary"}, // vocabulary definition/use {regex: /(USE\:|IN\:)(\s+)(\S+)(?=\s|$)/, token: ["keyword", null, "tag"]}, // definition: a defining word, defined word {regex: /(\S+\:)(\s+)(\S+)(?=\s|$)/, token: ["keyword", null, "def"]}, // "keywords", incl. ; t f . [ ] { } defining words {regex: /(?:;|\\|t|f|if|loop|while|until|do|PRIVATE>| and the like {regex: /\S+[\)>\.\*\?]+(?=\s|$)/, token: "builtin"}, {regex: /[\)><]+\S+(?=\s|$)/, token: "builtin"}, // operators {regex: /(?:[\+\-\=\/\*<>])(?=\s|$)/, token: "keyword"}, // any id (?) {regex: /\S+/, token: "variable"}, {regex: /\s+|./, token: null} ], vocabulary: [ {regex: /;/, token: "keyword", next: "start"}, {regex: /\S+/, token: "tag"}, {regex: /\s+|./, token: null} ], string: [ {regex: /(?:[^\\]|\\.)*?"/, token: "string", next: "start"}, {regex: /.*/, token: "string"} ], string2: [ {regex: /^;/, token: "keyword", next: "start"}, {regex: /.*/, token: "string"} ], string3: [ {regex: /(?:[^\\]|\\.)*?"""/, token: "string", next: "start"}, {regex: /.*/, token: "string"} ], stack: [ {regex: /\)/, token: "bracket", next: "start"}, {regex: /--/, token: "bracket"}, {regex: /\S+/, token: "meta"}, {regex: /\s+|./, token: null} ], // The meta property contains global information about the mode. It // can contain properties like lineComment, which are supported by // all modes, and also directives like dontIndentStates, which are // specific to simple modes. meta: { dontIndentStates: ["start", "vocabulary", "string", "string3", "stack"], lineComment: [ "!", "#!" ] } }); CodeMirror.defineMIME("text/x-factor", "factor"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("fcl", function(config) { var indentUnit = config.indentUnit; var keywords = { "term": true, "method": true, "accu": true, "rule": true, "then": true, "is": true, "and": true, "or": true, "if": true, "default": true }; var start_blocks = { "var_input": true, "var_output": true, "fuzzify": true, "defuzzify": true, "function_block": true, "ruleblock": true }; var end_blocks = { "end_ruleblock": true, "end_defuzzify": true, "end_function_block": true, "end_fuzzify": true, "end_var": true }; var atoms = { "true": true, "false": true, "nan": true, "real": true, "min": true, "max": true, "cog": true, "cogs": true }; var isOperatorChar = /[+\-*&^%:=<>!|\/]/; function tokenBase(stream, state) { var ch = stream.next(); if (/[\d\.]/.test(ch)) { if (ch == ".") { stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); } else if (ch == "0") { stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); } else { stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); } return "number"; } if (ch == "/" || ch == "(") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current().toLowerCase(); if (keywords.propertyIsEnumerable(cur) || start_blocks.propertyIsEnumerable(cur) || end_blocks.propertyIsEnumerable(cur)) { return "keyword"; } if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if ((ch == "/" || ch == ")") && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { if (!state.context.prev) return; var t = state.context.type; if (t == "end_block") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; var cur = stream.current().toLowerCase(); if (start_blocks.propertyIsEnumerable(cur)) pushContext(state, stream.column(), "end_block"); else if (end_blocks.propertyIsEnumerable(cur)) popContext(state); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return 0; var ctx = state.context; var closing = end_blocks.propertyIsEnumerable(textAfter); if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "ryk", fold: "brace", blockCommentStart: "(*", blockCommentEnd: "*)", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-fcl", "fcl"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Author: Aliaksei Chapyzhenka (function(mod) { mod(codemirror); })(function(CodeMirror) { function toWordList(words) { var ret = []; words.split(' ').forEach(function(e){ ret.push({name: e}); }); return ret; } var coreWordList = toWordList( 'INVERT AND OR XOR\ 2* 2/ LSHIFT RSHIFT\ 0= = 0< < > U< MIN MAX\ 2DROP 2DUP 2OVER 2SWAP ?DUP DEPTH DROP DUP OVER ROT SWAP\ >R R> R@\ + - 1+ 1- ABS NEGATE\ S>D * M* UM*\ FM/MOD SM/REM UM/MOD */ */MOD / /MOD MOD\ HERE , @ ! CELL+ CELLS C, C@ C! CHARS 2@ 2!\ ALIGN ALIGNED +! ALLOT\ CHAR [CHAR] [ ] BL\ FIND EXECUTE IMMEDIATE COUNT LITERAL STATE\ ; DOES> >BODY\ EVALUATE\ SOURCE >IN\ <# # #S #> HOLD SIGN BASE >NUMBER HEX DECIMAL\ FILL MOVE\ . CR EMIT SPACE SPACES TYPE U. .R U.R\ ACCEPT\ TRUE FALSE\ <> U> 0<> 0>\ NIP TUCK ROLL PICK\ 2>R 2R@ 2R>\ WITHIN UNUSED MARKER\ I J\ TO\ COMPILE, [COMPILE]\ SAVE-INPUT RESTORE-INPUT\ PAD ERASE\ 2LITERAL DNEGATE\ D- D+ D0< D0= D2* D2/ D< D= DMAX DMIN D>S DABS\ M+ M*/ D. D.R 2ROT DU<\ CATCH THROW\ FREE RESIZE ALLOCATE\ CS-PICK CS-ROLL\ GET-CURRENT SET-CURRENT FORTH-WORDLIST GET-ORDER SET-ORDER\ PREVIOUS SEARCH-WORDLIST WORDLIST FIND ALSO ONLY FORTH DEFINITIONS ORDER\ -TRAILING /STRING SEARCH COMPARE CMOVE CMOVE> BLANK SLITERAL'); var immediateWordList = toWordList('IF ELSE THEN BEGIN WHILE REPEAT UNTIL RECURSE [IF] [ELSE] [THEN] ?DO DO LOOP +LOOP UNLOOP LEAVE EXIT AGAIN CASE OF ENDOF ENDCASE'); CodeMirror.defineMode('forth', function() { function searchWordList (wordList, word) { var i; for (i = wordList.length - 1; i >= 0; i--) { if (wordList[i].name === word.toUpperCase()) { return wordList[i]; } } return undefined; } return { startState: function() { return { state: '', base: 10, coreWordList: coreWordList, immediateWordList: immediateWordList, wordList: [] }; }, token: function (stream, stt) { var mat; if (stream.eatSpace()) { return null; } if (stt.state === '') { // interpretation if (stream.match(/^(\]|:NONAME)(\s|$)/i)) { stt.state = ' compilation'; return 'builtin compilation'; } mat = stream.match(/^(\:)\s+(\S+)(\s|$)+/); if (mat) { stt.wordList.push({name: mat[2].toUpperCase()}); stt.state = ' compilation'; return 'def' + stt.state; } mat = stream.match(/^(VARIABLE|2VARIABLE|CONSTANT|2CONSTANT|CREATE|POSTPONE|VALUE|WORD)\s+(\S+)(\s|$)+/i); if (mat) { stt.wordList.push({name: mat[2].toUpperCase()}); return 'def' + stt.state; } mat = stream.match(/^(\'|\[\'\])\s+(\S+)(\s|$)+/); if (mat) { return 'builtin' + stt.state; } } else { // compilation // ; [ if (stream.match(/^(\;|\[)(\s)/)) { stt.state = ''; stream.backUp(1); return 'builtin compilation'; } if (stream.match(/^(\;|\[)($)/)) { stt.state = ''; return 'builtin compilation'; } if (stream.match(/^(POSTPONE)\s+\S+(\s|$)+/)) { return 'builtin'; } } // dynamic wordlist mat = stream.match(/^(\S+)(\s+|$)/); if (mat) { if (searchWordList(stt.wordList, mat[1]) !== undefined) { return 'variable' + stt.state; } // comments if (mat[1] === '\\') { stream.skipToEnd(); return 'comment' + stt.state; } // core words if (searchWordList(stt.coreWordList, mat[1]) !== undefined) { return 'builtin' + stt.state; } if (searchWordList(stt.immediateWordList, mat[1]) !== undefined) { return 'keyword' + stt.state; } if (mat[1] === '(') { stream.eatWhile(function (s) { return s !== ')'; }); stream.eat(')'); return 'comment' + stt.state; } // // strings if (mat[1] === '.(') { stream.eatWhile(function (s) { return s !== ')'; }); stream.eat(')'); return 'string' + stt.state; } if (mat[1] === 'S"' || mat[1] === '."' || mat[1] === 'C"') { stream.eatWhile(function (s) { return s !== '"'; }); stream.eat('"'); return 'string' + stt.state; } // numbers if (mat[1] - 0xfffffffff) { return 'number' + stt.state; } // if (mat[1].match(/^[-+]?[0-9]+\.[0-9]*/)) { // return 'number' + stt.state; // } return 'atom' + stt.state; } } }; }); CodeMirror.defineMIME("text/x-forth", "forth"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("fortran", function() { function words(array) { var keys = {}; for (var i = 0; i < array.length; ++i) { keys[array[i]] = true; } return keys; } var keywords = words([ "abstract", "accept", "allocatable", "allocate", "array", "assign", "asynchronous", "backspace", "bind", "block", "byte", "call", "case", "class", "close", "common", "contains", "continue", "cycle", "data", "deallocate", "decode", "deferred", "dimension", "do", "elemental", "else", "encode", "end", "endif", "entry", "enumerator", "equivalence", "exit", "external", "extrinsic", "final", "forall", "format", "function", "generic", "go", "goto", "if", "implicit", "import", "include", "inquire", "intent", "interface", "intrinsic", "module", "namelist", "non_intrinsic", "non_overridable", "none", "nopass", "nullify", "open", "optional", "options", "parameter", "pass", "pause", "pointer", "print", "private", "program", "protected", "public", "pure", "read", "recursive", "result", "return", "rewind", "save", "select", "sequence", "stop", "subroutine", "target", "then", "to", "type", "use", "value", "volatile", "where", "while", "write"]); var builtins = words(["abort", "abs", "access", "achar", "acos", "adjustl", "adjustr", "aimag", "aint", "alarm", "all", "allocated", "alog", "amax", "amin", "amod", "and", "anint", "any", "asin", "associated", "atan", "besj", "besjn", "besy", "besyn", "bit_size", "btest", "cabs", "ccos", "ceiling", "cexp", "char", "chdir", "chmod", "clog", "cmplx", "command_argument_count", "complex", "conjg", "cos", "cosh", "count", "cpu_time", "cshift", "csin", "csqrt", "ctime", "c_funloc", "c_loc", "c_associated", "c_null_ptr", "c_null_funptr", "c_f_pointer", "c_null_char", "c_alert", "c_backspace", "c_form_feed", "c_new_line", "c_carriage_return", "c_horizontal_tab", "c_vertical_tab", "dabs", "dacos", "dasin", "datan", "date_and_time", "dbesj", "dbesj", "dbesjn", "dbesy", "dbesy", "dbesyn", "dble", "dcos", "dcosh", "ddim", "derf", "derfc", "dexp", "digits", "dim", "dint", "dlog", "dlog", "dmax", "dmin", "dmod", "dnint", "dot_product", "dprod", "dsign", "dsinh", "dsin", "dsqrt", "dtanh", "dtan", "dtime", "eoshift", "epsilon", "erf", "erfc", "etime", "exit", "exp", "exponent", "extends_type_of", "fdate", "fget", "fgetc", "float", "floor", "flush", "fnum", "fputc", "fput", "fraction", "fseek", "fstat", "ftell", "gerror", "getarg", "get_command", "get_command_argument", "get_environment_variable", "getcwd", "getenv", "getgid", "getlog", "getpid", "getuid", "gmtime", "hostnm", "huge", "iabs", "iachar", "iand", "iargc", "ibclr", "ibits", "ibset", "ichar", "idate", "idim", "idint", "idnint", "ieor", "ierrno", "ifix", "imag", "imagpart", "index", "int", "ior", "irand", "isatty", "ishft", "ishftc", "isign", "iso_c_binding", "is_iostat_end", "is_iostat_eor", "itime", "kill", "kind", "lbound", "len", "len_trim", "lge", "lgt", "link", "lle", "llt", "lnblnk", "loc", "log", "logical", "long", "lshift", "lstat", "ltime", "matmul", "max", "maxexponent", "maxloc", "maxval", "mclock", "merge", "move_alloc", "min", "minexponent", "minloc", "minval", "mod", "modulo", "mvbits", "nearest", "new_line", "nint", "not", "or", "pack", "perror", "precision", "present", "product", "radix", "rand", "random_number", "random_seed", "range", "real", "realpart", "rename", "repeat", "reshape", "rrspacing", "rshift", "same_type_as", "scale", "scan", "second", "selected_int_kind", "selected_real_kind", "set_exponent", "shape", "short", "sign", "signal", "sinh", "sin", "sleep", "sngl", "spacing", "spread", "sqrt", "srand", "stat", "sum", "symlnk", "system", "system_clock", "tan", "tanh", "time", "tiny", "transfer", "transpose", "trim", "ttynam", "ubound", "umask", "unlink", "unpack", "verify", "xor", "zabs", "zcos", "zexp", "zlog", "zsin", "zsqrt"]); var dataTypes = words(["c_bool", "c_char", "c_double", "c_double_complex", "c_float", "c_float_complex", "c_funptr", "c_int", "c_int16_t", "c_int32_t", "c_int64_t", "c_int8_t", "c_int_fast16_t", "c_int_fast32_t", "c_int_fast64_t", "c_int_fast8_t", "c_int_least16_t", "c_int_least32_t", "c_int_least64_t", "c_int_least8_t", "c_intmax_t", "c_intptr_t", "c_long", "c_long_double", "c_long_double_complex", "c_long_long", "c_ptr", "c_short", "c_signed_char", "c_size_t", "character", "complex", "double", "integer", "logical", "real"]); var isOperatorChar = /[+\-*&=<>\/\:]/; var litOperator = new RegExp("(\.and\.|\.or\.|\.eq\.|\.lt\.|\.le\.|\.gt\.|\.ge\.|\.ne\.|\.not\.|\.eqv\.|\.neqv\.)", "i"); function tokenBase(stream, state) { if (stream.match(litOperator)){ return 'operator'; } var ch = stream.next(); if (ch == "!") { stream.skipToEnd(); return "comment"; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]\(\),]/.test(ch)) { return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_]/); var word = stream.current().toLowerCase(); if (keywords.hasOwnProperty(word)){ return 'keyword'; } if (builtins.hasOwnProperty(word) || dataTypes.hasOwnProperty(word)) { return 'builtin'; } return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = null; return "string"; }; } // Interface return { startState: function() { return {tokenize: null}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; return style; } }; }); CodeMirror.defineMIME("text/x-fortran", "fortran"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("gas", function(_config, parserConfig) { // If an architecture is specified, its initialization function may // populate this array with custom parsing functions which will be // tried in the event that the standard functions do not find a match. var custom = []; // The symbol used to start a line comment changes based on the target // architecture. // If no architecture is pased in "parserConfig" then only multiline // comments will have syntax support. var lineCommentStartSymbol = ""; // These directives are architecture independent. // Machine specific directives should go in their respective // architecture initialization function. // Reference: // http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops var directives = { ".abort" : "builtin", ".align" : "builtin", ".altmacro" : "builtin", ".ascii" : "builtin", ".asciz" : "builtin", ".balign" : "builtin", ".balignw" : "builtin", ".balignl" : "builtin", ".bundle_align_mode" : "builtin", ".bundle_lock" : "builtin", ".bundle_unlock" : "builtin", ".byte" : "builtin", ".cfi_startproc" : "builtin", ".comm" : "builtin", ".data" : "builtin", ".def" : "builtin", ".desc" : "builtin", ".dim" : "builtin", ".double" : "builtin", ".eject" : "builtin", ".else" : "builtin", ".elseif" : "builtin", ".end" : "builtin", ".endef" : "builtin", ".endfunc" : "builtin", ".endif" : "builtin", ".equ" : "builtin", ".equiv" : "builtin", ".eqv" : "builtin", ".err" : "builtin", ".error" : "builtin", ".exitm" : "builtin", ".extern" : "builtin", ".fail" : "builtin", ".file" : "builtin", ".fill" : "builtin", ".float" : "builtin", ".func" : "builtin", ".global" : "builtin", ".gnu_attribute" : "builtin", ".hidden" : "builtin", ".hword" : "builtin", ".ident" : "builtin", ".if" : "builtin", ".incbin" : "builtin", ".include" : "builtin", ".int" : "builtin", ".internal" : "builtin", ".irp" : "builtin", ".irpc" : "builtin", ".lcomm" : "builtin", ".lflags" : "builtin", ".line" : "builtin", ".linkonce" : "builtin", ".list" : "builtin", ".ln" : "builtin", ".loc" : "builtin", ".loc_mark_labels" : "builtin", ".local" : "builtin", ".long" : "builtin", ".macro" : "builtin", ".mri" : "builtin", ".noaltmacro" : "builtin", ".nolist" : "builtin", ".octa" : "builtin", ".offset" : "builtin", ".org" : "builtin", ".p2align" : "builtin", ".popsection" : "builtin", ".previous" : "builtin", ".print" : "builtin", ".protected" : "builtin", ".psize" : "builtin", ".purgem" : "builtin", ".pushsection" : "builtin", ".quad" : "builtin", ".reloc" : "builtin", ".rept" : "builtin", ".sbttl" : "builtin", ".scl" : "builtin", ".section" : "builtin", ".set" : "builtin", ".short" : "builtin", ".single" : "builtin", ".size" : "builtin", ".skip" : "builtin", ".sleb128" : "builtin", ".space" : "builtin", ".stab" : "builtin", ".string" : "builtin", ".struct" : "builtin", ".subsection" : "builtin", ".symver" : "builtin", ".tag" : "builtin", ".text" : "builtin", ".title" : "builtin", ".type" : "builtin", ".uleb128" : "builtin", ".val" : "builtin", ".version" : "builtin", ".vtable_entry" : "builtin", ".vtable_inherit" : "builtin", ".warning" : "builtin", ".weak" : "builtin", ".weakref" : "builtin", ".word" : "builtin" }; var registers = {}; function x86(_parserConfig) { lineCommentStartSymbol = "#"; registers.ax = "variable"; registers.eax = "variable-2"; registers.rax = "variable-3"; registers.bx = "variable"; registers.ebx = "variable-2"; registers.rbx = "variable-3"; registers.cx = "variable"; registers.ecx = "variable-2"; registers.rcx = "variable-3"; registers.dx = "variable"; registers.edx = "variable-2"; registers.rdx = "variable-3"; registers.si = "variable"; registers.esi = "variable-2"; registers.rsi = "variable-3"; registers.di = "variable"; registers.edi = "variable-2"; registers.rdi = "variable-3"; registers.sp = "variable"; registers.esp = "variable-2"; registers.rsp = "variable-3"; registers.bp = "variable"; registers.ebp = "variable-2"; registers.rbp = "variable-3"; registers.ip = "variable"; registers.eip = "variable-2"; registers.rip = "variable-3"; registers.cs = "keyword"; registers.ds = "keyword"; registers.ss = "keyword"; registers.es = "keyword"; registers.fs = "keyword"; registers.gs = "keyword"; } function armv6(_parserConfig) { // Reference: // http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf lineCommentStartSymbol = "@"; directives.syntax = "builtin"; registers.r0 = "variable"; registers.r1 = "variable"; registers.r2 = "variable"; registers.r3 = "variable"; registers.r4 = "variable"; registers.r5 = "variable"; registers.r6 = "variable"; registers.r7 = "variable"; registers.r8 = "variable"; registers.r9 = "variable"; registers.r10 = "variable"; registers.r11 = "variable"; registers.r12 = "variable"; registers.sp = "variable-2"; registers.lr = "variable-2"; registers.pc = "variable-2"; registers.r13 = registers.sp; registers.r14 = registers.lr; registers.r15 = registers.pc; custom.push(function(ch, stream) { if (ch === '#') { stream.eatWhile(/\w/); return "number"; } }); } var arch = (parserConfig.architecture || "x86").toLowerCase(); if (arch === "x86") { x86(); } else if (arch === "arm" || arch === "armv6") { armv6(); } function nextUntilUnescaped(stream, end) { var escaped = false, next; while ((next = stream.next()) != null) { if (next === end && !escaped) { return false; } escaped = !escaped && next === "\\"; } return escaped; } function clikeComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (ch === "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch === "*"); } return "comment"; } return { startState: function() { return { tokenize: null }; }, token: function(stream, state) { if (state.tokenize) { return state.tokenize(stream, state); } if (stream.eatSpace()) { return null; } var style, cur, ch = stream.next(); if (ch === "/") { if (stream.eat("*")) { state.tokenize = clikeComment; return clikeComment(stream, state); } } if (ch === lineCommentStartSymbol) { stream.skipToEnd(); return "comment"; } if (ch === '"') { nextUntilUnescaped(stream, '"'); return "string"; } if (ch === '.') { stream.eatWhile(/\w/); cur = stream.current().toLowerCase(); style = directives[cur]; return style || null; } if (ch === '=') { stream.eatWhile(/\w/); return "tag"; } if (ch === '{') { return "braket"; } if (ch === '}') { return "braket"; } if (/\d/.test(ch)) { if (ch === "0" && stream.eat("x")) { stream.eatWhile(/[0-9a-fA-F]/); return "number"; } stream.eatWhile(/\d/); return "number"; } if (/\w/.test(ch)) { stream.eatWhile(/\w/); if (stream.eat(":")) { return 'tag'; } cur = stream.current().toLowerCase(); style = registers[cur]; return style || null; } for (var i = 0; i < custom.length; i++) { style = custom[i](ch, stream, state); if (style) { return style; } } }, lineComment: lineCommentStartSymbol, blockCommentStart: "/*", blockCommentEnd: "*/" }; }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /* Gherkin mode - http://www.cukes.info/ Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues */ // Following Objs from Brackets implementation: https://github.com/tregusti/brackets-gherkin/blob/master/main.js //var Quotes = { // SINGLE: 1, // DOUBLE: 2 //}; //var regex = { // keywords: /(Feature| {2}(Scenario|In order to|As|I)| {4}(Given|When|Then|And))/ //}; (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("gherkin", function () { return { startState: function () { return { lineNumber: 0, tableHeaderLine: false, allowFeature: true, allowBackground: false, allowScenario: false, allowSteps: false, allowPlaceholders: false, allowMultilineArgument: false, inMultilineString: false, inMultilineTable: false, inKeywordLine: false }; }, token: function (stream, state) { if (stream.sol()) { state.lineNumber++; state.inKeywordLine = false; if (state.inMultilineTable) { state.tableHeaderLine = false; if (!stream.match(/\s*\|/, false)) { state.allowMultilineArgument = false; state.inMultilineTable = false; } } } stream.eatSpace(); if (state.allowMultilineArgument) { // STRING if (state.inMultilineString) { if (stream.match('"""')) { state.inMultilineString = false; state.allowMultilineArgument = false; } else { stream.match(/.*/); } return "string"; } // TABLE if (state.inMultilineTable) { if (stream.match(/\|\s*/)) { return "bracket"; } else { stream.match(/[^\|]*/); return state.tableHeaderLine ? "header" : "string"; } } // DETECT START if (stream.match('"""')) { // String state.inMultilineString = true; return "string"; } else if (stream.match("|")) { // Table state.inMultilineTable = true; state.tableHeaderLine = true; return "bracket"; } } // LINE COMMENT if (stream.match(/#.*/)) { return "comment"; // TAG } else if (!state.inKeywordLine && stream.match(/@\S+/)) { return "tag"; // FEATURE } else if (!state.inKeywordLine && state.allowFeature && stream.match(/(機能|功能|フィーチャ|기능|โครงหลัก|ความสามารถ|ความต้องการทางธุรกิจ|ಹೆಚ್ಚಳ|గుణము|ਮੁਹਾਂਦਰਾ|ਨਕਸ਼ ਨੁਹਾਰ|ਖਾਸੀਅਤ|रूप लेख|وِیژگی|خاصية|תכונה|Функціонал|Функция|Функционалност|Функционал|Үзенчәлеклелек|Свойство|Особина|Мөмкинлек|Могућност|Λειτουργία|Δυνατότητα|Właściwość|Vlastnosť|Trajto|Tính năng|Savybė|Pretty much|Požiadavka|Požadavek|Potrzeba biznesowa|Özellik|Osobina|Ominaisuus|Omadus|OH HAI|Mogućnost|Mogucnost|Jellemző|Hwæt|Hwaet|Funzionalità|Funktionalitéit|Funktionalität|Funkcja|Funkcionalnost|Funkcionalitāte|Funkcia|Fungsi|Functionaliteit|Funcționalitate|Funcţionalitate|Functionalitate|Funcionalitat|Funcionalidade|Fonctionnalité|Fitur|Fīča|Feature|Eiginleiki|Egenskap|Egenskab|Característica|Caracteristica|Business Need|Aspekt|Arwedd|Ahoy matey!|Ability):/)) { state.allowScenario = true; state.allowBackground = true; state.allowPlaceholders = false; state.allowSteps = false; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // BACKGROUND } else if (!state.inKeywordLine && state.allowBackground && stream.match(/(背景|배경|แนวคิด|ಹಿನ್ನೆಲೆ|నేపథ్యం|ਪਿਛੋਕੜ|पृष्ठभूमि|زمینه|الخلفية|רקע|Тарих|Предыстория|Предистория|Позадина|Передумова|Основа|Контекст|Кереш|Υπόβαθρο|Założenia|Yo\-ho\-ho|Tausta|Taust|Situācija|Rerefons|Pozadina|Pozadie|Pozadí|Osnova|Latar Belakang|Kontext|Konteksts|Kontekstas|Kontekst|Háttér|Hannergrond|Grundlage|Geçmiş|Fundo|Fono|First off|Dis is what went down|Dasar|Contexto|Contexte|Context|Contesto|Cenário de Fundo|Cenario de Fundo|Cefndir|Bối cảnh|Bakgrunnur|Bakgrunn|Bakgrund|Baggrund|Background|B4|Antecedents|Antecedentes|Ær|Aer|Achtergrond):/)) { state.allowPlaceholders = false; state.allowSteps = true; state.allowBackground = false; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // SCENARIO OUTLINE } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景大綱|场景大纲|劇本大綱|剧本大纲|テンプレ|シナリオテンプレート|シナリオテンプレ|シナリオアウトライン|시나리오 개요|สรุปเหตุการณ์|โครงสร้างของเหตุการณ์|ವಿವರಣೆ|కథనం|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਟਕਥਾ ਢਾਂਚਾ|परिदृश्य रूपरेखा|سيناريو مخطط|الگوی سناریو|תבנית תרחיש|Сценарийның төзелеше|Сценарий структураси|Структура сценарію|Структура сценария|Структура сценарија|Скица|Рамка на сценарий|Концепт|Περιγραφή Σεναρίου|Wharrimean is|Template Situai|Template Senario|Template Keadaan|Tapausaihio|Szenariogrundriss|Szablon scenariusza|Swa hwær swa|Swa hwaer swa|Struktura scenarija|Structură scenariu|Structura scenariu|Skica|Skenario konsep|Shiver me timbers|Senaryo taslağı|Schema dello scenario|Scenariomall|Scenariomal|Scenario Template|Scenario Outline|Scenario Amlinellol|Scenārijs pēc parauga|Scenarijaus šablonas|Reckon it's like|Raamstsenaarium|Plang vum Szenario|Plan du Scénario|Plan du scénario|Osnova scénáře|Osnova Scenára|Náčrt Scenáru|Náčrt Scénáře|Náčrt Scenára|MISHUN SRSLY|Menggariskan Senario|Lýsing Dæma|Lýsing Atburðarásar|Konturo de la scenaro|Koncept|Khung tình huống|Khung kịch bản|Forgatókönyv vázlat|Esquema do Cenário|Esquema do Cenario|Esquema del escenario|Esquema de l'escenari|Esbozo do escenario|Delineação do Cenário|Delineacao do Cenario|All y'all|Abstrakt Scenario|Abstract Scenario):/)) { state.allowPlaceholders = true; state.allowSteps = true; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // EXAMPLES } else if (state.allowScenario && stream.match(/(例子|例|サンプル|예|ชุดของเหตุการณ์|ชุดของตัวอย่าง|ಉದಾಹರಣೆಗಳು|ఉదాహరణలు|ਉਦਾਹਰਨਾਂ|उदाहरण|نمونه ها|امثلة|דוגמאות|Үрнәкләр|Сценарији|Примеры|Примери|Приклади|Мисоллар|Мисаллар|Σενάρια|Παραδείγματα|You'll wanna|Voorbeelden|Variantai|Tapaukset|Se þe|Se the|Se ðe|Scenarios|Scenariji|Scenarijai|Przykłady|Primjeri|Primeri|Příklady|Príklady|Piemēri|Példák|Pavyzdžiai|Paraugs|Örnekler|Juhtumid|Exemplos|Exemples|Exemple|Exempel|EXAMPLZ|Examples|Esempi|Enghreifftiau|Ekzemploj|Eksempler|Ejemplos|Dữ liệu|Dead men tell no tales|Dæmi|Contoh|Cenários|Cenarios|Beispiller|Beispiele|Atburðarásir):/)) { state.allowPlaceholders = false; state.allowSteps = true; state.allowBackground = false; state.allowMultilineArgument = true; return "keyword"; // SCENARIO } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景|场景|劇本|剧本|シナリオ|시나리오|เหตุการณ์|ಕಥಾಸಾರಾಂಶ|సన్నివేశం|ਪਟਕਥਾ|परिदृश्य|سيناريو|سناریو|תרחיש|Сценарій|Сценарио|Сценарий|Пример|Σενάριο|Tình huống|The thing of it is|Tapaus|Szenario|Swa|Stsenaarium|Skenario|Situai|Senaryo|Senario|Scenaro|Scenariusz|Scenariu|Scénario|Scenario|Scenarijus|Scenārijs|Scenarij|Scenarie|Scénář|Scenár|Primer|MISHUN|Kịch bản|Keadaan|Heave to|Forgatókönyv|Escenario|Escenari|Cenário|Cenario|Awww, look mate|Atburðarás):/)) { state.allowPlaceholders = false; state.allowSteps = true; state.allowBackground = false; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // STEPS } else if (!state.inKeywordLine && state.allowSteps && stream.match(/(那麼|那么|而且|當|当|并且|同時|同时|前提|假设|假設|假定|假如|但是|但し|並且|もし|ならば|ただし|しかし|かつ|하지만|조건|먼저|만일|만약|단|그리고|그러면|และ |เมื่อ |แต่ |ดังนั้น |กำหนดให้ |ಸ್ಥಿತಿಯನ್ನು |ಮತ್ತು |ನೀಡಿದ |ನಂತರ |ಆದರೆ |మరియు |చెప్పబడినది |కాని |ఈ పరిస్థితిలో |అప్పుడు |ਪਰ |ਤਦ |ਜੇਕਰ |ਜਿਵੇਂ ਕਿ |ਜਦੋਂ |ਅਤੇ |यदि |परन्तु |पर |तब |तदा |तथा |जब |चूंकि |किन्तु |कदा |और |अगर |و |هنگامی |متى |لكن |عندما |ثم |بفرض |با فرض |اما |اذاً |آنگاه |כאשר |וגם |בהינתן |אזי |אז |אבל |Якщо |Һәм |Унда |Тоді |Тогда |То |Также |Та |Пусть |Припустимо, що |Припустимо |Онда |Но |Нехай |Нәтиҗәдә |Лекин |Ләкин |Коли |Когда |Когато |Када |Кад |К тому же |І |И |Задато |Задати |Задате |Если |Допустим |Дано |Дадено |Вә |Ва |Бирок |Әмма |Әйтик |Әгәр |Аммо |Али |Але |Агар |А також |А |Τότε |Όταν |Και |Δεδομένου |Αλλά |Þurh |Þegar |Þa þe |Þá |Þa |Zatati |Zakładając |Zadato |Zadate |Zadano |Zadani |Zadan |Za předpokladu |Za predpokladu |Youse know when youse got |Youse know like when |Yna |Yeah nah |Y'know |Y |Wun |Wtedy |When y'all |When |Wenn |WEN |wann |Ve |Và |Und |Un |ugeholl |Too right |Thurh |Thì |Then y'all |Then |Tha the |Tha |Tetapi |Tapi |Tak |Tada |Tad |Stel |Soit |Siis |Și |Şi |Si |Sed |Se |Så |Quando |Quand |Quan |Pryd |Potom |Pokud |Pokiaľ |Però |Pero |Pak |Oraz |Onda |Ond |Oletetaan |Og |Och |O zaman |Niin |Nhưng |När |Når |Mutta |Men |Mas |Maka |Majd |Mając |Mais |Maar |mä |Ma |Lorsque |Lorsqu'|Logo |Let go and haul |Kun |Kuid |Kui |Kiedy |Khi |Ketika |Kemudian |Keď |Když |Kaj |Kai |Kada |Kad |Jeżeli |Jeśli |Ja |It's just unbelievable |Ir |I CAN HAZ |I |Ha |Givun |Givet |Given y'all |Given |Gitt |Gegeven |Gegeben seien |Gegeben sei |Gdy |Gangway! |Fakat |Étant donnés |Etant donnés |Étant données |Etant données |Étant donnée |Etant donnée |Étant donné |Etant donné |Et |És |Entonces |Entón |Então |Entao |En |Eğer ki |Ef |Eeldades |E |Ðurh |Duota |Dun |Donitaĵo |Donat |Donada |Do |Diyelim ki |Diberi |Dengan |Den youse gotta |DEN |De |Dato |Dați fiind |Daţi fiind |Dati fiind |Dati |Date fiind |Date |Data |Dat fiind |Dar |Dann |dann |Dan |Dados |Dado |Dadas |Dada |Ða ðe |Ða |Cuando |Cho |Cando |Când |Cand |Cal |But y'all |But at the end of the day I reckon |BUT |But |Buh |Blimey! |Biết |Bet |Bagi |Aye |awer |Avast! |Atunci |Atesa |Atès |Apabila |Anrhegedig a |Angenommen |And y'all |And |AN |An |an |Amikor |Amennyiben |Ama |Als |Alors |Allora |Ali |Aleshores |Ale |Akkor |Ak |Adott |Ac |Aber |A zároveň |A tiež |A taktiež |A také |A |a |7 |\* )/)) { state.inStep = true; state.allowPlaceholders = true; state.allowMultilineArgument = true; state.inKeywordLine = true; return "keyword"; // INLINE STRING } else if (stream.match(/"[^"]*"?/)) { return "string"; // PLACEHOLDER } else if (state.allowPlaceholders && stream.match(/<[^>]*>?/)) { return "variable"; // Fall through } else { stream.next(); stream.eatWhile(/[^@"<#]/); return null; } } }; }); CodeMirror.defineMIME("text/x-feature", "gherkin"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("go", function(config) { var indentUnit = config.indentUnit; var keywords = { "break":true, "case":true, "chan":true, "const":true, "continue":true, "default":true, "defer":true, "else":true, "fallthrough":true, "for":true, "func":true, "go":true, "goto":true, "if":true, "import":true, "interface":true, "map":true, "package":true, "range":true, "return":true, "select":true, "struct":true, "switch":true, "type":true, "var":true, "bool":true, "byte":true, "complex64":true, "complex128":true, "float32":true, "float64":true, "int8":true, "int16":true, "int32":true, "int64":true, "string":true, "uint8":true, "uint16":true, "uint32":true, "uint64":true, "int":true, "uint":true, "uintptr":true, "error": true, "rune":true }; var atoms = { "true":true, "false":true, "iota":true, "nil":true, "append":true, "cap":true, "close":true, "complex":true, "copy":true, "delete":true, "imag":true, "len":true, "make":true, "new":true, "panic":true, "print":true, "println":true, "real":true, "recover":true }; var isOperatorChar = /[+\-*&^%:=<>!|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'" || ch == "`") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\d\.]/.test(ch)) { if (ch == ".") { stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); } else if (ch == "0") { stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); } else { stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); } return "number"; } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { if (cur == "case" || cur == "default") curPunc = "case"; return "keyword"; } if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && quote != "`" && next == "\\"; } if (end || !(escaped || quote == "`")) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { if (!state.context.prev) return; var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; if (ctx.type == "case") ctx.type = "}"; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "case") ctx.type = "case"; else if (curPunc == "}" && ctx.type == "}") popContext(state); else if (curPunc == ctx.type) popContext(state); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "case" && /^(?:case|default)\b/.test(textAfter)) { state.context.type = "}"; return ctx.indented; } var closing = firstChar == ctx.type; if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}):", closeBrackets: "()[]{}''\"\"``", fold: "brace", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-go", "go"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("groovy", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words( "abstract as assert boolean break byte case catch char class const continue def default " + "do double else enum extends final finally float for goto if implements import in " + "instanceof int interface long native new package private protected public return " + "short static strictfp super switch synchronized threadsafe throw throws trait transient " + "try void volatile while"); var blockKeywords = words("catch class def do else enum finally for if interface switch trait try while"); var standaloneKeywords = words("return break continue"); var atoms = words("null true false this"); var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { return startString(ch, stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); if (stream.eat(/eE/)) { stream.eat(/\+\-/); stream.eatWhile(/\d/); } return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize.push(tokenComment); return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } if (expectExpression(state.lastToken, false)) { return startString(ch, stream, state); } } if (ch == "-" && stream.eat(">")) { curPunc = "->"; return null; } if (/[+\-*&%=<>!?|\/~]/.test(ch)) { stream.eatWhile(/[+\-*&%=<>|~]/); return "operator"; } stream.eatWhile(/[\w\$_]/); if (ch == "@") { stream.eatWhile(/[\w\$_\.]/); return "meta"; } if (state.lastToken == ".") return "property"; if (stream.eat(":")) { curPunc = "proplabel"; return "property"; } var cur = stream.current(); if (atoms.propertyIsEnumerable(cur)) { return "atom"; } if (keywords.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; else if (standaloneKeywords.propertyIsEnumerable(cur)) curPunc = "standalone"; return "keyword"; } return "variable"; } tokenBase.isBase = true; function startString(quote, stream, state) { var tripleQuoted = false; if (quote != "/" && stream.eat(quote)) { if (stream.eat(quote)) tripleQuoted = true; else return "string"; } function t(stream, state) { var escaped = false, next, end = !tripleQuoted; while ((next = stream.next()) != null) { if (next == quote && !escaped) { if (!tripleQuoted) { break; } if (stream.match(quote + quote)) { end = true; break; } } if (quote == '"' && next == "$" && !escaped && stream.eat("{")) { state.tokenize.push(tokenBaseUntilBrace()); return "string"; } escaped = !escaped && next == "\\"; } if (end) state.tokenize.pop(); return "string"; } state.tokenize.push(t); return t(stream, state); } function tokenBaseUntilBrace() { var depth = 1; function t(stream, state) { if (stream.peek() == "}") { depth--; if (depth == 0) { state.tokenize.pop(); return state.tokenize[state.tokenize.length-1](stream, state); } } else if (stream.peek() == "{") { depth++; } return tokenBase(stream, state); } t.isBase = true; return t; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize.pop(); break; } maybeEnd = (ch == "*"); } return "comment"; } function expectExpression(last, newline) { return !last || last == "operator" || last == "->" || /[\.\[\{\(,;:]/.test(last) || last == "newstatement" || last == "keyword" || last == "proplabel" || (last == "standalone" && !newline); } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: [tokenBase], context: new Context((basecolumn || 0) - config.indentUnit, 0, "top", false), indented: 0, startOfLine: true, lastToken: null }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; // Automatic semicolon insertion if (ctx.type == "statement" && !expectExpression(state.lastToken, true)) { popContext(state); ctx = state.context; } } if (stream.eatSpace()) return null; curPunc = null; var style = state.tokenize[state.tokenize.length-1](stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); // Handle indentation for {x -> \n ... } else if (curPunc == "->" && ctx.type == "statement" && ctx.prev.type == "}") { popContext(state); state.context.align = false; } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; state.lastToken = curPunc || style; return style; }, indent: function(state, textAfter) { if (!state.tokenize[state.tokenize.length-1].isBase) return CodeMirror.Pass; var firstChar = textAfter && textAfter.charAt(0), ctx = state.context; if (ctx.type == "statement" && !expectExpression(state.lastToken, true)) ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : config.indentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : config.indentUnit); }, electricChars: "{}", closeBrackets: {triples: "'\""}, fold: "brace", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-groovy", "groovy"); }); }); var ruby = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { function wordObj(words) { var o = {}; for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; return o; } var keywordList = [ "alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else", "elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or", "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless", "until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc", "caller", "lambda", "proc", "public", "protected", "private", "require", "load", "require_relative", "extend", "autoload", "__END__", "__FILE__", "__LINE__", "__dir__" ], keywords = wordObj(keywordList); var indentWords = wordObj(["def", "class", "case", "for", "while", "until", "module", "then", "catch", "loop", "proc", "begin"]); var dedentWords = wordObj(["end", "until"]); var opening = {"[": "]", "{": "}", "(": ")"}; var closing = {"]": "[", "}": "{", ")": "("}; CodeMirror.defineMode("ruby", function(config) { var curPunc; function chain(newtok, stream, state) { state.tokenize.push(newtok); return newtok(stream, state); } function tokenBase(stream, state) { if (stream.sol() && stream.match("=begin") && stream.eol()) { state.tokenize.push(readBlockComment); return "comment"; } if (stream.eatSpace()) return null; var ch = stream.next(), m; if (ch == "`" || ch == "'" || ch == '"') { return chain(readQuoted(ch, "string", ch == '"' || ch == "`"), stream, state); } else if (ch == "/") { if (regexpAhead(stream)) return chain(readQuoted(ch, "string-2", true), stream, state); else return "operator"; } else if (ch == "%") { var style = "string", embed = true; if (stream.eat("s")) style = "atom"; else if (stream.eat(/[WQ]/)) style = "string"; else if (stream.eat(/[r]/)) style = "string-2"; else if (stream.eat(/[wxq]/)) { style = "string"; embed = false; } var delim = stream.eat(/[^\w\s=]/); if (!delim) return "operator"; if (opening.propertyIsEnumerable(delim)) delim = opening[delim]; return chain(readQuoted(delim, style, embed, true), stream, state); } else if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (ch == "<" && (m = stream.match(/^<([-~])[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/))) { return chain(readHereDoc(m[2], m[1]), stream, state); } else if (ch == "0") { if (stream.eat("x")) stream.eatWhile(/[\da-fA-F]/); else if (stream.eat("b")) stream.eatWhile(/[01]/); else stream.eatWhile(/[0-7]/); return "number"; } else if (/\d/.test(ch)) { stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/); return "number"; } else if (ch == "?") { while (stream.match(/^\\[CM]-/)) {} if (stream.eat("\\")) stream.eatWhile(/\w/); else stream.next(); return "string"; } else if (ch == ":") { if (stream.eat("'")) return chain(readQuoted("'", "atom", false), stream, state); if (stream.eat('"')) return chain(readQuoted('"', "atom", true), stream, state); // :> :>> :< :<< are valid symbols if (stream.eat(/[\<\>]/)) { stream.eat(/[\<\>]/); return "atom"; } // :+ :- :/ :* :| :& :! are valid symbols if (stream.eat(/[\+\-\*\/\&\|\:\!]/)) { return "atom"; } // Symbols can't start by a digit if (stream.eat(/[a-zA-Z$@_\xa1-\uffff]/)) { stream.eatWhile(/[\w$\xa1-\uffff]/); // Only one ? ! = is allowed and only as the last character stream.eat(/[\?\!\=]/); return "atom"; } return "operator"; } else if (ch == "@" && stream.match(/^@?[a-zA-Z_\xa1-\uffff]/)) { stream.eat("@"); stream.eatWhile(/[\w\xa1-\uffff]/); return "variable-2"; } else if (ch == "$") { if (stream.eat(/[a-zA-Z_]/)) { stream.eatWhile(/[\w]/); } else if (stream.eat(/\d/)) { stream.eat(/\d/); } else { stream.next(); // Must be a special global like $: or $! } return "variable-3"; } else if (/[a-zA-Z_\xa1-\uffff]/.test(ch)) { stream.eatWhile(/[\w\xa1-\uffff]/); stream.eat(/[\?\!]/); if (stream.eat(":")) return "atom"; return "ident"; } else if (ch == "|" && (state.varList || state.lastTok == "{" || state.lastTok == "do")) { curPunc = "|"; return null; } else if (/[\(\)\[\]{}\\;]/.test(ch)) { curPunc = ch; return null; } else if (ch == "-" && stream.eat(">")) { return "arrow"; } else if (/[=+\-\/*:\.^%<>~|]/.test(ch)) { var more = stream.eatWhile(/[=+\-\/*:\.^%<>~|]/); if (ch == "." && !more) curPunc = "."; return "operator"; } else { return null; } } function regexpAhead(stream) { var start = stream.pos, depth = 0, next, found = false, escaped = false; while ((next = stream.next()) != null) { if (!escaped) { if ("[{(".indexOf(next) > -1) { depth++; } else if ("]})".indexOf(next) > -1) { depth--; if (depth < 0) break } else if (next == "/" && depth == 0) { found = true; break } escaped = next == "\\"; } else { escaped = false; } } stream.backUp(stream.pos - start); return found } function tokenBaseUntilBrace(depth) { if (!depth) depth = 1; return function(stream, state) { if (stream.peek() == "}") { if (depth == 1) { state.tokenize.pop(); return state.tokenize[state.tokenize.length-1](stream, state); } else { state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth - 1); } } else if (stream.peek() == "{") { state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth + 1); } return tokenBase(stream, state); }; } function tokenBaseOnce() { var alreadyCalled = false; return function(stream, state) { if (alreadyCalled) { state.tokenize.pop(); return state.tokenize[state.tokenize.length-1](stream, state); } alreadyCalled = true; return tokenBase(stream, state); }; } function readQuoted(quote, style, embed, unescaped) { return function(stream, state) { var escaped = false, ch; if (state.context.type === 'read-quoted-paused') { state.context = state.context.prev; stream.eat("}"); } while ((ch = stream.next()) != null) { if (ch == quote && (unescaped || !escaped)) { state.tokenize.pop(); break; } if (embed && ch == "#" && !escaped) { if (stream.eat("{")) { if (quote == "}") { state.context = {prev: state.context, type: 'read-quoted-paused'}; } state.tokenize.push(tokenBaseUntilBrace()); break; } else if (/[@\$]/.test(stream.peek())) { state.tokenize.push(tokenBaseOnce()); break; } } escaped = !escaped && ch == "\\"; } return style; }; } function readHereDoc(phrase, mayIndent) { return function(stream, state) { if (mayIndent) stream.eatSpace(); if (stream.match(phrase)) state.tokenize.pop(); else stream.skipToEnd(); return "string"; }; } function readBlockComment(stream, state) { if (stream.sol() && stream.match("=end") && stream.eol()) state.tokenize.pop(); stream.skipToEnd(); return "comment"; } return { startState: function() { return {tokenize: [tokenBase], indented: 0, context: {type: "top", indented: -config.indentUnit}, continuedLine: false, lastTok: null, varList: false}; }, token: function(stream, state) { curPunc = null; if (stream.sol()) state.indented = stream.indentation(); var style = state.tokenize[state.tokenize.length-1](stream, state), kwtype; var thisTok = curPunc; if (style == "ident") { var word = stream.current(); style = state.lastTok == "." ? "property" : keywords.propertyIsEnumerable(stream.current()) ? "keyword" : /^[A-Z]/.test(word) ? "tag" : (state.lastTok == "def" || state.lastTok == "class" || state.varList) ? "def" : "variable"; if (style == "keyword") { thisTok = word; if (indentWords.propertyIsEnumerable(word)) kwtype = "indent"; else if (dedentWords.propertyIsEnumerable(word)) kwtype = "dedent"; else if ((word == "if" || word == "unless") && stream.column() == stream.indentation()) kwtype = "indent"; else if (word == "do" && state.context.indented < state.indented) kwtype = "indent"; } } if (curPunc || (style && style != "comment")) state.lastTok = thisTok; if (curPunc == "|") state.varList = !state.varList; if (kwtype == "indent" || /[\(\[\{]/.test(curPunc)) state.context = {prev: state.context, type: curPunc || style, indented: state.indented}; else if ((kwtype == "dedent" || /[\)\]\}]/.test(curPunc)) && state.context.prev) state.context = state.context.prev; if (stream.eol()) state.continuedLine = (curPunc == "\\" || style == "operator"); return style; }, indent: function(state, textAfter) { if (state.tokenize[state.tokenize.length-1] != tokenBase) return CodeMirror.Pass; var firstChar = textAfter && textAfter.charAt(0); var ct = state.context; var closed = ct.type == closing[firstChar] || ct.type == "keyword" && /^(?:end|until|else|elsif|when|rescue)\b/.test(textAfter); return ct.indented + (closed ? 0 : config.indentUnit) + (state.continuedLine ? config.indentUnit : 0); }, electricInput: /^\s*(?:end|rescue|elsif|else|\})$/, lineComment: "#", fold: "indent" }; }); CodeMirror.defineMIME("text/x-ruby", "ruby"); CodeMirror.registerHelper("hintWords", "ruby", keywordList); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, htmlmixed, ruby); })(function(CodeMirror) { // full haml mode. This handled embedded ruby and html fragments too CodeMirror.defineMode("haml", function(config) { var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); var rubyMode = CodeMirror.getMode(config, "ruby"); function rubyInQuote(endQuote) { return function(stream, state) { var ch = stream.peek(); if (ch == endQuote && state.rubyState.tokenize.length == 1) { // step out of ruby context as it seems to complete processing all the braces stream.next(); state.tokenize = html; return "closeAttributeTag"; } else { return ruby(stream, state); } }; } function ruby(stream, state) { if (stream.match("-#")) { stream.skipToEnd(); return "comment"; } return rubyMode.token(stream, state.rubyState); } function html(stream, state) { var ch = stream.peek(); // handle haml declarations. All declarations that cant be handled here // will be passed to html mode if (state.previousToken.style == "comment" ) { if (state.indented > state.previousToken.indented) { stream.skipToEnd(); return "commentLine"; } } if (state.startOfLine) { if (ch == "!" && stream.match("!!")) { stream.skipToEnd(); return "tag"; } else if (stream.match(/^%[\w:#\.]+=/)) { state.tokenize = ruby; return "hamlTag"; } else if (stream.match(/^%[\w:]+/)) { return "hamlTag"; } else if (ch == "/" ) { stream.skipToEnd(); return "comment"; } } if (state.startOfLine || state.previousToken.style == "hamlTag") { if ( ch == "#" || ch == ".") { stream.match(/[\w-#\.]*/); return "hamlAttribute"; } } // donot handle --> as valid ruby, make it HTML close comment instead if (state.startOfLine && !stream.match("-->", false) && (ch == "=" || ch == "-" )) { state.tokenize = ruby; return state.tokenize(stream, state); } if (state.previousToken.style == "hamlTag" || state.previousToken.style == "closeAttributeTag" || state.previousToken.style == "hamlAttribute") { if (ch == "(") { state.tokenize = rubyInQuote(")"); return state.tokenize(stream, state); } else if (ch == "{") { if (!stream.match(/^\{%.*/)) { state.tokenize = rubyInQuote("}"); return state.tokenize(stream, state); } } } return htmlMode.token(stream, state.htmlState); } return { // default to html mode startState: function() { var htmlState = CodeMirror.startState(htmlMode); var rubyState = CodeMirror.startState(rubyMode); return { htmlState: htmlState, rubyState: rubyState, indented: 0, previousToken: { style: null, indented: 0}, tokenize: html }; }, copyState: function(state) { return { htmlState : CodeMirror.copyState(htmlMode, state.htmlState), rubyState: CodeMirror.copyState(rubyMode, state.rubyState), indented: state.indented, previousToken: state.previousToken, tokenize: state.tokenize }; }, token: function(stream, state) { if (stream.sol()) { state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); state.startOfLine = false; // dont record comment line as we only want to measure comment line with // the opening comment block if (style && style != "commentLine") { state.previousToken = { style: style, indented: state.indented }; } // if current state is ruby and the previous token is not `,` reset the // tokenize to html if (stream.eol() && state.tokenize == ruby) { stream.backUp(1); var ch = stream.peek(); stream.next(); if (ch && ch != ",") { state.tokenize = html; } } // reprocess some of the specific style tag when finish setting previousToken if (style == "hamlTag") { style = "tag"; } else if (style == "commentLine") { style = "comment"; } else if (style == "hamlAttribute") { style = "attribute"; } else if (style == "closeAttributeTag") { style = null; } return style; } }; }, "htmlmixed", "ruby"); CodeMirror.defineMIME("text/x-haml", "haml"); }); }); var multiplex = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { }); }); var handlebars = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, simple, multiplex); })(function(CodeMirror) { CodeMirror.defineSimpleMode("handlebars-tags", { start: [ { regex: /\{\{\{/, push: "handlebars_raw", token: "tag" }, { regex: /\{\{!--/, push: "dash_comment", token: "comment" }, { regex: /\{\{!/, push: "comment", token: "comment" }, { regex: /\{\{/, push: "handlebars", token: "tag" } ], handlebars_raw: [ { regex: /\}\}\}/, pop: true, token: "tag" }, ], handlebars: [ { regex: /\}\}/, pop: true, token: "tag" }, // Double and single quotes { regex: /"(?:[^\\"]|\\.)*"?/, token: "string" }, { regex: /'(?:[^\\']|\\.)*'?/, token: "string" }, // Handlebars keywords { regex: />|[#\/]([A-Za-z_]\w*)/, token: "keyword" }, { regex: /(?:else|this)\b/, token: "keyword" }, // Numeral { regex: /\d+/i, token: "number" }, // Atoms like = and . { regex: /=|~|@|true|false/, token: "atom" }, // Paths { regex: /(?:\.\.\/)*(?:[A-Za-z_][\w\.]*)+/, token: "variable-2" } ], dash_comment: [ { regex: /--\}\}/, pop: true, token: "comment" }, // Commented code { regex: /./, token: "comment"} ], comment: [ { regex: /\}\}/, pop: true, token: "comment" }, { regex: /./, token: "comment" } ], meta: { blockCommentStart: "{{--", blockCommentEnd: "--}}" } }); CodeMirror.defineMode("handlebars", function(config, parserConfig) { var handlebars = CodeMirror.getMode(config, "handlebars-tags"); if (!parserConfig || !parserConfig.base) return handlebars; return CodeMirror.multiplexingMode( CodeMirror.getMode(config, parserConfig.base), {open: "{{", close: /\}\}\}?/, mode: handlebars, parseDelimiters: true} ); }); CodeMirror.defineMIME("text/x-handlebars-template", "handlebars"); }); }); var haskell = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("haskell", function(_config, modeConfig) { function switchState(source, setState, f) { setState(f); return f(source, setState); } // These should all be Unicode extended, as per the Haskell 2010 report var smallRE = /[a-z_]/; var largeRE = /[A-Z]/; var digitRE = /\d/; var hexitRE = /[0-9A-Fa-f]/; var octitRE = /[0-7]/; var idRE = /[a-z_A-Z0-9'\xa1-\uffff]/; var symbolRE = /[-!#$%&*+.\/<=>?@\\^|~:]/; var specialRE = /[(),;[\]`{}]/; var whiteCharRE = /[ \t\v\f]/; // newlines are handled in tokenizer function normal(source, setState) { if (source.eatWhile(whiteCharRE)) { return null; } var ch = source.next(); if (specialRE.test(ch)) { if (ch == '{' && source.eat('-')) { var t = "comment"; if (source.eat('#')) { t = "meta"; } return switchState(source, setState, ncomment(t, 1)); } return null; } if (ch == '\'') { if (source.eat('\\')) { source.next(); // should handle other escapes here } else { source.next(); } if (source.eat('\'')) { return "string"; } return "string error"; } if (ch == '"') { return switchState(source, setState, stringLiteral); } if (largeRE.test(ch)) { source.eatWhile(idRE); if (source.eat('.')) { return "qualifier"; } return "variable-2"; } if (smallRE.test(ch)) { source.eatWhile(idRE); return "variable"; } if (digitRE.test(ch)) { if (ch == '0') { if (source.eat(/[xX]/)) { source.eatWhile(hexitRE); // should require at least 1 return "integer"; } if (source.eat(/[oO]/)) { source.eatWhile(octitRE); // should require at least 1 return "number"; } } source.eatWhile(digitRE); var t = "number"; if (source.match(/^\.\d+/)) { t = "number"; } if (source.eat(/[eE]/)) { t = "number"; source.eat(/[-+]/); source.eatWhile(digitRE); // should require at least 1 } return t; } if (ch == "." && source.eat(".")) return "keyword"; if (symbolRE.test(ch)) { if (ch == '-' && source.eat(/-/)) { source.eatWhile(/-/); if (!source.eat(symbolRE)) { source.skipToEnd(); return "comment"; } } var t = "variable"; if (ch == ':') { t = "variable-2"; } source.eatWhile(symbolRE); return t; } return "error"; } function ncomment(type, nest) { if (nest == 0) { return normal; } return function(source, setState) { var currNest = nest; while (!source.eol()) { var ch = source.next(); if (ch == '{' && source.eat('-')) { ++currNest; } else if (ch == '-' && source.eat('}')) { --currNest; if (currNest == 0) { setState(normal); return type; } } } setState(ncomment(type, currNest)); return type; }; } function stringLiteral(source, setState) { while (!source.eol()) { var ch = source.next(); if (ch == '"') { setState(normal); return "string"; } if (ch == '\\') { if (source.eol() || source.eat(whiteCharRE)) { setState(stringGap); return "string"; } if (source.eat('&')) ; else { source.next(); // should handle other escapes here } } } setState(normal); return "string error"; } function stringGap(source, setState) { if (source.eat('\\')) { return switchState(source, setState, stringLiteral); } source.next(); setState(normal); return "error"; } var wellKnownWords = (function() { var wkw = {}; function setType(t) { return function () { for (var i = 0; i < arguments.length; i++) wkw[arguments[i]] = t; }; } setType("keyword")( "case", "class", "data", "default", "deriving", "do", "else", "foreign", "if", "import", "in", "infix", "infixl", "infixr", "instance", "let", "module", "newtype", "of", "then", "type", "where", "_"); setType("keyword")( "\.\.", ":", "::", "=", "\\", "<-", "->", "@", "~", "=>"); setType("builtin")( "!!", "$!", "$", "&&", "+", "++", "-", ".", "/", "/=", "<", "<*", "<=", "<$>", "<*>", "=<<", "==", ">", ">=", ">>", ">>=", "^", "^^", "||", "*", "*>", "**"); setType("builtin")( "Applicative", "Bool", "Bounded", "Char", "Double", "EQ", "Either", "Enum", "Eq", "False", "FilePath", "Float", "Floating", "Fractional", "Functor", "GT", "IO", "IOError", "Int", "Integer", "Integral", "Just", "LT", "Left", "Maybe", "Monad", "Nothing", "Num", "Ord", "Ordering", "Rational", "Read", "ReadS", "Real", "RealFloat", "RealFrac", "Right", "Show", "ShowS", "String", "True"); setType("builtin")( "abs", "acos", "acosh", "all", "and", "any", "appendFile", "asTypeOf", "asin", "asinh", "atan", "atan2", "atanh", "break", "catch", "ceiling", "compare", "concat", "concatMap", "const", "cos", "cosh", "curry", "cycle", "decodeFloat", "div", "divMod", "drop", "dropWhile", "either", "elem", "encodeFloat", "enumFrom", "enumFromThen", "enumFromThenTo", "enumFromTo", "error", "even", "exp", "exponent", "fail", "filter", "flip", "floatDigits", "floatRadix", "floatRange", "floor", "fmap", "foldl", "foldl1", "foldr", "foldr1", "fromEnum", "fromInteger", "fromIntegral", "fromRational", "fst", "gcd", "getChar", "getContents", "getLine", "head", "id", "init", "interact", "ioError", "isDenormalized", "isIEEE", "isInfinite", "isNaN", "isNegativeZero", "iterate", "last", "lcm", "length", "lex", "lines", "log", "logBase", "lookup", "map", "mapM", "mapM_", "max", "maxBound", "maximum", "maybe", "min", "minBound", "minimum", "mod", "negate", "not", "notElem", "null", "odd", "or", "otherwise", "pi", "pred", "print", "product", "properFraction", "pure", "putChar", "putStr", "putStrLn", "quot", "quotRem", "read", "readFile", "readIO", "readList", "readLn", "readParen", "reads", "readsPrec", "realToFrac", "recip", "rem", "repeat", "replicate", "return", "reverse", "round", "scaleFloat", "scanl", "scanl1", "scanr", "scanr1", "seq", "sequence", "sequence_", "show", "showChar", "showList", "showParen", "showString", "shows", "showsPrec", "significand", "signum", "sin", "sinh", "snd", "span", "splitAt", "sqrt", "subtract", "succ", "sum", "tail", "take", "takeWhile", "tan", "tanh", "toEnum", "toInteger", "toRational", "truncate", "uncurry", "undefined", "unlines", "until", "unwords", "unzip", "unzip3", "userError", "words", "writeFile", "zip", "zip3", "zipWith", "zipWith3"); var override = modeConfig.overrideKeywords; if (override) for (var word in override) if (override.hasOwnProperty(word)) wkw[word] = override[word]; return wkw; })(); return { startState: function () { return { f: normal }; }, copyState: function (s) { return { f: s.f }; }, token: function(stream, state) { var t = state.f(stream, function(s) { state.f = s; }); var w = stream.current(); return wellKnownWords.hasOwnProperty(w) ? wellKnownWords[w] : t; }, blockCommentStart: "{-", blockCommentEnd: "-}", lineComment: "--" }; }); CodeMirror.defineMIME("text/x-haskell", "haskell"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function (mod) { mod(codemirror, haskell); })(function (CodeMirror) { CodeMirror.defineMode("haskell-literate", function (config, parserConfig) { var baseMode = CodeMirror.getMode(config, (parserConfig && parserConfig.base) || "haskell"); return { startState: function () { return { inCode: false, baseState: CodeMirror.startState(baseMode) } }, token: function (stream, state) { if (stream.sol()) { if (state.inCode = stream.eat(">")) return "meta" } if (state.inCode) { return baseMode.token(stream, state.baseState) } else { stream.skipToEnd(); return "comment" } }, innerMode: function (state) { return state.inCode ? {state: state.baseState, mode: baseMode} : null } } }, "haskell"); CodeMirror.defineMIME("text/x-literate-haskell", "haskell-literate"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("haxe", function(config, parserConfig) { var indentUnit = config.indentUnit; // Tokenizer function kw(type) {return {type: type, style: "keyword"};} var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); var operator = kw("operator"), atom = {type: "atom", style: "atom"}, attribute = {type:"attribute", style: "attribute"}; var type = kw("typedef"); var keywords = { "if": A, "while": A, "else": B, "do": B, "try": B, "return": C, "break": C, "continue": C, "new": C, "throw": C, "var": kw("var"), "inline":attribute, "static": attribute, "using":kw("import"), "public": attribute, "private": attribute, "cast": kw("cast"), "import": kw("import"), "macro": kw("macro"), "function": kw("function"), "catch": kw("catch"), "untyped": kw("untyped"), "callback": kw("cb"), "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), "in": operator, "never": kw("property_access"), "trace":kw("trace"), "class": type, "abstract":type, "enum":type, "interface":type, "typedef":type, "extends":type, "implements":type, "dynamic":type, "true": atom, "false": atom, "null": atom }; var isOperatorChar = /[+\-*&%=<>!?|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function toUnescaped(stream, end) { var escaped = false, next; while ((next = stream.next()) != null) { if (next == end && !escaped) return true; escaped = !escaped && next == "\\"; } } // Used as scratch variables to communicate multiple values without // consing up tons of objects. var type, content; function ret(tp, style, cont) { type = tp; content = cont; return style; } function haxeTokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { return chain(stream, state, haxeTokenString(ch)); } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { return ret(ch); } else if (ch == "0" && stream.eat(/x/i)) { stream.eatWhile(/[\da-f]/i); return ret("number", "number"); } else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) { stream.match(/^\d*(?:\.\d*(?!\.))?(?:[eE][+\-]?\d+)?/); return ret("number", "number"); } else if (state.reAllowed && (ch == "~" && stream.eat(/\//))) { toUnescaped(stream, "/"); stream.eatWhile(/[gimsu]/); return ret("regexp", "string-2"); } else if (ch == "/") { if (stream.eat("*")) { return chain(stream, state, haxeTokenComment); } else if (stream.eat("/")) { stream.skipToEnd(); return ret("comment", "comment"); } else { stream.eatWhile(isOperatorChar); return ret("operator", null, stream.current()); } } else if (ch == "#") { stream.skipToEnd(); return ret("conditional", "meta"); } else if (ch == "@") { stream.eat(/:/); stream.eatWhile(/[\w_]/); return ret ("metadata", "meta"); } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return ret("operator", null, stream.current()); } else { var word; if(/[A-Z]/.test(ch)) { stream.eatWhile(/[\w_<>]/); word = stream.current(); return ret("type", "variable-3", word); } else { stream.eatWhile(/[\w_]/); var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; return (known && state.kwAllowed) ? ret(known.type, known.style, word) : ret("variable", "variable", word); } } } function haxeTokenString(quote) { return function(stream, state) { if (toUnescaped(stream, quote)) state.tokenize = haxeTokenBase; return ret("string", "string"); }; } function haxeTokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = haxeTokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } // Parser var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true}; function HaxeLexical(indented, column, type, align, prev, info) { this.indented = indented; this.column = column; this.type = type; this.prev = prev; this.info = info; if (align != null) this.align = align; } function inScope(state, varname) { for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; } function parseHaxe(state, style, type, content, stream) { var cc = state.cc; // Communicate our context to the combinators. // (Less wasteful than consing up a hundred closures on every call.) cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; while(true) { var combinator = cc.length ? cc.pop() : statement; if (combinator(type, content)) { while(cc.length && cc[cc.length - 1].lex) cc.pop()(); if (cx.marked) return cx.marked; if (type == "variable" && inScope(state, content)) return "variable-2"; if (type == "variable" && imported(state, content)) return "variable-3"; return style; } } } function imported(state, typename) { if (/[a-z]/.test(typename.charAt(0))) return false; var len = state.importedtypes.length; for (var i = 0; i= 0; i--) cx.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function inList(name, list) { for (var v = list; v; v = v.next) if (v.name == name) return true; return false; } function register(varname) { var state = cx.state; if (state.context) { cx.marked = "def"; if (inList(varname, state.localVars)) return; state.localVars = {name: varname, next: state.localVars}; } else if (state.globalVars) { if (inList(varname, state.globalVars)) return; state.globalVars = {name: varname, next: state.globalVars}; } } // Combinators var defaultVars = {name: "this", next: null}; function pushcontext() { if (!cx.state.context) cx.state.localVars = defaultVars; cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; } function popcontext() { cx.state.localVars = cx.state.context.vars; cx.state.context = cx.state.context.prev; } popcontext.lex = true; function pushlex(type, info) { var result = function() { var state = cx.state; state.lexical = new HaxeLexical(state.indented, cx.stream.column(), type, null, state.lexical, info); }; result.lex = true; return result; } function poplex() { var state = cx.state; if (state.lexical.prev) { if (state.lexical.type == ")") state.indented = state.lexical.indented; state.lexical = state.lexical.prev; } } poplex.lex = true; function expect(wanted) { function f(type) { if (type == wanted) return cont(); else if (wanted == ";") return pass(); else return cont(f); } return f; } function statement(type) { if (type == "@") return cont(metadef); if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex); if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); if (type == "keyword b") return cont(pushlex("form"), statement, poplex); if (type == "{") return cont(pushlex("}"), pushcontext, block, poplex, popcontext); if (type == ";") return cont(); if (type == "attribute") return cont(maybeattribute); if (type == "function") return cont(functiondef); if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"), poplex, statement, poplex); if (type == "variable") return cont(pushlex("stat"), maybelabel); if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), block, poplex, poplex); if (type == "case") return cont(expression, expect(":")); if (type == "default") return cont(expect(":")); if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), statement, poplex, popcontext); if (type == "import") return cont(importdef, expect(";")); if (type == "typedef") return cont(typedef); return pass(pushlex("stat"), expression, expect(";"), poplex); } function expression(type) { if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator); if (type == "type" ) return cont(maybeoperator); if (type == "function") return cont(functiondef); if (type == "keyword c") return cont(maybeexpression); if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeoperator); if (type == "operator") return cont(expression); if (type == "[") return cont(pushlex("]"), commasep(maybeexpression, "]"), poplex, maybeoperator); if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeoperator); return cont(); } function maybeexpression(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expression); } function maybeoperator(type, value) { if (type == "operator" && /\+\+|--/.test(value)) return cont(maybeoperator); if (type == "operator" || type == ":") return cont(expression); if (type == ";") return; if (type == "(") return cont(pushlex(")"), commasep(expression, ")"), poplex, maybeoperator); if (type == ".") return cont(property, maybeoperator); if (type == "[") return cont(pushlex("]"), expression, expect("]"), poplex, maybeoperator); } function maybeattribute(type) { if (type == "attribute") return cont(maybeattribute); if (type == "function") return cont(functiondef); if (type == "var") return cont(vardef1); } function metadef(type) { if(type == ":") return cont(metadef); if(type == "variable") return cont(metadef); if(type == "(") return cont(pushlex(")"), commasep(metaargs, ")"), poplex, statement); } function metaargs(type) { if(type == "variable") return cont(); } function importdef (type, value) { if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } else if(type == "variable" || type == "property" || type == "." || value == "*") return cont(importdef); } function typedef (type, value) { if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } else if (type == "type" && /[A-Z]/.test(value.charAt(0))) { return cont(); } } function maybelabel(type) { if (type == ":") return cont(poplex, statement); return pass(maybeoperator, expect(";"), poplex); } function property(type) { if (type == "variable") {cx.marked = "property"; return cont();} } function objprop(type) { if (type == "variable") cx.marked = "property"; if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expression); } function commasep(what, end) { function proceed(type) { if (type == ",") return cont(what, proceed); if (type == end) return cont(); return cont(expect(end)); } return function(type) { if (type == end) return cont(); else return pass(what, proceed); }; } function block(type) { if (type == "}") return cont(); return pass(statement, block); } function vardef1(type, value) { if (type == "variable"){register(value); return cont(typeuse, vardef2);} return cont(); } function vardef2(type, value) { if (value == "=") return cont(expression, vardef2); if (type == ",") return cont(vardef1); } function forspec1(type, value) { if (type == "variable") { register(value); return cont(forin, expression) } else { return pass() } } function forin(_type, value) { if (value == "in") return cont(); } function functiondef(type, value) { //function names starting with upper-case letters are recognised as types, so cludging them together here. if (type == "variable" || type == "type") {register(value); return cont(functiondef);} if (value == "new") return cont(functiondef); if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, typeuse, statement, popcontext); } function typeuse(type) { if(type == ":") return cont(typestring); } function typestring(type) { if(type == "type") return cont(); if(type == "variable") return cont(); if(type == "{") return cont(pushlex("}"), commasep(typeprop, "}"), poplex); } function typeprop(type) { if(type == "variable") return cont(typeuse); } function funarg(type, value) { if (type == "variable") {register(value); return cont(typeuse);} } // Interface return { startState: function(basecolumn) { var defaulttypes = ["Int", "Float", "String", "Void", "Std", "Bool", "Dynamic", "Array"]; var state = { tokenize: haxeTokenBase, reAllowed: true, kwAllowed: true, cc: [], lexical: new HaxeLexical((basecolumn || 0) - indentUnit, 0, "block", false), localVars: parserConfig.localVars, importedtypes: defaulttypes, context: parserConfig.localVars && {vars: parserConfig.localVars}, indented: 0 }; if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; return state; }, token: function(stream, state) { if (stream.sol()) { if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; state.indented = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (type == "comment") return style; state.reAllowed = !!(type == "operator" || type == "keyword c" || type.match(/^[\[{}\(,;:]$/)); state.kwAllowed = type != '.'; return parseHaxe(state, style, type, content, stream); }, indent: function(state, textAfter) { if (state.tokenize != haxeTokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; var type = lexical.type, closing = firstChar == type; if (type == "vardef") return lexical.indented + 4; else if (type == "form" && firstChar == "{") return lexical.indented; else if (type == "stat" || type == "form") return lexical.indented + indentUnit; else if (lexical.info == "switch" && !closing) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); else if (lexical.align) return lexical.column + (closing ? 0 : 1); else return lexical.indented + (closing ? 0 : indentUnit); }, electricChars: "{}", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-haxe", "haxe"); CodeMirror.defineMode("hxml", function () { return { startState: function () { return { define: false, inString: false }; }, token: function (stream, state) { var ch = stream.peek(); var sol = stream.sol(); ///* comments */ if (ch == "#") { stream.skipToEnd(); return "comment"; } if (sol && ch == "-") { var style = "variable-2"; stream.eat(/-/); if (stream.peek() == "-") { stream.eat(/-/); style = "keyword a"; } if (stream.peek() == "D") { stream.eat(/[D]/); style = "keyword c"; state.define = true; } stream.eatWhile(/[A-Z]/i); return style; } var ch = stream.peek(); if (state.inString == false && ch == "'") { state.inString = true; stream.next(); } if (state.inString == true) { if (stream.skipTo("'")) ; else { stream.skipToEnd(); } if (stream.peek() == "'") { stream.next(); state.inString = false; } return "string"; } stream.next(); return null; }, lineComment: "#" }; }); CodeMirror.defineMIME("text/x-hxml", "hxml"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, htmlmixed, multiplex); })(function(CodeMirror) { CodeMirror.defineMode("htmlembedded", function(config, parserConfig) { var closeComment = parserConfig.closeComment || "--%>"; return CodeMirror.multiplexingMode(CodeMirror.getMode(config, "htmlmixed"), { open: parserConfig.openComment || "<%--", close: closeComment, delimStyle: "comment", mode: {token: function(stream) { stream.skipTo(closeComment) || stream.skipToEnd(); return "comment" }} }, { open: parserConfig.open || parserConfig.scriptStartRegex || "<%", close: parserConfig.close || parserConfig.scriptEndRegex || "%>", mode: CodeMirror.getMode(config, parserConfig.scriptingModeSpec) }); }, "htmlmixed"); CodeMirror.defineMIME("application/x-ejs", {name: "htmlembedded", scriptingModeSpec:"javascript"}); CodeMirror.defineMIME("application/x-aspx", {name: "htmlembedded", scriptingModeSpec:"text/x-csharp"}); CodeMirror.defineMIME("application/x-jsp", {name: "htmlembedded", scriptingModeSpec:"text/x-java"}); CodeMirror.defineMIME("application/x-erb", {name: "htmlembedded", scriptingModeSpec:"ruby"}); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("http", function() { function failFirstLine(stream, state) { stream.skipToEnd(); state.cur = header; return "error"; } function start(stream, state) { if (stream.match(/^HTTP\/\d\.\d/)) { state.cur = responseStatusCode; return "keyword"; } else if (stream.match(/^[A-Z]+/) && /[ \t]/.test(stream.peek())) { state.cur = requestPath; return "keyword"; } else { return failFirstLine(stream, state); } } function responseStatusCode(stream, state) { var code = stream.match(/^\d+/); if (!code) return failFirstLine(stream, state); state.cur = responseStatusText; var status = Number(code[0]); if (status >= 100 && status < 200) { return "positive informational"; } else if (status >= 200 && status < 300) { return "positive success"; } else if (status >= 300 && status < 400) { return "positive redirect"; } else if (status >= 400 && status < 500) { return "negative client-error"; } else if (status >= 500 && status < 600) { return "negative server-error"; } else { return "error"; } } function responseStatusText(stream, state) { stream.skipToEnd(); state.cur = header; return null; } function requestPath(stream, state) { stream.eatWhile(/\S/); state.cur = requestProtocol; return "string-2"; } function requestProtocol(stream, state) { if (stream.match(/^HTTP\/\d\.\d$/)) { state.cur = header; return "keyword"; } else { return failFirstLine(stream, state); } } function header(stream) { if (stream.sol() && !stream.eat(/[ \t]/)) { if (stream.match(/^.*?:/)) { return "atom"; } else { stream.skipToEnd(); return "error"; } } else { stream.skipToEnd(); return "string"; } } function body(stream) { stream.skipToEnd(); return null; } return { token: function(stream, state) { var cur = state.cur; if (cur != header && cur != body && stream.eatSpace()) return null; return cur(stream, state); }, blankLine: function(state) { state.cur = body; }, startState: function() { return {cur: start}; } }; }); CodeMirror.defineMIME("message/http", "http"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { function wordRegexp(words) { return new RegExp('^((' + words.join(')|(') + '))\\b', 'i'); } var builtinArray = [ 'a_correlate', 'abs', 'acos', 'adapt_hist_equal', 'alog', 'alog2', 'alog10', 'amoeba', 'annotate', 'app_user_dir', 'app_user_dir_query', 'arg_present', 'array_equal', 'array_indices', 'arrow', 'ascii_template', 'asin', 'assoc', 'atan', 'axis', 'axis', 'bandpass_filter', 'bandreject_filter', 'barplot', 'bar_plot', 'beseli', 'beselj', 'beselk', 'besely', 'beta', 'biginteger', 'bilinear', 'bin_date', 'binary_template', 'bindgen', 'binomial', 'bit_ffs', 'bit_population', 'blas_axpy', 'blk_con', 'boolarr', 'boolean', 'boxplot', 'box_cursor', 'breakpoint', 'broyden', 'bubbleplot', 'butterworth', 'bytarr', 'byte', 'byteorder', 'bytscl', 'c_correlate', 'calendar', 'caldat', 'call_external', 'call_function', 'call_method', 'call_procedure', 'canny', 'catch', 'cd', 'cdf', 'ceil', 'chebyshev', 'check_math', 'chisqr_cvf', 'chisqr_pdf', 'choldc', 'cholsol', 'cindgen', 'cir_3pnt', 'clipboard', 'close', 'clust_wts', 'cluster', 'cluster_tree', 'cmyk_convert', 'code_coverage', 'color_convert', 'color_exchange', 'color_quan', 'color_range_map', 'colorbar', 'colorize_sample', 'colormap_applicable', 'colormap_gradient', 'colormap_rotation', 'colortable', 'comfit', 'command_line_args', 'common', 'compile_opt', 'complex', 'complexarr', 'complexround', 'compute_mesh_normals', 'cond', 'congrid', 'conj', 'constrained_min', 'contour', 'contour', 'convert_coord', 'convol', 'convol_fft', 'coord2to3', 'copy_lun', 'correlate', 'cos', 'cosh', 'cpu', 'cramer', 'createboxplotdata', 'create_cursor', 'create_struct', 'create_view', 'crossp', 'crvlength', 'ct_luminance', 'cti_test', 'cursor', 'curvefit', 'cv_coord', 'cvttobm', 'cw_animate', 'cw_animate_getp', 'cw_animate_load', 'cw_animate_run', 'cw_arcball', 'cw_bgroup', 'cw_clr_index', 'cw_colorsel', 'cw_defroi', 'cw_field', 'cw_filesel', 'cw_form', 'cw_fslider', 'cw_light_editor', 'cw_light_editor_get', 'cw_light_editor_set', 'cw_orient', 'cw_palette_editor', 'cw_palette_editor_get', 'cw_palette_editor_set', 'cw_pdmenu', 'cw_rgbslider', 'cw_tmpl', 'cw_zoom', 'db_exists', 'dblarr', 'dcindgen', 'dcomplex', 'dcomplexarr', 'define_key', 'define_msgblk', 'define_msgblk_from_file', 'defroi', 'defsysv', 'delvar', 'dendro_plot', 'dendrogram', 'deriv', 'derivsig', 'determ', 'device', 'dfpmin', 'diag_matrix', 'dialog_dbconnect', 'dialog_message', 'dialog_pickfile', 'dialog_printersetup', 'dialog_printjob', 'dialog_read_image', 'dialog_write_image', 'dictionary', 'digital_filter', 'dilate', 'dindgen', 'dissolve', 'dist', 'distance_measure', 'dlm_load', 'dlm_register', 'doc_library', 'double', 'draw_roi', 'edge_dog', 'efont', 'eigenql', 'eigenvec', 'ellipse', 'elmhes', 'emboss', 'empty', 'enable_sysrtn', 'eof', 'eos', 'erase', 'erf', 'erfc', 'erfcx', 'erode', 'errorplot', 'errplot', 'estimator_filter', 'execute', 'exit', 'exp', 'expand', 'expand_path', 'expint', 'extrac', 'extract_slice', 'f_cvf', 'f_pdf', 'factorial', 'fft', 'file_basename', 'file_chmod', 'file_copy', 'file_delete', 'file_dirname', 'file_expand_path', 'file_gunzip', 'file_gzip', 'file_info', 'file_lines', 'file_link', 'file_mkdir', 'file_move', 'file_poll_input', 'file_readlink', 'file_same', 'file_search', 'file_tar', 'file_test', 'file_untar', 'file_unzip', 'file_which', 'file_zip', 'filepath', 'findgen', 'finite', 'fix', 'flick', 'float', 'floor', 'flow3', 'fltarr', 'flush', 'format_axis_values', 'forward_function', 'free_lun', 'fstat', 'fulstr', 'funct', 'function', 'fv_test', 'fx_root', 'fz_roots', 'gamma', 'gamma_ct', 'gauss_cvf', 'gauss_pdf', 'gauss_smooth', 'gauss2dfit', 'gaussfit', 'gaussian_function', 'gaussint', 'get_drive_list', 'get_dxf_objects', 'get_kbrd', 'get_login_info', 'get_lun', 'get_screen_size', 'getenv', 'getwindows', 'greg2jul', 'grib', 'grid_input', 'grid_tps', 'grid3', 'griddata', 'gs_iter', 'h_eq_ct', 'h_eq_int', 'hanning', 'hash', 'hdf', 'hdf5', 'heap_free', 'heap_gc', 'heap_nosave', 'heap_refcount', 'heap_save', 'help', 'hilbert', 'hist_2d', 'hist_equal', 'histogram', 'hls', 'hough', 'hqr', 'hsv', 'i18n_multibytetoutf8', 'i18n_multibytetowidechar', 'i18n_utf8tomultibyte', 'i18n_widechartomultibyte', 'ibeta', 'icontour', 'iconvertcoord', 'idelete', 'identity', 'idl_base64', 'idl_container', 'idl_validname', 'idlexbr_assistant', 'idlitsys_createtool', 'idlunit', 'iellipse', 'igamma', 'igetcurrent', 'igetdata', 'igetid', 'igetproperty', 'iimage', 'image', 'image_cont', 'image_statistics', 'image_threshold', 'imaginary', 'imap', 'indgen', 'int_2d', 'int_3d', 'int_tabulated', 'intarr', 'interpol', 'interpolate', 'interval_volume', 'invert', 'ioctl', 'iopen', 'ir_filter', 'iplot', 'ipolygon', 'ipolyline', 'iputdata', 'iregister', 'ireset', 'iresolve', 'irotate', 'isa', 'isave', 'iscale', 'isetcurrent', 'isetproperty', 'ishft', 'isocontour', 'isosurface', 'isurface', 'itext', 'itranslate', 'ivector', 'ivolume', 'izoom', 'journal', 'json_parse', 'json_serialize', 'jul2greg', 'julday', 'keyword_set', 'krig2d', 'kurtosis', 'kw_test', 'l64indgen', 'la_choldc', 'la_cholmprove', 'la_cholsol', 'la_determ', 'la_eigenproblem', 'la_eigenql', 'la_eigenvec', 'la_elmhes', 'la_gm_linear_model', 'la_hqr', 'la_invert', 'la_least_square_equality', 'la_least_squares', 'la_linear_equation', 'la_ludc', 'la_lumprove', 'la_lusol', 'la_svd', 'la_tridc', 'la_trimprove', 'la_triql', 'la_trired', 'la_trisol', 'label_date', 'label_region', 'ladfit', 'laguerre', 'lambda', 'lambdap', 'lambertw', 'laplacian', 'least_squares_filter', 'leefilt', 'legend', 'legendre', 'linbcg', 'lindgen', 'linfit', 'linkimage', 'list', 'll_arc_distance', 'lmfit', 'lmgr', 'lngamma', 'lnp_test', 'loadct', 'locale_get', 'logical_and', 'logical_or', 'logical_true', 'lon64arr', 'lonarr', 'long', 'long64', 'lsode', 'lu_complex', 'ludc', 'lumprove', 'lusol', 'm_correlate', 'machar', 'make_array', 'make_dll', 'make_rt', 'map', 'mapcontinents', 'mapgrid', 'map_2points', 'map_continents', 'map_grid', 'map_image', 'map_patch', 'map_proj_forward', 'map_proj_image', 'map_proj_info', 'map_proj_init', 'map_proj_inverse', 'map_set', 'matrix_multiply', 'matrix_power', 'max', 'md_test', 'mean', 'meanabsdev', 'mean_filter', 'median', 'memory', 'mesh_clip', 'mesh_decimate', 'mesh_issolid', 'mesh_merge', 'mesh_numtriangles', 'mesh_obj', 'mesh_smooth', 'mesh_surfacearea', 'mesh_validate', 'mesh_volume', 'message', 'min', 'min_curve_surf', 'mk_html_help', 'modifyct', 'moment', 'morph_close', 'morph_distance', 'morph_gradient', 'morph_hitormiss', 'morph_open', 'morph_thin', 'morph_tophat', 'multi', 'n_elements', 'n_params', 'n_tags', 'ncdf', 'newton', 'noise_hurl', 'noise_pick', 'noise_scatter', 'noise_slur', 'norm', 'obj_class', 'obj_destroy', 'obj_hasmethod', 'obj_isa', 'obj_new', 'obj_valid', 'objarr', 'on_error', 'on_ioerror', 'online_help', 'openr', 'openu', 'openw', 'oplot', 'oploterr', 'orderedhash', 'p_correlate', 'parse_url', 'particle_trace', 'path_cache', 'path_sep', 'pcomp', 'plot', 'plot3d', 'plot', 'plot_3dbox', 'plot_field', 'ploterr', 'plots', 'polar_contour', 'polar_surface', 'polyfill', 'polyshade', 'pnt_line', 'point_lun', 'polarplot', 'poly', 'poly_2d', 'poly_area', 'poly_fit', 'polyfillv', 'polygon', 'polyline', 'polywarp', 'popd', 'powell', 'pref_commit', 'pref_get', 'pref_set', 'prewitt', 'primes', 'print', 'printf', 'printd', 'pro', 'product', 'profile', 'profiler', 'profiles', 'project_vol', 'ps_show_fonts', 'psafm', 'pseudo', 'ptr_free', 'ptr_new', 'ptr_valid', 'ptrarr', 'pushd', 'qgrid3', 'qhull', 'qromb', 'qromo', 'qsimp', 'query_*', 'query_ascii', 'query_bmp', 'query_csv', 'query_dicom', 'query_gif', 'query_image', 'query_jpeg', 'query_jpeg2000', 'query_mrsid', 'query_pict', 'query_png', 'query_ppm', 'query_srf', 'query_tiff', 'query_video', 'query_wav', 'r_correlate', 'r_test', 'radon', 'randomn', 'randomu', 'ranks', 'rdpix', 'read', 'readf', 'read_ascii', 'read_binary', 'read_bmp', 'read_csv', 'read_dicom', 'read_gif', 'read_image', 'read_interfile', 'read_jpeg', 'read_jpeg2000', 'read_mrsid', 'read_pict', 'read_png', 'read_ppm', 'read_spr', 'read_srf', 'read_sylk', 'read_tiff', 'read_video', 'read_wav', 'read_wave', 'read_x11_bitmap', 'read_xwd', 'reads', 'readu', 'real_part', 'rebin', 'recall_commands', 'recon3', 'reduce_colors', 'reform', 'region_grow', 'register_cursor', 'regress', 'replicate', 'replicate_inplace', 'resolve_all', 'resolve_routine', 'restore', 'retall', 'return', 'reverse', 'rk4', 'roberts', 'rot', 'rotate', 'round', 'routine_filepath', 'routine_info', 'rs_test', 's_test', 'save', 'savgol', 'scale3', 'scale3d', 'scatterplot', 'scatterplot3d', 'scope_level', 'scope_traceback', 'scope_varfetch', 'scope_varname', 'search2d', 'search3d', 'sem_create', 'sem_delete', 'sem_lock', 'sem_release', 'set_plot', 'set_shading', 'setenv', 'sfit', 'shade_surf', 'shade_surf_irr', 'shade_volume', 'shift', 'shift_diff', 'shmdebug', 'shmmap', 'shmunmap', 'shmvar', 'show3', 'showfont', 'signum', 'simplex', 'sin', 'sindgen', 'sinh', 'size', 'skewness', 'skip_lun', 'slicer3', 'slide_image', 'smooth', 'sobel', 'socket', 'sort', 'spawn', 'sph_4pnt', 'sph_scat', 'spher_harm', 'spl_init', 'spl_interp', 'spline', 'spline_p', 'sprsab', 'sprsax', 'sprsin', 'sprstp', 'sqrt', 'standardize', 'stddev', 'stop', 'strarr', 'strcmp', 'strcompress', 'streamline', 'streamline', 'stregex', 'stretch', 'string', 'strjoin', 'strlen', 'strlowcase', 'strmatch', 'strmessage', 'strmid', 'strpos', 'strput', 'strsplit', 'strtrim', 'struct_assign', 'struct_hide', 'strupcase', 'surface', 'surface', 'surfr', 'svdc', 'svdfit', 'svsol', 'swap_endian', 'swap_endian_inplace', 'symbol', 'systime', 't_cvf', 't_pdf', 't3d', 'tag_names', 'tan', 'tanh', 'tek_color', 'temporary', 'terminal_size', 'tetra_clip', 'tetra_surface', 'tetra_volume', 'text', 'thin', 'thread', 'threed', 'tic', 'time_test2', 'timegen', 'timer', 'timestamp', 'timestamptovalues', 'tm_test', 'toc', 'total', 'trace', 'transpose', 'tri_surf', 'triangulate', 'trigrid', 'triql', 'trired', 'trisol', 'truncate_lun', 'ts_coef', 'ts_diff', 'ts_fcast', 'ts_smooth', 'tv', 'tvcrs', 'tvlct', 'tvrd', 'tvscl', 'typename', 'uindgen', 'uint', 'uintarr', 'ul64indgen', 'ulindgen', 'ulon64arr', 'ulonarr', 'ulong', 'ulong64', 'uniq', 'unsharp_mask', 'usersym', 'value_locate', 'variance', 'vector', 'vector_field', 'vel', 'velovect', 'vert_t3d', 'voigt', 'volume', 'voronoi', 'voxel_proj', 'wait', 'warp_tri', 'watershed', 'wdelete', 'wf_draw', 'where', 'widget_base', 'widget_button', 'widget_combobox', 'widget_control', 'widget_displaycontextmenu', 'widget_draw', 'widget_droplist', 'widget_event', 'widget_info', 'widget_label', 'widget_list', 'widget_propertysheet', 'widget_slider', 'widget_tab', 'widget_table', 'widget_text', 'widget_tree', 'widget_tree_move', 'widget_window', 'wiener_filter', 'window', 'window', 'write_bmp', 'write_csv', 'write_gif', 'write_image', 'write_jpeg', 'write_jpeg2000', 'write_nrif', 'write_pict', 'write_png', 'write_ppm', 'write_spr', 'write_srf', 'write_sylk', 'write_tiff', 'write_video', 'write_wav', 'write_wave', 'writeu', 'wset', 'wshow', 'wtn', 'wv_applet', 'wv_cwt', 'wv_cw_wavelet', 'wv_denoise', 'wv_dwt', 'wv_fn_coiflet', 'wv_fn_daubechies', 'wv_fn_gaussian', 'wv_fn_haar', 'wv_fn_morlet', 'wv_fn_paul', 'wv_fn_symlet', 'wv_import_data', 'wv_import_wavelet', 'wv_plot3d_wps', 'wv_plot_multires', 'wv_pwt', 'wv_tool_denoise', 'xbm_edit', 'xdisplayfile', 'xdxf', 'xfont', 'xinteranimate', 'xloadct', 'xmanager', 'xmng_tmpl', 'xmtool', 'xobjview', 'xobjview_rotate', 'xobjview_write_image', 'xpalette', 'xpcolor', 'xplot3d', 'xregistered', 'xroi', 'xsq_test', 'xsurface', 'xvaredit', 'xvolume', 'xvolume_rotate', 'xvolume_write_image', 'xyouts', 'zlib_compress', 'zlib_uncompress', 'zoom', 'zoom_24' ]; var builtins = wordRegexp(builtinArray); var keywordArray = [ 'begin', 'end', 'endcase', 'endfor', 'endwhile', 'endif', 'endrep', 'endforeach', 'break', 'case', 'continue', 'for', 'foreach', 'goto', 'if', 'then', 'else', 'repeat', 'until', 'switch', 'while', 'do', 'pro', 'function' ]; var keywords = wordRegexp(keywordArray); CodeMirror.registerHelper("hintWords", "idl", builtinArray.concat(keywordArray)); var identifiers = new RegExp('^[_a-z\xa1-\uffff][_a-z0-9\xa1-\uffff]*', 'i'); var singleOperators = /[+\-*&=<>\/@#~$]/; var boolOperators = new RegExp('(and|or|eq|lt|le|gt|ge|ne|not)', 'i'); function tokenBase(stream) { // whitespaces if (stream.eatSpace()) return null; // Handle one line Comments if (stream.match(';')) { stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^[0-9\.+-]/, false)) { if (stream.match(/^[+-]?0x[0-9a-fA-F]+/)) return 'number'; if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) return 'number'; if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) return 'number'; } // Handle Strings if (stream.match(/^"([^"]|(""))*"/)) { return 'string'; } if (stream.match(/^'([^']|(''))*'/)) { return 'string'; } // Handle words if (stream.match(keywords)) { return 'keyword'; } if (stream.match(builtins)) { return 'builtin'; } if (stream.match(identifiers)) { return 'variable'; } if (stream.match(singleOperators) || stream.match(boolOperators)) { return 'operator'; } // Handle non-detected items stream.next(); return null; } CodeMirror.defineMode('idl', function() { return { token: function(stream) { return tokenBase(stream); } }; }); CodeMirror.defineMIME('text/x-idl', 'idl'); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("jinja2", function() { var keywords = ["and", "as", "block", "endblock", "by", "cycle", "debug", "else", "elif", "extends", "filter", "endfilter", "firstof", "for", "endfor", "if", "endif", "ifchanged", "endifchanged", "ifequal", "endifequal", "ifnotequal", "endifnotequal", "in", "include", "load", "not", "now", "or", "parsed", "regroup", "reversed", "spaceless", "endspaceless", "ssi", "templatetag", "openblock", "closeblock", "openvariable", "closevariable", "openbrace", "closebrace", "opencomment", "closecomment", "widthratio", "url", "with", "endwith", "get_current_language", "trans", "endtrans", "noop", "blocktrans", "endblocktrans", "get_available_languages", "get_current_language_bidi", "plural"], operator = /^[+\-*&%=<>!?|~^]/, sign = /^[:\[\(\{]/, atom = ["true", "false"], number = /^(\d[+\-\*\/])?\d+(\.\d+)?/; keywords = new RegExp("((" + keywords.join(")|(") + "))\\b"); atom = new RegExp("((" + atom.join(")|(") + "))\\b"); function tokenBase (stream, state) { var ch = stream.peek(); //Comment if (state.incomment) { if(!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Tag } else if (state.intag) { //After operator if(state.operator) { state.operator = false; if(stream.match(atom)) { return "atom"; } if(stream.match(number)) { return "number"; } } //After sign if(state.sign) { state.sign = false; if(stream.match(atom)) { return "atom"; } if(stream.match(number)) { return "number"; } } if(state.instring) { if(ch == state.instring) { state.instring = false; } stream.next(); return "string"; } else if(ch == "'" || ch == '"') { state.instring = ch; stream.next(); return "string"; } else if(stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) { state.intag = false; return "tag"; } else if(stream.match(operator)) { state.operator = true; return "operator"; } else if(stream.match(sign)) { state.sign = true; } else { if(stream.eat(" ") || stream.sol()) { if(stream.match(keywords)) { return "keyword"; } if(stream.match(atom)) { return "atom"; } if(stream.match(number)) { return "number"; } if(stream.sol()) { stream.next(); } } else { stream.next(); } } return "variable"; } else if (stream.eat("{")) { if (stream.eat("#")) { state.incomment = true; if(!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Open tag } else if (ch = stream.eat(/\{|%/)) { //Cache close tag state.intag = ch; if(ch == "{") { state.intag = "}"; } stream.eat("-"); return "tag"; } } stream.next(); } return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { return state.tokenize(stream, state); }, blockCommentStart: "{#", blockCommentEnd: "#}" }; }); CodeMirror.defineMIME("text/jinja2", "jinja2"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, xml, javascript); })(function(CodeMirror) { // Depth means the amount of open braces in JS context, in XML // context 0 means not in tag, 1 means in tag, and 2 means in tag // and js block comment. function Context(state, mode, depth, prev) { this.state = state; this.mode = mode; this.depth = depth; this.prev = prev; } function copyContext(context) { return new Context(CodeMirror.copyState(context.mode, context.state), context.mode, context.depth, context.prev && copyContext(context.prev)) } CodeMirror.defineMode("jsx", function(config, modeConfig) { var xmlMode = CodeMirror.getMode(config, {name: "xml", allowMissing: true, multilineTagIndentPastTag: false, allowMissingTagName: true}); var jsMode = CodeMirror.getMode(config, modeConfig && modeConfig.base || "javascript"); function flatXMLIndent(state) { var tagName = state.tagName; state.tagName = null; var result = xmlMode.indent(state, "", ""); state.tagName = tagName; return result } function token(stream, state) { if (state.context.mode == xmlMode) return xmlToken(stream, state, state.context) else return jsToken(stream, state, state.context) } function xmlToken(stream, state, cx) { if (cx.depth == 2) { // Inside a JS /* */ comment if (stream.match(/^.*?\*\//)) cx.depth = 1; else stream.skipToEnd(); return "comment" } if (stream.peek() == "{") { xmlMode.skipAttribute(cx.state); var indent = flatXMLIndent(cx.state), xmlContext = cx.state.context; // If JS starts on same line as tag if (xmlContext && stream.match(/^[^>]*>\s*$/, false)) { while (xmlContext.prev && !xmlContext.startOfLine) xmlContext = xmlContext.prev; // If tag starts the line, use XML indentation level if (xmlContext.startOfLine) indent -= config.indentUnit; // Else use JS indentation level else if (cx.prev.state.lexical) indent = cx.prev.state.lexical.indented; // Else if inside of tag } else if (cx.depth == 1) { indent += config.indentUnit; } state.context = new Context(CodeMirror.startState(jsMode, indent), jsMode, 0, state.context); return null } if (cx.depth == 1) { // Inside of tag if (stream.peek() == "<") { // Tag inside of tag xmlMode.skipAttribute(cx.state); state.context = new Context(CodeMirror.startState(xmlMode, flatXMLIndent(cx.state)), xmlMode, 0, state.context); return null } else if (stream.match("//")) { stream.skipToEnd(); return "comment" } else if (stream.match("/*")) { cx.depth = 2; return token(stream, state) } } var style = xmlMode.token(stream, cx.state), cur = stream.current(), stop; if (/\btag\b/.test(style)) { if (/>$/.test(cur)) { if (cx.state.context) cx.depth = 0; else state.context = state.context.prev; } else if (/^ -1) { stream.backUp(cur.length - stop); } return style } function jsToken(stream, state, cx) { if (stream.peek() == "<" && jsMode.expressionAllowed(stream, cx.state)) { jsMode.skipExpression(cx.state); state.context = new Context(CodeMirror.startState(xmlMode, jsMode.indent(cx.state, "", "")), xmlMode, 0, state.context); return null } var style = jsMode.token(stream, cx.state); if (!style && cx.depth != null) { var cur = stream.current(); if (cur == "{") { cx.depth++; } else if (cur == "}") { if (--cx.depth == 0) state.context = state.context.prev; } } return style } return { startState: function() { return {context: new Context(CodeMirror.startState(jsMode), jsMode)} }, copyState: function(state) { return {context: copyContext(state.context)} }, token: token, indent: function(state, textAfter, fullLine) { return state.context.mode.indent(state.context.state, textAfter, fullLine) }, innerMode: function(state) { return state.context } } }, "xml", "javascript"); CodeMirror.defineMIME("text/jsx", "jsx"); CodeMirror.defineMIME("text/typescript-jsx", {name: "jsx", base: {name: "javascript", typescript: true}}); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("julia", function(config, parserConf) { function wordRegexp(words, end) { if (typeof end === "undefined") { end = "\\b"; } return new RegExp("^((" + words.join(")|(") + "))" + end); } var octChar = "\\\\[0-7]{1,3}"; var hexChar = "\\\\x[A-Fa-f0-9]{1,2}"; var sChar = "\\\\[abefnrtv0%?'\"\\\\]"; var uChar = "([^\\u0027\\u005C\\uD800-\\uDFFF]|[\\uD800-\\uDFFF][\\uDC00-\\uDFFF])"; var operators = parserConf.operators || wordRegexp([ "[<>]:", "[<>=]=", "<<=?", ">>>?=?", "=>", "->", "\\/\\/", "[\\\\%*+\\-<>!=\\/^|&\\u00F7\\u22BB]=?", "\\?", "\\$", "~", ":", "\\u00D7", "\\u2208", "\\u2209", "\\u220B", "\\u220C", "\\u2218", "\\u221A", "\\u221B", "\\u2229", "\\u222A", "\\u2260", "\\u2264", "\\u2265", "\\u2286", "\\u2288", "\\u228A", "\\u22C5", "\\b(in|isa)\\b(?!\.?\\()"], ""); var delimiters = parserConf.delimiters || /^[;,()[\]{}]/; var identifiers = parserConf.identifiers || /^[_A-Za-z\u00A1-\u2217\u2219-\uFFFF][\w\u00A1-\u2217\u2219-\uFFFF]*!*/; var chars = wordRegexp([octChar, hexChar, sChar, uChar], "'"); var openersList = ["begin", "function", "type", "struct", "immutable", "let", "macro", "for", "while", "quote", "if", "else", "elseif", "try", "finally", "catch", "do"]; var closersList = ["end", "else", "elseif", "catch", "finally"]; var keywordsList = ["if", "else", "elseif", "while", "for", "begin", "let", "end", "do", "try", "catch", "finally", "return", "break", "continue", "global", "local", "const", "export", "import", "importall", "using", "function", "where", "macro", "module", "baremodule", "struct", "type", "mutable", "immutable", "quote", "typealias", "abstract", "primitive", "bitstype"]; var builtinsList = ["true", "false", "nothing", "NaN", "Inf"]; CodeMirror.registerHelper("hintWords", "julia", keywordsList.concat(builtinsList)); var openers = wordRegexp(openersList); var closers = wordRegexp(closersList); var keywords = wordRegexp(keywordsList); var builtins = wordRegexp(builtinsList); var macro = /^@[_A-Za-z][\w]*/; var symbol = /^:[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/; var stringPrefixes = /^(`|([_A-Za-z\u00A1-\uFFFF]*"("")?))/; function inArray(state) { return (state.nestedArrays > 0); } function inGenerator(state) { return (state.nestedGenerators > 0); } function currentScope(state, n) { if (typeof(n) === "undefined") { n = 0; } if (state.scopes.length <= n) { return null; } return state.scopes[state.scopes.length - (n + 1)]; } // tokenizers function tokenBase(stream, state) { // Handle multiline comments if (stream.match(/^#=/, false)) { state.tokenize = tokenComment; return state.tokenize(stream, state); } // Handle scope changes var leavingExpr = state.leavingExpr; if (stream.sol()) { leavingExpr = false; } state.leavingExpr = false; if (leavingExpr) { if (stream.match(/^'+/)) { return "operator"; } } if (stream.match(/\.{4,}/)) { return "error"; } else if (stream.match(/\.{1,3}/)) { return "operator"; } if (stream.eatSpace()) { return null; } var ch = stream.peek(); // Handle single line comments if (ch === '#') { stream.skipToEnd(); return "comment"; } if (ch === '[') { state.scopes.push('['); state.nestedArrays++; } if (ch === '(') { state.scopes.push('('); state.nestedGenerators++; } if (inArray(state) && ch === ']') { while (state.scopes.length && currentScope(state) !== "[") { state.scopes.pop(); } state.scopes.pop(); state.nestedArrays--; state.leavingExpr = true; } if (inGenerator(state) && ch === ')') { while (state.scopes.length && currentScope(state) !== "(") { state.scopes.pop(); } state.scopes.pop(); state.nestedGenerators--; state.leavingExpr = true; } if (inArray(state)) { if (state.lastToken == "end" && stream.match(/^:/)) { return "operator"; } if (stream.match(/^end/)) { return "number"; } } var match; if (match = stream.match(openers, false)) { state.scopes.push(match[0]); } if (stream.match(closers, false)) { state.scopes.pop(); } // Handle type annotations if (stream.match(/^::(?![:\$])/)) { state.tokenize = tokenAnnotation; return state.tokenize(stream, state); } // Handle symbols if (!leavingExpr && stream.match(symbol) || stream.match(/:([<>]:|<<=?|>>>?=?|->|\/\/|\.{2,3}|[\.\\%*+\-<>!\/^|&]=?|[~\?\$])/)) { return "builtin"; } // Handle parametric types //if (stream.match(/^{[^}]*}(?=\()/)) { // return "builtin"; //} // Handle operators and Delimiters if (stream.match(operators)) { return "operator"; } // Handle Number Literals if (stream.match(/^\.?\d/, false)) { var imMatcher = RegExp(/^im\b/); var numberLiteral = false; if (stream.match(/^0x\.[0-9a-f_]+p[\+\-]?[_\d]+/i)) { numberLiteral = true; } // Integers if (stream.match(/^0x[0-9a-f_]+/i)) { numberLiteral = true; } // Hex if (stream.match(/^0b[01_]+/i)) { numberLiteral = true; } // Binary if (stream.match(/^0o[0-7_]+/i)) { numberLiteral = true; } // Octal // Floats if (stream.match(/^(?:(?:\d[_\d]*)?\.(?!\.)(?:\d[_\d]*)?|\d[_\d]*\.(?!\.)(?:\d[_\d]*))?([Eef][\+\-]?[_\d]+)?/i)) { numberLiteral = true; } if (stream.match(/^\d[_\d]*(e[\+\-]?\d+)?/i)) { numberLiteral = true; } // Decimal if (numberLiteral) { // Integer literals may be "long" stream.match(imMatcher); state.leavingExpr = true; return "number"; } } // Handle Chars if (stream.match(/^'/)) { state.tokenize = tokenChar; return state.tokenize(stream, state); } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } if (stream.match(macro)) { return "meta"; } if (stream.match(delimiters)) { return null; } if (stream.match(keywords)) { return "keyword"; } if (stream.match(builtins)) { return "builtin"; } var isDefinition = state.isDefinition || state.lastToken == "function" || state.lastToken == "macro" || state.lastToken == "type" || state.lastToken == "struct" || state.lastToken == "immutable"; if (stream.match(identifiers)) { if (isDefinition) { if (stream.peek() === '.') { state.isDefinition = true; return "variable"; } state.isDefinition = false; return "def"; } if (stream.match(/^({[^}]*})*\(/, false)) { state.tokenize = tokenCallOrDef; return state.tokenize(stream, state); } state.leavingExpr = true; return "variable"; } // Handle non-detected items stream.next(); return "error"; } function tokenCallOrDef(stream, state) { for (;;) { var match = stream.match(/^(\(\s*)/), charsAdvanced = 0; if (match) { if (state.firstParenPos < 0) state.firstParenPos = state.scopes.length; state.scopes.push('('); charsAdvanced += match[1].length; } if (currentScope(state) == '(' && stream.match(/^\)/)) { state.scopes.pop(); charsAdvanced += 1; if (state.scopes.length <= state.firstParenPos) { var isDefinition = stream.match(/^(\s*where\s+[^\s=]+)*\s*?=(?!=)/, false); stream.backUp(charsAdvanced); state.firstParenPos = -1; state.tokenize = tokenBase; if (isDefinition) return "def"; return "builtin"; } } // Unfortunately javascript does not support multiline strings, so we have // to undo anything done upto here if a function call or definition splits // over two or more lines. if (stream.match(/^$/g, false)) { stream.backUp(charsAdvanced); while (state.scopes.length > state.firstParenPos) state.scopes.pop(); state.firstParenPos = -1; state.tokenize = tokenBase; return "builtin"; } if (!stream.match(/^[^()]+/)) { stream.next(); return null } } } function tokenAnnotation(stream, state) { stream.match(/.*?(?=,|;|{|}|\(|\)|=|$|\s)/); if (stream.match(/^{/)) { state.nestedParameters++; } else if (stream.match(/^}/) && state.nestedParameters > 0) { state.nestedParameters--; } if (state.nestedParameters > 0) { stream.match(/.*?(?={|})/) || stream.next(); } else if (state.nestedParameters == 0) { state.tokenize = tokenBase; } return "builtin"; } function tokenComment(stream, state) { if (stream.match(/^#=/)) { state.nestedComments++; } if (!stream.match(/.*?(?=(#=|=#))/)) { stream.skipToEnd(); } if (stream.match(/^=#/)) { state.nestedComments--; if (state.nestedComments == 0) state.tokenize = tokenBase; } return "comment"; } function tokenChar(stream, state) { var isChar = false, match; if (stream.match(chars)) { isChar = true; } else if (match = stream.match(/\\u([a-f0-9]{1,4})(?=')/i)) { var value = parseInt(match[1], 16); if (value <= 55295 || value >= 57344) { // (U+0,U+D7FF), (U+E000,U+FFFF) isChar = true; stream.next(); } } else if (match = stream.match(/\\U([A-Fa-f0-9]{5,8})(?=')/)) { var value = parseInt(match[1], 16); if (value <= 1114111) { // U+10FFFF isChar = true; stream.next(); } } if (isChar) { state.leavingExpr = true; state.tokenize = tokenBase; return "string"; } if (!stream.match(/^[^']+(?=')/)) { stream.skipToEnd(); } if (stream.match(/^'/)) { state.tokenize = tokenBase; } return "error"; } function tokenStringFactory(delimiter) { if (delimiter.substr(-3) === '"""') { delimiter = '"""'; } else if (delimiter.substr(-1) === '"') { delimiter = '"'; } function tokenString(stream, state) { if (stream.eat('\\')) { stream.next(); } else if (stream.match(delimiter)) { state.tokenize = tokenBase; state.leavingExpr = true; return "string"; } else { stream.eat(/[`"]/); } stream.eatWhile(/[^\\`"]/); return "string"; } return tokenString; } var external = { startState: function() { return { tokenize: tokenBase, scopes: [], lastToken: null, leavingExpr: false, isDefinition: false, nestedArrays: 0, nestedComments: 0, nestedGenerators: 0, nestedParameters: 0, firstParenPos: -1 }; }, token: function(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); if (current && style) { state.lastToken = current; } return style; }, indent: function(state, textAfter) { var delta = 0; if ( textAfter === ']' || textAfter === ')' || /^end\b/.test(textAfter) || /^else/.test(textAfter) || /^catch\b/.test(textAfter) || /^elseif\b/.test(textAfter) || /^finally/.test(textAfter) ) { delta = -1; } return (state.scopes.length + delta) * config.indentUnit; }, electricInput: /\b(end|else|catch|finally)\b/, blockCommentStart: "#=", blockCommentEnd: "=#", lineComment: "#", closeBrackets: "()[]{}\"\"", fold: "indent" }; return external; }); CodeMirror.defineMIME("text/x-julia", "julia"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /** * Link to the project's GitHub page: * https://github.com/duralog/CodeMirror */ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode('livescript', function(){ var tokenBase = function(stream, state) { var next_rule = state.next || "start"; if (next_rule) { state.next = state.next; var nr = Rules[next_rule]; if (nr.splice) { for (var i$ = 0; i$ < nr.length; ++i$) { var r = nr[i$]; if (r.regex && stream.match(r.regex)) { state.next = r.next || state.next; return r.token; } } stream.next(); return 'error'; } if (stream.match(r = Rules[next_rule])) { if (r.regex && stream.match(r.regex)) { state.next = r.next; return r.token; } else { stream.next(); return 'error'; } } } stream.next(); return 'error'; }; var external = { startState: function(){ return { next: 'start', lastToken: {style: null, indent: 0, content: ""} }; }, token: function(stream, state){ while (stream.pos == stream.start) var style = tokenBase(stream, state); state.lastToken = { style: style, indent: stream.indentation(), content: stream.current() }; return style.replace(/\./g, ' '); }, indent: function(state){ var indentation = state.lastToken.indent; if (state.lastToken.content.match(indenter)) { indentation += 2; } return indentation; } }; return external; }); var identifier = '(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*'; var indenter = RegExp('(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*' + identifier + ')?))\\s*$'); var keywordend = '(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))'; var stringfill = { token: 'string', regex: '.+' }; var Rules = { start: [ { token: 'comment.doc', regex: '/\\*', next: 'comment' }, { token: 'comment', regex: '#.*' }, { token: 'keyword', regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend }, { token: 'constant.language', regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend }, { token: 'invalid.illegal', regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend }, { token: 'language.support.class', regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend }, { token: 'language.support.function', regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend }, { token: 'variable.language', regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend }, { token: 'identifier', regex: identifier + '\\s*:(?![:=])' }, { token: 'variable', regex: identifier }, { token: 'keyword.operator', regex: '(?:\\.{3}|\\s+\\?)' }, { token: 'keyword.variable', regex: '(?:@+|::|\\.\\.)', next: 'key' }, { token: 'keyword.operator', regex: '\\.\\s*', next: 'key' }, { token: 'string', regex: '\\\\\\S[^\\s,;)}\\]]*' }, { token: 'string.doc', regex: '\'\'\'', next: 'qdoc' }, { token: 'string.doc', regex: '"""', next: 'qqdoc' }, { token: 'string', regex: '\'', next: 'qstring' }, { token: 'string', regex: '"', next: 'qqstring' }, { token: 'string', regex: '`', next: 'js' }, { token: 'string', regex: '<\\[', next: 'words' }, { token: 'string.regex', regex: '//', next: 'heregex' }, { token: 'string.regex', regex: '\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}', next: 'key' }, { token: 'constant.numeric', regex: '(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)' }, { token: 'lparen', regex: '[({[]' }, { token: 'rparen', regex: '[)}\\]]', next: 'key' }, { token: 'keyword.operator', regex: '\\S+' }, { token: 'text', regex: '\\s+' } ], heregex: [ { token: 'string.regex', regex: '.*?//[gimy$?]{0,4}', next: 'start' }, { token: 'string.regex', regex: '\\s*#{' }, { token: 'comment.regex', regex: '\\s+(?:#.*)?' }, { token: 'string.regex', regex: '\\S+' } ], key: [ { token: 'keyword.operator', regex: '[.?@!]+' }, { token: 'identifier', regex: identifier, next: 'start' }, { token: 'text', regex: '', next: 'start' } ], comment: [ { token: 'comment.doc', regex: '.*?\\*/', next: 'start' }, { token: 'comment.doc', regex: '.+' } ], qdoc: [ { token: 'string', regex: ".*?'''", next: 'key' }, stringfill ], qqdoc: [ { token: 'string', regex: '.*?"""', next: 'key' }, stringfill ], qstring: [ { token: 'string', regex: '[^\\\\\']*(?:\\\\.[^\\\\\']*)*\'', next: 'key' }, stringfill ], qqstring: [ { token: 'string', regex: '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"', next: 'key' }, stringfill ], js: [ { token: 'string', regex: '[^\\\\`]*(?:\\\\.[^\\\\`]*)*`', next: 'key' }, stringfill ], words: [ { token: 'string', regex: '.*?\\]>', next: 'key' }, stringfill ] }; for (var idx in Rules) { var r = Rules[idx]; if (r.splice) { for (var i = 0, len = r.length; i < len; ++i) { var rr = r[i]; if (typeof rr.regex === 'string') { Rules[idx][i].regex = new RegExp('^' + rr.regex); } } } else if (typeof rr.regex === 'string') { Rules[idx].regex = new RegExp('^' + r.regex); } } CodeMirror.defineMIME('text/x-livescript', 'livescript'); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // LUA mode. Ported to CodeMirror 2 from Franciszek Wawrzak's // CodeMirror 1 mode. // highlights keywords, strings, comments (no leveling supported! ("[==[")), tokens, basic indenting (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("lua", function(config, parserConfig) { var indentUnit = config.indentUnit; function prefixRE(words) { return new RegExp("^(?:" + words.join("|") + ")", "i"); } function wordRE(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); } var specials = wordRE(parserConfig.specials || []); // long list of standard functions from lua manual var builtins = wordRE([ "_G","_VERSION","assert","collectgarbage","dofile","error","getfenv","getmetatable","ipairs","load", "loadfile","loadstring","module","next","pairs","pcall","print","rawequal","rawget","rawset","require", "select","setfenv","setmetatable","tonumber","tostring","type","unpack","xpcall", "coroutine.create","coroutine.resume","coroutine.running","coroutine.status","coroutine.wrap","coroutine.yield", "debug.debug","debug.getfenv","debug.gethook","debug.getinfo","debug.getlocal","debug.getmetatable", "debug.getregistry","debug.getupvalue","debug.setfenv","debug.sethook","debug.setlocal","debug.setmetatable", "debug.setupvalue","debug.traceback", "close","flush","lines","read","seek","setvbuf","write", "io.close","io.flush","io.input","io.lines","io.open","io.output","io.popen","io.read","io.stderr","io.stdin", "io.stdout","io.tmpfile","io.type","io.write", "math.abs","math.acos","math.asin","math.atan","math.atan2","math.ceil","math.cos","math.cosh","math.deg", "math.exp","math.floor","math.fmod","math.frexp","math.huge","math.ldexp","math.log","math.log10","math.max", "math.min","math.modf","math.pi","math.pow","math.rad","math.random","math.randomseed","math.sin","math.sinh", "math.sqrt","math.tan","math.tanh", "os.clock","os.date","os.difftime","os.execute","os.exit","os.getenv","os.remove","os.rename","os.setlocale", "os.time","os.tmpname", "package.cpath","package.loaded","package.loaders","package.loadlib","package.path","package.preload", "package.seeall", "string.byte","string.char","string.dump","string.find","string.format","string.gmatch","string.gsub", "string.len","string.lower","string.match","string.rep","string.reverse","string.sub","string.upper", "table.concat","table.insert","table.maxn","table.remove","table.sort" ]); var keywords = wordRE(["and","break","elseif","false","nil","not","or","return", "true","function", "end", "if", "then", "else", "do", "while", "repeat", "until", "for", "in", "local" ]); var indentTokens = wordRE(["function", "if","repeat","do", "\\(", "{"]); var dedentTokens = wordRE(["end", "until", "\\)", "}"]); var dedentPartial = prefixRE(["end", "until", "\\)", "}", "else", "elseif"]); function readBracket(stream) { var level = 0; while (stream.eat("=")) ++level; stream.eat("["); return level; } function normal(stream, state) { var ch = stream.next(); if (ch == "-" && stream.eat("-")) { if (stream.eat("[") && stream.eat("[")) return (state.cur = bracketed(readBracket(stream), "comment"))(stream, state); stream.skipToEnd(); return "comment"; } if (ch == "\"" || ch == "'") return (state.cur = string(ch))(stream, state); if (ch == "[" && /[\[=]/.test(stream.peek())) return (state.cur = bracketed(readBracket(stream), "string"))(stream, state); if (/\d/.test(ch)) { stream.eatWhile(/[\w.%]/); return "number"; } if (/[\w_]/.test(ch)) { stream.eatWhile(/[\w\\\-_.]/); return "variable"; } return null; } function bracketed(level, style) { return function(stream, state) { var curlev = null, ch; while ((ch = stream.next()) != null) { if (curlev == null) {if (ch == "]") curlev = 0;} else if (ch == "=") ++curlev; else if (ch == "]" && curlev == level) { state.cur = normal; break; } else curlev = null; } return style; }; } function string(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.cur = normal; return "string"; }; } return { startState: function(basecol) { return {basecol: basecol || 0, indentDepth: 0, cur: normal}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.cur(stream, state); var word = stream.current(); if (style == "variable") { if (keywords.test(word)) style = "keyword"; else if (builtins.test(word)) style = "builtin"; else if (specials.test(word)) style = "variable-2"; } if ((style != "comment") && (style != "string")){ if (indentTokens.test(word)) ++state.indentDepth; else if (dedentTokens.test(word)) --state.indentDepth; } return style; }, indent: function(state, textAfter) { var closing = dedentPartial.test(textAfter); return state.basecol + indentUnit * (state.indentDepth - (closing ? 1 : 0)); }, lineComment: "--", blockCommentStart: "--[[", blockCommentEnd: "]]" }; }); CodeMirror.defineMIME("text/x-lua", "lua"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Mathematica mode copyright (c) 2015 by Calin Barbat // Based on code by Patrick Scheibe (halirutan) // See: https://github.com/halirutan/Mathematica-Source-Highlighting/tree/master/src/lang-mma.js (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode('mathematica', function(_config, _parserConfig) { // used pattern building blocks var Identifier = '[a-zA-Z\\$][a-zA-Z0-9\\$]*'; var pBase = "(?:\\d+)"; var pFloat = "(?:\\.\\d+|\\d+\\.\\d*|\\d+)"; var pFloatBase = "(?:\\.\\w+|\\w+\\.\\w*|\\w+)"; var pPrecision = "(?:`(?:`?"+pFloat+")?)"; // regular expressions var reBaseForm = new RegExp('(?:'+pBase+'(?:\\^\\^'+pFloatBase+pPrecision+'?(?:\\*\\^[+-]?\\d+)?))'); var reFloatForm = new RegExp('(?:' + pFloat + pPrecision + '?(?:\\*\\^[+-]?\\d+)?)'); var reIdInContext = new RegExp('(?:`?)(?:' + Identifier + ')(?:`(?:' + Identifier + '))*(?:`?)'); function tokenBase(stream, state) { var ch; // get next character ch = stream.next(); // string if (ch === '"') { state.tokenize = tokenString; return state.tokenize(stream, state); } // comment if (ch === '(') { if (stream.eat('*')) { state.commentLevel++; state.tokenize = tokenComment; return state.tokenize(stream, state); } } // go back one character stream.backUp(1); // look for numbers // Numbers in a baseform if (stream.match(reBaseForm, true, false)) { return 'number'; } // Mathematica numbers. Floats (1.2, .2, 1.) can have optionally a precision (`float) or an accuracy definition // (``float). Note: while 1.2` is possible 1.2`` is not. At the end an exponent (float*^+12) can follow. if (stream.match(reFloatForm, true, false)) { return 'number'; } /* In[23] and Out[34] */ if (stream.match(/(?:In|Out)\[[0-9]*\]/, true, false)) { return 'atom'; } // usage if (stream.match(/([a-zA-Z\$][a-zA-Z0-9\$]*(?:`[a-zA-Z0-9\$]+)*::usage)/, true, false)) { return 'meta'; } // message if (stream.match(/([a-zA-Z\$][a-zA-Z0-9\$]*(?:`[a-zA-Z0-9\$]+)*::[a-zA-Z\$][a-zA-Z0-9\$]*):?/, true, false)) { return 'string-2'; } // this makes a look-ahead match for something like variable:{_Integer} // the match is then forwarded to the mma-patterns tokenizer. if (stream.match(/([a-zA-Z\$][a-zA-Z0-9\$]*\s*:)(?:(?:[a-zA-Z\$][a-zA-Z0-9\$]*)|(?:[^:=>~@\^\&\*\)\[\]'\?,\|])).*/, true, false)) { return 'variable-2'; } // catch variables which are used together with Blank (_), BlankSequence (__) or BlankNullSequence (___) // Cannot start with a number, but can have numbers at any other position. Examples // blub__Integer, a1_, b34_Integer32 if (stream.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+[a-zA-Z\$][a-zA-Z0-9\$]*/, true, false)) { return 'variable-2'; } if (stream.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+/, true, false)) { return 'variable-2'; } if (stream.match(/_+[a-zA-Z\$][a-zA-Z0-9\$]*/, true, false)) { return 'variable-2'; } // Named characters in Mathematica, like \[Gamma]. if (stream.match(/\\\[[a-zA-Z\$][a-zA-Z0-9\$]*\]/, true, false)) { return 'variable-3'; } // Match all braces separately if (stream.match(/(?:\[|\]|{|}|\(|\))/, true, false)) { return 'bracket'; } // Catch Slots (#, ##, #3, ##9 and the V10 named slots #name). I have never seen someone using more than one digit after #, so we match // only one. if (stream.match(/(?:#[a-zA-Z\$][a-zA-Z0-9\$]*|#+[0-9]?)/, true, false)) { return 'variable-2'; } // Literals like variables, keywords, functions if (stream.match(reIdInContext, true, false)) { return 'keyword'; } // operators. Note that operators like @@ or /; are matched separately for each symbol. if (stream.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%)/, true, false)) { return 'operator'; } // everything else is an error stream.next(); // advance the stream. return 'error'; } function tokenString(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === '"' && !escaped) { end = true; break; } escaped = !escaped && next === '\\'; } if (end && !escaped) { state.tokenize = tokenBase; } return 'string'; } function tokenComment(stream, state) { var prev, next; while(state.commentLevel > 0 && (next = stream.next()) != null) { if (prev === '(' && next === '*') state.commentLevel++; if (prev === '*' && next === ')') state.commentLevel--; prev = next; } if (state.commentLevel <= 0) { state.tokenize = tokenBase; } return 'comment'; } return { startState: function() {return {tokenize: tokenBase, commentLevel: 0};}, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, blockCommentStart: "(*", blockCommentEnd: "*)" }; }); CodeMirror.defineMIME('text/x-mathematica', { name: 'mathematica' }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { var rfc2822 = [ "From", "Sender", "Reply-To", "To", "Cc", "Bcc", "Message-ID", "In-Reply-To", "References", "Resent-From", "Resent-Sender", "Resent-To", "Resent-Cc", "Resent-Bcc", "Resent-Message-ID", "Return-Path", "Received" ]; var rfc2822NoEmail = [ "Date", "Subject", "Comments", "Keywords", "Resent-Date" ]; CodeMirror.registerHelper("hintWords", "mbox", rfc2822.concat(rfc2822NoEmail)); var whitespace = /^[ \t]/; var separator = /^From /; // See RFC 4155 var rfc2822Header = new RegExp("^(" + rfc2822.join("|") + "): "); var rfc2822HeaderNoEmail = new RegExp("^(" + rfc2822NoEmail.join("|") + "): "); var header = /^[^:]+:/; // Optional fields defined in RFC 2822 var email = /^[^ ]+@[^ ]+/; var untilEmail = /^.*?(?=[^ ]+?@[^ ]+)/; var bracketedEmail = /^<.*?>/; var untilBracketedEmail = /^.*?(?=<.*>)/; function styleForHeader(header) { if (header === "Subject") return "header"; return "string"; } function readToken(stream, state) { if (stream.sol()) { // From last line state.inSeparator = false; if (state.inHeader && stream.match(whitespace)) { // Header folding return null; } else { state.inHeader = false; state.header = null; } if (stream.match(separator)) { state.inHeaders = true; state.inSeparator = true; return "atom"; } var match; var emailPermitted = false; if ((match = stream.match(rfc2822HeaderNoEmail)) || (emailPermitted = true) && (match = stream.match(rfc2822Header))) { state.inHeaders = true; state.inHeader = true; state.emailPermitted = emailPermitted; state.header = match[1]; return "atom"; } // Use vim's heuristics: recognize custom headers only if the line is in a // block of legitimate headers. if (state.inHeaders && (match = stream.match(header))) { state.inHeader = true; state.emailPermitted = true; state.header = match[1]; return "atom"; } state.inHeaders = false; stream.skipToEnd(); return null; } if (state.inSeparator) { if (stream.match(email)) return "link"; if (stream.match(untilEmail)) return "atom"; stream.skipToEnd(); return "atom"; } if (state.inHeader) { var style = styleForHeader(state.header); if (state.emailPermitted) { if (stream.match(bracketedEmail)) return style + " link"; if (stream.match(untilBracketedEmail)) return style; } stream.skipToEnd(); return style; } stream.skipToEnd(); return null; } CodeMirror.defineMode("mbox", function() { return { startState: function() { return { // Is in a mbox separator inSeparator: false, // Is in a mail header inHeader: false, // If bracketed email is permitted. Only applicable when inHeader emailPermitted: false, // Name of current header header: null, // Is in a region of mail headers inHeaders: false }; }, token: readToken, blankLine: function(state) { state.inHeaders = state.inSeparator = state.inHeader = false; } }; }); CodeMirror.defineMIME("application/mbox", "mbox"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE //mIRC mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMIME("text/mirc", "mirc"); CodeMirror.defineMode("mirc", function() { function parseWords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var specials = parseWords("$! $$ $& $? $+ $abook $abs $active $activecid " + "$activewid $address $addtok $agent $agentname $agentstat $agentver " + "$alias $and $anick $ansi2mirc $aop $appactive $appstate $asc $asctime " + "$asin $atan $avoice $away $awaymsg $awaytime $banmask $base $bfind " + "$binoff $biton $bnick $bvar $bytes $calc $cb $cd $ceil $chan $chanmodes " + "$chantypes $chat $chr $cid $clevel $click $cmdbox $cmdline $cnick $color " + "$com $comcall $comchan $comerr $compact $compress $comval $cos $count " + "$cr $crc $creq $crlf $ctime $ctimer $ctrlenter $date $day $daylight " + "$dbuh $dbuw $dccignore $dccport $dde $ddename $debug $decode $decompress " + "$deltok $devent $dialog $did $didreg $didtok $didwm $disk $dlevel $dll " + "$dllcall $dname $dns $duration $ebeeps $editbox $emailaddr $encode $error " + "$eval $event $exist $feof $ferr $fgetc $file $filename $filtered $finddir " + "$finddirn $findfile $findfilen $findtok $fline $floor $fopen $fread $fserve " + "$fulladdress $fulldate $fullname $fullscreen $get $getdir $getdot $gettok $gmt " + "$group $halted $hash $height $hfind $hget $highlight $hnick $hotline " + "$hotlinepos $ial $ialchan $ibl $idle $iel $ifmatch $ignore $iif $iil " + "$inelipse $ini $inmidi $inpaste $inpoly $input $inrect $inroundrect " + "$insong $instok $int $inwave $ip $isalias $isbit $isdde $isdir $isfile " + "$isid $islower $istok $isupper $keychar $keyrpt $keyval $knick $lactive " + "$lactivecid $lactivewid $left $len $level $lf $line $lines $link $lock " + "$lock $locked $log $logstamp $logstampfmt $longfn $longip $lower $ltimer " + "$maddress $mask $matchkey $matchtok $md5 $me $menu $menubar $menucontext " + "$menutype $mid $middir $mircdir $mircexe $mircini $mklogfn $mnick $mode " + "$modefirst $modelast $modespl $mouse $msfile $network $newnick $nick $nofile " + "$nopath $noqt $not $notags $notify $null $numeric $numok $oline $onpoly " + "$opnick $or $ord $os $passivedcc $pic $play $pnick $port $portable $portfree " + "$pos $prefix $prop $protect $puttok $qt $query $rand $r $rawmsg $read $readomo " + "$readn $regex $regml $regsub $regsubex $remove $remtok $replace $replacex " + "$reptok $result $rgb $right $round $scid $scon $script $scriptdir $scriptline " + "$sdir $send $server $serverip $sfile $sha1 $shortfn $show $signal $sin " + "$site $sline $snick $snicks $snotify $sock $sockbr $sockerr $sockname " + "$sorttok $sound $sqrt $ssl $sreq $sslready $status $strip $str $stripped " + "$syle $submenu $switchbar $tan $target $ticks $time $timer $timestamp " + "$timestampfmt $timezone $tip $titlebar $toolbar $treebar $trust $ulevel " + "$ulist $upper $uptime $url $usermode $v1 $v2 $var $vcmd $vcmdstat $vcmdver " + "$version $vnick $vol $wid $width $wildsite $wildtok $window $wrap $xor"); var keywords = parseWords("abook ajinvite alias aline ame amsg anick aop auser autojoin avoice " + "away background ban bcopy beep bread break breplace bset btrunc bunset bwrite " + "channel clear clearall cline clipboard close cnick color comclose comopen " + "comreg continue copy creq ctcpreply ctcps dcc dccserver dde ddeserver " + "debug dec describe dialog did didtok disable disconnect dlevel dline dll " + "dns dqwindow drawcopy drawdot drawfill drawline drawpic drawrect drawreplace " + "drawrot drawsave drawscroll drawtext ebeeps echo editbox emailaddr enable " + "events exit fclose filter findtext finger firewall flash flist flood flush " + "flushini font fopen fseek fsend fserve fullname fwrite ghide gload gmove " + "gopts goto gplay gpoint gqreq groups gshow gsize gstop gtalk gunload hadd " + "halt haltdef hdec hdel help hfree hinc hload hmake hop hsave ial ialclear " + "ialmark identd if ignore iline inc invite iuser join kick linesep links list " + "load loadbuf localinfo log mdi me menubar mkdir mnick mode msg nick noop notice " + "notify omsg onotice part partall pdcc perform play playctrl pop protect pvoice " + "qme qmsg query queryn quit raw reload remini remote remove rename renwin " + "reseterror resetidle return rlevel rline rmdir run ruser save savebuf saveini " + "say scid scon server set showmirc signam sline sockaccept sockclose socklist " + "socklisten sockmark sockopen sockpause sockread sockrename sockudp sockwrite " + "sound speak splay sreq strip switchbar timer timestamp titlebar tnick tokenize " + "toolbar topic tray treebar ulist unload unset unsetall updatenl url uwho " + "var vcadd vcmd vcrem vol while whois window winhelp write writeint if isalnum " + "isalpha isaop isavoice isban ischan ishop isignore isin isincs isletter islower " + "isnotify isnum ison isop isprotect isreg isupper isvoice iswm iswmcs " + "elseif else goto menu nicklist status title icon size option text edit " + "button check radio box scroll list combo link tab item"); var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var beforeParams = state.beforeParams; state.beforeParams = false; var ch = stream.next(); if (/[\[\]{}\(\),\.]/.test(ch)) { if (ch == "(" && beforeParams) state.inParams = true; else if (ch == ")") state.inParams = false; return null; } else if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } else if (ch == "\\") { stream.eat("\\"); stream.eat(/./); return "number"; } else if (ch == "/" && stream.eat("*")) { return chain(stream, state, tokenComment); } else if (ch == ";" && stream.match(/ *\( *\(/)) { return chain(stream, state, tokenUnparsed); } else if (ch == ";" && !state.inParams) { stream.skipToEnd(); return "comment"; } else if (ch == '"') { stream.eat(/"/); return "keyword"; } else if (ch == "$") { stream.eatWhile(/[$_a-z0-9A-Z\.:]/); if (specials && specials.propertyIsEnumerable(stream.current().toLowerCase())) { return "keyword"; } else { state.beforeParams = true; return "builtin"; } } else if (ch == "%") { stream.eatWhile(/[^,\s()]/); state.beforeParams = true; return "string"; } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } else { stream.eatWhile(/[\w\$_{}]/); var word = stream.current().toLowerCase(); if (keywords && keywords.propertyIsEnumerable(word)) return "keyword"; if (functions && functions.propertyIsEnumerable(word)) { state.beforeParams = true; return "keyword"; } return null; } } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenUnparsed(stream, state) { var maybeEnd = 0, ch; while (ch = stream.next()) { if (ch == ";" && maybeEnd == 2) { state.tokenize = tokenBase; break; } if (ch == ")") maybeEnd++; else if (ch != " ") maybeEnd = 0; } return "meta"; } return { startState: function() { return { tokenize: tokenBase, beforeParams: false, inParams: false }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); } }; }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode('mllike', function(_config, parserConfig) { var words = { 'as': 'keyword', 'do': 'keyword', 'else': 'keyword', 'end': 'keyword', 'exception': 'keyword', 'fun': 'keyword', 'functor': 'keyword', 'if': 'keyword', 'in': 'keyword', 'include': 'keyword', 'let': 'keyword', 'of': 'keyword', 'open': 'keyword', 'rec': 'keyword', 'struct': 'keyword', 'then': 'keyword', 'type': 'keyword', 'val': 'keyword', 'while': 'keyword', 'with': 'keyword' }; var extraWords = parserConfig.extraWords || {}; for (var prop in extraWords) { if (extraWords.hasOwnProperty(prop)) { words[prop] = parserConfig.extraWords[prop]; } } var hintWords = []; for (var k in words) { hintWords.push(k); } CodeMirror.registerHelper("hintWords", "mllike", hintWords); function tokenBase(stream, state) { var ch = stream.next(); if (ch === '"') { state.tokenize = tokenString; return state.tokenize(stream, state); } if (ch === '{') { if (stream.eat('|')) { state.longString = true; state.tokenize = tokenLongString; return state.tokenize(stream, state); } } if (ch === '(') { if (stream.eat('*')) { state.commentLevel++; state.tokenize = tokenComment; return state.tokenize(stream, state); } } if (ch === '~' || ch === '?') { stream.eatWhile(/\w/); return 'variable-2'; } if (ch === '`') { stream.eatWhile(/\w/); return 'quote'; } if (ch === '/' && parserConfig.slashComments && stream.eat('/')) { stream.skipToEnd(); return 'comment'; } if (/\d/.test(ch)) { if (ch === '0' && stream.eat(/[bB]/)) { stream.eatWhile(/[01]/); } if (ch === '0' && stream.eat(/[xX]/)) { stream.eatWhile(/[0-9a-fA-F]/); } if (ch === '0' && stream.eat(/[oO]/)) { stream.eatWhile(/[0-7]/); } else { stream.eatWhile(/[\d_]/); if (stream.eat('.')) { stream.eatWhile(/[\d]/); } if (stream.eat(/[eE]/)) { stream.eatWhile(/[\d\-+]/); } } return 'number'; } if ( /[+\-*&%=<>!?|@\.~:]/.test(ch)) { return 'operator'; } if (/[\w\xa1-\uffff]/.test(ch)) { stream.eatWhile(/[\w\xa1-\uffff]/); var cur = stream.current(); return words.hasOwnProperty(cur) ? words[cur] : 'variable'; } return null } function tokenString(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === '"' && !escaped) { end = true; break; } escaped = !escaped && next === '\\'; } if (end && !escaped) { state.tokenize = tokenBase; } return 'string'; } function tokenComment(stream, state) { var prev, next; while(state.commentLevel > 0 && (next = stream.next()) != null) { if (prev === '(' && next === '*') state.commentLevel++; if (prev === '*' && next === ')') state.commentLevel--; prev = next; } if (state.commentLevel <= 0) { state.tokenize = tokenBase; } return 'comment'; } function tokenLongString(stream, state) { var prev, next; while (state.longString && (next = stream.next()) != null) { if (prev === '|' && next === '}') state.longString = false; prev = next; } if (!state.longString) { state.tokenize = tokenBase; } return 'string'; } return { startState: function() {return {tokenize: tokenBase, commentLevel: 0, longString: false};}, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, blockCommentStart: "(*", blockCommentEnd: "*)", lineComment: parserConfig.slashComments ? "//" : null }; }); CodeMirror.defineMIME('text/x-ocaml', { name: 'mllike', extraWords: { 'and': 'keyword', 'assert': 'keyword', 'begin': 'keyword', 'class': 'keyword', 'constraint': 'keyword', 'done': 'keyword', 'downto': 'keyword', 'external': 'keyword', 'function': 'keyword', 'initializer': 'keyword', 'lazy': 'keyword', 'match': 'keyword', 'method': 'keyword', 'module': 'keyword', 'mutable': 'keyword', 'new': 'keyword', 'nonrec': 'keyword', 'object': 'keyword', 'private': 'keyword', 'sig': 'keyword', 'to': 'keyword', 'try': 'keyword', 'value': 'keyword', 'virtual': 'keyword', 'when': 'keyword', // builtins 'raise': 'builtin', 'failwith': 'builtin', 'true': 'builtin', 'false': 'builtin', // Pervasives builtins 'asr': 'builtin', 'land': 'builtin', 'lor': 'builtin', 'lsl': 'builtin', 'lsr': 'builtin', 'lxor': 'builtin', 'mod': 'builtin', 'or': 'builtin', // More Pervasives 'raise_notrace': 'builtin', 'trace': 'builtin', 'exit': 'builtin', 'print_string': 'builtin', 'print_endline': 'builtin', 'int': 'type', 'float': 'type', 'bool': 'type', 'char': 'type', 'string': 'type', 'unit': 'type', // Modules 'List': 'builtin' } }); CodeMirror.defineMIME('text/x-fsharp', { name: 'mllike', extraWords: { 'abstract': 'keyword', 'assert': 'keyword', 'base': 'keyword', 'begin': 'keyword', 'class': 'keyword', 'default': 'keyword', 'delegate': 'keyword', 'do!': 'keyword', 'done': 'keyword', 'downcast': 'keyword', 'downto': 'keyword', 'elif': 'keyword', 'extern': 'keyword', 'finally': 'keyword', 'for': 'keyword', 'function': 'keyword', 'global': 'keyword', 'inherit': 'keyword', 'inline': 'keyword', 'interface': 'keyword', 'internal': 'keyword', 'lazy': 'keyword', 'let!': 'keyword', 'match': 'keyword', 'member': 'keyword', 'module': 'keyword', 'mutable': 'keyword', 'namespace': 'keyword', 'new': 'keyword', 'null': 'keyword', 'override': 'keyword', 'private': 'keyword', 'public': 'keyword', 'return!': 'keyword', 'return': 'keyword', 'select': 'keyword', 'static': 'keyword', 'to': 'keyword', 'try': 'keyword', 'upcast': 'keyword', 'use!': 'keyword', 'use': 'keyword', 'void': 'keyword', 'when': 'keyword', 'yield!': 'keyword', 'yield': 'keyword', // Reserved words 'atomic': 'keyword', 'break': 'keyword', 'checked': 'keyword', 'component': 'keyword', 'const': 'keyword', 'constraint': 'keyword', 'constructor': 'keyword', 'continue': 'keyword', 'eager': 'keyword', 'event': 'keyword', 'external': 'keyword', 'fixed': 'keyword', 'method': 'keyword', 'mixin': 'keyword', 'object': 'keyword', 'parallel': 'keyword', 'process': 'keyword', 'protected': 'keyword', 'pure': 'keyword', 'sealed': 'keyword', 'tailcall': 'keyword', 'trait': 'keyword', 'virtual': 'keyword', 'volatile': 'keyword', // builtins 'List': 'builtin', 'Seq': 'builtin', 'Map': 'builtin', 'Set': 'builtin', 'Option': 'builtin', 'int': 'builtin', 'string': 'builtin', 'not': 'builtin', 'true': 'builtin', 'false': 'builtin', 'raise': 'builtin', 'failwith': 'builtin' }, slashComments: true }); CodeMirror.defineMIME('text/x-sml', { name: 'mllike', extraWords: { 'abstype': 'keyword', 'and': 'keyword', 'andalso': 'keyword', 'case': 'keyword', 'datatype': 'keyword', 'fn': 'keyword', 'handle': 'keyword', 'infix': 'keyword', 'infixr': 'keyword', 'local': 'keyword', 'nonfix': 'keyword', 'op': 'keyword', 'orelse': 'keyword', 'raise': 'keyword', 'withtype': 'keyword', 'eqtype': 'keyword', 'sharing': 'keyword', 'sig': 'keyword', 'signature': 'keyword', 'structure': 'keyword', 'where': 'keyword', 'true': 'keyword', 'false': 'keyword', // types 'int': 'builtin', 'real': 'builtin', 'string': 'builtin', 'char': 'builtin', 'bool': 'builtin' }, slashComments: true }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Modelica support for CodeMirror, copyright (c) by Lennart Ochel (function(mod) { mod(codemirror); }) (function(CodeMirror) { CodeMirror.defineMode("modelica", function(config, parserConfig) { var indentUnit = config.indentUnit; var keywords = parserConfig.keywords || {}; var builtin = parserConfig.builtin || {}; var atoms = parserConfig.atoms || {}; var isSingleOperatorChar = /[;=\(:\),{}.*<>+\-\/^\[\]]/; var isDoubleOperatorChar = /(:=|<=|>=|==|<>|\.\+|\.\-|\.\*|\.\/|\.\^)/; var isDigit = /[0-9]/; var isNonDigit = /[_a-zA-Z]/; function tokenLineComment(stream, state) { stream.skipToEnd(); state.tokenize = null; return "comment"; } function tokenBlockComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (maybeEnd && ch == "/") { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenString(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == '"' && !escaped) { state.tokenize = null; state.sol = false; break; } escaped = !escaped && ch == "\\"; } return "string"; } function tokenIdent(stream, state) { stream.eatWhile(isDigit); while (stream.eat(isDigit) || stream.eat(isNonDigit)) { } var cur = stream.current(); if(state.sol && (cur == "package" || cur == "model" || cur == "when" || cur == "connector")) state.level++; else if(state.sol && cur == "end" && state.level > 0) state.level--; state.tokenize = null; state.sol = false; if (keywords.propertyIsEnumerable(cur)) return "keyword"; else if (builtin.propertyIsEnumerable(cur)) return "builtin"; else if (atoms.propertyIsEnumerable(cur)) return "atom"; else return "variable"; } function tokenQIdent(stream, state) { while (stream.eat(/[^']/)) { } state.tokenize = null; state.sol = false; if(stream.eat("'")) return "variable"; else return "error"; } function tokenUnsignedNuber(stream, state) { stream.eatWhile(isDigit); if (stream.eat('.')) { stream.eatWhile(isDigit); } if (stream.eat('e') || stream.eat('E')) { if (!stream.eat('-')) stream.eat('+'); stream.eatWhile(isDigit); } state.tokenize = null; state.sol = false; return "number"; } // Interface return { startState: function() { return { tokenize: null, level: 0, sol: true }; }, token: function(stream, state) { if(state.tokenize != null) { return state.tokenize(stream, state); } if(stream.sol()) { state.sol = true; } // WHITESPACE if(stream.eatSpace()) { state.tokenize = null; return null; } var ch = stream.next(); // LINECOMMENT if(ch == '/' && stream.eat('/')) { state.tokenize = tokenLineComment; } // BLOCKCOMMENT else if(ch == '/' && stream.eat('*')) { state.tokenize = tokenBlockComment; } // TWO SYMBOL TOKENS else if(isDoubleOperatorChar.test(ch+stream.peek())) { stream.next(); state.tokenize = null; return "operator"; } // SINGLE SYMBOL TOKENS else if(isSingleOperatorChar.test(ch)) { state.tokenize = null; return "operator"; } // IDENT else if(isNonDigit.test(ch)) { state.tokenize = tokenIdent; } // Q-IDENT else if(ch == "'" && stream.peek() && stream.peek() != "'") { state.tokenize = tokenQIdent; } // STRING else if(ch == '"') { state.tokenize = tokenString; } // UNSIGNED_NUBER else if(isDigit.test(ch)) { state.tokenize = tokenUnsignedNuber; } // ERROR else { state.tokenize = null; return "error"; } return state.tokenize(stream, state); }, indent: function(state, textAfter) { if (state.tokenize != null) return CodeMirror.Pass; var level = state.level; if(/(algorithm)/.test(textAfter)) level--; if(/(equation)/.test(textAfter)) level--; if(/(initial algorithm)/.test(textAfter)) level--; if(/(initial equation)/.test(textAfter)) level--; if(/(end)/.test(textAfter)) level--; if(level > 0) return indentUnit*level; else return 0; }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i=0; i", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], "singlecomment" : ["//", "#"], "operators" : ["="] }, xu: { "keywords" : ["msc", "xu"], "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "wordwrapentities", "watermark"], "constants" : ["true", "false", "on", "off", "auto"], "attributes" : ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip", "title", "deactivate", "activate", "activation"], "brackets" : ["\\{", "\\}"], // [ and ] are brackets too, but these get handled in with lists "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"], "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], "singlecomment" : ["//", "#"], "operators" : ["="] }, msgenny: { "keywords" : null, "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "wordwrapentities", "watermark"], "constants" : ["true", "false", "on", "off", "auto"], "attributes" : null, "brackets" : ["\\{", "\\}"], "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"], "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], "singlecomment" : ["//", "#"], "operators" : ["="] } }; CodeMirror.defineMode("mscgen", function(_, modeConfig) { var language = languages[modeConfig && modeConfig.language || "mscgen"]; return { startState: startStateFn, copyState: copyStateFn, token: produceTokenFunction(language), lineComment : "#", blockCommentStart : "/*", blockCommentEnd : "*/" }; }); CodeMirror.defineMIME("text/x-mscgen", "mscgen"); CodeMirror.defineMIME("text/x-xu", {name: "mscgen", language: "xu"}); CodeMirror.defineMIME("text/x-msgenny", {name: "mscgen", language: "msgenny"}); function wordRegexpBoundary(pWords) { return new RegExp("\\b(" + pWords.join("|") + ")\\b", "i"); } function wordRegexp(pWords) { return new RegExp("(" + pWords.join("|") + ")", "i"); } function startStateFn() { return { inComment : false, inString : false, inAttributeList : false, inScript : false }; } function copyStateFn(pState) { return { inComment : pState.inComment, inString : pState.inString, inAttributeList : pState.inAttributeList, inScript : pState.inScript }; } function produceTokenFunction(pConfig) { return function(pStream, pState) { if (pStream.match(wordRegexp(pConfig.brackets), true, true)) { return "bracket"; } /* comments */ if (!pState.inComment) { if (pStream.match(/\/\*[^\*\/]*/, true, true)) { pState.inComment = true; return "comment"; } if (pStream.match(wordRegexp(pConfig.singlecomment), true, true)) { pStream.skipToEnd(); return "comment"; } } if (pState.inComment) { if (pStream.match(/[^\*\/]*\*\//, true, true)) pState.inComment = false; else pStream.skipToEnd(); return "comment"; } /* strings */ if (!pState.inString && pStream.match(/\"(\\\"|[^\"])*/, true, true)) { pState.inString = true; return "string"; } if (pState.inString) { if (pStream.match(/[^\"]*\"/, true, true)) pState.inString = false; else pStream.skipToEnd(); return "string"; } /* keywords & operators */ if (!!pConfig.keywords && pStream.match(wordRegexpBoundary(pConfig.keywords), true, true)) return "keyword"; if (pStream.match(wordRegexpBoundary(pConfig.options), true, true)) return "keyword"; if (pStream.match(wordRegexpBoundary(pConfig.arcsWords), true, true)) return "keyword"; if (pStream.match(wordRegexp(pConfig.arcsOthers), true, true)) return "keyword"; if (!!pConfig.operators && pStream.match(wordRegexp(pConfig.operators), true, true)) return "operator"; if (!!pConfig.constants && pStream.match(wordRegexp(pConfig.constants), true, true)) return "variable"; /* attribute lists */ if (!pConfig.inAttributeList && !!pConfig.attributes && pStream.match(/\[/, true, true)) { pConfig.inAttributeList = true; return "bracket"; } if (pConfig.inAttributeList) { if (pConfig.attributes !== null && pStream.match(wordRegexpBoundary(pConfig.attributes), true, true)) { return "attribute"; } if (pStream.match(/]/, true, true)) { pConfig.inAttributeList = false; return "bracket"; } } pStream.next(); return "base"; }; } }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /* This MUMPS Language script was constructed using vbscript.js as a template. */ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("mumps", function() { function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); } var singleOperators = new RegExp("^[\\+\\-\\*/&#!_?\\\\<>=\\'\\[\\]]"); var doubleOperators = new RegExp("^(('=)|(<=)|(>=)|('>)|('<)|([[)|(]])|(^$))"); var singleDelimiters = new RegExp("^[\\.,:]"); var brackets = new RegExp("[()]"); var identifiers = new RegExp("^[%A-Za-z][A-Za-z0-9]*"); var commandKeywords = ["break","close","do","else","for","goto", "halt", "hang", "if", "job","kill","lock","merge","new","open", "quit", "read", "set", "tcommit", "trollback", "tstart", "use", "view", "write", "xecute", "b","c","d","e","f","g", "h", "i", "j","k","l","m","n","o", "q", "r", "s", "tc", "tro", "ts", "u", "v", "w", "x"]; // The following list includes instrinsic functions _and_ special variables var intrinsicFuncsWords = ["\\$ascii", "\\$char", "\\$data", "\\$ecode", "\\$estack", "\\$etrap", "\\$extract", "\\$find", "\\$fnumber", "\\$get", "\\$horolog", "\\$io", "\\$increment", "\\$job", "\\$justify", "\\$length", "\\$name", "\\$next", "\\$order", "\\$piece", "\\$qlength", "\\$qsubscript", "\\$query", "\\$quit", "\\$random", "\\$reverse", "\\$select", "\\$stack", "\\$test", "\\$text", "\\$translate", "\\$view", "\\$x", "\\$y", "\\$a", "\\$c", "\\$d", "\\$e", "\\$ec", "\\$es", "\\$et", "\\$f", "\\$fn", "\\$g", "\\$h", "\\$i", "\\$j", "\\$l", "\\$n", "\\$na", "\\$o", "\\$p", "\\$q", "\\$ql", "\\$qs", "\\$r", "\\$re", "\\$s", "\\$st", "\\$t", "\\$tr", "\\$v", "\\$z"]; var intrinsicFuncs = wordRegexp(intrinsicFuncsWords); var command = wordRegexp(commandKeywords); function tokenBase(stream, state) { if (stream.sol()) { state.label = true; state.commandMode = 0; } // The character has meaning in MUMPS. Ignoring consecutive // spaces would interfere with interpreting whether the next non-space // character belongs to the command or argument context. // Examine each character and update a mode variable whose interpretation is: // >0 => command 0 => argument <0 => command post-conditional var ch = stream.peek(); if (ch == " " || ch == "\t") { // Pre-process state.label = false; if (state.commandMode == 0) state.commandMode = 1; else if ((state.commandMode < 0) || (state.commandMode == 2)) state.commandMode = 0; } else if ((ch != ".") && (state.commandMode > 0)) { if (ch == ":") state.commandMode = -1; // SIS - Command post-conditional else state.commandMode = 2; } // Do not color parameter list as line tag if ((ch === "(") || (ch === "\u0009")) state.label = false; // MUMPS comment starts with ";" if (ch === ";") { stream.skipToEnd(); return "comment"; } // Number Literals // SIS/RLM - MUMPS permits canonic number followed by concatenate operator if (stream.match(/^[-+]?\d+(\.\d+)?([eE][-+]?\d+)?/)) return "number"; // Handle Strings if (ch == '"') { if (stream.skipTo('"')) { stream.next(); return "string"; } else { stream.skipToEnd(); return "error"; } } // Handle operators and Delimiters if (stream.match(doubleOperators) || stream.match(singleOperators)) return "operator"; // Prevents leading "." in DO block from falling through to error if (stream.match(singleDelimiters)) return null; if (brackets.test(ch)) { stream.next(); return "bracket"; } if (state.commandMode > 0 && stream.match(command)) return "variable-2"; if (stream.match(intrinsicFuncs)) return "builtin"; if (stream.match(identifiers)) return "variable"; // Detect dollar-sign when not a documented intrinsic function // "^" may introduce a GVN or SSVN - Color same as function if (ch === "$" || ch === "^") { stream.next(); return "builtin"; } // MUMPS Indirection if (ch === "@") { stream.next(); return "string-2"; } if (/[\w%]/.test(ch)) { stream.eatWhile(/[\w%]/); return "variable"; } // Handle non-detected items stream.next(); return "error"; } return { startState: function() { return { label: false, commandMode: 0 }; }, token: function(stream, state) { var style = tokenBase(stream, state); if (state.label) return "tag"; return style; } }; }); CodeMirror.defineMIME("text/x-mumps", "mumps"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("nginx", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words( /* ngxDirectiveControl */ "break return rewrite set" + /* ngxDirective */ " accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_types aio alias allow ancient_browser ancient_browser_value auth_basic auth_basic_user_file auth_http auth_http_header auth_http_timeout autoindex autoindex_exact_size autoindex_localtime charset charset_types client_body_buffer_size client_body_in_file_only client_body_in_single_buffer client_body_temp_path client_body_timeout client_header_buffer_size client_header_timeout client_max_body_size connection_pool_size create_full_put_path daemon dav_access dav_methods debug_connection debug_points default_type degradation degrade deny devpoll_changes devpoll_events directio directio_alignment empty_gif env epoll_events error_log eventport_events expires fastcgi_bind fastcgi_buffer_size fastcgi_buffers fastcgi_busy_buffers_size fastcgi_cache fastcgi_cache_key fastcgi_cache_methods fastcgi_cache_min_uses fastcgi_cache_path fastcgi_cache_use_stale fastcgi_cache_valid fastcgi_catch_stderr fastcgi_connect_timeout fastcgi_hide_header fastcgi_ignore_client_abort fastcgi_ignore_headers fastcgi_index fastcgi_intercept_errors fastcgi_max_temp_file_size fastcgi_next_upstream fastcgi_param fastcgi_pass_header fastcgi_pass_request_body fastcgi_pass_request_headers fastcgi_read_timeout fastcgi_send_lowat fastcgi_send_timeout fastcgi_split_path_info fastcgi_store fastcgi_store_access fastcgi_temp_file_write_size fastcgi_temp_path fastcgi_upstream_fail_timeout fastcgi_upstream_max_fails flv geoip_city geoip_country google_perftools_profiles gzip gzip_buffers gzip_comp_level gzip_disable gzip_hash gzip_http_version gzip_min_length gzip_no_buffer gzip_proxied gzip_static gzip_types gzip_vary gzip_window if_modified_since ignore_invalid_headers image_filter image_filter_buffer image_filter_jpeg_quality image_filter_transparency imap_auth imap_capabilities imap_client_buffer index ip_hash keepalive_requests keepalive_timeout kqueue_changes kqueue_events large_client_header_buffers limit_conn limit_conn_log_level limit_rate limit_rate_after limit_req limit_req_log_level limit_req_zone limit_zone lingering_time lingering_timeout lock_file log_format log_not_found log_subrequest map_hash_bucket_size map_hash_max_size master_process memcached_bind memcached_buffer_size memcached_connect_timeout memcached_next_upstream memcached_read_timeout memcached_send_timeout memcached_upstream_fail_timeout memcached_upstream_max_fails merge_slashes min_delete_depth modern_browser modern_browser_value msie_padding msie_refresh multi_accept open_file_cache open_file_cache_errors open_file_cache_events open_file_cache_min_uses open_file_cache_valid open_log_file_cache output_buffers override_charset perl perl_modules perl_require perl_set pid pop3_auth pop3_capabilities port_in_redirect postpone_gzipping postpone_output protocol proxy proxy_bind proxy_buffer proxy_buffer_size proxy_buffering proxy_buffers proxy_busy_buffers_size proxy_cache proxy_cache_key proxy_cache_methods proxy_cache_min_uses proxy_cache_path proxy_cache_use_stale proxy_cache_valid proxy_connect_timeout proxy_headers_hash_bucket_size proxy_headers_hash_max_size proxy_hide_header proxy_ignore_client_abort proxy_ignore_headers proxy_intercept_errors proxy_max_temp_file_size proxy_method proxy_next_upstream proxy_pass_error_message proxy_pass_header proxy_pass_request_body proxy_pass_request_headers proxy_read_timeout proxy_redirect proxy_send_lowat proxy_send_timeout proxy_set_body proxy_set_header proxy_ssl_session_reuse proxy_store proxy_store_access proxy_temp_file_write_size proxy_temp_path proxy_timeout proxy_upstream_fail_timeout proxy_upstream_max_fails random_index read_ahead real_ip_header recursive_error_pages request_pool_size reset_timedout_connection resolver resolver_timeout rewrite_log rtsig_overflow_events rtsig_overflow_test rtsig_overflow_threshold rtsig_signo satisfy secure_link_secret send_lowat send_timeout sendfile sendfile_max_chunk server_name_in_redirect server_names_hash_bucket_size server_names_hash_max_size server_tokens set_real_ip_from smtp_auth smtp_capabilities smtp_client_buffer smtp_greeting_delay so_keepalive source_charset ssi ssi_ignore_recycled_buffers ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length ssl ssl_certificate ssl_certificate_key ssl_ciphers ssl_client_certificate ssl_crl ssl_dhparam ssl_engine ssl_prefer_server_ciphers ssl_protocols ssl_session_cache ssl_session_timeout ssl_verify_client ssl_verify_depth starttls stub_status sub_filter sub_filter_once sub_filter_types tcp_nodelay tcp_nopush thread_stack_size timeout timer_resolution types_hash_bucket_size types_hash_max_size underscores_in_headers uninitialized_variable_warn use user userid userid_domain userid_expires userid_mark userid_name userid_p3p userid_path userid_service valid_referers variables_hash_bucket_size variables_hash_max_size worker_connections worker_cpu_affinity worker_priority worker_processes worker_rlimit_core worker_rlimit_nofile worker_rlimit_sigpending worker_threads working_directory xclient xml_entities xslt_stylesheet xslt_typesdrew@li229-23" ); var keywords_block = words( /* ngxDirectiveBlock */ "http mail events server types location upstream charset_map limit_except if geo map" ); var keywords_important = words( /* ngxDirectiveImportant */ "include root server server_name listen internal proxy_pass memcached_pass fastcgi_pass try_files" ); var indentUnit = config.indentUnit, type; function ret(style, tp) {type = tp; return style;} function tokenBase(stream, state) { stream.eatWhile(/[\w\$_]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { return "keyword"; } else if (keywords_block.propertyIsEnumerable(cur)) { return "variable-2"; } else if (keywords_important.propertyIsEnumerable(cur)) { return "string-2"; } /**/ var ch = stream.next(); if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("meta", stream.current());} else if (ch == "/" && stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else if (ch == "<" && stream.eat("!")) { state.tokenize = tokenSGMLComment; return tokenSGMLComment(stream, state); } else if (ch == "=") ret(null, "compare"); else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "#") { stream.skipToEnd(); return ret("comment", "comment"); } else if (ch == "!") { stream.match(/^\s*\w*/); return ret("keyword", "important"); } else if (/\d/.test(ch)) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (/[,.+>*\/]/.test(ch)) { return ret(null, "select-op"); } else if (/[;{}:\[\]]/.test(ch)) { return ret(null, ch); } else { stream.eatWhile(/[\w\\\-]/); return ret("variable", "variable"); } } function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } function tokenSGMLComment(stream, state) { var dashes = 0, ch; while ((ch = stream.next()) != null) { if (dashes >= 2 && ch == ">") { state.tokenize = tokenBase; break; } dashes = (ch == "-") ? dashes + 1 : 0; } return ret("comment", "comment"); } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.tokenize = tokenBase; return ret("string", "string"); }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, stack: []}; }, token: function(stream, state) { if (stream.eatSpace()) return null; type = null; var style = state.tokenize(stream, state); var context = state.stack[state.stack.length-1]; if (type == "hash" && context == "rule") style = "atom"; else if (style == "variable") { if (context == "rule") style = "number"; else if (!context || context == "@media{") style = "tag"; } if (context == "rule" && /^[\{\};]$/.test(type)) state.stack.pop(); if (type == "{") { if (context == "@media") state.stack[state.stack.length-1] = "@media{"; else state.stack.push("{"); } else if (type == "}") state.stack.pop(); else if (type == "@media") state.stack.push("@media"); else if (context == "{" && type != "comment") state.stack.push("rule"); return style; }, indent: function(state, textAfter) { var n = state.stack.length; if (/^\}/.test(textAfter)) n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1; return state.baseIndent + n * indentUnit; }, electricChars: "}" }; }); CodeMirror.defineMIME("text/x-nginx-conf", "nginx"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Author: Jan T. Sott (http://github.com/idleberg) (function(mod) { mod(codemirror, simple); })(function(CodeMirror) { CodeMirror.defineSimpleMode("nsis",{ start:[ // Numbers {regex: /(?:[+-]?)(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\d+.?\d*)/, token: "number"}, // Strings { regex: /"(?:[^\\"]|\\.)*"?/, token: "string" }, { regex: /'(?:[^\\']|\\.)*'?/, token: "string" }, { regex: /`(?:[^\\`]|\\.)*`?/, token: "string" }, // Compile Time Commands {regex: /^\s*(?:\!(include|addincludedir|addplugindir|appendfile|cd|delfile|echo|error|execute|packhdr|pragma|finalize|getdllversion|gettlbversion|system|tempfile|warning|verbose|define|undef|insertmacro|macro|macroend|makensis|searchparse|searchreplace))\b/, token: "keyword"}, // Conditional Compilation {regex: /^\s*(?:\!(if(?:n?def)?|ifmacron?def|macro))\b/, token: "keyword", indent: true}, {regex: /^\s*(?:\!(else|endif|macroend))\b/, token: "keyword", dedent: true}, // Runtime Commands {regex: /^\s*(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecShellWait|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetKnownFolderPath|GetLabelAddress|GetTempFileName|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfRtlLanguage|IfShellVarContextAll|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|Int64Cmp|Int64CmpU|Int64Fmt|IntCmp|IntCmpU|IntFmt|IntOp|IntPtrCmp|IntPtrCmpU|IntPtrOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadAndSetImage|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestLongPathAware|ManifestMaxVersionTested|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|PEAddResource|PEDllCharacteristics|PERemoveResource|PESubsysVer|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegMultiStr|WriteRegNone|WriteRegStr|WriteUninstaller|XPStyle)\b/, token: "keyword"}, {regex: /^\s*(?:Function|PageEx|Section(?:Group)?)\b/, token: "keyword", indent: true}, {regex: /^\s*(?:(Function|PageEx|Section(?:Group)?)End)\b/, token: "keyword", dedent: true}, // Command Options {regex: /\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR(32|64)?|HKCU(32|64)?|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM(32|64)?|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\b/, token: "atom"}, {regex: /\b(?:admin|all|auto|both|bottom|bzip2|components|current|custom|directory|false|force|hide|highest|ifdiff|ifnewer|instfiles|lastused|leave|left|license|listonly|lzma|nevershow|none|normal|notset|off|on|right|show|silent|silentlog|textonly|top|true|try|un\.components|un\.custom|un\.directory|un\.instfiles|un\.license|uninstConfirm|user|Win10|Win7|Win8|WinVista|zlib)\b/, token: "builtin"}, // LogicLib.nsh {regex: /\$\{(?:And(?:If(?:Not)?|Unless)|Break|Case(?:Else)?|Continue|Default|Do(?:Until|While)?|Else(?:If(?:Not)?|Unless)?|End(?:If|Select|Switch)|Exit(?:Do|For|While)|For(?:Each)?|If(?:Cmd|Not(?:Then)?|Then)?|Loop(?:Until|While)?|Or(?:If(?:Not)?|Unless)|Select|Switch|Unless|While)\}/, token: "variable-2", indent: true}, // FileFunc.nsh {regex: /\$\{(?:BannerTrimPath|DirState|DriveSpace|Get(BaseName|Drives|ExeName|ExePath|FileAttributes|FileExt|FileName|FileVersion|Options|OptionsS|Parameters|Parent|Root|Size|Time)|Locate|RefreshShellIcons)\}/, token: "variable-2", dedent: true}, // Memento.nsh {regex: /\$\{(?:Memento(?:Section(?:Done|End|Restore|Save)?|UnselectedSection))\}/, token: "variable-2", dedent: true}, // TextFunc.nsh {regex: /\$\{(?:Config(?:Read|ReadS|Write|WriteS)|File(?:Join|ReadFromEnd|Recode)|Line(?:Find|Read|Sum)|Text(?:Compare|CompareS)|TrimNewLines)\}/, token: "variable-2", dedent: true}, // WinVer.nsh {regex: /\$\{(?:(?:At(?:Least|Most)|Is)(?:ServicePack|Win(?:7|8|10|95|98|200(?:0|3|8(?:R2)?)|ME|NT4|Vista|XP))|Is(?:NT|Server))\}/, token: "variable", dedent: true}, // WordFunc.nsh {regex: /\$\{(?:StrFilterS?|Version(?:Compare|Convert)|Word(?:AddS?|Find(?:(?:2|3)X)?S?|InsertS?|ReplaceS?))\}/, token: "variable-2", dedent: true}, // x64.nsh {regex: /\$\{(?:RunningX64)\}/, token: "variable", dedent: true}, {regex: /\$\{(?:Disable|Enable)X64FSRedirection\}/, token: "variable-2", dedent: true}, // Line Comment {regex: /(#|;).*/, token: "comment"}, // Block Comment {regex: /\/\*/, token: "comment", next: "comment"}, // Operator {regex: /[-+\/*=<>!]+/, token: "operator"}, // Variable {regex: /\$\w+/, token: "variable"}, // Constant {regex: /\${[\w\.:-]+}/, token: "variable-2"}, // Language String {regex: /\$\([\w\.:-]+\)/, token: "variable-3"} ], comment: [ {regex: /.*?\*\//, token: "comment", next: "start"}, {regex: /.*/, token: "comment"} ], meta: { electricInput: /^\s*((Function|PageEx|Section|Section(Group)?)End|(\!(endif|macroend))|\$\{(End(If|Unless|While)|Loop(Until)|Next)\})$/, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: ["#", ";"] } }); CodeMirror.defineMIME("text/x-nsis", "nsis"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /********************************************************** * This script provides syntax highlighting support for * the N-Triples format. * N-Triples format specification: * https://www.w3.org/TR/n-triples/ ***********************************************************/ /* The following expression defines the defined ASF grammar transitions. pre_subject -> { ( writing_subject_uri | writing_bnode_uri ) -> pre_predicate -> writing_predicate_uri -> pre_object -> writing_object_uri | writing_object_bnode | ( writing_object_literal -> writing_literal_lang | writing_literal_type ) -> post_object -> BEGIN } otherwise { -> ERROR } */ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("ntriples", function() { var Location = { PRE_SUBJECT : 0, WRITING_SUB_URI : 1, WRITING_BNODE_URI : 2, PRE_PRED : 3, WRITING_PRED_URI : 4, PRE_OBJ : 5, WRITING_OBJ_URI : 6, WRITING_OBJ_BNODE : 7, WRITING_OBJ_LITERAL : 8, WRITING_LIT_LANG : 9, WRITING_LIT_TYPE : 10, POST_OBJ : 11, ERROR : 12 }; function transitState(currState, c) { var currLocation = currState.location; var ret; // Opening. if (currLocation == Location.PRE_SUBJECT && c == '<') ret = Location.WRITING_SUB_URI; else if(currLocation == Location.PRE_SUBJECT && c == '_') ret = Location.WRITING_BNODE_URI; else if(currLocation == Location.PRE_PRED && c == '<') ret = Location.WRITING_PRED_URI; else if(currLocation == Location.PRE_OBJ && c == '<') ret = Location.WRITING_OBJ_URI; else if(currLocation == Location.PRE_OBJ && c == '_') ret = Location.WRITING_OBJ_BNODE; else if(currLocation == Location.PRE_OBJ && c == '"') ret = Location.WRITING_OBJ_LITERAL; // Closing. else if(currLocation == Location.WRITING_SUB_URI && c == '>') ret = Location.PRE_PRED; else if(currLocation == Location.WRITING_BNODE_URI && c == ' ') ret = Location.PRE_PRED; else if(currLocation == Location.WRITING_PRED_URI && c == '>') ret = Location.PRE_OBJ; else if(currLocation == Location.WRITING_OBJ_URI && c == '>') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_OBJ_BNODE && c == ' ') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '"') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_LIT_LANG && c == ' ') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_LIT_TYPE && c == '>') ret = Location.POST_OBJ; // Closing typed and language literal. else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '@') ret = Location.WRITING_LIT_LANG; else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '^') ret = Location.WRITING_LIT_TYPE; // Spaces. else if( c == ' ' && ( currLocation == Location.PRE_SUBJECT || currLocation == Location.PRE_PRED || currLocation == Location.PRE_OBJ || currLocation == Location.POST_OBJ ) ) ret = currLocation; // Reset. else if(currLocation == Location.POST_OBJ && c == '.') ret = Location.PRE_SUBJECT; // Error else ret = Location.ERROR; currState.location=ret; } return { startState: function() { return { location : Location.PRE_SUBJECT, uris : [], anchors : [], bnodes : [], langs : [], types : [] }; }, token: function(stream, state) { var ch = stream.next(); if(ch == '<') { transitState(state, ch); var parsedURI = ''; stream.eatWhile( function(c) { if( c != '#' && c != '>' ) { parsedURI += c; return true; } return false;} ); state.uris.push(parsedURI); if( stream.match('#', false) ) return 'variable'; stream.next(); transitState(state, '>'); return 'variable'; } if(ch == '#') { var parsedAnchor = ''; stream.eatWhile(function(c) { if(c != '>' && c != ' ') { parsedAnchor+= c; return true; } return false;}); state.anchors.push(parsedAnchor); return 'variable-2'; } if(ch == '>') { transitState(state, '>'); return 'variable'; } if(ch == '_') { transitState(state, ch); var parsedBNode = ''; stream.eatWhile(function(c) { if( c != ' ' ) { parsedBNode += c; return true; } return false;}); state.bnodes.push(parsedBNode); stream.next(); transitState(state, ' '); return 'builtin'; } if(ch == '"') { transitState(state, ch); stream.eatWhile( function(c) { return c != '"'; } ); stream.next(); if( stream.peek() != '@' && stream.peek() != '^' ) { transitState(state, '"'); } return 'string'; } if( ch == '@' ) { transitState(state, '@'); var parsedLang = ''; stream.eatWhile(function(c) { if( c != ' ' ) { parsedLang += c; return true; } return false;}); state.langs.push(parsedLang); stream.next(); transitState(state, ' '); return 'string-2'; } if( ch == '^' ) { stream.next(); transitState(state, '^'); var parsedType = ''; stream.eatWhile(function(c) { if( c != '>' ) { parsedType += c; return true; } return false;} ); state.types.push(parsedType); stream.next(); transitState(state, '>'); return 'variable'; } if( ch == ' ' ) { transitState(state, ch); } if( ch == '.' ) { transitState(state, ch); } } }; }); // define the registered Media Type for n-triples: // https://www.w3.org/TR/n-triples/#n-triples-mediatype CodeMirror.defineMIME("application/n-triples", "ntriples"); // N-Quads is based on the N-Triples format (so same highlighting works) // https://www.w3.org/TR/n-quads/ CodeMirror.defineMIME("application/n-quads", "ntriples"); // previously used, though technically incorrect media type for n-triples CodeMirror.defineMIME("text/n-triples", "ntriples"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("octave", function() { function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var singleOperators = new RegExp("^[\\+\\-\\*/&|\\^~<>!@'\\\\]"); var singleDelimiters = new RegExp('^[\\(\\[\\{\\},:=;\\.]'); var doubleOperators = new RegExp("^((==)|(~=)|(<=)|(>=)|(<<)|(>>)|(\\.[\\+\\-\\*/\\^\\\\]))"); var doubleDelimiters = new RegExp("^((!=)|(\\+=)|(\\-=)|(\\*=)|(/=)|(&=)|(\\|=)|(\\^=))"); var tripleDelimiters = new RegExp("^((>>=)|(<<=))"); var expressionEnd = new RegExp("^[\\]\\)]"); var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*"); var builtins = wordRegexp([ 'error', 'eval', 'function', 'abs', 'acos', 'atan', 'asin', 'cos', 'cosh', 'exp', 'log', 'prod', 'sum', 'log10', 'max', 'min', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'reshape', 'break', 'zeros', 'default', 'margin', 'round', 'ones', 'rand', 'syn', 'ceil', 'floor', 'size', 'clear', 'zeros', 'eye', 'mean', 'std', 'cov', 'det', 'eig', 'inv', 'norm', 'rank', 'trace', 'expm', 'logm', 'sqrtm', 'linspace', 'plot', 'title', 'xlabel', 'ylabel', 'legend', 'text', 'grid', 'meshgrid', 'mesh', 'num2str', 'fft', 'ifft', 'arrayfun', 'cellfun', 'input', 'fliplr', 'flipud', 'ismember' ]); var keywords = wordRegexp([ 'return', 'case', 'switch', 'else', 'elseif', 'end', 'endif', 'endfunction', 'if', 'otherwise', 'do', 'for', 'while', 'try', 'catch', 'classdef', 'properties', 'events', 'methods', 'global', 'persistent', 'endfor', 'endwhile', 'printf', 'sprintf', 'disp', 'until', 'continue', 'pkg' ]); // tokenizers function tokenTranspose(stream, state) { if (!stream.sol() && stream.peek() === '\'') { stream.next(); state.tokenize = tokenBase; return 'operator'; } state.tokenize = tokenBase; return tokenBase(stream, state); } function tokenComment(stream, state) { if (stream.match(/^.*%}/)) { state.tokenize = tokenBase; return 'comment'; } stream.skipToEnd(); return 'comment'; } function tokenBase(stream, state) { // whitespaces if (stream.eatSpace()) return null; // Handle one line Comments if (stream.match('%{')){ state.tokenize = tokenComment; stream.skipToEnd(); return 'comment'; } if (stream.match(/^[%#]/)){ stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^[0-9\.+-]/, false)) { if (stream.match(/^[+-]?0x[0-9a-fA-F]+[ij]?/)) { stream.tokenize = tokenBase; return 'number'; } if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?[ij]?/)) { return 'number'; } if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?[ij]?/)) { return 'number'; } } if (stream.match(wordRegexp(['nan','NaN','inf','Inf']))) { return 'number'; } // Handle Strings var m = stream.match(/^"(?:[^"]|"")*("|$)/) || stream.match(/^'(?:[^']|'')*('|$)/); if (m) { return m[1] ? 'string' : "string error"; } // Handle words if (stream.match(keywords)) { return 'keyword'; } if (stream.match(builtins)) { return 'builtin'; } if (stream.match(identifiers)) { return 'variable'; } if (stream.match(singleOperators) || stream.match(doubleOperators)) { return 'operator'; } if (stream.match(singleDelimiters) || stream.match(doubleDelimiters) || stream.match(tripleDelimiters)) { return null; } if (stream.match(expressionEnd)) { state.tokenize = tokenTranspose; return null; } // Handle non-detected items stream.next(); return 'error'; } return { startState: function() { return { tokenize: tokenBase }; }, token: function(stream, state) { var style = state.tokenize(stream, state); if (style === 'number' || style === 'variable'){ state.tokenize = tokenTranspose; } return style; }, lineComment: '%', fold: 'indent' }; }); CodeMirror.defineMIME("text/x-octave", "octave"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("oz", function (conf) { function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var singleOperators = /[\^@!\|<>#~\.\*\-\+\\/,=]/; var doubleOperators = /(<-)|(:=)|(=<)|(>=)|(<=)|(<:)|(>:)|(=:)|(\\=)|(\\=:)|(!!)|(==)|(::)/; var tripleOperators = /(:::)|(\.\.\.)|(=<:)|(>=:)/; var middle = ["in", "then", "else", "of", "elseof", "elsecase", "elseif", "catch", "finally", "with", "require", "prepare", "import", "export", "define", "do"]; var end = ["end"]; var atoms = wordRegexp(["true", "false", "nil", "unit"]); var commonKeywords = wordRegexp(["andthen", "at", "attr", "declare", "feat", "from", "lex", "mod", "div", "mode", "orelse", "parser", "prod", "prop", "scanner", "self", "syn", "token"]); var openingKeywords = wordRegexp(["local", "proc", "fun", "case", "class", "if", "cond", "or", "dis", "choice", "not", "thread", "try", "raise", "lock", "for", "suchthat", "meth", "functor"]); var middleKeywords = wordRegexp(middle); var endKeywords = wordRegexp(end); // Tokenizers function tokenBase(stream, state) { if (stream.eatSpace()) { return null; } // Brackets if(stream.match(/[{}]/)) { return "bracket"; } // Special [] keyword if (stream.match(/(\[])/)) { return "keyword" } // Operators if (stream.match(tripleOperators) || stream.match(doubleOperators)) { return "operator"; } // Atoms if(stream.match(atoms)) { return 'atom'; } // Opening keywords var matched = stream.match(openingKeywords); if (matched) { if (!state.doInCurrentLine) state.currentIndent++; else state.doInCurrentLine = false; // Special matching for signatures if(matched[0] == "proc" || matched[0] == "fun") state.tokenize = tokenFunProc; else if(matched[0] == "class") state.tokenize = tokenClass; else if(matched[0] == "meth") state.tokenize = tokenMeth; return 'keyword'; } // Middle and other keywords if (stream.match(middleKeywords) || stream.match(commonKeywords)) { return "keyword" } // End keywords if (stream.match(endKeywords)) { state.currentIndent--; return 'keyword'; } // Eat the next char for next comparisons var ch = stream.next(); // Strings if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } // Numbers if (/[~\d]/.test(ch)) { if (ch == "~") { if(! /^[0-9]/.test(stream.peek())) return null; else if (( stream.next() == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)) return "number"; } if ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)) return "number"; return null; } // Comments if (ch == "%") { stream.skipToEnd(); return 'comment'; } else if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } } // Single operators if(singleOperators.test(ch)) { return "operator"; } // If nothing match, we skip the entire alphanumerical block stream.eatWhile(/\w/); return "variable"; } function tokenClass(stream, state) { if (stream.eatSpace()) { return null; } stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)/); state.tokenize = tokenBase; return "variable-3" } function tokenMeth(stream, state) { if (stream.eatSpace()) { return null; } stream.match(/([a-zA-Z][A-Za-z0-9_]*)|(`.+`)/); state.tokenize = tokenBase; return "def" } function tokenFunProc(stream, state) { if (stream.eatSpace()) { return null; } if(!state.hasPassedFirstStage && stream.eat("{")) { state.hasPassedFirstStage = true; return "bracket"; } else if(state.hasPassedFirstStage) { stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)|\$/); state.hasPassedFirstStage = false; state.tokenize = tokenBase; return "def" } else { state.tokenize = tokenBase; return null; } } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenString(quote) { return function (stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = tokenBase; return "string"; }; } function buildElectricInputRegEx() { // Reindentation should occur on [] or on a match of any of // the block closing keywords, at the end of a line. var allClosings = middle.concat(end); return new RegExp("[\\[\\]]|(" + allClosings.join("|") + ")$"); } return { startState: function () { return { tokenize: tokenBase, currentIndent: 0, doInCurrentLine: false, hasPassedFirstStage: false }; }, token: function (stream, state) { if (stream.sol()) state.doInCurrentLine = 0; return state.tokenize(stream, state); }, indent: function (state, textAfter) { var trueText = textAfter.replace(/^\s+|\s+$/g, ''); if (trueText.match(endKeywords) || trueText.match(middleKeywords) || trueText.match(/(\[])/)) return conf.indentUnit * (state.currentIndent - 1); if (state.currentIndent < 0) return 0; return state.currentIndent * conf.indentUnit; }, fold: "indent", electricInput: buildElectricInputRegEx(), lineComment: "%", blockCommentStart: "/*", blockCommentEnd: "*/" }; }); CodeMirror.defineMIME("text/x-oz", "oz"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("pascal", function() { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words( "absolute and array asm begin case const constructor destructor div do " + "downto else end file for function goto if implementation in inherited " + "inline interface label mod nil not object of operator or packed procedure " + "program record reintroduce repeat self set shl shr string then to type " + "unit until uses var while with xor as class dispinterface except exports " + "finalization finally initialization inline is library on out packed " + "property raise resourcestring threadvar try absolute abstract alias " + "assembler bitpacked break cdecl continue cppdecl cvar default deprecated " + "dynamic enumerator experimental export external far far16 forward generic " + "helper implements index interrupt iocheck local message name near " + "nodefault noreturn nostackframe oldfpccall otherwise overload override " + "pascal platform private protected public published read register " + "reintroduce result safecall saveregisters softfloat specialize static " + "stdcall stored strict unaligned unimplemented varargs virtual write"); var atoms = {"null": true}; var isOperatorChar = /[+\-*&%=<>!?|\/]/; function tokenBase(stream, state) { var ch = stream.next(); if (ch == "#" && state.startOfLine) { stream.skipToEnd(); return "meta"; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (ch == "(" && stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (ch == "{") { state.tokenize = tokenCommentBraces; return tokenCommentBraces(stream, state); } if (/[\[\]\(\),;\:\.]/.test(ch)) { return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == ")" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenCommentBraces(stream, state) { var ch; while (ch = stream.next()) { if (ch == "}") { state.tokenize = null; break; } } return "comment"; } // Interface return { startState: function() { return {tokenize: null}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; return style; }, electricChars: "{}" }; }); CodeMirror.defineMIME("text/x-pascal", "pascal"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, javascript); })(function(CodeMirror) { CodeMirror.defineMode("pegjs", function (config) { var jsMode = CodeMirror.getMode(config, "javascript"); function identifier(stream) { return stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/); } return { startState: function () { return { inString: false, stringType: null, inComment: false, inCharacterClass: false, braced: 0, lhs: true, localState: null }; }, token: function (stream, state) { if (stream) //check for state changes if (!state.inString && !state.inComment && ((stream.peek() == '"') || (stream.peek() == "'"))) { state.stringType = stream.peek(); stream.next(); // Skip quote state.inString = true; // Update state } if (!state.inString && !state.inComment && stream.match(/^\/\*/)) { state.inComment = true; } //return state if (state.inString) { while (state.inString && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.inString = false; // Clear flag } else if (stream.peek() === '\\') { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return state.lhs ? "property string" : "string"; // Token style } else if (state.inComment) { while (state.inComment && !stream.eol()) { if (stream.match(/\*\//)) { state.inComment = false; // Clear flag } else { stream.match(/^.[^\*]*/); } } return "comment"; } else if (state.inCharacterClass) { while (state.inCharacterClass && !stream.eol()) { if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) { state.inCharacterClass = false; } } } else if (stream.peek() === '[') { stream.next(); state.inCharacterClass = true; return 'bracket'; } else if (stream.match(/^\/\//)) { stream.skipToEnd(); return "comment"; } else if (state.braced || stream.peek() === '{') { if (state.localState === null) { state.localState = CodeMirror.startState(jsMode); } var token = jsMode.token(stream, state.localState); var text = stream.current(); if (!token) { for (var i = 0; i < text.length; i++) { if (text[i] === '{') { state.braced++; } else if (text[i] === '}') { state.braced--; } } } return token; } else if (identifier(stream)) { if (stream.peek() === ':') { return 'variable'; } return 'variable-2'; } else if (['[', ']', '(', ')'].indexOf(stream.peek()) != -1) { stream.next(); return 'bracket'; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }, "javascript"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // CodeMirror2 mode/perl/perl.js (text/x-perl) beta 0.10 (2011-11-08) // This is a part of CodeMirror from https://github.com/sabaca/CodeMirror_mode_perl (mail@sabaca.com) (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("perl",function(){ // http://perldoc.perl.org var PERL={ // null - magic touch // 1 - keyword // 2 - def // 3 - atom // 4 - operator // 5 - variable-2 (predefined) // [x,y] - x=1,2,3; y=must be defined if x{...} // PERL operators '->' : 4, '++' : 4, '--' : 4, '**' : 4, // ! ~ \ and unary + and - '=~' : 4, '!~' : 4, '*' : 4, '/' : 4, '%' : 4, 'x' : 4, '+' : 4, '-' : 4, '.' : 4, '<<' : 4, '>>' : 4, // named unary operators '<' : 4, '>' : 4, '<=' : 4, '>=' : 4, 'lt' : 4, 'gt' : 4, 'le' : 4, 'ge' : 4, '==' : 4, '!=' : 4, '<=>' : 4, 'eq' : 4, 'ne' : 4, 'cmp' : 4, '~~' : 4, '&' : 4, '|' : 4, '^' : 4, '&&' : 4, '||' : 4, '//' : 4, '..' : 4, '...' : 4, '?' : 4, ':' : 4, '=' : 4, '+=' : 4, '-=' : 4, '*=' : 4, // etc. ??? ',' : 4, '=>' : 4, '::' : 4, // list operators (rightward) 'not' : 4, 'and' : 4, 'or' : 4, 'xor' : 4, // PERL predefined variables (I know, what this is a paranoid idea, but may be needed for people, who learn PERL, and for me as well, ...and may be for you?;) 'BEGIN' : [5,1], 'END' : [5,1], 'PRINT' : [5,1], 'PRINTF' : [5,1], 'GETC' : [5,1], 'READ' : [5,1], 'READLINE' : [5,1], 'DESTROY' : [5,1], 'TIE' : [5,1], 'TIEHANDLE' : [5,1], 'UNTIE' : [5,1], 'STDIN' : 5, 'STDIN_TOP' : 5, 'STDOUT' : 5, 'STDOUT_TOP' : 5, 'STDERR' : 5, 'STDERR_TOP' : 5, '$ARG' : 5, '$_' : 5, '@ARG' : 5, '@_' : 5, '$LIST_SEPARATOR' : 5, '$"' : 5, '$PROCESS_ID' : 5, '$PID' : 5, '$$' : 5, '$REAL_GROUP_ID' : 5, '$GID' : 5, '$(' : 5, '$EFFECTIVE_GROUP_ID' : 5, '$EGID' : 5, '$)' : 5, '$PROGRAM_NAME' : 5, '$0' : 5, '$SUBSCRIPT_SEPARATOR' : 5, '$SUBSEP' : 5, '$;' : 5, '$REAL_USER_ID' : 5, '$UID' : 5, '$<' : 5, '$EFFECTIVE_USER_ID' : 5, '$EUID' : 5, '$>' : 5, '$a' : 5, '$b' : 5, '$COMPILING' : 5, '$^C' : 5, '$DEBUGGING' : 5, '$^D' : 5, '${^ENCODING}' : 5, '$ENV' : 5, '%ENV' : 5, '$SYSTEM_FD_MAX' : 5, '$^F' : 5, '@F' : 5, '${^GLOBAL_PHASE}' : 5, '$^H' : 5, '%^H' : 5, '@INC' : 5, '%INC' : 5, '$INPLACE_EDIT' : 5, '$^I' : 5, '$^M' : 5, '$OSNAME' : 5, '$^O' : 5, '${^OPEN}' : 5, '$PERLDB' : 5, '$^P' : 5, '$SIG' : 5, '%SIG' : 5, '$BASETIME' : 5, '$^T' : 5, '${^TAINT}' : 5, '${^UNICODE}' : 5, '${^UTF8CACHE}' : 5, '${^UTF8LOCALE}' : 5, '$PERL_VERSION' : 5, '$^V' : 5, '${^WIN32_SLOPPY_STAT}' : 5, '$EXECUTABLE_NAME' : 5, '$^X' : 5, '$1' : 5, // - regexp $1, $2... '$MATCH' : 5, '$&' : 5, '${^MATCH}' : 5, '$PREMATCH' : 5, '$`' : 5, '${^PREMATCH}' : 5, '$POSTMATCH' : 5, "$'" : 5, '${^POSTMATCH}' : 5, '$LAST_PAREN_MATCH' : 5, '$+' : 5, '$LAST_SUBMATCH_RESULT' : 5, '$^N' : 5, '@LAST_MATCH_END' : 5, '@+' : 5, '%LAST_PAREN_MATCH' : 5, '%+' : 5, '@LAST_MATCH_START' : 5, '@-' : 5, '%LAST_MATCH_START' : 5, '%-' : 5, '$LAST_REGEXP_CODE_RESULT' : 5, '$^R' : 5, '${^RE_DEBUG_FLAGS}' : 5, '${^RE_TRIE_MAXBUF}' : 5, '$ARGV' : 5, '@ARGV' : 5, 'ARGV' : 5, 'ARGVOUT' : 5, '$OUTPUT_FIELD_SEPARATOR' : 5, '$OFS' : 5, '$,' : 5, '$INPUT_LINE_NUMBER' : 5, '$NR' : 5, '$.' : 5, '$INPUT_RECORD_SEPARATOR' : 5, '$RS' : 5, '$/' : 5, '$OUTPUT_RECORD_SEPARATOR' : 5, '$ORS' : 5, '$\\' : 5, '$OUTPUT_AUTOFLUSH' : 5, '$|' : 5, '$ACCUMULATOR' : 5, '$^A' : 5, '$FORMAT_FORMFEED' : 5, '$^L' : 5, '$FORMAT_PAGE_NUMBER' : 5, '$%' : 5, '$FORMAT_LINES_LEFT' : 5, '$-' : 5, '$FORMAT_LINE_BREAK_CHARACTERS' : 5, '$:' : 5, '$FORMAT_LINES_PER_PAGE' : 5, '$=' : 5, '$FORMAT_TOP_NAME' : 5, '$^' : 5, '$FORMAT_NAME' : 5, '$~' : 5, '${^CHILD_ERROR_NATIVE}' : 5, '$EXTENDED_OS_ERROR' : 5, '$^E' : 5, '$EXCEPTIONS_BEING_CAUGHT' : 5, '$^S' : 5, '$WARNING' : 5, '$^W' : 5, '${^WARNING_BITS}' : 5, '$OS_ERROR' : 5, '$ERRNO' : 5, '$!' : 5, '%OS_ERROR' : 5, '%ERRNO' : 5, '%!' : 5, '$CHILD_ERROR' : 5, '$?' : 5, '$EVAL_ERROR' : 5, '$@' : 5, '$OFMT' : 5, '$#' : 5, '$*' : 5, '$ARRAY_BASE' : 5, '$[' : 5, '$OLD_PERL_VERSION' : 5, '$]' : 5, // PERL blocks 'if' :[1,1], elsif :[1,1], 'else' :[1,1], 'while' :[1,1], unless :[1,1], 'for' :[1,1], foreach :[1,1], // PERL functions 'abs' :1, // - absolute value function accept :1, // - accept an incoming socket connect alarm :1, // - schedule a SIGALRM 'atan2' :1, // - arctangent of Y/X in the range -PI to PI bind :1, // - binds an address to a socket binmode :1, // - prepare binary files for I/O bless :1, // - create an object bootstrap :1, // 'break' :1, // - break out of a "given" block caller :1, // - get context of the current subroutine call chdir :1, // - change your current working directory chmod :1, // - changes the permissions on a list of files chomp :1, // - remove a trailing record separator from a string chop :1, // - remove the last character from a string chown :1, // - change the ownership on a list of files chr :1, // - get character this number represents chroot :1, // - make directory new root for path lookups close :1, // - close file (or pipe or socket) handle closedir :1, // - close directory handle connect :1, // - connect to a remote socket 'continue' :[1,1], // - optional trailing block in a while or foreach 'cos' :1, // - cosine function crypt :1, // - one-way passwd-style encryption dbmclose :1, // - breaks binding on a tied dbm file dbmopen :1, // - create binding on a tied dbm file 'default' :1, // defined :1, // - test whether a value, variable, or function is defined 'delete' :1, // - deletes a value from a hash die :1, // - raise an exception or bail out 'do' :1, // - turn a BLOCK into a TERM dump :1, // - create an immediate core dump each :1, // - retrieve the next key/value pair from a hash endgrent :1, // - be done using group file endhostent :1, // - be done using hosts file endnetent :1, // - be done using networks file endprotoent :1, // - be done using protocols file endpwent :1, // - be done using passwd file endservent :1, // - be done using services file eof :1, // - test a filehandle for its end 'eval' :1, // - catch exceptions or compile and run code 'exec' :1, // - abandon this program to run another exists :1, // - test whether a hash key is present exit :1, // - terminate this program 'exp' :1, // - raise I to a power fcntl :1, // - file control system call fileno :1, // - return file descriptor from filehandle flock :1, // - lock an entire file with an advisory lock fork :1, // - create a new process just like this one format :1, // - declare a picture format with use by the write() function formline :1, // - internal function used for formats getc :1, // - get the next character from the filehandle getgrent :1, // - get next group record getgrgid :1, // - get group record given group user ID getgrnam :1, // - get group record given group name gethostbyaddr :1, // - get host record given its address gethostbyname :1, // - get host record given name gethostent :1, // - get next hosts record getlogin :1, // - return who logged in at this tty getnetbyaddr :1, // - get network record given its address getnetbyname :1, // - get networks record given name getnetent :1, // - get next networks record getpeername :1, // - find the other end of a socket connection getpgrp :1, // - get process group getppid :1, // - get parent process ID getpriority :1, // - get current nice value getprotobyname :1, // - get protocol record given name getprotobynumber :1, // - get protocol record numeric protocol getprotoent :1, // - get next protocols record getpwent :1, // - get next passwd record getpwnam :1, // - get passwd record given user login name getpwuid :1, // - get passwd record given user ID getservbyname :1, // - get services record given its name getservbyport :1, // - get services record given numeric port getservent :1, // - get next services record getsockname :1, // - retrieve the sockaddr for a given socket getsockopt :1, // - get socket options on a given socket given :1, // glob :1, // - expand filenames using wildcards gmtime :1, // - convert UNIX time into record or string using Greenwich time 'goto' :1, // - create spaghetti code grep :1, // - locate elements in a list test true against a given criterion hex :1, // - convert a string to a hexadecimal number 'import' :1, // - patch a module's namespace into your own index :1, // - find a substring within a string 'int' :1, // - get the integer portion of a number ioctl :1, // - system-dependent device control system call 'join' :1, // - join a list into a string using a separator keys :1, // - retrieve list of indices from a hash kill :1, // - send a signal to a process or process group last :1, // - exit a block prematurely lc :1, // - return lower-case version of a string lcfirst :1, // - return a string with just the next letter in lower case length :1, // - return the number of bytes in a string 'link' :1, // - create a hard link in the filesytem listen :1, // - register your socket as a server local : 2, // - create a temporary value for a global variable (dynamic scoping) localtime :1, // - convert UNIX time into record or string using local time lock :1, // - get a thread lock on a variable, subroutine, or method 'log' :1, // - retrieve the natural logarithm for a number lstat :1, // - stat a symbolic link m :null, // - match a string with a regular expression pattern map :1, // - apply a change to a list to get back a new list with the changes mkdir :1, // - create a directory msgctl :1, // - SysV IPC message control operations msgget :1, // - get SysV IPC message queue msgrcv :1, // - receive a SysV IPC message from a message queue msgsnd :1, // - send a SysV IPC message to a message queue my : 2, // - declare and assign a local variable (lexical scoping) 'new' :1, // next :1, // - iterate a block prematurely no :1, // - unimport some module symbols or semantics at compile time oct :1, // - convert a string to an octal number open :1, // - open a file, pipe, or descriptor opendir :1, // - open a directory ord :1, // - find a character's numeric representation our : 2, // - declare and assign a package variable (lexical scoping) pack :1, // - convert a list into a binary representation 'package' :1, // - declare a separate global namespace pipe :1, // - open a pair of connected filehandles pop :1, // - remove the last element from an array and return it pos :1, // - find or set the offset for the last/next m//g search print :1, // - output a list to a filehandle printf :1, // - output a formatted list to a filehandle prototype :1, // - get the prototype (if any) of a subroutine push :1, // - append one or more elements to an array q :null, // - singly quote a string qq :null, // - doubly quote a string qr :null, // - Compile pattern quotemeta :null, // - quote regular expression magic characters qw :null, // - quote a list of words qx :null, // - backquote quote a string rand :1, // - retrieve the next pseudorandom number read :1, // - fixed-length buffered input from a filehandle readdir :1, // - get a directory from a directory handle readline :1, // - fetch a record from a file readlink :1, // - determine where a symbolic link is pointing readpipe :1, // - execute a system command and collect standard output recv :1, // - receive a message over a Socket redo :1, // - start this loop iteration over again ref :1, // - find out the type of thing being referenced rename :1, // - change a filename require :1, // - load in external functions from a library at runtime reset :1, // - clear all variables of a given name 'return' :1, // - get out of a function early reverse :1, // - flip a string or a list rewinddir :1, // - reset directory handle rindex :1, // - right-to-left substring search rmdir :1, // - remove a directory s :null, // - replace a pattern with a string say :1, // - print with newline scalar :1, // - force a scalar context seek :1, // - reposition file pointer for random-access I/O seekdir :1, // - reposition directory pointer select :1, // - reset default output or do I/O multiplexing semctl :1, // - SysV semaphore control operations semget :1, // - get set of SysV semaphores semop :1, // - SysV semaphore operations send :1, // - send a message over a socket setgrent :1, // - prepare group file for use sethostent :1, // - prepare hosts file for use setnetent :1, // - prepare networks file for use setpgrp :1, // - set the process group of a process setpriority :1, // - set a process's nice value setprotoent :1, // - prepare protocols file for use setpwent :1, // - prepare passwd file for use setservent :1, // - prepare services file for use setsockopt :1, // - set some socket options shift :1, // - remove the first element of an array, and return it shmctl :1, // - SysV shared memory operations shmget :1, // - get SysV shared memory segment identifier shmread :1, // - read SysV shared memory shmwrite :1, // - write SysV shared memory shutdown :1, // - close down just half of a socket connection 'sin' :1, // - return the sine of a number sleep :1, // - block for some number of seconds socket :1, // - create a socket socketpair :1, // - create a pair of sockets 'sort' :1, // - sort a list of values splice :1, // - add or remove elements anywhere in an array 'split' :1, // - split up a string using a regexp delimiter sprintf :1, // - formatted print into a string 'sqrt' :1, // - square root function srand :1, // - seed the random number generator stat :1, // - get a file's status information state :1, // - declare and assign a state variable (persistent lexical scoping) study :1, // - optimize input data for repeated searches 'sub' :1, // - declare a subroutine, possibly anonymously 'substr' :1, // - get or alter a portion of a stirng symlink :1, // - create a symbolic link to a file syscall :1, // - execute an arbitrary system call sysopen :1, // - open a file, pipe, or descriptor sysread :1, // - fixed-length unbuffered input from a filehandle sysseek :1, // - position I/O pointer on handle used with sysread and syswrite system :1, // - run a separate program syswrite :1, // - fixed-length unbuffered output to a filehandle tell :1, // - get current seekpointer on a filehandle telldir :1, // - get current seekpointer on a directory handle tie :1, // - bind a variable to an object class tied :1, // - get a reference to the object underlying a tied variable time :1, // - return number of seconds since 1970 times :1, // - return elapsed time for self and child processes tr :null, // - transliterate a string truncate :1, // - shorten a file uc :1, // - return upper-case version of a string ucfirst :1, // - return a string with just the next letter in upper case umask :1, // - set file creation mode mask undef :1, // - remove a variable or function definition unlink :1, // - remove one link to a file unpack :1, // - convert binary structure into normal perl variables unshift :1, // - prepend more elements to the beginning of a list untie :1, // - break a tie binding to a variable use :1, // - load in a module at compile time utime :1, // - set a file's last access and modify times values :1, // - return a list of the values in a hash vec :1, // - test or set particular bits in a string wait :1, // - wait for any child process to die waitpid :1, // - wait for a particular child process to die wantarray :1, // - get void vs scalar vs list context of current subroutine call warn :1, // - print debugging info when :1, // write :1, // - print a picture record y :null}; // - transliterate a string var RXstyle="string-2"; var RXmodifiers=/[goseximacplud]/; // NOTE: "m", "s", "y" and "tr" need to correct real modifiers for each regexp type function tokenChain(stream,state,chain,style,tail){ // NOTE: chain.length > 2 is not working now (it's for s[...][...]geos;) state.chain=null; // 12 3tail state.style=null; state.tail=null; state.tokenize=function(stream,state){ var e=false,c,i=0; while(c=stream.next()){ if(c===chain[i]&&!e){ if(chain[++i]!==undefined){ state.chain=chain[i]; state.style=style; state.tail=tail;} else if(tail) stream.eatWhile(tail); state.tokenize=tokenPerl; return style;} e=!e&&c=="\\";} return style;}; return state.tokenize(stream,state);} function tokenSOMETHING(stream,state,string){ state.tokenize=function(stream,state){ if(stream.string==string) state.tokenize=tokenPerl; stream.skipToEnd(); return "string";}; return state.tokenize(stream,state);} function tokenPerl(stream,state){ if(stream.eatSpace()) return null; if(state.chain) return tokenChain(stream,state,state.chain,state.style,state.tail); if(stream.match(/^\-?[\d\.]/,false)) if(stream.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/)) return 'number'; if(stream.match(/^<<(?=\w)/)){ // NOTE: <"],RXstyle,RXmodifiers);} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} else if(c=="q"){ c=look(stream, 1); if(c=="("){ eatSuffix(stream, 2); return tokenChain(stream,state,[")"],"string");} if(c=="["){ eatSuffix(stream, 2); return tokenChain(stream,state,["]"],"string");} if(c=="{"){ eatSuffix(stream, 2); return tokenChain(stream,state,["}"],"string");} if(c=="<"){ eatSuffix(stream, 2); return tokenChain(stream,state,[">"],"string");} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],"string");}} else if(c=="w"){ c=look(stream, 1); if(c=="("){ eatSuffix(stream, 2); return tokenChain(stream,state,[")"],"bracket");} if(c=="["){ eatSuffix(stream, 2); return tokenChain(stream,state,["]"],"bracket");} if(c=="{"){ eatSuffix(stream, 2); return tokenChain(stream,state,["}"],"bracket");} if(c=="<"){ eatSuffix(stream, 2); return tokenChain(stream,state,[">"],"bracket");} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],"bracket");}} else if(c=="r"){ c=look(stream, 1); if(c=="("){ eatSuffix(stream, 2); return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} if(c=="["){ eatSuffix(stream, 2); return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} if(c=="{"){ eatSuffix(stream, 2); return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} if(c=="<"){ eatSuffix(stream, 2); return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} else if(/[\^'"!~\/(\[{<]/.test(c)){ if(c=="("){ eatSuffix(stream, 1); return tokenChain(stream,state,[")"],"string");} if(c=="["){ eatSuffix(stream, 1); return tokenChain(stream,state,["]"],"string");} if(c=="{"){ eatSuffix(stream, 1); return tokenChain(stream,state,["}"],"string");} if(c=="<"){ eatSuffix(stream, 1); return tokenChain(stream,state,[">"],"string");} if(/[\^'"!~\/]/.test(c)){ return tokenChain(stream,state,[stream.eat(c)],"string");}}}} if(ch=="m"){ var c=look(stream, -2); if(!(c&&/\w/.test(c))){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(/[\^'"!~\/]/.test(c)){ return tokenChain(stream,state,[c],RXstyle,RXmodifiers);} if(c=="("){ return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} if(c=="["){ return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} if(c=="{"){ return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} if(c=="<"){ return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}}}} if(ch=="s"){ var c=/[\/>\]})\w]/.test(look(stream, -2)); if(!c){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(c=="[") return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); if(c=="{") return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); if(c=="<") return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); if(c=="(") return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} if(ch=="y"){ var c=/[\/>\]})\w]/.test(look(stream, -2)); if(!c){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(c=="[") return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); if(c=="{") return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); if(c=="<") return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); if(c=="(") return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} if(ch=="t"){ var c=/[\/>\]})\w]/.test(look(stream, -2)); if(!c){ c=stream.eat("r");if(c){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(c=="[") return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); if(c=="{") return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); if(c=="<") return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); if(c=="(") return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}} if(ch=="`"){ return tokenChain(stream,state,[ch],"variable-2");} if(ch=="/"){ if(!/~\s*$/.test(prefix(stream))) return "operator"; else return tokenChain(stream,state,[ch],RXstyle,RXmodifiers);} if(ch=="$"){ var p=stream.pos; if(stream.eatWhile(/\d/)||stream.eat("{")&&stream.eatWhile(/\d/)&&stream.eat("}")) return "variable-2"; else stream.pos=p;} if(/[$@%]/.test(ch)){ var p=stream.pos; if(stream.eat("^")&&stream.eat(/[A-Z]/)||!/[@$%&]/.test(look(stream, -2))&&stream.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){ var c=stream.current(); if(PERL[c]) return "variable-2";} stream.pos=p;} if(/[$@%&]/.test(ch)){ if(stream.eatWhile(/[\w$\[\]]/)||stream.eat("{")&&stream.eatWhile(/[\w$\[\]]/)&&stream.eat("}")){ var c=stream.current(); if(PERL[c]) return "variable-2"; else return "variable";}} if(ch=="#"){ if(look(stream, -2)!="$"){ stream.skipToEnd(); return "comment";}} if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(ch)){ var p=stream.pos; stream.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/); if(PERL[stream.current()]) return "operator"; else stream.pos=p;} if(ch=="_"){ if(stream.pos==1){ if(suffix(stream, 6)=="_END__"){ return tokenChain(stream,state,['\0'],"comment");} else if(suffix(stream, 7)=="_DATA__"){ return tokenChain(stream,state,['\0'],"variable-2");} else if(suffix(stream, 7)=="_C__"){ return tokenChain(stream,state,['\0'],"string");}}} if(/\w/.test(ch)){ var p=stream.pos; if(look(stream, -2)=="{"&&(look(stream, 0)=="}"||stream.eatWhile(/\w/)&&look(stream, 0)=="}")) return "string"; else stream.pos=p;} if(/[A-Z]/.test(ch)){ var l=look(stream, -2); var p=stream.pos; stream.eatWhile(/[A-Z_]/); if(/[\da-z]/.test(look(stream, 0))){ stream.pos=p;} else { var c=PERL[stream.current()]; if(!c) return "meta"; if(c[1]) c=c[0]; if(l!=":"){ if(c==1) return "keyword"; else if(c==2) return "def"; else if(c==3) return "atom"; else if(c==4) return "operator"; else if(c==5) return "variable-2"; else return "meta";} else return "meta";}} if(/[a-zA-Z_]/.test(ch)){ var l=look(stream, -2); stream.eatWhile(/\w/); var c=PERL[stream.current()]; if(!c) return "meta"; if(c[1]) c=c[0]; if(l!=":"){ if(c==1) return "keyword"; else if(c==2) return "def"; else if(c==3) return "atom"; else if(c==4) return "operator"; else if(c==5) return "variable-2"; else return "meta";} else return "meta";} return null;} return { startState: function() { return { tokenize: tokenPerl, chain: null, style: null, tail: null }; }, token: function(stream, state) { return (state.tokenize || tokenPerl)(stream, state); }, lineComment: '#' }; }); CodeMirror.registerHelper("wordChars", "perl", /[\w$]/); CodeMirror.defineMIME("text/x-perl", "perl"); // it's like "peek", but need for look-ahead or look-behind if index < 0 function look(stream, c){ return stream.string.charAt(stream.pos+(c||0)); } // return a part of prefix of current stream from current position function prefix(stream, c){ if(c){ var x=stream.pos-c; return stream.string.substr((x>=0?x:0),c);} else { return stream.string.substr(0,stream.pos-1); } } // return a part of suffix of current stream from current position function suffix(stream, c){ var y=stream.string.length; var x=y-stream.pos+1; return stream.string.substr(stream.pos,(c&&c=(y=stream.string.length-1)) stream.pos=y; else stream.pos=x; } }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, htmlmixed, clike); })(function(CodeMirror) { function keywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } // Helper for phpString function matchSequence(list, end, escapes) { if (list.length == 0) return phpString(end); return function (stream, state) { var patterns = list[0]; for (var i = 0; i < patterns.length; i++) if (stream.match(patterns[i][0])) { state.tokenize = matchSequence(list.slice(1), end); return patterns[i][1]; } state.tokenize = phpString(end, escapes); return "string"; }; } function phpString(closing, escapes) { return function(stream, state) { return phpString_(stream, state, closing, escapes); }; } function phpString_(stream, state, closing, escapes) { // "Complex" syntax if (escapes !== false && stream.match("${", false) || stream.match("{$", false)) { state.tokenize = null; return "string"; } // Simple syntax if (escapes !== false && stream.match(/^\$[a-zA-Z_][a-zA-Z0-9_]*/)) { // After the variable name there may appear array or object operator. if (stream.match("[", false)) { // Match array operator state.tokenize = matchSequence([ [["[", null]], [[/\d[\w\.]*/, "number"], [/\$[a-zA-Z_][a-zA-Z0-9_]*/, "variable-2"], [/[\w\$]+/, "variable"]], [["]", null]] ], closing, escapes); } if (stream.match(/\-\>\w/, false)) { // Match object operator state.tokenize = matchSequence([ [["->", null]], [[/[\w]+/, "variable"]] ], closing, escapes); } return "variable-2"; } var escaped = false; // Normal string while (!stream.eol() && (escaped || escapes === false || (!stream.match("{$", false) && !stream.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/, false)))) { if (!escaped && stream.match(closing)) { state.tokenize = null; state.tokStack.pop(); state.tokStack.pop(); break; } escaped = stream.next() == "\\" && !escaped; } return "string"; } var phpKeywords = "abstract and array as break case catch class clone const continue declare default " + "do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final " + "for foreach function global goto if implements interface instanceof namespace " + "new or private protected public static switch throw trait try use var while xor " + "die echo empty exit eval include include_once isset list require require_once return " + "print unset __halt_compiler self static parent yield insteadof finally"; var phpAtoms = "true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__"; var phpBuiltin = "func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count"; CodeMirror.registerHelper("hintWords", "php", [phpKeywords, phpAtoms, phpBuiltin].join(" ").split(" ")); CodeMirror.registerHelper("wordChars", "php", /[\w$]/); var phpConfig = { name: "clike", helperType: "php", keywords: keywords(phpKeywords), blockKeywords: keywords("catch do else elseif for foreach if switch try while finally"), defKeywords: keywords("class function interface namespace trait"), atoms: keywords(phpAtoms), builtin: keywords(phpBuiltin), multiLineStrings: true, hooks: { "$": function(stream) { stream.eatWhile(/[\w\$_]/); return "variable-2"; }, "<": function(stream, state) { var before; if (before = stream.match(/<<\s*/)) { var quoted = stream.eat(/['"]/); stream.eatWhile(/[\w\.]/); var delim = stream.current().slice(before[0].length + (quoted ? 2 : 1)); if (quoted) stream.eat(quoted); if (delim) { (state.tokStack || (state.tokStack = [])).push(delim, 0); state.tokenize = phpString(delim, quoted != "'"); return "string"; } } return false; }, "#": function(stream) { while (!stream.eol() && !stream.match("?>", false)) stream.next(); return "comment"; }, "/": function(stream) { if (stream.eat("/")) { while (!stream.eol() && !stream.match("?>", false)) stream.next(); return "comment"; } return false; }, '"': function(_stream, state) { (state.tokStack || (state.tokStack = [])).push('"', 0); state.tokenize = phpString('"'); return "string"; }, "{": function(_stream, state) { if (state.tokStack && state.tokStack.length) state.tokStack[state.tokStack.length - 1]++; return false; }, "}": function(_stream, state) { if (state.tokStack && state.tokStack.length > 0 && !--state.tokStack[state.tokStack.length - 1]) { state.tokenize = phpString(state.tokStack[state.tokStack.length - 2]); } return false; } } }; CodeMirror.defineMode("php", function(config, parserConfig) { var htmlMode = CodeMirror.getMode(config, (parserConfig && parserConfig.htmlMode) || "text/html"); var phpMode = CodeMirror.getMode(config, phpConfig); function dispatch(stream, state) { var isPHP = state.curMode == phpMode; if (stream.sol() && state.pending && state.pending != '"' && state.pending != "'") state.pending = null; if (!isPHP) { if (stream.match(/^<\?\w*/)) { state.curMode = phpMode; if (!state.php) state.php = CodeMirror.startState(phpMode, htmlMode.indent(state.html, "", "")); state.curState = state.php; return "meta"; } if (state.pending == '"' || state.pending == "'") { while (!stream.eol() && stream.next() != state.pending) {} var style = "string"; } else if (state.pending && stream.pos < state.pending.end) { stream.pos = state.pending.end; var style = state.pending.style; } else { var style = htmlMode.token(stream, state.curState); } if (state.pending) state.pending = null; var cur = stream.current(), openPHP = cur.search(/<\?/), m; if (openPHP != -1) { if (style == "string" && (m = cur.match(/[\'\"]$/)) && !/\?>/.test(cur)) state.pending = m[0]; else state.pending = {end: stream.pos, style: style}; stream.backUp(cur.length - openPHP); } return style; } else if (isPHP && state.php.tokenize == null && stream.match("?>")) { state.curMode = htmlMode; state.curState = state.html; if (!state.php.context.prev) state.php = null; return "meta"; } else { return phpMode.token(stream, state.curState); } } return { startState: function() { var html = CodeMirror.startState(htmlMode); var php = parserConfig.startOpen ? CodeMirror.startState(phpMode) : null; return {html: html, php: php, curMode: parserConfig.startOpen ? phpMode : htmlMode, curState: parserConfig.startOpen ? php : html, pending: null}; }, copyState: function(state) { var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html), php = state.php, phpNew = php && CodeMirror.copyState(phpMode, php), cur; if (state.curMode == htmlMode) cur = htmlNew; else cur = phpNew; return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur, pending: state.pending}; }, token: dispatch, indent: function(state, textAfter, line) { if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) || (state.curMode == phpMode && /^\?>/.test(textAfter))) return htmlMode.indent(state.html, textAfter, line); return state.curMode.indent(state.curState, textAfter, line); }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", innerMode: function(state) { return {state: state.curState, mode: state.curMode}; } }; }, "htmlmixed", "clike"); CodeMirror.defineMIME("application/x-httpd-php", "php"); CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true}); CodeMirror.defineMIME("text/x-php", phpConfig); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /* * Pig Latin Mode for CodeMirror 2 * @author Prasanth Jayachandran * @link https://github.com/prasanthj/pig-codemirror-2 * This implementation is adapted from PL/SQL mode in CodeMirror 2. */ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("pig", function(_config, parserConfig) { var keywords = parserConfig.keywords, builtins = parserConfig.builtins, types = parserConfig.types, multiLineStrings = parserConfig.multiLineStrings; var isOperatorChar = /[*+\-%<>=&?:\/!|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenComment(stream, state) { var isEnd = false; var ch; while(ch = stream.next()) { if(ch == "/" && isEnd) { state.tokenize = tokenBase; break; } isEnd = (ch == "*"); } return "comment"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = tokenBase; return "error"; }; } function tokenBase(stream, state) { var ch = stream.next(); // is a start of string? if (ch == '"' || ch == "'") return chain(stream, state, tokenString(ch)); // is it one of the special chars else if(/[\[\]{}\(\),;\.]/.test(ch)) return null; // is it a number? else if(/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } // multi line comment or operator else if (ch == "/") { if (stream.eat("*")) { return chain(stream, state, tokenComment); } else { stream.eatWhile(isOperatorChar); return "operator"; } } // single line comment or operator else if (ch=="-") { if(stream.eat("-")){ stream.skipToEnd(); return "comment"; } else { stream.eatWhile(isOperatorChar); return "operator"; } } // is it an operator else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } else { // get the while word stream.eatWhile(/[\w\$_]/); // is it one of the listed keywords? if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { //keywords can be used as variables like flatten(group), group.$0 etc.. if (!stream.eat(")") && !stream.eat(".")) return "keyword"; } // is it one of the builtin functions? if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) return "variable-2"; // is it one of the listed types? if (types && types.propertyIsEnumerable(stream.current().toUpperCase())) return "variable-3"; // default is a 'variable' return "variable"; } } // Interface return { startState: function() { return { tokenize: tokenBase, startOfLine: true }; }, token: function(stream, state) { if(stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; } }; }); (function() { function keywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } // builtin funcs taken from trunk revision 1303237 var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL " + "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS " + "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG " + "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN " + "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER " + "ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS " + "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA " + "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE " + "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG " + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER "; // taken from QueryLexer.g var pKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP " + "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL " + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE " + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE " + "NEQ MATCHES TRUE FALSE DUMP"; // data types var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP "; CodeMirror.defineMIME("text/x-pig", { name: "pig", builtins: keywords(pBuiltins), keywords: keywords(pKeywords), types: keywords(pTypes) }); CodeMirror.registerHelper("hintWords", "pig", (pBuiltins + pTypes + pKeywords).split(" ")); }()); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode('powershell', function() { function buildRegexp(patterns, options) { options = options || {}; var prefix = options.prefix !== undefined ? options.prefix : '^'; var suffix = options.suffix !== undefined ? options.suffix : '\\b'; for (var i = 0; i < patterns.length; i++) { if (patterns[i] instanceof RegExp) { patterns[i] = patterns[i].source; } else { patterns[i] = patterns[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } } return new RegExp(prefix + '(' + patterns.join('|') + ')' + suffix, 'i'); } var notCharacterOrDash = '(?=[^A-Za-z\\d\\-_]|$)'; var varNames = /[\w\-:]/; var keywords = buildRegexp([ /begin|break|catch|continue|data|default|do|dynamicparam/, /else|elseif|end|exit|filter|finally|for|foreach|from|function|if|in/, /param|process|return|switch|throw|trap|try|until|where|while/ ], { suffix: notCharacterOrDash }); var punctuation = /[\[\]{},;`\\\.]|@[({]/; var wordOperators = buildRegexp([ 'f', /b?not/, /[ic]?split/, 'join', /is(not)?/, 'as', /[ic]?(eq|ne|[gl][te])/, /[ic]?(not)?(like|match|contains)/, /[ic]?replace/, /b?(and|or|xor)/ ], { prefix: '-' }); var symbolOperators = /[+\-*\/%]=|\+\+|--|\.\.|[+\-*&^%:=!|\/]|<(?!#)|(?!#)>/; var operators = buildRegexp([wordOperators, symbolOperators], { suffix: '' }); var numbers = /^((0x[\da-f]+)|((\d+\.\d+|\d\.|\.\d+|\d+)(e[\+\-]?\d+)?))[ld]?([kmgtp]b)?/i; var identifiers = /^[A-Za-z\_][A-Za-z\-\_\d]*\b/; var symbolBuiltins = /[A-Z]:|%|\?/i; var namedBuiltins = buildRegexp([ /Add-(Computer|Content|History|Member|PSSnapin|Type)/, /Checkpoint-Computer/, /Clear-(Content|EventLog|History|Host|Item(Property)?|Variable)/, /Compare-Object/, /Complete-Transaction/, /Connect-PSSession/, /ConvertFrom-(Csv|Json|SecureString|StringData)/, /Convert-Path/, /ConvertTo-(Csv|Html|Json|SecureString|Xml)/, /Copy-Item(Property)?/, /Debug-Process/, /Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/, /Disconnect-PSSession/, /Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/, /(Enter|Exit)-PSSession/, /Export-(Alias|Clixml|Console|Counter|Csv|FormatData|ModuleMember|PSSession)/, /ForEach-Object/, /Format-(Custom|List|Table|Wide)/, new RegExp('Get-(Acl|Alias|AuthenticodeSignature|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Counter|Credential' + '|Culture|Date|Event|EventLog|EventSubscriber|ExecutionPolicy|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job' + '|Location|Member|Module|PfxCertificate|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration' + '|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|Verb|WinEvent|WmiObject)'), /Group-Object/, /Import-(Alias|Clixml|Counter|Csv|LocalizedData|Module|PSSession)/, /ImportSystemModules/, /Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)/, /Join-Path/, /Limit-EventLog/, /Measure-(Command|Object)/, /Move-Item(Property)?/, new RegExp('New-(Alias|Event|EventLog|Item(Property)?|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile' + '|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy|WinEvent)'), /Out-(Default|File|GridView|Host|Null|Printer|String)/, /Pause/, /(Pop|Push)-Location/, /Read-Host/, /Receive-(Job|PSSession)/, /Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)/, /Remove-(Computer|Event|EventLog|Item(Property)?|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)/, /Rename-(Computer|Item(Property)?)/, /Reset-ComputerMachinePassword/, /Resolve-Path/, /Restart-(Computer|Service)/, /Restore-Computer/, /Resume-(Job|Service)/, /Save-Help/, /Select-(Object|String|Xml)/, /Send-MailMessage/, new RegExp('Set-(Acl|Alias|AuthenticodeSignature|Content|Date|ExecutionPolicy|Item(Property)?|Location|PSBreakpoint|PSDebug' + '|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)'), /Show-(Command|ControlPanelItem|EventLog)/, /Sort-Object/, /Split-Path/, /Start-(Job|Process|Service|Sleep|Transaction|Transcript)/, /Stop-(Computer|Job|Process|Service|Transcript)/, /Suspend-(Job|Service)/, /TabExpansion2/, /Tee-Object/, /Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)/, /Trace-Command/, /Unblock-File/, /Undo-Transaction/, /Unregister-(Event|PSSessionConfiguration)/, /Update-(FormatData|Help|List|TypeData)/, /Use-Transaction/, /Wait-(Event|Job|Process)/, /Where-Object/, /Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning)/, /cd|help|mkdir|more|oss|prompt/, /ac|asnp|cat|cd|chdir|clc|clear|clhy|cli|clp|cls|clv|cnsn|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|dnsn|ebp/, /echo|epal|epcsv|epsn|erase|etsn|exsn|fc|fl|foreach|ft|fw|gal|gbp|gc|gci|gcm|gcs|gdr|ghy|gi|gjb|gl|gm|gmo|gp|gps/, /group|gsn|gsnp|gsv|gu|gv|gwmi|h|history|icm|iex|ihy|ii|ipal|ipcsv|ipmo|ipsn|irm|ise|iwmi|iwr|kill|lp|ls|man|md/, /measure|mi|mount|move|mp|mv|nal|ndr|ni|nmo|npssc|nsn|nv|ogv|oh|popd|ps|pushd|pwd|r|rbp|rcjb|rcsn|rd|rdr|ren|ri/, /rjb|rm|rmdir|rmo|rni|rnp|rp|rsn|rsnp|rujb|rv|rvpa|rwmi|sajb|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls/, /sort|sp|spjb|spps|spsv|start|sujb|sv|swmi|tee|trcm|type|where|wjb|write/ ], { prefix: '', suffix: '' }); var variableBuiltins = buildRegexp([ /[$?^_]|Args|ConfirmPreference|ConsoleFileName|DebugPreference|Error|ErrorActionPreference|ErrorView|ExecutionContext/, /FormatEnumerationLimit|Home|Host|Input|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount/, /MaximumHistoryCount|MaximumVariableCount|MyInvocation|NestedPromptLevel|OutputEncoding|Pid|Profile|ProgressPreference/, /PSBoundParameters|PSCommandPath|PSCulture|PSDefaultParameterValues|PSEmailServer|PSHome|PSScriptRoot|PSSessionApplicationName/, /PSSessionConfigurationName|PSSessionOption|PSUICulture|PSVersionTable|Pwd|ShellId|StackTrace|VerbosePreference/, /WarningPreference|WhatIfPreference/, /Event|EventArgs|EventSubscriber|Sender/, /Matches|Ofs|ForEach|LastExitCode|PSCmdlet|PSItem|PSSenderInfo|This/, /true|false|null/ ], { prefix: '\\$', suffix: '' }); var builtins = buildRegexp([symbolBuiltins, namedBuiltins, variableBuiltins], { suffix: notCharacterOrDash }); var grammar = { keyword: keywords, number: numbers, operator: operators, builtin: builtins, punctuation: punctuation, identifier: identifiers }; // tokenizers function tokenBase(stream, state) { // Handle Comments //var ch = stream.peek(); var parent = state.returnStack[state.returnStack.length - 1]; if (parent && parent.shouldReturnFrom(state)) { state.tokenize = parent.tokenize; state.returnStack.pop(); return state.tokenize(stream, state); } if (stream.eatSpace()) { return null; } if (stream.eat('(')) { state.bracketNesting += 1; return 'punctuation'; } if (stream.eat(')')) { state.bracketNesting -= 1; return 'punctuation'; } for (var key in grammar) { if (stream.match(grammar[key])) { return key; } } var ch = stream.next(); // single-quote string if (ch === "'") { return tokenSingleQuoteString(stream, state); } if (ch === '$') { return tokenVariable(stream, state); } // double-quote string if (ch === '"') { return tokenDoubleQuoteString(stream, state); } if (ch === '<' && stream.eat('#')) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (ch === '#') { stream.skipToEnd(); return 'comment'; } if (ch === '@') { var quoteMatch = stream.eat(/["']/); if (quoteMatch && stream.eol()) { state.tokenize = tokenMultiString; state.startQuote = quoteMatch[0]; return tokenMultiString(stream, state); } else if (stream.eol()) { return 'error'; } else if (stream.peek().match(/[({]/)) { return 'punctuation'; } else if (stream.peek().match(varNames)) { // splatted variable return tokenVariable(stream, state); } } return 'error'; } function tokenSingleQuoteString(stream, state) { var ch; while ((ch = stream.peek()) != null) { stream.next(); if (ch === "'" && !stream.eat("'")) { state.tokenize = tokenBase; return 'string'; } } return 'error'; } function tokenDoubleQuoteString(stream, state) { var ch; while ((ch = stream.peek()) != null) { if (ch === '$') { state.tokenize = tokenStringInterpolation; return 'string'; } stream.next(); if (ch === '`') { stream.next(); continue; } if (ch === '"' && !stream.eat('"')) { state.tokenize = tokenBase; return 'string'; } } return 'error'; } function tokenStringInterpolation(stream, state) { return tokenInterpolation(stream, state, tokenDoubleQuoteString); } function tokenMultiStringReturn(stream, state) { state.tokenize = tokenMultiString; state.startQuote = '"'; return tokenMultiString(stream, state); } function tokenHereStringInterpolation(stream, state) { return tokenInterpolation(stream, state, tokenMultiStringReturn); } function tokenInterpolation(stream, state, parentTokenize) { if (stream.match('$(')) { var savedBracketNesting = state.bracketNesting; state.returnStack.push({ /*jshint loopfunc:true */ shouldReturnFrom: function(state) { return state.bracketNesting === savedBracketNesting; }, tokenize: parentTokenize }); state.tokenize = tokenBase; state.bracketNesting += 1; return 'punctuation'; } else { stream.next(); state.returnStack.push({ shouldReturnFrom: function() { return true; }, tokenize: parentTokenize }); state.tokenize = tokenVariable; return state.tokenize(stream, state); } } function tokenComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == '>') { state.tokenize = tokenBase; break; } maybeEnd = (ch === '#'); } return 'comment'; } function tokenVariable(stream, state) { var ch = stream.peek(); if (stream.eat('{')) { state.tokenize = tokenVariableWithBraces; return tokenVariableWithBraces(stream, state); } else if (ch != undefined && ch.match(varNames)) { stream.eatWhile(varNames); state.tokenize = tokenBase; return 'variable-2'; } else { state.tokenize = tokenBase; return 'error'; } } function tokenVariableWithBraces(stream, state) { var ch; while ((ch = stream.next()) != null) { if (ch === '}') { state.tokenize = tokenBase; break; } } return 'variable-2'; } function tokenMultiString(stream, state) { var quote = state.startQuote; if (stream.sol() && stream.match(new RegExp(quote + '@'))) { state.tokenize = tokenBase; } else if (quote === '"') { while (!stream.eol()) { var ch = stream.peek(); if (ch === '$') { state.tokenize = tokenHereStringInterpolation; return 'string'; } stream.next(); if (ch === '`') { stream.next(); } } } else { stream.skipToEnd(); } return 'string'; } var external = { startState: function() { return { returnStack: [], bracketNesting: 0, tokenize: tokenBase }; }, token: function(stream, state) { return state.tokenize(stream, state); }, blockCommentStart: '<#', blockCommentEnd: '#>', lineComment: '#', fold: 'brace' }; return external; }); CodeMirror.defineMIME('application/x-powershell', 'powershell'); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("properties", function() { return { token: function(stream, state) { var sol = stream.sol() || state.afterSection; var eol = stream.eol(); state.afterSection = false; if (sol) { if (state.nextMultiline) { state.inMultiline = true; state.nextMultiline = false; } else { state.position = "def"; } } if (eol && ! state.nextMultiline) { state.inMultiline = false; state.position = "def"; } if (sol) { while(stream.eatSpace()) {} } var ch = stream.next(); if (sol && (ch === "#" || ch === "!" || ch === ";")) { state.position = "comment"; stream.skipToEnd(); return "comment"; } else if (sol && ch === "[") { state.afterSection = true; stream.skipTo("]"); stream.eat("]"); return "header"; } else if (ch === "=" || ch === ":") { state.position = "quote"; return null; } else if (ch === "\\" && state.position === "quote") { if (stream.eol()) { // end of line? // Multiline value state.nextMultiline = true; } } return state.position; }, startState: function() { return { position : "def", // Current position, "def", "quote" or "comment" nextMultiline : false, // Is the next line multiline value inMultiline : false, // Is the current line a multiline value afterSection : false // Did we just open a section }; } }; }); CodeMirror.defineMIME("text/x-properties", "properties"); CodeMirror.defineMIME("text/x-ini", "properties"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); } var keywordArray = [ "package", "message", "import", "syntax", "required", "optional", "repeated", "reserved", "default", "extensions", "packed", "bool", "bytes", "double", "enum", "float", "string", "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64", "option", "service", "rpc", "returns" ]; var keywords = wordRegexp(keywordArray); CodeMirror.registerHelper("hintWords", "protobuf", keywordArray); var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*"); function tokenBase(stream) { // whitespaces if (stream.eatSpace()) return null; // Handle one line Comments if (stream.match("//")) { stream.skipToEnd(); return "comment"; } // Handle Number Literals if (stream.match(/^[0-9\.+-]/, false)) { if (stream.match(/^[+-]?0x[0-9a-fA-F]+/)) return "number"; if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) return "number"; if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) return "number"; } // Handle Strings if (stream.match(/^"([^"]|(""))*"/)) { return "string"; } if (stream.match(/^'([^']|(''))*'/)) { return "string"; } // Handle words if (stream.match(keywords)) { return "keyword"; } if (stream.match(identifiers)) { return "variable"; } // Handle non-detected items stream.next(); return null; } CodeMirror.defineMode("protobuf", function() { return { token: tokenBase, fold: "brace" }; }); CodeMirror.defineMIME("text/x-protobuf", "protobuf"); }); }); var pug = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, javascript, css, htmlmixed); })(function(CodeMirror) { CodeMirror.defineMode("pug", function (config) { // token types var KEYWORD = 'keyword'; var DOCTYPE = 'meta'; var ID = 'builtin'; var CLASS = 'qualifier'; var ATTRS_NEST = { '{': '}', '(': ')', '[': ']' }; var jsMode = CodeMirror.getMode(config, 'javascript'); function State() { this.javaScriptLine = false; this.javaScriptLineExcludesColon = false; this.javaScriptArguments = false; this.javaScriptArgumentsDepth = 0; this.isInterpolating = false; this.interpolationNesting = 0; this.jsState = CodeMirror.startState(jsMode); this.restOfLine = ''; this.isIncludeFiltered = false; this.isEach = false; this.lastTag = ''; this.scriptType = ''; // Attributes Mode this.isAttrs = false; this.attrsNest = []; this.inAttributeName = true; this.attributeIsType = false; this.attrValue = ''; // Indented Mode this.indentOf = Infinity; this.indentToken = ''; this.innerMode = null; this.innerState = null; this.innerModeForLine = false; } /** * Safely copy a state * * @return {State} */ State.prototype.copy = function () { var res = new State(); res.javaScriptLine = this.javaScriptLine; res.javaScriptLineExcludesColon = this.javaScriptLineExcludesColon; res.javaScriptArguments = this.javaScriptArguments; res.javaScriptArgumentsDepth = this.javaScriptArgumentsDepth; res.isInterpolating = this.isInterpolating; res.interpolationNesting = this.interpolationNesting; res.jsState = CodeMirror.copyState(jsMode, this.jsState); res.innerMode = this.innerMode; if (this.innerMode && this.innerState) { res.innerState = CodeMirror.copyState(this.innerMode, this.innerState); } res.restOfLine = this.restOfLine; res.isIncludeFiltered = this.isIncludeFiltered; res.isEach = this.isEach; res.lastTag = this.lastTag; res.scriptType = this.scriptType; res.isAttrs = this.isAttrs; res.attrsNest = this.attrsNest.slice(); res.inAttributeName = this.inAttributeName; res.attributeIsType = this.attributeIsType; res.attrValue = this.attrValue; res.indentOf = this.indentOf; res.indentToken = this.indentToken; res.innerModeForLine = this.innerModeForLine; return res; }; function javaScript(stream, state) { if (stream.sol()) { // if javaScriptLine was set at end of line, ignore it state.javaScriptLine = false; state.javaScriptLineExcludesColon = false; } if (state.javaScriptLine) { if (state.javaScriptLineExcludesColon && stream.peek() === ':') { state.javaScriptLine = false; state.javaScriptLineExcludesColon = false; return; } var tok = jsMode.token(stream, state.jsState); if (stream.eol()) state.javaScriptLine = false; return tok || true; } } function javaScriptArguments(stream, state) { if (state.javaScriptArguments) { if (state.javaScriptArgumentsDepth === 0 && stream.peek() !== '(') { state.javaScriptArguments = false; return; } if (stream.peek() === '(') { state.javaScriptArgumentsDepth++; } else if (stream.peek() === ')') { state.javaScriptArgumentsDepth--; } if (state.javaScriptArgumentsDepth === 0) { state.javaScriptArguments = false; return; } var tok = jsMode.token(stream, state.jsState); return tok || true; } } function yieldStatement(stream) { if (stream.match(/^yield\b/)) { return 'keyword'; } } function doctype(stream) { if (stream.match(/^(?:doctype) *([^\n]+)?/)) { return DOCTYPE; } } function interpolation(stream, state) { if (stream.match('#{')) { state.isInterpolating = true; state.interpolationNesting = 0; return 'punctuation'; } } function interpolationContinued(stream, state) { if (state.isInterpolating) { if (stream.peek() === '}') { state.interpolationNesting--; if (state.interpolationNesting < 0) { stream.next(); state.isInterpolating = false; return 'punctuation'; } } else if (stream.peek() === '{') { state.interpolationNesting++; } return jsMode.token(stream, state.jsState) || true; } } function caseStatement(stream, state) { if (stream.match(/^case\b/)) { state.javaScriptLine = true; return KEYWORD; } } function when(stream, state) { if (stream.match(/^when\b/)) { state.javaScriptLine = true; state.javaScriptLineExcludesColon = true; return KEYWORD; } } function defaultStatement(stream) { if (stream.match(/^default\b/)) { return KEYWORD; } } function extendsStatement(stream, state) { if (stream.match(/^extends?\b/)) { state.restOfLine = 'string'; return KEYWORD; } } function append(stream, state) { if (stream.match(/^append\b/)) { state.restOfLine = 'variable'; return KEYWORD; } } function prepend(stream, state) { if (stream.match(/^prepend\b/)) { state.restOfLine = 'variable'; return KEYWORD; } } function block(stream, state) { if (stream.match(/^block\b *(?:(prepend|append)\b)?/)) { state.restOfLine = 'variable'; return KEYWORD; } } function include(stream, state) { if (stream.match(/^include\b/)) { state.restOfLine = 'string'; return KEYWORD; } } function includeFiltered(stream, state) { if (stream.match(/^include:([a-zA-Z0-9\-]+)/, false) && stream.match('include')) { state.isIncludeFiltered = true; return KEYWORD; } } function includeFilteredContinued(stream, state) { if (state.isIncludeFiltered) { var tok = filter(stream, state); state.isIncludeFiltered = false; state.restOfLine = 'string'; return tok; } } function mixin(stream, state) { if (stream.match(/^mixin\b/)) { state.javaScriptLine = true; return KEYWORD; } } function call(stream, state) { if (stream.match(/^\+([-\w]+)/)) { if (!stream.match(/^\( *[-\w]+ *=/, false)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; } return 'variable'; } if (stream.match(/^\+#{/, false)) { stream.next(); state.mixinCallAfter = true; return interpolation(stream, state); } } function callArguments(stream, state) { if (state.mixinCallAfter) { state.mixinCallAfter = false; if (!stream.match(/^\( *[-\w]+ *=/, false)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; } return true; } } function conditional(stream, state) { if (stream.match(/^(if|unless|else if|else)\b/)) { state.javaScriptLine = true; return KEYWORD; } } function each(stream, state) { if (stream.match(/^(- *)?(each|for)\b/)) { state.isEach = true; return KEYWORD; } } function eachContinued(stream, state) { if (state.isEach) { if (stream.match(/^ in\b/)) { state.javaScriptLine = true; state.isEach = false; return KEYWORD; } else if (stream.sol() || stream.eol()) { state.isEach = false; } else if (stream.next()) { while (!stream.match(/^ in\b/, false) && stream.next()); return 'variable'; } } } function whileStatement(stream, state) { if (stream.match(/^while\b/)) { state.javaScriptLine = true; return KEYWORD; } } function tag(stream, state) { var captures; if (captures = stream.match(/^(\w(?:[-:\w]*\w)?)\/?/)) { state.lastTag = captures[1].toLowerCase(); if (state.lastTag === 'script') { state.scriptType = 'application/javascript'; } return 'tag'; } } function filter(stream, state) { if (stream.match(/^:([\w\-]+)/)) { var innerMode; if (config && config.innerModes) { innerMode = config.innerModes(stream.current().substring(1)); } if (!innerMode) { innerMode = stream.current().substring(1); } if (typeof innerMode === 'string') { innerMode = CodeMirror.getMode(config, innerMode); } setInnerMode(stream, state, innerMode); return 'atom'; } } function code(stream, state) { if (stream.match(/^(!?=|-)/)) { state.javaScriptLine = true; return 'punctuation'; } } function id(stream) { if (stream.match(/^#([\w-]+)/)) { return ID; } } function className(stream) { if (stream.match(/^\.([\w-]+)/)) { return CLASS; } } function attrs(stream, state) { if (stream.peek() == '(') { stream.next(); state.isAttrs = true; state.attrsNest = []; state.inAttributeName = true; state.attrValue = ''; state.attributeIsType = false; return 'punctuation'; } } function attrsContinued(stream, state) { if (state.isAttrs) { if (ATTRS_NEST[stream.peek()]) { state.attrsNest.push(ATTRS_NEST[stream.peek()]); } if (state.attrsNest[state.attrsNest.length - 1] === stream.peek()) { state.attrsNest.pop(); } else if (stream.eat(')')) { state.isAttrs = false; return 'punctuation'; } if (state.inAttributeName && stream.match(/^[^=,\)!]+/)) { if (stream.peek() === '=' || stream.peek() === '!') { state.inAttributeName = false; state.jsState = CodeMirror.startState(jsMode); if (state.lastTag === 'script' && stream.current().trim().toLowerCase() === 'type') { state.attributeIsType = true; } else { state.attributeIsType = false; } } return 'attribute'; } var tok = jsMode.token(stream, state.jsState); if (state.attributeIsType && tok === 'string') { state.scriptType = stream.current().toString(); } if (state.attrsNest.length === 0 && (tok === 'string' || tok === 'variable' || tok === 'keyword')) { try { Function('', 'var x ' + state.attrValue.replace(/,\s*$/, '').replace(/^!/, '')); state.inAttributeName = true; state.attrValue = ''; stream.backUp(stream.current().length); return attrsContinued(stream, state); } catch (ex) { //not the end of an attribute } } state.attrValue += stream.current(); return tok || true; } } function attributesBlock(stream, state) { if (stream.match(/^&attributes\b/)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; return 'keyword'; } } function indent(stream) { if (stream.sol() && stream.eatSpace()) { return 'indent'; } } function comment(stream, state) { if (stream.match(/^ *\/\/(-)?([^\n]*)/)) { state.indentOf = stream.indentation(); state.indentToken = 'comment'; return 'comment'; } } function colon(stream) { if (stream.match(/^: */)) { return 'colon'; } } function text(stream, state) { if (stream.match(/^(?:\| ?| )([^\n]+)/)) { return 'string'; } if (stream.match(/^(<[^\n]*)/, false)) { // html string setInnerMode(stream, state, 'htmlmixed'); state.innerModeForLine = true; return innerMode(stream, state, true); } } function dot(stream, state) { if (stream.eat('.')) { var innerMode = null; if (state.lastTag === 'script' && state.scriptType.toLowerCase().indexOf('javascript') != -1) { innerMode = state.scriptType.toLowerCase().replace(/"|'/g, ''); } else if (state.lastTag === 'style') { innerMode = 'css'; } setInnerMode(stream, state, innerMode); return 'dot'; } } function fail(stream) { stream.next(); return null; } function setInnerMode(stream, state, mode) { mode = CodeMirror.mimeModes[mode] || mode; mode = config.innerModes ? config.innerModes(mode) || mode : mode; mode = CodeMirror.mimeModes[mode] || mode; mode = CodeMirror.getMode(config, mode); state.indentOf = stream.indentation(); if (mode && mode.name !== 'null') { state.innerMode = mode; } else { state.indentToken = 'string'; } } function innerMode(stream, state, force) { if (stream.indentation() > state.indentOf || (state.innerModeForLine && !stream.sol()) || force) { if (state.innerMode) { if (!state.innerState) { state.innerState = state.innerMode.startState ? CodeMirror.startState(state.innerMode, stream.indentation()) : {}; } return stream.hideFirstChars(state.indentOf + 2, function () { return state.innerMode.token(stream, state.innerState) || true; }); } else { stream.skipToEnd(); return state.indentToken; } } else if (stream.sol()) { state.indentOf = Infinity; state.indentToken = null; state.innerMode = null; state.innerState = null; } } function restOfLine(stream, state) { if (stream.sol()) { // if restOfLine was set at end of line, ignore it state.restOfLine = ''; } if (state.restOfLine) { stream.skipToEnd(); var tok = state.restOfLine; state.restOfLine = ''; return tok; } } function startState() { return new State(); } function copyState(state) { return state.copy(); } /** * Get the next token in the stream * * @param {Stream} stream * @param {State} state */ function nextToken(stream, state) { var tok = innerMode(stream, state) || restOfLine(stream, state) || interpolationContinued(stream, state) || includeFilteredContinued(stream, state) || eachContinued(stream, state) || attrsContinued(stream, state) || javaScript(stream, state) || javaScriptArguments(stream, state) || callArguments(stream, state) || yieldStatement(stream) || doctype(stream) || interpolation(stream, state) || caseStatement(stream, state) || when(stream, state) || defaultStatement(stream) || extendsStatement(stream, state) || append(stream, state) || prepend(stream, state) || block(stream, state) || include(stream, state) || includeFiltered(stream, state) || mixin(stream, state) || call(stream, state) || conditional(stream, state) || each(stream, state) || whileStatement(stream, state) || tag(stream, state) || filter(stream, state) || code(stream, state) || id(stream) || className(stream) || attrs(stream, state) || attributesBlock(stream, state) || indent(stream) || text(stream, state) || comment(stream, state) || colon(stream) || dot(stream, state) || fail(stream); return tok === true ? null : tok; } return { startState: startState, copyState: copyState, token: nextToken }; }, 'javascript', 'css', 'htmlmixed'); CodeMirror.defineMIME('text/x-pug', 'pug'); CodeMirror.defineMIME('text/x-jade', 'pug'); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("puppet", function () { // Stores the words from the define method var words = {}; // Taken, mostly, from the Puppet official variable standards regex var variable_regex = /({)?([a-z][a-z0-9_]*)?((::[a-z][a-z0-9_]*)*::)?[a-zA-Z0-9_]+(})?/; // Takes a string of words separated by spaces and adds them as // keys with the value of the first argument 'style' function define(style, string) { var split = string.split(' '); for (var i = 0; i < split.length; i++) { words[split[i]] = style; } } // Takes commonly known puppet types/words and classifies them to a style define('keyword', 'class define site node include import inherits'); define('keyword', 'case if else in and elsif default or'); define('atom', 'false true running present absent file directory undef'); define('builtin', 'action augeas burst chain computer cron destination dport exec ' + 'file filebucket group host icmp iniface interface jump k5login limit log_level ' + 'log_prefix macauthorization mailalias maillist mcx mount nagios_command ' + 'nagios_contact nagios_contactgroup nagios_host nagios_hostdependency ' + 'nagios_hostescalation nagios_hostextinfo nagios_hostgroup nagios_service ' + 'nagios_servicedependency nagios_serviceescalation nagios_serviceextinfo ' + 'nagios_servicegroup nagios_timeperiod name notify outiface package proto reject ' + 'resources router schedule scheduled_task selboolean selmodule service source ' + 'sport ssh_authorized_key sshkey stage state table tidy todest toports tosource ' + 'user vlan yumrepo zfs zone zpool'); // After finding a start of a string ('|") this function attempts to find the end; // If a variable is encountered along the way, we display it differently when it // is encapsulated in a double-quoted string. function tokenString(stream, state) { var current, prev, found_var = false; while (!stream.eol() && (current = stream.next()) != state.pending) { if (current === '$' && prev != '\\' && state.pending == '"') { found_var = true; break; } prev = current; } if (found_var) { stream.backUp(1); } if (current == state.pending) { state.continueString = false; } else { state.continueString = true; } return "string"; } // Main function function tokenize(stream, state) { // Matches one whole word var word = stream.match(/[\w]+/, false); // Matches attributes (i.e. ensure => present ; 'ensure' would be matched) var attribute = stream.match(/(\s+)?\w+\s+=>.*/, false); // Matches non-builtin resource declarations // (i.e. "apache::vhost {" or "mycustomclasss {" would be matched) var resource = stream.match(/(\s+)?[\w:_]+(\s+)?{/, false); // Matches virtual and exported resources (i.e. @@user { ; and the like) var special_resource = stream.match(/(\s+)?[@]{1,2}[\w:_]+(\s+)?{/, false); // Finally advance the stream var ch = stream.next(); // Have we found a variable? if (ch === '$') { if (stream.match(variable_regex)) { // If so, and its in a string, assign it a different color return state.continueString ? 'variable-2' : 'variable'; } // Otherwise return an invalid variable return "error"; } // Should we still be looking for the end of a string? if (state.continueString) { // If so, go through the loop again stream.backUp(1); return tokenString(stream, state); } // Are we in a definition (class, node, define)? if (state.inDefinition) { // If so, return def (i.e. for 'class myclass {' ; 'myclass' would be matched) if (stream.match(/(\s+)?[\w:_]+(\s+)?/)) { return 'def'; } // Match the rest it the next time around stream.match(/\s+{/); state.inDefinition = false; } // Are we in an 'include' statement? if (state.inInclude) { // Match and return the included class stream.match(/(\s+)?\S+(\s+)?/); state.inInclude = false; return 'def'; } // Do we just have a function on our hands? // In 'ensure_resource("myclass")', 'ensure_resource' is matched if (stream.match(/(\s+)?\w+\(/)) { stream.backUp(1); return 'def'; } // Have we matched the prior attribute regex? if (attribute) { stream.match(/(\s+)?\w+/); return 'tag'; } // Do we have Puppet specific words? if (word && words.hasOwnProperty(word)) { // Negates the initial next() stream.backUp(1); // rs move the stream stream.match(/[\w]+/); // We want to process these words differently // do to the importance they have in Puppet if (stream.match(/\s+\S+\s+{/, false)) { state.inDefinition = true; } if (word == 'include') { state.inInclude = true; } // Returns their value as state in the prior define methods return words[word]; } // Is there a match on a reference? if (/(^|\s+)[A-Z][\w:_]+/.test(word)) { // Negate the next() stream.backUp(1); // Match the full reference stream.match(/(^|\s+)[A-Z][\w:_]+/); return 'def'; } // Have we matched the prior resource regex? if (resource) { stream.match(/(\s+)?[\w:_]+/); return 'def'; } // Have we matched the prior special_resource regex? if (special_resource) { stream.match(/(\s+)?[@]{1,2}/); return 'special'; } // Match all the comments. All of them. if (ch == "#") { stream.skipToEnd(); return "comment"; } // Have we found a string? if (ch == "'" || ch == '"') { // Store the type (single or double) state.pending = ch; // Perform the looping function to find the end return tokenString(stream, state); } // Match all the brackets if (ch == '{' || ch == '}') { return 'bracket'; } // Match characters that we are going to assume // are trying to be regex if (ch == '/') { stream.match(/.*?\//); return 'variable-3'; } // Match all the numbers if (ch.match(/[0-9]/)) { stream.eatWhile(/[0-9]+/); return 'number'; } // Match the '=' and '=>' operators if (ch == '=') { if (stream.peek() == '>') { stream.next(); } return "operator"; } // Keep advancing through all the rest stream.eatWhile(/[\w-]/); // Return a blank line for everything else return null; } // Start it all return { startState: function () { var state = {}; state.inDefinition = false; state.inInclude = false; state.continueString = false; state.pending = false; return state; }, token: function (stream, state) { // Strip the spaces, but regex will account for them eitherway if (stream.eatSpace()) return null; // Go through the main process return tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-puppet", "puppet"); }); }); var python = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var wordOperators = wordRegexp(["and", "or", "not", "is"]); var commonKeywords = ["as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except", "finally", "for", "from", "global", "if", "import", "lambda", "pass", "raise", "return", "try", "while", "with", "yield", "in"]; var commonBuiltins = ["abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr", "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", "enumerate", "eval", "filter", "float", "format", "frozenset", "getattr", "globals", "hasattr", "hash", "help", "hex", "id", "input", "int", "isinstance", "issubclass", "iter", "len", "list", "locals", "map", "max", "memoryview", "min", "next", "object", "oct", "open", "ord", "pow", "property", "range", "repr", "reversed", "round", "set", "setattr", "slice", "sorted", "staticmethod", "str", "sum", "super", "tuple", "type", "vars", "zip", "__import__", "NotImplemented", "Ellipsis", "__debug__"]; CodeMirror.registerHelper("hintWords", "python", commonKeywords.concat(commonBuiltins)); function top(state) { return state.scopes[state.scopes.length - 1]; } CodeMirror.defineMode("python", function(conf, parserConf) { var ERRORCLASS = "error"; var delimiters = parserConf.delimiters || parserConf.singleDelimiters || /^[\(\)\[\]\{\}@,:`=;\.\\]/; // (Backwards-compatibility with old, cumbersome config system) var operators = [parserConf.singleOperators, parserConf.doubleOperators, parserConf.doubleDelimiters, parserConf.tripleDelimiters, parserConf.operators || /^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/]; for (var i = 0; i < operators.length; i++) if (!operators[i]) operators.splice(i--, 1); var hangingIndent = parserConf.hangingIndent || conf.indentUnit; var myKeywords = commonKeywords, myBuiltins = commonBuiltins; if (parserConf.extra_keywords != undefined) myKeywords = myKeywords.concat(parserConf.extra_keywords); if (parserConf.extra_builtins != undefined) myBuiltins = myBuiltins.concat(parserConf.extra_builtins); var py3 = !(parserConf.version && Number(parserConf.version) < 3); if (py3) { // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator var identifiers = parserConf.identifiers|| /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/; myKeywords = myKeywords.concat(["nonlocal", "False", "True", "None", "async", "await"]); myBuiltins = myBuiltins.concat(["ascii", "bytes", "exec", "print"]); var stringPrefixes = new RegExp("^(([rbuf]|(br)|(fr))?('{3}|\"{3}|['\"]))", "i"); } else { var identifiers = parserConf.identifiers|| /^[_A-Za-z][_A-Za-z0-9]*/; myKeywords = myKeywords.concat(["exec", "print"]); myBuiltins = myBuiltins.concat(["apply", "basestring", "buffer", "cmp", "coerce", "execfile", "file", "intern", "long", "raw_input", "reduce", "reload", "unichr", "unicode", "xrange", "False", "True", "None"]); var stringPrefixes = new RegExp("^(([rubf]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i"); } var keywords = wordRegexp(myKeywords); var builtins = wordRegexp(myBuiltins); // tokenizers function tokenBase(stream, state) { var sol = stream.sol() && state.lastToken != "\\"; if (sol) state.indent = stream.indentation(); // Handle scope changes if (sol && top(state).type == "py") { var scopeOffset = top(state).offset; if (stream.eatSpace()) { var lineOffset = stream.indentation(); if (lineOffset > scopeOffset) pushPyScope(state); else if (lineOffset < scopeOffset && dedent(stream, state) && stream.peek() != "#") state.errorToken = true; return null; } else { var style = tokenBaseInner(stream, state); if (scopeOffset > 0 && dedent(stream, state)) style += " " + ERRORCLASS; return style; } } return tokenBaseInner(stream, state); } function tokenBaseInner(stream, state, inFormat) { if (stream.eatSpace()) return null; // Handle Comments if (!inFormat && stream.match(/^#.*/)) return "comment"; // Handle Number Literals if (stream.match(/^[0-9\.]/, false)) { var floatLiteral = false; // Floats if (stream.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } if (stream.match(/^[\d_]+\.\d*/)) { floatLiteral = true; } if (stream.match(/^\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.eat(/J/i); return "number"; } // Integers var intLiteral = false; // Hex if (stream.match(/^0x[0-9a-f_]+/i)) intLiteral = true; // Binary if (stream.match(/^0b[01_]+/i)) intLiteral = true; // Octal if (stream.match(/^0o[0-7_]+/i)) intLiteral = true; // Decimal if (stream.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)) { // Decimal literals may be "imaginary" stream.eat(/J/i); // TODO - Can you have imaginary longs? intLiteral = true; } // Zero by itself with no other piece of number. if (stream.match(/^0(?![\dx])/i)) intLiteral = true; if (intLiteral) { // Integer literals may be "long" stream.eat(/L/i); return "number"; } } // Handle Strings if (stream.match(stringPrefixes)) { var isFmtString = stream.current().toLowerCase().indexOf('f') !== -1; if (!isFmtString) { state.tokenize = tokenStringFactory(stream.current(), state.tokenize); return state.tokenize(stream, state); } else { state.tokenize = formatStringFactory(stream.current(), state.tokenize); return state.tokenize(stream, state); } } for (var i = 0; i < operators.length; i++) if (stream.match(operators[i])) return "operator" if (stream.match(delimiters)) return "punctuation"; if (state.lastToken == "." && stream.match(identifiers)) return "property"; if (stream.match(keywords) || stream.match(wordOperators)) return "keyword"; if (stream.match(builtins)) return "builtin"; if (stream.match(/^(self|cls)\b/)) return "variable-2"; if (stream.match(identifiers)) { if (state.lastToken == "def" || state.lastToken == "class") return "def"; return "variable"; } // Handle non-detected items stream.next(); return inFormat ? null :ERRORCLASS; } function formatStringFactory(delimiter, tokenOuter) { while ("rubf".indexOf(delimiter.charAt(0).toLowerCase()) >= 0) delimiter = delimiter.substr(1); var singleline = delimiter.length == 1; var OUTCLASS = "string"; function tokenNestedExpr(depth) { return function(stream, state) { var inner = tokenBaseInner(stream, state, true); if (inner == "punctuation") { if (stream.current() == "{") { state.tokenize = tokenNestedExpr(depth + 1); } else if (stream.current() == "}") { if (depth > 1) state.tokenize = tokenNestedExpr(depth - 1); else state.tokenize = tokenString; } } return inner } } function tokenString(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"\{\}\\]/); if (stream.eat("\\")) { stream.next(); if (singleline && stream.eol()) return OUTCLASS; } else if (stream.match(delimiter)) { state.tokenize = tokenOuter; return OUTCLASS; } else if (stream.match('{{')) { // ignore {{ in f-str return OUTCLASS; } else if (stream.match('{', false)) { // switch to nested mode state.tokenize = tokenNestedExpr(0); if (stream.current()) return OUTCLASS; else return state.tokenize(stream, state) } else if (stream.match('}}')) { return OUTCLASS; } else if (stream.match('}')) { // single } in f-string is an error return ERRORCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) return ERRORCLASS; else state.tokenize = tokenOuter; } return OUTCLASS; } tokenString.isString = true; return tokenString; } function tokenStringFactory(delimiter, tokenOuter) { while ("rubf".indexOf(delimiter.charAt(0).toLowerCase()) >= 0) delimiter = delimiter.substr(1); var singleline = delimiter.length == 1; var OUTCLASS = "string"; function tokenString(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"\\]/); if (stream.eat("\\")) { stream.next(); if (singleline && stream.eol()) return OUTCLASS; } else if (stream.match(delimiter)) { state.tokenize = tokenOuter; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) return ERRORCLASS; else state.tokenize = tokenOuter; } return OUTCLASS; } tokenString.isString = true; return tokenString; } function pushPyScope(state) { while (top(state).type != "py") state.scopes.pop(); state.scopes.push({offset: top(state).offset + conf.indentUnit, type: "py", align: null}); } function pushBracketScope(stream, state, type) { var align = stream.match(/^([\s\[\{\(]|#.*)*$/, false) ? null : stream.column() + 1; state.scopes.push({offset: state.indent + hangingIndent, type: type, align: align}); } function dedent(stream, state) { var indented = stream.indentation(); while (state.scopes.length > 1 && top(state).offset > indented) { if (top(state).type != "py") return true; state.scopes.pop(); } return top(state).offset != indented; } function tokenLexer(stream, state) { if (stream.sol()) state.beginningOfLine = true; var style = state.tokenize(stream, state); var current = stream.current(); // Handle decorators if (state.beginningOfLine && current == "@") return stream.match(identifiers, false) ? "meta" : py3 ? "operator" : ERRORCLASS; if (/\S/.test(current)) state.beginningOfLine = false; if ((style == "variable" || style == "builtin") && state.lastToken == "meta") style = "meta"; // Handle scope changes. if (current == "pass" || current == "return") state.dedent += 1; if (current == "lambda") state.lambda = true; if (current == ":" && !state.lambda && top(state).type == "py") pushPyScope(state); if (current.length == 1 && !/string|comment/.test(style)) { var delimiter_index = "[({".indexOf(current); if (delimiter_index != -1) pushBracketScope(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); delimiter_index = "])}".indexOf(current); if (delimiter_index != -1) { if (top(state).type == current) state.indent = state.scopes.pop().offset - hangingIndent; else return ERRORCLASS; } } if (state.dedent > 0 && stream.eol() && top(state).type == "py") { if (state.scopes.length > 1) state.scopes.pop(); state.dedent -= 1; } return style; } var external = { startState: function(basecolumn) { return { tokenize: tokenBase, scopes: [{offset: basecolumn || 0, type: "py", align: null}], indent: basecolumn || 0, lastToken: null, lambda: false, dedent: 0 }; }, token: function(stream, state) { var addErr = state.errorToken; if (addErr) state.errorToken = false; var style = tokenLexer(stream, state); if (style && style != "comment") state.lastToken = (style == "keyword" || style == "punctuation") ? stream.current() : style; if (style == "punctuation") style = null; if (stream.eol() && state.lambda) state.lambda = false; return addErr ? style + " " + ERRORCLASS : style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase) return state.tokenize.isString ? CodeMirror.Pass : 0; var scope = top(state), closing = scope.type == textAfter.charAt(0); if (scope.align != null) return scope.align - (closing ? 1 : 0) else return scope.offset - (closing ? hangingIndent : 0) }, electricInput: /^\s*[\}\]\)]$/, closeBrackets: {triples: "'\""}, lineComment: "#", fold: "indent" }; return external; }); CodeMirror.defineMIME("text/x-python", "python"); var words = function(str) { return str.split(" "); }; CodeMirror.defineMIME("text/x-cython", { name: "python", extra_keywords: words("by cdef cimport cpdef ctypedef enum except "+ "extern gil include nogil property public "+ "readonly struct union DEF IF ELIF ELSE") }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("q",function(config){ var indentUnit=config.indentUnit, curPunc, keywords=buildRE(["abs","acos","aj","aj0","all","and","any","asc","asin","asof","atan","attr","avg","avgs","bin","by","ceiling","cols","cor","cos","count","cov","cross","csv","cut","delete","deltas","desc","dev","differ","distinct","div","do","each","ej","enlist","eval","except","exec","exit","exp","fby","fills","first","fkeys","flip","floor","from","get","getenv","group","gtime","hclose","hcount","hdel","hopen","hsym","iasc","idesc","if","ij","in","insert","inter","inv","key","keys","last","like","list","lj","load","log","lower","lsq","ltime","ltrim","mavg","max","maxs","mcount","md5","mdev","med","meta","min","mins","mmax","mmin","mmu","mod","msum","neg","next","not","null","or","over","parse","peach","pj","plist","prd","prds","prev","prior","rand","rank","ratios","raze","read0","read1","reciprocal","reverse","rload","rotate","rsave","rtrim","save","scan","select","set","setenv","show","signum","sin","sqrt","ss","ssr","string","sublist","sum","sums","sv","system","tables","tan","til","trim","txf","type","uj","ungroup","union","update","upper","upsert","value","var","view","views","vs","wavg","where","where","while","within","wj","wj1","wsum","xasc","xbar","xcol","xcols","xdesc","xexp","xgroup","xkey","xlog","xprev","xrank"]), E=/[|/&^!+:\\\-*%$=~#;@><,?_\'\"\[\(\]\)\s{}]/; function buildRE(w){return new RegExp("^("+w.join("|")+")$");} function tokenBase(stream,state){ var sol=stream.sol(),c=stream.next(); curPunc=null; if(sol) if(c=="/") return (state.tokenize=tokenLineComment)(stream,state); else if(c=="\\"){ if(stream.eol()||/\s/.test(stream.peek())) return stream.skipToEnd(),/^\\\s*$/.test(stream.current())?(state.tokenize=tokenCommentToEOF)(stream):state.tokenize=tokenBase,"comment"; else return state.tokenize=tokenBase,"builtin"; } if(/\s/.test(c)) return stream.peek()=="/"?(stream.skipToEnd(),"comment"):"whitespace"; if(c=='"') return (state.tokenize=tokenString)(stream,state); if(c=='`') return stream.eatWhile(/[A-Za-z\d_:\/.]/),"symbol"; if(("."==c&&/\d/.test(stream.peek()))||/\d/.test(c)){ var t=null; stream.backUp(1); if(stream.match(/^\d{4}\.\d{2}(m|\.\d{2}([DT](\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)?)?)/) || stream.match(/^\d+D(\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)/) || stream.match(/^\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?/) || stream.match(/^\d+[ptuv]{1}/)) t="temporal"; else if(stream.match(/^0[NwW]{1}/) || stream.match(/^0x[\da-fA-F]*/) || stream.match(/^[01]+[b]{1}/) || stream.match(/^\d+[chijn]{1}/) || stream.match(/-?\d*(\.\d*)?(e[+\-]?\d+)?(e|f)?/)) t="number"; return (t&&(!(c=stream.peek())||E.test(c)))?t:(stream.next(),"error"); } if(/[A-Za-z]|\./.test(c)) return stream.eatWhile(/[A-Za-z._\d]/),keywords.test(stream.current())?"keyword":"variable"; if(/[|/&^!+:\\\-*%$=~#;@><\.,?_\']/.test(c)) return null; if(/[{}\(\[\]\)]/.test(c)) return null; return "error"; } function tokenLineComment(stream,state){ return stream.skipToEnd(),/\/\s*$/.test(stream.current())?(state.tokenize=tokenBlockComment)(stream,state):(state.tokenize=tokenBase),"comment"; } function tokenBlockComment(stream,state){ var f=stream.sol()&&stream.peek()=="\\"; stream.skipToEnd(); if(f&&/^\\\s*$/.test(stream.current())) state.tokenize=tokenBase; return "comment"; } function tokenCommentToEOF(stream){return stream.skipToEnd(),"comment";} function tokenString(stream,state){ var escaped=false,next,end=false; while((next=stream.next())){ if(next=="\""&&!escaped){end=true;break;} escaped=!escaped&&next=="\\"; } if(end)state.tokenize=tokenBase; return "string"; } function pushContext(state,type,col){state.context={prev:state.context,indent:state.indent,col:col,type:type};} function popContext(state){state.indent=state.context.indent;state.context=state.context.prev;} return { startState:function(){ return {tokenize:tokenBase, context:null, indent:0, col:0}; }, token:function(stream,state){ if(stream.sol()){ if(state.context&&state.context.align==null) state.context.align=false; state.indent=stream.indentation(); } //if (stream.eatSpace()) return null; var style=state.tokenize(stream,state); if(style!="comment"&&state.context&&state.context.align==null&&state.context.type!="pattern"){ state.context.align=true; } if(curPunc=="(")pushContext(state,")",stream.column()); else if(curPunc=="[")pushContext(state,"]",stream.column()); else if(curPunc=="{")pushContext(state,"}",stream.column()); else if(/[\]\}\)]/.test(curPunc)){ while(state.context&&state.context.type=="pattern")popContext(state); if(state.context&&curPunc==state.context.type)popContext(state); } else if(curPunc=="."&&state.context&&state.context.type=="pattern")popContext(state); else if(/atom|string|variable/.test(style)&&state.context){ if(/[\}\]]/.test(state.context.type)) pushContext(state,"pattern",stream.column()); else if(state.context.type=="pattern"&&!state.context.align){ state.context.align=true; state.context.col=stream.column(); } } return style; }, indent:function(state,textAfter){ var firstChar=textAfter&&textAfter.charAt(0); var context=state.context; if(/[\]\}]/.test(firstChar)) while (context&&context.type=="pattern")context=context.prev; var closing=context&&firstChar==context.type; if(!context) return 0; else if(context.type=="pattern") return context.col; else if(context.align) return context.col+(closing?0:1); else return context.indent+(closing?0:indentUnit); } }; }); CodeMirror.defineMIME("text/x-q","q"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.registerHelper("wordChars", "r", /[\w.]/); CodeMirror.defineMode("r", function(config) { function wordObj(words) { var res = {}; for (var i = 0; i < words.length; ++i) res[words[i]] = true; return res; } var commonAtoms = ["NULL", "NA", "Inf", "NaN", "NA_integer_", "NA_real_", "NA_complex_", "NA_character_", "TRUE", "FALSE"]; var commonBuiltins = ["list", "quote", "bquote", "eval", "return", "call", "parse", "deparse"]; var commonKeywords = ["if", "else", "repeat", "while", "function", "for", "in", "next", "break"]; var commonBlockKeywords = ["if", "else", "repeat", "while", "function", "for"]; CodeMirror.registerHelper("hintWords", "r", commonAtoms.concat(commonBuiltins, commonKeywords)); var atoms = wordObj(commonAtoms); var builtins = wordObj(commonBuiltins); var keywords = wordObj(commonKeywords); var blockkeywords = wordObj(commonBlockKeywords); var opChars = /[+\-*\/^<>=!&|~$:]/; var curPunc; function tokenBase(stream, state) { curPunc = null; var ch = stream.next(); if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (ch == "0" && stream.eat("x")) { stream.eatWhile(/[\da-f]/i); return "number"; } else if (ch == "." && stream.eat(/\d/)) { stream.match(/\d*(?:e[+\-]?\d+)?/); return "number"; } else if (/\d/.test(ch)) { stream.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/); return "number"; } else if (ch == "'" || ch == '"') { state.tokenize = tokenString(ch); return "string"; } else if (ch == "`") { stream.match(/[^`]+`/); return "variable-3"; } else if (ch == "." && stream.match(/.[.\d]+/)) { return "keyword"; } else if (/[\w\.]/.test(ch) && ch != "_") { stream.eatWhile(/[\w\.]/); var word = stream.current(); if (atoms.propertyIsEnumerable(word)) return "atom"; if (keywords.propertyIsEnumerable(word)) { // Block keywords start new blocks, except 'else if', which only starts // one new block for the 'if', no block for the 'else'. if (blockkeywords.propertyIsEnumerable(word) && !stream.match(/\s*if(\s+|$)/, false)) curPunc = "block"; return "keyword"; } if (builtins.propertyIsEnumerable(word)) return "builtin"; return "variable"; } else if (ch == "%") { if (stream.skipTo("%")) stream.next(); return "operator variable-2"; } else if ( (ch == "<" && stream.eat("-")) || (ch == "<" && stream.match("<-")) || (ch == "-" && stream.match(/>>?/)) ) { return "operator arrow"; } else if (ch == "=" && state.ctx.argList) { return "arg-is"; } else if (opChars.test(ch)) { if (ch == "$") return "operator dollar"; stream.eatWhile(opChars); return "operator"; } else if (/[\(\){}\[\];]/.test(ch)) { curPunc = ch; if (ch == ";") return "semi"; return null; } else { return null; } } function tokenString(quote) { return function(stream, state) { if (stream.eat("\\")) { var ch = stream.next(); if (ch == "x") stream.match(/^[a-f0-9]{2}/i); else if ((ch == "u" || ch == "U") && stream.eat("{") && stream.skipTo("}")) stream.next(); else if (ch == "u") stream.match(/^[a-f0-9]{4}/i); else if (ch == "U") stream.match(/^[a-f0-9]{8}/i); else if (/[0-7]/.test(ch)) stream.match(/^[0-7]{1,2}/); return "string-2"; } else { var next; while ((next = stream.next()) != null) { if (next == quote) { state.tokenize = tokenBase; break; } if (next == "\\") { stream.backUp(1); break; } } return "string"; } }; } var ALIGN_YES = 1, ALIGN_NO = 2, BRACELESS = 4; function push(state, type, stream) { state.ctx = {type: type, indent: state.indent, flags: 0, column: stream.column(), prev: state.ctx}; } function setFlag(state, flag) { var ctx = state.ctx; state.ctx = {type: ctx.type, indent: ctx.indent, flags: ctx.flags | flag, column: ctx.column, prev: ctx.prev}; } function pop(state) { state.indent = state.ctx.indent; state.ctx = state.ctx.prev; } return { startState: function() { return {tokenize: tokenBase, ctx: {type: "top", indent: -config.indentUnit, flags: ALIGN_NO}, indent: 0, afterIdent: false}; }, token: function(stream, state) { if (stream.sol()) { if ((state.ctx.flags & 3) == 0) state.ctx.flags |= ALIGN_NO; if (state.ctx.flags & BRACELESS) pop(state); state.indent = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style != "comment" && (state.ctx.flags & ALIGN_NO) == 0) setFlag(state, ALIGN_YES); if ((curPunc == ";" || curPunc == "{" || curPunc == "}") && state.ctx.type == "block") pop(state); if (curPunc == "{") push(state, "}", stream); else if (curPunc == "(") { push(state, ")", stream); if (state.afterIdent) state.ctx.argList = true; } else if (curPunc == "[") push(state, "]", stream); else if (curPunc == "block") push(state, "block", stream); else if (curPunc == state.ctx.type) pop(state); else if (state.ctx.type == "block" && style != "comment") setFlag(state, BRACELESS); state.afterIdent = style == "variable" || style == "keyword"; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), ctx = state.ctx, closing = firstChar == ctx.type; if (ctx.flags & BRACELESS) ctx = ctx.prev; if (ctx.type == "block") return ctx.indent + (firstChar == "{" ? 0 : config.indentUnit); else if (ctx.flags & ALIGN_YES) return ctx.column + (closing ? 0 : 1); else return ctx.indent + (closing ? 0 : config.indentUnit); }, lineComment: "#" }; }); CodeMirror.defineMIME("text/x-rsrc", "r"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("rpm-changes", function() { var headerSeperator = /^-+$/; var headerLine = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ?\d{1,2} \d{2}:\d{2}(:\d{2})? [A-Z]{3,4} \d{4} - /; var simpleEmail = /^[\w+.-]+@[\w.-]+/; return { token: function(stream) { if (stream.sol()) { if (stream.match(headerSeperator)) { return 'tag'; } if (stream.match(headerLine)) { return 'tag'; } } if (stream.match(simpleEmail)) { return 'string'; } stream.next(); return null; } }; }); CodeMirror.defineMIME("text/x-rpm-changes", "rpm-changes"); // Quick and dirty spec file highlighting CodeMirror.defineMode("rpm-spec", function() { var arch = /^(i386|i586|i686|x86_64|ppc64le|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/; var preamble = /^[a-zA-Z0-9()]+:/; var section = /^%(debug_package|package|description|prep|build|install|files|clean|changelog|preinstall|preun|postinstall|postun|pretrans|posttrans|pre|post|triggerin|triggerun|verifyscript|check|triggerpostun|triggerprein|trigger)/; var control_flow_complex = /^%(ifnarch|ifarch|if)/; // rpm control flow macros var control_flow_simple = /^%(else|endif)/; // rpm control flow macros var operators = /^(\!|\?|\<\=|\<|\>\=|\>|\=\=|\&\&|\|\|)/; // operators in control flow macros return { startState: function () { return { controlFlow: false, macroParameters: false, section: false }; }, token: function (stream, state) { var ch = stream.peek(); if (ch == "#") { stream.skipToEnd(); return "comment"; } if (stream.sol()) { if (stream.match(preamble)) { return "header"; } if (stream.match(section)) { return "atom"; } } if (stream.match(/^\$\w+/)) { return "def"; } // Variables like '$RPM_BUILD_ROOT' if (stream.match(/^\$\{\w+\}/)) { return "def"; } // Variables like '${RPM_BUILD_ROOT}' if (stream.match(control_flow_simple)) { return "keyword"; } if (stream.match(control_flow_complex)) { state.controlFlow = true; return "keyword"; } if (state.controlFlow) { if (stream.match(operators)) { return "operator"; } if (stream.match(/^(\d+)/)) { return "number"; } if (stream.eol()) { state.controlFlow = false; } } if (stream.match(arch)) { if (stream.eol()) { state.controlFlow = false; } return "number"; } // Macros like '%make_install' or '%attr(0775,root,root)' if (stream.match(/^%[\w]+/)) { if (stream.match(/^\(/)) { state.macroParameters = true; } return "keyword"; } if (state.macroParameters) { if (stream.match(/^\d+/)) { return "number";} if (stream.match(/^\)/)) { state.macroParameters = false; return "keyword"; } } // Macros like '%{defined fedora}' if (stream.match(/^%\{\??[\w \-\:\!]+\}/)) { if (stream.eol()) { state.controlFlow = false; } return "def"; } //TODO: Include bash script sub-parser (CodeMirror supports that) stream.next(); return null; } }; }); CodeMirror.defineMIME("text/x-rpm-spec", "rpm-spec"); }); }); var stex = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /* * Author: Constantin Jucovschi (c.jucovschi@jacobs-university.de) * Licence: MIT */ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("stex", function(_config, parserConfig) { function pushCommand(state, command) { state.cmdState.push(command); } function peekCommand(state) { if (state.cmdState.length > 0) { return state.cmdState[state.cmdState.length - 1]; } else { return null; } } function popCommand(state) { var plug = state.cmdState.pop(); if (plug) { plug.closeBracket(); } } // returns the non-default plugin closest to the end of the list function getMostPowerful(state) { var context = state.cmdState; for (var i = context.length - 1; i >= 0; i--) { var plug = context[i]; if (plug.name == "DEFAULT") { continue; } return plug; } return { styleIdentifier: function() { return null; } }; } function addPluginPattern(pluginName, cmdStyle, styles) { return function () { this.name = pluginName; this.bracketNo = 0; this.style = cmdStyle; this.styles = styles; this.argument = null; // \begin and \end have arguments that follow. These are stored in the plugin this.styleIdentifier = function() { return this.styles[this.bracketNo - 1] || null; }; this.openBracket = function() { this.bracketNo++; return "bracket"; }; this.closeBracket = function() {}; }; } var plugins = {}; plugins["importmodule"] = addPluginPattern("importmodule", "tag", ["string", "builtin"]); plugins["documentclass"] = addPluginPattern("documentclass", "tag", ["", "atom"]); plugins["usepackage"] = addPluginPattern("usepackage", "tag", ["atom"]); plugins["begin"] = addPluginPattern("begin", "tag", ["atom"]); plugins["end"] = addPluginPattern("end", "tag", ["atom"]); plugins["label" ] = addPluginPattern("label" , "tag", ["atom"]); plugins["ref" ] = addPluginPattern("ref" , "tag", ["atom"]); plugins["eqref" ] = addPluginPattern("eqref" , "tag", ["atom"]); plugins["cite" ] = addPluginPattern("cite" , "tag", ["atom"]); plugins["bibitem" ] = addPluginPattern("bibitem" , "tag", ["atom"]); plugins["Bibitem" ] = addPluginPattern("Bibitem" , "tag", ["atom"]); plugins["RBibitem" ] = addPluginPattern("RBibitem" , "tag", ["atom"]); plugins["DEFAULT"] = function () { this.name = "DEFAULT"; this.style = "tag"; this.styleIdentifier = this.openBracket = this.closeBracket = function() {}; }; function setState(state, f) { state.f = f; } // called when in a normal (no environment) context function normal(source, state) { var plug; // Do we look like '\command' ? If so, attempt to apply the plugin 'command' if (source.match(/^\\[a-zA-Z@]+/)) { var cmdName = source.current().slice(1); plug = plugins.hasOwnProperty(cmdName) ? plugins[cmdName] : plugins["DEFAULT"]; plug = new plug(); pushCommand(state, plug); setState(state, beginParams); return plug.style; } // escape characters if (source.match(/^\\[$&%#{}_]/)) { return "tag"; } // white space control characters if (source.match(/^\\[,;!\/\\]/)) { return "tag"; } // find if we're starting various math modes if (source.match("\\[")) { setState(state, function(source, state){ return inMathMode(source, state, "\\]"); }); return "keyword"; } if (source.match("\\(")) { setState(state, function(source, state){ return inMathMode(source, state, "\\)"); }); return "keyword"; } if (source.match("$$")) { setState(state, function(source, state){ return inMathMode(source, state, "$$"); }); return "keyword"; } if (source.match("$")) { setState(state, function(source, state){ return inMathMode(source, state, "$"); }); return "keyword"; } var ch = source.next(); if (ch == "%") { source.skipToEnd(); return "comment"; } else if (ch == '}' || ch == ']') { plug = peekCommand(state); if (plug) { plug.closeBracket(ch); setState(state, beginParams); } else { return "error"; } return "bracket"; } else if (ch == '{' || ch == '[') { plug = plugins["DEFAULT"]; plug = new plug(); pushCommand(state, plug); return "bracket"; } else if (/\d/.test(ch)) { source.eatWhile(/[\w.%]/); return "atom"; } else { source.eatWhile(/[\w\-_]/); plug = getMostPowerful(state); if (plug.name == 'begin') { plug.argument = source.current(); } return plug.styleIdentifier(); } } function inMathMode(source, state, endModeSeq) { if (source.eatSpace()) { return null; } if (endModeSeq && source.match(endModeSeq)) { setState(state, normal); return "keyword"; } if (source.match(/^\\[a-zA-Z@]+/)) { return "tag"; } if (source.match(/^[a-zA-Z]+/)) { return "variable-2"; } // escape characters if (source.match(/^\\[$&%#{}_]/)) { return "tag"; } // white space control characters if (source.match(/^\\[,;!\/]/)) { return "tag"; } // special math-mode characters if (source.match(/^[\^_&]/)) { return "tag"; } // non-special characters if (source.match(/^[+\-<>|=,\/@!*:;'"`~#?]/)) { return null; } if (source.match(/^(\d+\.\d*|\d*\.\d+|\d+)/)) { return "number"; } var ch = source.next(); if (ch == "{" || ch == "}" || ch == "[" || ch == "]" || ch == "(" || ch == ")") { return "bracket"; } if (ch == "%") { source.skipToEnd(); return "comment"; } return "error"; } function beginParams(source, state) { var ch = source.peek(), lastPlug; if (ch == '{' || ch == '[') { lastPlug = peekCommand(state); lastPlug.openBracket(ch); source.eat(ch); setState(state, normal); return "bracket"; } if (/[ \t\r]/.test(ch)) { source.eat(ch); return null; } setState(state, normal); popCommand(state); return normal(source, state); } return { startState: function() { var f = parserConfig.inMathMode ? function(source, state){ return inMathMode(source, state); } : normal; return { cmdState: [], f: f }; }, copyState: function(s) { return { cmdState: s.cmdState.slice(), f: s.f }; }, token: function(stream, state) { return state.f(stream, state); }, blankLine: function(state) { state.f = normal; state.cmdState.length = 0; }, lineComment: "%" }; }); CodeMirror.defineMIME("text/x-stex", "stex"); CodeMirror.defineMIME("text/x-latex", "stex"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, python, stex, overlay); })(function(CodeMirror) { CodeMirror.defineMode('rst', function (config, options) { var rx_strong = /^\*\*[^\*\s](?:[^\*]*[^\*\s])?\*\*/; var rx_emphasis = /^\*[^\*\s](?:[^\*]*[^\*\s])?\*/; var rx_literal = /^``[^`\s](?:[^`]*[^`\s])``/; var rx_number = /^(?:[\d]+(?:[\.,]\d+)*)/; var rx_positive = /^(?:\s\+[\d]+(?:[\.,]\d+)*)/; var rx_negative = /^(?:\s\-[\d]+(?:[\.,]\d+)*)/; var rx_uri_protocol = "[Hh][Tt][Tt][Pp][Ss]?://"; var rx_uri_domain = "(?:[\\d\\w.-]+)\\.(?:\\w{2,6})"; var rx_uri_path = "(?:/[\\d\\w\\#\\%\\&\\-\\.\\,\\/\\:\\=\\?\\~]+)*"; var rx_uri = new RegExp("^" + rx_uri_protocol + rx_uri_domain + rx_uri_path); var overlay = { token: function (stream) { if (stream.match(rx_strong) && stream.match (/\W+|$/, false)) return 'strong'; if (stream.match(rx_emphasis) && stream.match (/\W+|$/, false)) return 'em'; if (stream.match(rx_literal) && stream.match (/\W+|$/, false)) return 'string-2'; if (stream.match(rx_number)) return 'number'; if (stream.match(rx_positive)) return 'positive'; if (stream.match(rx_negative)) return 'negative'; if (stream.match(rx_uri)) return 'link'; while (stream.next() != null) { if (stream.match(rx_strong, false)) break; if (stream.match(rx_emphasis, false)) break; if (stream.match(rx_literal, false)) break; if (stream.match(rx_number, false)) break; if (stream.match(rx_positive, false)) break; if (stream.match(rx_negative, false)) break; if (stream.match(rx_uri, false)) break; } return null; } }; var mode = CodeMirror.getMode( config, options.backdrop || 'rst-base' ); return CodeMirror.overlayMode(mode, overlay, true); // combine }, 'python', 'stex'); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// CodeMirror.defineMode('rst-base', function (config) { /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function format(string) { var args = Array.prototype.slice.call(arguments, 1); return string.replace(/{(\d+)}/g, function (match, n) { return typeof args[n] != 'undefined' ? args[n] : match; }); } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// var mode_python = CodeMirror.getMode(config, 'python'); var mode_stex = CodeMirror.getMode(config, 'stex'); /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// var SEPA = "\\s+"; var TAIL = "(?:\\s*|\\W|$)", rx_TAIL = new RegExp(format('^{0}', TAIL)); var NAME = "(?:[^\\W\\d_](?:[\\w!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)", rx_NAME = new RegExp(format('^{0}', NAME)); var NAME_WWS = "(?:[^\\W\\d_](?:[\\w\\s!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)"; var REF_NAME = format('(?:{0}|`{1}`)', NAME, NAME_WWS); var TEXT1 = "(?:[^\\s\\|](?:[^\\|]*[^\\s\\|])?)"; var TEXT2 = "(?:[^\\`]+)", rx_TEXT2 = new RegExp(format('^{0}', TEXT2)); var rx_section = new RegExp( "^([!'#$%&\"()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~])\\1{3,}\\s*$"); var rx_explicit = new RegExp( format('^\\.\\.{0}', SEPA)); var rx_link = new RegExp( format('^_{0}:{1}|^__:{1}', REF_NAME, TAIL)); var rx_directive = new RegExp( format('^{0}::{1}', REF_NAME, TAIL)); var rx_substitution = new RegExp( format('^\\|{0}\\|{1}{2}::{3}', TEXT1, SEPA, REF_NAME, TAIL)); var rx_footnote = new RegExp( format('^\\[(?:\\d+|#{0}?|\\*)]{1}', REF_NAME, TAIL)); var rx_citation = new RegExp( format('^\\[{0}\\]{1}', REF_NAME, TAIL)); var rx_substitution_ref = new RegExp( format('^\\|{0}\\|', TEXT1)); var rx_footnote_ref = new RegExp( format('^\\[(?:\\d+|#{0}?|\\*)]_', REF_NAME)); var rx_citation_ref = new RegExp( format('^\\[{0}\\]_', REF_NAME)); var rx_link_ref1 = new RegExp( format('^{0}__?', REF_NAME)); var rx_link_ref2 = new RegExp( format('^`{0}`_', TEXT2)); var rx_role_pre = new RegExp( format('^:{0}:`{1}`{2}', NAME, TEXT2, TAIL)); var rx_role_suf = new RegExp( format('^`{1}`:{0}:{2}', NAME, TEXT2, TAIL)); var rx_role = new RegExp( format('^:{0}:{1}', NAME, TAIL)); var rx_directive_name = new RegExp(format('^{0}', REF_NAME)); var rx_directive_tail = new RegExp(format('^::{0}', TAIL)); var rx_substitution_text = new RegExp(format('^\\|{0}\\|', TEXT1)); var rx_substitution_sepa = new RegExp(format('^{0}', SEPA)); var rx_substitution_name = new RegExp(format('^{0}', REF_NAME)); var rx_substitution_tail = new RegExp(format('^::{0}', TAIL)); var rx_link_head = new RegExp("^_"); var rx_link_name = new RegExp(format('^{0}|_', REF_NAME)); var rx_link_tail = new RegExp(format('^:{0}', TAIL)); var rx_verbatim = new RegExp('^::\\s*$'); var rx_examples = new RegExp('^\\s+(?:>>>|In \\[\\d+\\]:)\\s'); /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_normal(stream, state) { var token = null; if (stream.sol() && stream.match(rx_examples, false)) { change(state, to_mode, { mode: mode_python, local: CodeMirror.startState(mode_python) }); } else if (stream.sol() && stream.match(rx_explicit)) { change(state, to_explicit); token = 'meta'; } else if (stream.sol() && stream.match(rx_section)) { change(state, to_normal); token = 'header'; } else if (phase(state) == rx_role_pre || stream.match(rx_role_pre, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_role_pre, 1)); stream.match(/^:/); token = 'meta'; break; case 1: change(state, to_normal, context(rx_role_pre, 2)); stream.match(rx_NAME); token = 'keyword'; if (stream.current().match(/^(?:math|latex)/)) { state.tmp_stex = true; } break; case 2: change(state, to_normal, context(rx_role_pre, 3)); stream.match(/^:`/); token = 'meta'; break; case 3: if (state.tmp_stex) { state.tmp_stex = undefined; state.tmp = { mode: mode_stex, local: CodeMirror.startState(mode_stex) }; } if (state.tmp) { if (stream.peek() == '`') { change(state, to_normal, context(rx_role_pre, 4)); state.tmp = undefined; break; } token = state.tmp.mode.token(stream, state.tmp.local); break; } change(state, to_normal, context(rx_role_pre, 4)); stream.match(rx_TEXT2); token = 'string'; break; case 4: change(state, to_normal, context(rx_role_pre, 5)); stream.match(/^`/); token = 'meta'; break; case 5: change(state, to_normal, context(rx_role_pre, 6)); stream.match(rx_TAIL); break; default: change(state, to_normal); } } else if (phase(state) == rx_role_suf || stream.match(rx_role_suf, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_role_suf, 1)); stream.match(/^`/); token = 'meta'; break; case 1: change(state, to_normal, context(rx_role_suf, 2)); stream.match(rx_TEXT2); token = 'string'; break; case 2: change(state, to_normal, context(rx_role_suf, 3)); stream.match(/^`:/); token = 'meta'; break; case 3: change(state, to_normal, context(rx_role_suf, 4)); stream.match(rx_NAME); token = 'keyword'; break; case 4: change(state, to_normal, context(rx_role_suf, 5)); stream.match(/^:/); token = 'meta'; break; case 5: change(state, to_normal, context(rx_role_suf, 6)); stream.match(rx_TAIL); break; default: change(state, to_normal); } } else if (phase(state) == rx_role || stream.match(rx_role, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_role, 1)); stream.match(/^:/); token = 'meta'; break; case 1: change(state, to_normal, context(rx_role, 2)); stream.match(rx_NAME); token = 'keyword'; break; case 2: change(state, to_normal, context(rx_role, 3)); stream.match(/^:/); token = 'meta'; break; case 3: change(state, to_normal, context(rx_role, 4)); stream.match(rx_TAIL); break; default: change(state, to_normal); } } else if (phase(state) == rx_substitution_ref || stream.match(rx_substitution_ref, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_substitution_ref, 1)); stream.match(rx_substitution_text); token = 'variable-2'; break; case 1: change(state, to_normal, context(rx_substitution_ref, 2)); if (stream.match(/^_?_?/)) token = 'link'; break; default: change(state, to_normal); } } else if (stream.match(rx_footnote_ref)) { change(state, to_normal); token = 'quote'; } else if (stream.match(rx_citation_ref)) { change(state, to_normal); token = 'quote'; } else if (stream.match(rx_link_ref1)) { change(state, to_normal); if (!stream.peek() || stream.peek().match(/^\W$/)) { token = 'link'; } } else if (phase(state) == rx_link_ref2 || stream.match(rx_link_ref2, false)) { switch (stage(state)) { case 0: if (!stream.peek() || stream.peek().match(/^\W$/)) { change(state, to_normal, context(rx_link_ref2, 1)); } else { stream.match(rx_link_ref2); } break; case 1: change(state, to_normal, context(rx_link_ref2, 2)); stream.match(/^`/); token = 'link'; break; case 2: change(state, to_normal, context(rx_link_ref2, 3)); stream.match(rx_TEXT2); break; case 3: change(state, to_normal, context(rx_link_ref2, 4)); stream.match(/^`_/); token = 'link'; break; default: change(state, to_normal); } } else if (stream.match(rx_verbatim)) { change(state, to_verbatim); } else { if (stream.next()) change(state, to_normal); } return token; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_explicit(stream, state) { var token = null; if (phase(state) == rx_substitution || stream.match(rx_substitution, false)) { switch (stage(state)) { case 0: change(state, to_explicit, context(rx_substitution, 1)); stream.match(rx_substitution_text); token = 'variable-2'; break; case 1: change(state, to_explicit, context(rx_substitution, 2)); stream.match(rx_substitution_sepa); break; case 2: change(state, to_explicit, context(rx_substitution, 3)); stream.match(rx_substitution_name); token = 'keyword'; break; case 3: change(state, to_explicit, context(rx_substitution, 4)); stream.match(rx_substitution_tail); token = 'meta'; break; default: change(state, to_normal); } } else if (phase(state) == rx_directive || stream.match(rx_directive, false)) { switch (stage(state)) { case 0: change(state, to_explicit, context(rx_directive, 1)); stream.match(rx_directive_name); token = 'keyword'; if (stream.current().match(/^(?:math|latex)/)) state.tmp_stex = true; else if (stream.current().match(/^python/)) state.tmp_py = true; break; case 1: change(state, to_explicit, context(rx_directive, 2)); stream.match(rx_directive_tail); token = 'meta'; if (stream.match(/^latex\s*$/) || state.tmp_stex) { state.tmp_stex = undefined; change(state, to_mode, { mode: mode_stex, local: CodeMirror.startState(mode_stex) }); } break; case 2: change(state, to_explicit, context(rx_directive, 3)); if (stream.match(/^python\s*$/) || state.tmp_py) { state.tmp_py = undefined; change(state, to_mode, { mode: mode_python, local: CodeMirror.startState(mode_python) }); } break; default: change(state, to_normal); } } else if (phase(state) == rx_link || stream.match(rx_link, false)) { switch (stage(state)) { case 0: change(state, to_explicit, context(rx_link, 1)); stream.match(rx_link_head); stream.match(rx_link_name); token = 'link'; break; case 1: change(state, to_explicit, context(rx_link, 2)); stream.match(rx_link_tail); token = 'meta'; break; default: change(state, to_normal); } } else if (stream.match(rx_footnote)) { change(state, to_normal); token = 'quote'; } else if (stream.match(rx_citation)) { change(state, to_normal); token = 'quote'; } else { stream.eatSpace(); if (stream.eol()) { change(state, to_normal); } else { stream.skipToEnd(); change(state, to_comment); token = 'comment'; } } return token; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_comment(stream, state) { return as_block(stream, state, 'comment'); } function to_verbatim(stream, state) { return as_block(stream, state, 'meta'); } function as_block(stream, state, token) { if (stream.eol() || stream.eatSpace()) { stream.skipToEnd(); return token; } else { change(state, to_normal); return null; } } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_mode(stream, state) { if (state.ctx.mode && state.ctx.local) { if (stream.sol()) { if (!stream.eatSpace()) change(state, to_normal); return null; } return state.ctx.mode.token(stream, state.ctx.local); } change(state, to_normal); return null; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function context(phase, stage, mode, local) { return {phase: phase, stage: stage, mode: mode, local: local}; } function change(state, tok, ctx) { state.tok = tok; state.ctx = ctx || {}; } function stage(state) { return state.ctx.stage || 0; } function phase(state) { return state.ctx.phase; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// return { startState: function () { return {tok: to_normal, ctx: context(undefined, 0)}; }, copyState: function (state) { var ctx = state.ctx, tmp = state.tmp; if (ctx.local) ctx = {mode: ctx.mode, local: CodeMirror.copyState(ctx.mode, ctx.local)}; if (tmp) tmp = {mode: tmp.mode, local: CodeMirror.copyState(tmp.mode, tmp.local)}; return {tok: state.tok, ctx: ctx, tmp: tmp}; }, innerMode: function (state) { return state.tmp ? {state: state.tmp.local, mode: state.tmp.mode} : state.ctx.mode ? {state: state.ctx.local, mode: state.ctx.mode} : null; }, token: function (stream, state) { return state.tok(stream, state); } }; }, 'python', 'stex'); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// CodeMirror.defineMIME('text/x-rst', 'rst'); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, simple); })(function(CodeMirror) { CodeMirror.defineSimpleMode("rust",{ start: [ // string and byte string {regex: /b?"/, token: "string", next: "string"}, // raw string and raw byte string {regex: /b?r"/, token: "string", next: "string_raw"}, {regex: /b?r#+"/, token: "string", next: "string_raw_hash"}, // character {regex: /'(?:[^'\\]|\\(?:[nrt0'"]|x[\da-fA-F]{2}|u\{[\da-fA-F]{6}\}))'/, token: "string-2"}, // byte {regex: /b'(?:[^']|\\(?:['\\nrt0]|x[\da-fA-F]{2}))'/, token: "string-2"}, {regex: /(?:(?:[0-9][0-9_]*)(?:(?:[Ee][+-]?[0-9_]+)|\.[0-9_]+(?:[Ee][+-]?[0-9_]+)?)(?:f32|f64)?)|(?:0(?:b[01_]+|(?:o[0-7_]+)|(?:x[0-9a-fA-F_]+))|(?:[0-9][0-9_]*))(?:u8|u16|u32|u64|i8|i16|i32|i64|isize|usize)?/, token: "number"}, {regex: /(let(?:\s+mut)?|fn|enum|mod|struct|type|union)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/, token: ["keyword", null, "def"]}, {regex: /(?:abstract|alignof|as|async|await|box|break|continue|const|crate|do|dyn|else|enum|extern|fn|for|final|if|impl|in|loop|macro|match|mod|move|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/, token: "keyword"}, {regex: /\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|f16|f32|f64|i8|i16|i32|i64|str|Option)\b/, token: "atom"}, {regex: /\b(?:true|false|Some|None|Ok|Err)\b/, token: "builtin"}, {regex: /\b(fn)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/, token: ["keyword", null ,"def"]}, {regex: /#!?\[.*\]/, token: "meta"}, {regex: /\/\/.*/, token: "comment"}, {regex: /\/\*/, token: "comment", next: "comment"}, {regex: /[-+\/*=<>!]+/, token: "operator"}, {regex: /[a-zA-Z_]\w*!/,token: "variable-3"}, {regex: /[a-zA-Z_]\w*/, token: "variable"}, {regex: /[\{\[\(]/, indent: true}, {regex: /[\}\]\)]/, dedent: true} ], string: [ {regex: /"/, token: "string", next: "start"}, {regex: /(?:[^\\"]|\\(?:.|$))*/, token: "string"} ], string_raw: [ {regex: /"/, token: "string", next: "start"}, {regex: /[^"]*/, token: "string"} ], string_raw_hash: [ {regex: /"#+/, token: "string", next: "start"}, {regex: /(?:[^"]|"(?!#))*/, token: "string"} ], comment: [ {regex: /.*?\*\//, token: "comment", next: "start"}, {regex: /.*/, token: "comment"} ], meta: { dontIndentStates: ["comment"], electricInput: /^\s*\}$/, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", fold: "brace" } }); CodeMirror.defineMIME("text/x-rustsrc", "rust"); CodeMirror.defineMIME("text/rust", "rust"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // SAS mode copyright (c) 2016 Jared Dean, SAS Institute // Created by Jared Dean // TODO // indent and de-indent // identify macro variables //Definitions // comment -- text within * ; or /* */ // keyword -- SAS language variable // variable -- macro variables starts with '&' or variable formats // variable-2 -- DATA Step, proc, or macro names // string -- text within ' ' or " " // operator -- numeric operator + / - * ** le eq ge ... and so on // builtin -- proc %macro data run mend // atom // def (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("sas", function () { var words = {}; var isDoubleOperatorSym = { eq: 'operator', lt: 'operator', le: 'operator', gt: 'operator', ge: 'operator', "in": 'operator', ne: 'operator', or: 'operator' }; var isDoubleOperatorChar = /(<=|>=|!=|<>)/; var isSingleOperatorChar = /[=\(:\),{}.*<>+\-\/^\[\]]/; // Takes a string of words separated by spaces and adds them as // keys with the value of the first argument 'style' function define(style, string, context) { if (context) { var split = string.split(' '); for (var i = 0; i < split.length; i++) { words[split[i]] = {style: style, state: context}; } } } //datastep define('def', 'stack pgm view source debug nesting nolist', ['inDataStep']); define('def', 'if while until for do do; end end; then else cancel', ['inDataStep']); define('def', 'label format _n_ _error_', ['inDataStep']); define('def', 'ALTER BUFNO BUFSIZE CNTLLEV COMPRESS DLDMGACTION ENCRYPT ENCRYPTKEY EXTENDOBSCOUNTER GENMAX GENNUM INDEX LABEL OBSBUF OUTREP PW PWREQ READ REPEMPTY REPLACE REUSE ROLE SORTEDBY SPILL TOBSNO TYPE WRITE FILECLOSE FIRSTOBS IN OBS POINTOBS WHERE WHEREUP IDXNAME IDXWHERE DROP KEEP RENAME', ['inDataStep']); define('def', 'filevar finfo finv fipname fipnamel fipstate first firstobs floor', ['inDataStep']); define('def', 'varfmt varinfmt varlabel varlen varname varnum varray varrayx vartype verify vformat vformatd vformatdx vformatn vformatnx vformatw vformatwx vformatx vinarray vinarrayx vinformat vinformatd vinformatdx vinformatn vinformatnx vinformatw vinformatwx vinformatx vlabel vlabelx vlength vlengthx vname vnamex vnferr vtype vtypex weekday', ['inDataStep']); define('def', 'zipfips zipname zipnamel zipstate', ['inDataStep']); define('def', 'put putc putn', ['inDataStep']); define('builtin', 'data run', ['inDataStep']); //proc define('def', 'data', ['inProc']); // flow control for macros define('def', '%if %end %end; %else %else; %do %do; %then', ['inMacro']); //everywhere define('builtin', 'proc run; quit; libname filename %macro %mend option options', ['ALL']); define('def', 'footnote title libname ods', ['ALL']); define('def', '%let %put %global %sysfunc %eval ', ['ALL']); // automatic macro variables http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a003167023.htm define('variable', '&sysbuffr &syscc &syscharwidth &syscmd &sysdate &sysdate9 &sysday &sysdevic &sysdmg &sysdsn &sysencoding &sysenv &syserr &syserrortext &sysfilrc &syshostname &sysindex &sysinfo &sysjobid &syslast &syslckrc &syslibrc &syslogapplname &sysmacroname &sysmenv &sysmsg &sysncpu &sysodspath &sysparm &syspbuff &sysprocessid &sysprocessname &sysprocname &sysrc &sysscp &sysscpl &sysscpl &syssite &sysstartid &sysstartname &systcpiphostname &systime &sysuserid &sysver &sysvlong &sysvlong4 &syswarningtext', ['ALL']); //footnote[1-9]? title[1-9]? //options statement define('def', 'source2 nosource2 page pageno pagesize', ['ALL']); //proc and datastep define('def', '_all_ _character_ _cmd_ _freq_ _i_ _infile_ _last_ _msg_ _null_ _numeric_ _temporary_ _type_ abort abs addr adjrsq airy alpha alter altlog altprint and arcos array arsin as atan attrc attrib attrn authserver autoexec awscontrol awsdef awsmenu awsmenumerge awstitle backward band base betainv between blocksize blshift bnot bor brshift bufno bufsize bxor by byerr byline byte calculated call cards cards4 catcache cbufno cdf ceil center cexist change chisq cinv class cleanup close cnonct cntllev coalesce codegen col collate collin column comamid comaux1 comaux2 comdef compbl compound compress config continue convert cos cosh cpuid create cross crosstab css curobs cv daccdb daccdbsl daccsl daccsyd dacctab dairy datalines datalines4 datejul datepart datetime day dbcslang dbcstype dclose ddfm ddm delete delimiter depdb depdbsl depsl depsyd deptab dequote descending descript design= device dflang dhms dif digamma dim dinfo display distinct dkricond dkrocond dlm dnum do dopen doptname doptnum dread drop dropnote dsname dsnferr echo else emaildlg emailid emailpw emailserver emailsys encrypt end endsas engine eof eov erf erfc error errorcheck errors exist exp fappend fclose fcol fdelete feedback fetch fetchobs fexist fget file fileclose fileexist filefmt filename fileref fmterr fmtsearch fnonct fnote font fontalias fopen foptname foptnum force formatted formchar formdelim formdlim forward fpoint fpos fput fread frewind frlen from fsep fuzz fwrite gaminv gamma getoption getvarc getvarn go goto group gwindow hbar hbound helpenv helploc hms honorappearance hosthelp hostprint hour hpct html hvar ibessel ibr id if index indexc indexw initcmd initstmt inner input inputc inputn inr insert int intck intnx into intrr invaliddata irr is jbessel join juldate keep kentb kurtosis label lag last lbound leave left length levels lgamma lib library libref line linesize link list log log10 log2 logpdf logpmf logsdf lostcard lowcase lrecl ls macro macrogen maps mautosource max maxdec maxr mdy mean measures median memtype merge merror min minute missing missover mlogic mod mode model modify month mopen mort mprint mrecall msglevel msymtabmax mvarsize myy n nest netpv new news nmiss no nobatch nobs nocaps nocardimage nocenter nocharcode nocmdmac nocol nocum nodate nodbcs nodetails nodmr nodms nodmsbatch nodup nodupkey noduplicates noechoauto noequals noerrorabend noexitwindows nofullstimer noicon noimplmac noint nolist noloadlist nomiss nomlogic nomprint nomrecall nomsgcase nomstored nomultenvappl nonotes nonumber noobs noovp nopad nopercent noprint noprintinit normal norow norsasuser nosetinit nosplash nosymbolgen note notes notitle notitles notsorted noverbose noxsync noxwait npv null number numkeys nummousekeys nway obs on open order ordinal otherwise out outer outp= output over ovp p(1 5 10 25 50 75 90 95 99) pad pad2 paired parm parmcards path pathdll pathname pdf peek peekc pfkey pmf point poisson poke position printer probbeta probbnml probchi probf probgam probhypr probit probnegb probnorm probsig probt procleave prt ps pw pwreq qtr quote r ranbin rancau random ranexp rangam range ranks rannor ranpoi rantbl rantri ranuni rcorr read recfm register regr remote remove rename repeat repeated replace resolve retain return reuse reverse rewind right round rsquare rtf rtrace rtraceloc s s2 samploc sasautos sascontrol sasfrscr sasmsg sasmstore sasscript sasuser saving scan sdf second select selection separated seq serror set setcomm setot sign simple sin sinh siteinfo skewness skip sle sls sortedby sortpgm sortseq sortsize soundex spedis splashlocation split spool sqrt start std stderr stdin stfips stimer stname stnamel stop stopover sub subgroup subpopn substr sum sumwgt symbol symbolgen symget symput sysget sysin sysleave sysmsg sysparm sysprint sysprintfont sysprod sysrc system t table tables tan tanh tapeclose tbufsize terminal test then timepart tinv tnonct to today tol tooldef totper transformout translate trantab tranwrd trigamma trim trimn trunc truncover type unformatted uniform union until upcase update user usericon uss validate value var weight when where while wincharset window work workinit workterm write wsum xsync xwait yearcutoff yes yyq min max', ['inDataStep', 'inProc']); define('operator', 'and not ', ['inDataStep', 'inProc']); // Main function function tokenize(stream, state) { // Finally advance the stream var ch = stream.next(); // BLOCKCOMMENT if (ch === '/' && stream.eat('*')) { state.continueComment = true; return "comment"; } else if (state.continueComment === true) { // in comment block //comment ends at the beginning of the line if (ch === '*' && stream.peek() === '/') { stream.next(); state.continueComment = false; } else if (stream.skipTo('*')) { //comment is potentially later in line stream.skipTo('*'); stream.next(); if (stream.eat('/')) state.continueComment = false; } else { stream.skipToEnd(); } return "comment"; } if (ch == "*" && stream.column() == stream.indentation()) { stream.skipToEnd(); return "comment" } // DoubleOperator match var doubleOperator = ch + stream.peek(); if ((ch === '"' || ch === "'") && !state.continueString) { state.continueString = ch; return "string" } else if (state.continueString) { if (state.continueString == ch) { state.continueString = null; } else if (stream.skipTo(state.continueString)) { // quote found on this line stream.next(); state.continueString = null; } else { stream.skipToEnd(); } return "string"; } else if (state.continueString !== null && stream.eol()) { stream.skipTo(state.continueString) || stream.skipToEnd(); return "string"; } else if (/[\d\.]/.test(ch)) { //find numbers if (ch === ".") stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); else if (ch === "0") stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); else stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); return "number"; } else if (isDoubleOperatorChar.test(ch + stream.peek())) { // TWO SYMBOL TOKENS stream.next(); return "operator"; } else if (isDoubleOperatorSym.hasOwnProperty(doubleOperator)) { stream.next(); if (stream.peek() === ' ') return isDoubleOperatorSym[doubleOperator.toLowerCase()]; } else if (isSingleOperatorChar.test(ch)) { // SINGLE SYMBOL TOKENS return "operator"; } // Matches one whole word -- even if the word is a character var word; if (stream.match(/[%&;\w]+/, false) != null) { word = ch + stream.match(/[%&;\w]+/, true); if (/&/.test(word)) return 'variable' } else { word = ch; } // the word after DATA PROC or MACRO if (state.nextword) { stream.match(/[\w]+/); // match memname.libname if (stream.peek() === '.') stream.skipTo(' '); state.nextword = false; return 'variable-2'; } word = word.toLowerCase(); // Are we in a DATA Step? if (state.inDataStep) { if (word === 'run;' || stream.match(/run\s;/)) { state.inDataStep = false; return 'builtin'; } // variable formats if ((word) && stream.next() === '.') { //either a format or libname.memname if (/\w/.test(stream.peek())) return 'variable-2'; else return 'variable'; } // do we have a DATA Step keyword if (word && words.hasOwnProperty(word) && (words[word].state.indexOf("inDataStep") !== -1 || words[word].state.indexOf("ALL") !== -1)) { //backup to the start of the word if (stream.start < stream.pos) stream.backUp(stream.pos - stream.start); //advance the length of the word and return for (var i = 0; i < word.length; ++i) stream.next(); return words[word].style; } } // Are we in an Proc statement? if (state.inProc) { if (word === 'run;' || word === 'quit;') { state.inProc = false; return 'builtin'; } // do we have a proc keyword if (word && words.hasOwnProperty(word) && (words[word].state.indexOf("inProc") !== -1 || words[word].state.indexOf("ALL") !== -1)) { stream.match(/[\w]+/); return words[word].style; } } // Are we in a Macro statement? if (state.inMacro) { if (word === '%mend') { if (stream.peek() === ';') stream.next(); state.inMacro = false; return 'builtin'; } if (word && words.hasOwnProperty(word) && (words[word].state.indexOf("inMacro") !== -1 || words[word].state.indexOf("ALL") !== -1)) { stream.match(/[\w]+/); return words[word].style; } return 'atom'; } // Do we have Keywords specific words? if (word && words.hasOwnProperty(word)) { // Negates the initial next() stream.backUp(1); // Actually move the stream stream.match(/[\w]+/); if (word === 'data' && /=/.test(stream.peek()) === false) { state.inDataStep = true; state.nextword = true; return 'builtin'; } if (word === 'proc') { state.inProc = true; state.nextword = true; return 'builtin'; } if (word === '%macro') { state.inMacro = true; state.nextword = true; return 'builtin'; } if (/title[1-9]/.test(word)) return 'def'; if (word === 'footnote') { stream.eat(/[1-9]/); return 'def'; } // Returns their value as state in the prior define methods if (state.inDataStep === true && words[word].state.indexOf("inDataStep") !== -1) return words[word].style; if (state.inProc === true && words[word].state.indexOf("inProc") !== -1) return words[word].style; if (state.inMacro === true && words[word].state.indexOf("inMacro") !== -1) return words[word].style; if (words[word].state.indexOf("ALL") !== -1) return words[word].style; return null; } // Unrecognized syntax return null; } return { startState: function () { return { inDataStep: false, inProc: false, inMacro: false, nextword: false, continueString: null, continueComment: false }; }, token: function (stream, state) { // Strip the spaces, but regex will account for them either way if (stream.eatSpace()) return null; // Go through the main process return tokenize(stream, state); }, blockCommentStart: "/*", blockCommentEnd: "*/" }; }); CodeMirror.defineMIME("text/x-sas", "sas"); }); }); var sass = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, css); })(function(CodeMirror) { CodeMirror.defineMode("sass", function(config) { var cssMode = CodeMirror.mimeModes["text/css"]; var propertyKeywords = cssMode.propertyKeywords || {}, colorKeywords = cssMode.colorKeywords || {}, valueKeywords = cssMode.valueKeywords || {}, fontProperties = cssMode.fontProperties || {}; function tokenRegexp(words) { return new RegExp("^" + words.join("|")); } var keywords = ["true", "false", "null", "auto"]; var keywordsRegexp = new RegExp("^" + keywords.join("|")); var operators = ["\\(", "\\)", "=", ">", "<", "==", ">=", "<=", "\\+", "-", "\\!=", "/", "\\*", "%", "and", "or", "not", ";","\\{","\\}",":"]; var opRegexp = tokenRegexp(operators); var pseudoElementsRegexp = /^::?[a-zA-Z_][\w\-]*/; var word; function isEndLine(stream) { return !stream.peek() || stream.match(/\s+$/, false); } function urlTokens(stream, state) { var ch = stream.peek(); if (ch === ")") { stream.next(); state.tokenizer = tokenBase; return "operator"; } else if (ch === "(") { stream.next(); stream.eatSpace(); return "operator"; } else if (ch === "'" || ch === '"') { state.tokenizer = buildStringTokenizer(stream.next()); return "string"; } else { state.tokenizer = buildStringTokenizer(")", false); return "string"; } } function comment(indentation, multiLine) { return function(stream, state) { if (stream.sol() && stream.indentation() <= indentation) { state.tokenizer = tokenBase; return tokenBase(stream, state); } if (multiLine && stream.skipTo("*/")) { stream.next(); stream.next(); state.tokenizer = tokenBase; } else { stream.skipToEnd(); } return "comment"; }; } function buildStringTokenizer(quote, greedy) { if (greedy == null) { greedy = true; } function stringTokenizer(stream, state) { var nextChar = stream.next(); var peekChar = stream.peek(); var previousChar = stream.string.charAt(stream.pos-2); var endingString = ((nextChar !== "\\" && peekChar === quote) || (nextChar === quote && previousChar !== "\\")); if (endingString) { if (nextChar !== quote && greedy) { stream.next(); } if (isEndLine(stream)) { state.cursorHalf = 0; } state.tokenizer = tokenBase; return "string"; } else if (nextChar === "#" && peekChar === "{") { state.tokenizer = buildInterpolationTokenizer(stringTokenizer); stream.next(); return "operator"; } else { return "string"; } } return stringTokenizer; } function buildInterpolationTokenizer(currentTokenizer) { return function(stream, state) { if (stream.peek() === "}") { stream.next(); state.tokenizer = currentTokenizer; return "operator"; } else { return tokenBase(stream, state); } }; } function indent(state) { if (state.indentCount == 0) { state.indentCount++; var lastScopeOffset = state.scopes[0].offset; var currentOffset = lastScopeOffset + config.indentUnit; state.scopes.unshift({ offset:currentOffset }); } } function dedent(state) { if (state.scopes.length == 1) return; state.scopes.shift(); } function tokenBase(stream, state) { var ch = stream.peek(); // Comment if (stream.match("/*")) { state.tokenizer = comment(stream.indentation(), true); return state.tokenizer(stream, state); } if (stream.match("//")) { state.tokenizer = comment(stream.indentation(), false); return state.tokenizer(stream, state); } // Interpolation if (stream.match("#{")) { state.tokenizer = buildInterpolationTokenizer(tokenBase); return "operator"; } // Strings if (ch === '"' || ch === "'") { stream.next(); state.tokenizer = buildStringTokenizer(ch); return "string"; } if(!state.cursorHalf){// state.cursorHalf === 0 // first half i.e. before : for key-value pairs // including selectors if (ch === "-") { if (stream.match(/^-\w+-/)) { return "meta"; } } if (ch === ".") { stream.next(); if (stream.match(/^[\w-]+/)) { indent(state); return "qualifier"; } else if (stream.peek() === "#") { indent(state); return "tag"; } } if (ch === "#") { stream.next(); // ID selectors if (stream.match(/^[\w-]+/)) { indent(state); return "builtin"; } if (stream.peek() === "#") { indent(state); return "tag"; } } // Variables if (ch === "$") { stream.next(); stream.eatWhile(/[\w-]/); return "variable-2"; } // Numbers if (stream.match(/^-?[0-9\.]+/)) return "number"; // Units if (stream.match(/^(px|em|in)\b/)) return "unit"; if (stream.match(keywordsRegexp)) return "keyword"; if (stream.match(/^url/) && stream.peek() === "(") { state.tokenizer = urlTokens; return "atom"; } if (ch === "=") { // Match shortcut mixin definition if (stream.match(/^=[\w-]+/)) { indent(state); return "meta"; } } if (ch === "+") { // Match shortcut mixin definition if (stream.match(/^\+[\w-]+/)){ return "variable-3"; } } if(ch === "@"){ if(stream.match(/@extend/)){ if(!stream.match(/\s*[\w]/)) dedent(state); } } // Indent Directives if (stream.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)) { indent(state); return "def"; } // Other Directives if (ch === "@") { stream.next(); stream.eatWhile(/[\w-]/); return "def"; } if (stream.eatWhile(/[\w-]/)){ if(stream.match(/ *: *[\w-\+\$#!\("']/,false)){ word = stream.current().toLowerCase(); var prop = state.prevProp + "-" + word; if (propertyKeywords.hasOwnProperty(prop)) { return "property"; } else if (propertyKeywords.hasOwnProperty(word)) { state.prevProp = word; return "property"; } else if (fontProperties.hasOwnProperty(word)) { return "property"; } return "tag"; } else if(stream.match(/ *:/,false)){ indent(state); state.cursorHalf = 1; state.prevProp = stream.current().toLowerCase(); return "property"; } else if(stream.match(/ *,/,false)){ return "tag"; } else { indent(state); return "tag"; } } if(ch === ":"){ if (stream.match(pseudoElementsRegexp)){ // could be a pseudo-element return "variable-3"; } stream.next(); state.cursorHalf=1; return "operator"; } } // cursorHalf===0 ends here else { if (ch === "#") { stream.next(); // Hex numbers if (stream.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)){ if (isEndLine(stream)) { state.cursorHalf = 0; } return "number"; } } // Numbers if (stream.match(/^-?[0-9\.]+/)){ if (isEndLine(stream)) { state.cursorHalf = 0; } return "number"; } // Units if (stream.match(/^(px|em|in)\b/)){ if (isEndLine(stream)) { state.cursorHalf = 0; } return "unit"; } if (stream.match(keywordsRegexp)){ if (isEndLine(stream)) { state.cursorHalf = 0; } return "keyword"; } if (stream.match(/^url/) && stream.peek() === "(") { state.tokenizer = urlTokens; if (isEndLine(stream)) { state.cursorHalf = 0; } return "atom"; } // Variables if (ch === "$") { stream.next(); stream.eatWhile(/[\w-]/); if (isEndLine(stream)) { state.cursorHalf = 0; } return "variable-2"; } // bang character for !important, !default, etc. if (ch === "!") { stream.next(); state.cursorHalf = 0; return stream.match(/^[\w]+/) ? "keyword": "operator"; } if (stream.match(opRegexp)){ if (isEndLine(stream)) { state.cursorHalf = 0; } return "operator"; } // attributes if (stream.eatWhile(/[\w-]/)) { if (isEndLine(stream)) { state.cursorHalf = 0; } word = stream.current().toLowerCase(); if (valueKeywords.hasOwnProperty(word)) { return "atom"; } else if (colorKeywords.hasOwnProperty(word)) { return "keyword"; } else if (propertyKeywords.hasOwnProperty(word)) { state.prevProp = stream.current().toLowerCase(); return "property"; } else { return "tag"; } } //stream.eatSpace(); if (isEndLine(stream)) { state.cursorHalf = 0; return null; } } // else ends here if (stream.match(opRegexp)) return "operator"; // If we haven't returned by now, we move 1 character // and return an error stream.next(); return null; } function tokenLexer(stream, state) { if (stream.sol()) state.indentCount = 0; var style = state.tokenizer(stream, state); var current = stream.current(); if (current === "@return" || current === "}"){ dedent(state); } if (style !== null) { var startOfToken = stream.pos - current.length; var withCurrentIndent = startOfToken + (config.indentUnit * state.indentCount); var newScopes = []; for (var i = 0; i < state.scopes.length; i++) { var scope = state.scopes[i]; if (scope.offset <= withCurrentIndent) newScopes.push(scope); } state.scopes = newScopes; } return style; } return { startState: function() { return { tokenizer: tokenBase, scopes: [{offset: 0, type: "sass"}], indentCount: 0, cursorHalf: 0, // cursor half tells us if cursor lies after (1) // or before (0) colon (well... more or less) definedVars: [], definedMixins: [] }; }, token: function(stream, state) { var style = tokenLexer(stream, state); state.lastToken = { style: style, content: stream.current() }; return style; }, indent: function(state) { return state.scopes[0].offset; } }; }, "css"); CodeMirror.defineMIME("text/x-sass", "sass"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /** * Author: Koh Zi Han, based on implementation by Koh Zi Chun */ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("scheme", function () { var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", ATOM = "atom", NUMBER = "number", BRACKET = "bracket"; var INDENT_WORD_SKIP = 2; function makeKeywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = makeKeywords("λ case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"); var indentKeys = makeKeywords("define let letrec let* lambda"); function stateStack(indent, type, prev) { // represents a state stack object this.indent = indent; this.type = type; this.prev = prev; } function pushStack(state, indent, type) { state.indentStack = new stateStack(indent, type, state.indentStack); } function popStack(state) { state.indentStack = state.indentStack.prev; } var binaryMatcher = new RegExp(/^(?:[-+]i|[-+][01]+#*(?:\/[01]+#*)?i|[-+]?[01]+#*(?:\/[01]+#*)?@[-+]?[01]+#*(?:\/[01]+#*)?|[-+]?[01]+#*(?:\/[01]+#*)?[-+](?:[01]+#*(?:\/[01]+#*)?)?i|[-+]?[01]+#*(?:\/[01]+#*)?)(?=[()\s;"]|$)/i); var octalMatcher = new RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?)(?=[()\s;"]|$)/i); var hexMatcher = new RegExp(/^(?:[-+]i|[-+][\da-f]+#*(?:\/[\da-f]+#*)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?@[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?[-+](?:[\da-f]+#*(?:\/[\da-f]+#*)?)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?)(?=[()\s;"]|$)/i); var decimalMatcher = new RegExp(/^(?:[-+]i|[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)i|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)@[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)?i|(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*))(?=[()\s;"]|$)/i); function isBinaryNumber (stream) { return stream.match(binaryMatcher); } function isOctalNumber (stream) { return stream.match(octalMatcher); } function isDecimalNumber (stream, backup) { if (backup === true) { stream.backUp(1); } return stream.match(decimalMatcher); } function isHexNumber (stream) { return stream.match(hexMatcher); } return { startState: function () { return { indentStack: null, indentation: 0, mode: false, sExprComment: false, sExprQuote: false }; }, token: function (stream, state) { if (state.indentStack == null && stream.sol()) { // update indentation, but only if indentStack is empty state.indentation = stream.indentation(); } // skip spaces if (stream.eatSpace()) { return null; } var returnType = null; switch(state.mode){ case "string": // multi-line string parsing mode var next, escaped = false; while ((next = stream.next()) != null) { if (next == "\"" && !escaped) { state.mode = false; break; } escaped = !escaped && next == "\\"; } returnType = STRING; // continue on in scheme-string mode break; case "comment": // comment parsing mode var next, maybeEnd = false; while ((next = stream.next()) != null) { if (next == "#" && maybeEnd) { state.mode = false; break; } maybeEnd = (next == "|"); } returnType = COMMENT; break; case "s-expr-comment": // s-expr commenting mode state.mode = false; if(stream.peek() == "(" || stream.peek() == "["){ // actually start scheme s-expr commenting mode state.sExprComment = 0; }else { // if not we just comment the entire of the next token stream.eatWhile(/[^\s\(\)\[\]]/); // eat symbol atom returnType = COMMENT; break; } default: // default parsing mode var ch = stream.next(); if (ch == "\"") { state.mode = "string"; returnType = STRING; } else if (ch == "'") { if (stream.peek() == "(" || stream.peek() == "["){ if (typeof state.sExprQuote != "number") { state.sExprQuote = 0; } // else already in a quoted expression returnType = ATOM; } else { stream.eatWhile(/[\w_\-!$%&*+\.\/:<=>?@\^~]/); returnType = ATOM; } } else if (ch == '#') { if (stream.eat("|")) { // Multi-line comment state.mode = "comment"; // toggle to comment mode returnType = COMMENT; } else if (stream.eat(/[tf]/i)) { // #t/#f (atom) returnType = ATOM; } else if (stream.eat(';')) { // S-Expr comment state.mode = "s-expr-comment"; returnType = COMMENT; } else { var numTest = null, hasExactness = false, hasRadix = true; if (stream.eat(/[ei]/i)) { hasExactness = true; } else { stream.backUp(1); // must be radix specifier } if (stream.match(/^#b/i)) { numTest = isBinaryNumber; } else if (stream.match(/^#o/i)) { numTest = isOctalNumber; } else if (stream.match(/^#x/i)) { numTest = isHexNumber; } else if (stream.match(/^#d/i)) { numTest = isDecimalNumber; } else if (stream.match(/^[-+0-9.]/, false)) { hasRadix = false; numTest = isDecimalNumber; // re-consume the intial # if all matches failed } else if (!hasExactness) { stream.eat('#'); } if (numTest != null) { if (hasRadix && !hasExactness) { // consume optional exactness after radix stream.match(/^#[ei]/i); } if (numTest(stream)) returnType = NUMBER; } } } else if (/^[-+0-9.]/.test(ch) && isDecimalNumber(stream, true)) { // match non-prefixed number, must be decimal returnType = NUMBER; } else if (ch == ";") { // comment stream.skipToEnd(); // rest of the line is a comment returnType = COMMENT; } else if (ch == "(" || ch == "[") { var keyWord = ''; var indentTemp = stream.column(), letter; /** Either (indent-word .. (non-indent-word .. (;something else, bracket, etc. */ while ((letter = stream.eat(/[^\s\(\[\;\)\]]/)) != null) { keyWord += letter; } if (keyWord.length > 0 && indentKeys.propertyIsEnumerable(keyWord)) { // indent-word pushStack(state, indentTemp + INDENT_WORD_SKIP, ch); } else { // non-indent word // we continue eating the spaces stream.eatSpace(); if (stream.eol() || stream.peek() == ";") { // nothing significant after // we restart indentation 1 space after pushStack(state, indentTemp + 1, ch); } else { pushStack(state, indentTemp + stream.current().length, ch); // else we match } } stream.backUp(stream.current().length - 1); // undo all the eating if(typeof state.sExprComment == "number") state.sExprComment++; if(typeof state.sExprQuote == "number") state.sExprQuote++; returnType = BRACKET; } else if (ch == ")" || ch == "]") { returnType = BRACKET; if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : "[")) { popStack(state); if(typeof state.sExprComment == "number"){ if(--state.sExprComment == 0){ returnType = COMMENT; // final closing bracket state.sExprComment = false; // turn off s-expr commenting mode } } if(typeof state.sExprQuote == "number"){ if(--state.sExprQuote == 0){ returnType = ATOM; // final closing bracket state.sExprQuote = false; // turn off s-expr quote mode } } } } else { stream.eatWhile(/[\w_\-!$%&*+\.\/:<=>?@\^~]/); if (keywords && keywords.propertyIsEnumerable(stream.current())) { returnType = BUILTIN; } else returnType = "variable"; } } return (typeof state.sExprComment == "number") ? COMMENT : ((typeof state.sExprQuote == "number") ? ATOM : returnType); }, indent: function (state) { if (state.indentStack == null) return state.indentation; return state.indentStack.indent; }, closeBrackets: {pairs: "()[]{}\"\""}, lineComment: ";;" }; }); CodeMirror.defineMIME("text/x-scheme", "scheme"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode('shell', function() { var words = {}; function define(style, dict) { for(var i = 0; i < dict.length; i++) { words[dict[i]] = style; } } var commonAtoms = ["true", "false"]; var commonKeywords = ["if", "then", "do", "else", "elif", "while", "until", "for", "in", "esac", "fi", "fin", "fil", "done", "exit", "set", "unset", "export", "function"]; var commonCommands = ["ab", "awk", "bash", "beep", "cat", "cc", "cd", "chown", "chmod", "chroot", "clear", "cp", "curl", "cut", "diff", "echo", "find", "gawk", "gcc", "get", "git", "grep", "hg", "kill", "killall", "ln", "ls", "make", "mkdir", "openssl", "mv", "nc", "nl", "node", "npm", "ping", "ps", "restart", "rm", "rmdir", "sed", "service", "sh", "shopt", "shred", "source", "sort", "sleep", "ssh", "start", "stop", "su", "sudo", "svn", "tee", "telnet", "top", "touch", "vi", "vim", "wall", "wc", "wget", "who", "write", "yes", "zsh"]; CodeMirror.registerHelper("hintWords", "shell", commonAtoms.concat(commonKeywords, commonCommands)); define('atom', commonAtoms); define('keyword', commonKeywords); define('builtin', commonCommands); function tokenBase(stream, state) { if (stream.eatSpace()) return null; var sol = stream.sol(); var ch = stream.next(); if (ch === '\\') { stream.next(); return null; } if (ch === '\'' || ch === '"' || ch === '`') { state.tokens.unshift(tokenString(ch, ch === "`" ? "quote" : "string")); return tokenize(stream, state); } if (ch === '#') { if (sol && stream.eat('!')) { stream.skipToEnd(); return 'meta'; // 'comment'? } stream.skipToEnd(); return 'comment'; } if (ch === '$') { state.tokens.unshift(tokenDollar); return tokenize(stream, state); } if (ch === '+' || ch === '=') { return 'operator'; } if (ch === '-') { stream.eat('-'); stream.eatWhile(/\w/); return 'attribute'; } if (/\d/.test(ch)) { stream.eatWhile(/\d/); if(stream.eol() || !/\w/.test(stream.peek())) { return 'number'; } } stream.eatWhile(/[\w-]/); var cur = stream.current(); if (stream.peek() === '=' && /\w+/.test(cur)) return 'def'; return words.hasOwnProperty(cur) ? words[cur] : null; } function tokenString(quote, style) { var close = quote == "(" ? ")" : quote == "{" ? "}" : quote; return function(stream, state) { var next, escaped = false; while ((next = stream.next()) != null) { if (next === close && !escaped) { state.tokens.shift(); break; } else if (next === '$' && !escaped && quote !== "'" && stream.peek() != close) { escaped = true; stream.backUp(1); state.tokens.unshift(tokenDollar); break; } else if (!escaped && quote !== close && next === quote) { state.tokens.unshift(tokenString(quote, style)); return tokenize(stream, state) } else if (!escaped && /['"]/.test(next) && !/['"]/.test(quote)) { state.tokens.unshift(tokenStringStart(next, "string")); stream.backUp(1); break; } escaped = !escaped && next === '\\'; } return style; }; } function tokenStringStart(quote, style) { return function(stream, state) { state.tokens[0] = tokenString(quote, style); stream.next(); return tokenize(stream, state) } } var tokenDollar = function(stream, state) { if (state.tokens.length > 1) stream.eat('$'); var ch = stream.next(); if (/['"({]/.test(ch)) { state.tokens[0] = tokenString(ch, ch == "(" ? "quote" : ch == "{" ? "def" : "string"); return tokenize(stream, state); } if (!/\d/.test(ch)) stream.eatWhile(/\w/); state.tokens.shift(); return 'def'; }; function tokenize(stream, state) { return (state.tokens[0] || tokenBase) (stream, state); } return { startState: function() {return {tokens:[]};}, token: function(stream, state) { return tokenize(stream, state); }, closeBrackets: "()[]{}''\"\"``", lineComment: '#', fold: "brace" }; }); CodeMirror.defineMIME('text/x-sh', 'shell'); // Apache uses a slightly different Media Type for Shell scripts // http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types CodeMirror.defineMIME('application/x-sh', 'shell'); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("sieve", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words("if elsif else stop require"); var atoms = words("true false not"); var indentUnit = config.indentUnit; function tokenBase(stream, state) { var ch = stream.next(); if (ch == "/" && stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } if (ch === '#') { stream.skipToEnd(); return "comment"; } if (ch == "\"") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (ch == "(") { state._indent.push("("); // add virtual angel wings so that editor behaves... // ...more sane incase of broken brackets state._indent.push("{"); return null; } if (ch === "{") { state._indent.push("{"); return null; } if (ch == ")") { state._indent.pop(); state._indent.pop(); } if (ch === "}") { state._indent.pop(); return null; } if (ch == ",") return null; if (ch == ";") return null; if (/[{}\(\),;]/.test(ch)) return null; // 1*DIGIT "K" / "M" / "G" if (/\d/.test(ch)) { stream.eatWhile(/[\d]/); stream.eat(/[KkMmGg]/); return "number"; } // ":" (ALPHA / "_") *(ALPHA / DIGIT / "_") if (ch == ":") { stream.eatWhile(/[a-zA-Z_]/); stream.eatWhile(/[a-zA-Z0-9_]/); return "operator"; } stream.eatWhile(/\w/); var cur = stream.current(); // "text:" *(SP / HTAB) (hash-comment / CRLF) // *(multiline-literal / multiline-dotstart) // "." CRLF if ((cur == "text") && stream.eat(":")) { state.tokenize = tokenMultiLineString; return "string"; } if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (atoms.propertyIsEnumerable(cur)) return "atom"; return null; } function tokenMultiLineString(stream, state) { state._multiLineString = true; // the first line is special it may contain a comment if (!stream.sol()) { stream.eatSpace(); if (stream.peek() == "#") { stream.skipToEnd(); return "comment"; } stream.skipToEnd(); return "string"; } if ((stream.next() == ".") && (stream.eol())) { state._multiLineString = false; state.tokenize = tokenBase; } return "string"; } function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.tokenize = tokenBase; return "string"; }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, _indent: []}; }, token: function(stream, state) { if (stream.eatSpace()) return null; return (state.tokenize || tokenBase)(stream, state); }, indent: function(state, _textAfter) { var length = state._indent.length; if (_textAfter && (_textAfter[0] == "}")) length--; if (length <0) length = 0; return length * indentUnit; }, electricChars: "}" }; }); CodeMirror.defineMIME("application/sieve", "sieve"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Slim Highlighting for CodeMirror copyright (c) HicknHack Software Gmbh (function(mod) { mod(codemirror, htmlmixed, ruby); })(function(CodeMirror) { CodeMirror.defineMode("slim", function(config) { var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); var rubyMode = CodeMirror.getMode(config, "ruby"); var modes = { html: htmlMode, ruby: rubyMode }; var embedded = { ruby: "ruby", javascript: "javascript", css: "text/css", sass: "text/x-sass", scss: "text/x-scss", less: "text/x-less", styl: "text/x-styl", // no highlighting so far coffee: "coffeescript", asciidoc: "text/x-asciidoc", markdown: "text/x-markdown", textile: "text/x-textile", // no highlighting so far creole: "text/x-creole", // no highlighting so far wiki: "text/x-wiki", // no highlighting so far mediawiki: "text/x-mediawiki", // no highlighting so far rdoc: "text/x-rdoc", // no highlighting so far builder: "text/x-builder", // no highlighting so far nokogiri: "text/x-nokogiri", // no highlighting so far erb: "application/x-erb" }; var embeddedRegexp = function(map){ var arr = []; for(var key in map) arr.push(key); return new RegExp("^("+arr.join('|')+"):"); }(embedded); var styleMap = { "commentLine": "comment", "slimSwitch": "operator special", "slimTag": "tag", "slimId": "attribute def", "slimClass": "attribute qualifier", "slimAttribute": "attribute", "slimSubmode": "keyword special", "closeAttributeTag": null, "slimDoctype": null, "lineContinuation": null }; var closing = { "{": "}", "[": "]", "(": ")" }; var nameStartChar = "_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD"; var nameChar = nameStartChar + "\\-0-9\xB7\u0300-\u036F\u203F-\u2040"; var nameRegexp = new RegExp("^[:"+nameStartChar+"](?::["+nameChar+"]|["+nameChar+"]*)"); var attributeNameRegexp = new RegExp("^[:"+nameStartChar+"][:\\."+nameChar+"]*(?=\\s*=)"); var wrappedAttributeNameRegexp = new RegExp("^[:"+nameStartChar+"][:\\."+nameChar+"]*"); var classNameRegexp = /^\.-?[_a-zA-Z]+[\w\-]*/; var classIdRegexp = /^#[_a-zA-Z]+[\w\-]*/; function backup(pos, tokenize, style) { var restore = function(stream, state) { state.tokenize = tokenize; if (stream.pos < pos) { stream.pos = pos; return style; } return state.tokenize(stream, state); }; return function(stream, state) { state.tokenize = restore; return tokenize(stream, state); }; } function maybeBackup(stream, state, pat, offset, style) { var cur = stream.current(); var idx = cur.search(pat); if (idx > -1) { state.tokenize = backup(stream.pos, state.tokenize, style); stream.backUp(cur.length - idx - offset); } return style; } function continueLine(state, column) { state.stack = { parent: state.stack, style: "continuation", indented: column, tokenize: state.line }; state.line = state.tokenize; } function finishContinue(state) { if (state.line == state.tokenize) { state.line = state.stack.tokenize; state.stack = state.stack.parent; } } function lineContinuable(column, tokenize) { return function(stream, state) { finishContinue(state); if (stream.match(/^\\$/)) { continueLine(state, column); return "lineContinuation"; } var style = tokenize(stream, state); if (stream.eol() && stream.current().match(/(?:^|[^\\])(?:\\\\)*\\$/)) { stream.backUp(1); } return style; }; } function commaContinuable(column, tokenize) { return function(stream, state) { finishContinue(state); var style = tokenize(stream, state); if (stream.eol() && stream.current().match(/,$/)) { continueLine(state, column); } return style; }; } function rubyInQuote(endQuote, tokenize) { // TODO: add multi line support return function(stream, state) { var ch = stream.peek(); if (ch == endQuote && state.rubyState.tokenize.length == 1) { // step out of ruby context as it seems to complete processing all the braces stream.next(); state.tokenize = tokenize; return "closeAttributeTag"; } else { return ruby(stream, state); } }; } function startRubySplat(tokenize) { var rubyState; var runSplat = function(stream, state) { if (state.rubyState.tokenize.length == 1 && !state.rubyState.context.prev) { stream.backUp(1); if (stream.eatSpace()) { state.rubyState = rubyState; state.tokenize = tokenize; return tokenize(stream, state); } stream.next(); } return ruby(stream, state); }; return function(stream, state) { rubyState = state.rubyState; state.rubyState = CodeMirror.startState(rubyMode); state.tokenize = runSplat; return ruby(stream, state); }; } function ruby(stream, state) { return rubyMode.token(stream, state.rubyState); } function htmlLine(stream, state) { if (stream.match(/^\\$/)) { return "lineContinuation"; } return html(stream, state); } function html(stream, state) { if (stream.match(/^#\{/)) { state.tokenize = rubyInQuote("}", state.tokenize); return null; } return maybeBackup(stream, state, /[^\\]#\{/, 1, htmlMode.token(stream, state.htmlState)); } function startHtmlLine(lastTokenize) { return function(stream, state) { var style = htmlLine(stream, state); if (stream.eol()) state.tokenize = lastTokenize; return style; }; } function startHtmlMode(stream, state, offset) { state.stack = { parent: state.stack, style: "html", indented: stream.column() + offset, // pipe + space tokenize: state.line }; state.line = state.tokenize = html; return null; } function comment(stream, state) { stream.skipToEnd(); return state.stack.style; } function commentMode(stream, state) { state.stack = { parent: state.stack, style: "comment", indented: state.indented + 1, tokenize: state.line }; state.line = comment; return comment(stream, state); } function attributeWrapper(stream, state) { if (stream.eat(state.stack.endQuote)) { state.line = state.stack.line; state.tokenize = state.stack.tokenize; state.stack = state.stack.parent; return null; } if (stream.match(wrappedAttributeNameRegexp)) { state.tokenize = attributeWrapperAssign; return "slimAttribute"; } stream.next(); return null; } function attributeWrapperAssign(stream, state) { if (stream.match(/^==?/)) { state.tokenize = attributeWrapperValue; return null; } return attributeWrapper(stream, state); } function attributeWrapperValue(stream, state) { var ch = stream.peek(); if (ch == '"' || ch == "\'") { state.tokenize = readQuoted(ch, "string", true, false, attributeWrapper); stream.next(); return state.tokenize(stream, state); } if (ch == '[') { return startRubySplat(attributeWrapper)(stream, state); } if (stream.match(/^(true|false|nil)\b/)) { state.tokenize = attributeWrapper; return "keyword"; } return startRubySplat(attributeWrapper)(stream, state); } function startAttributeWrapperMode(state, endQuote, tokenize) { state.stack = { parent: state.stack, style: "wrapper", indented: state.indented + 1, tokenize: tokenize, line: state.line, endQuote: endQuote }; state.line = state.tokenize = attributeWrapper; return null; } function sub(stream, state) { if (stream.match(/^#\{/)) { state.tokenize = rubyInQuote("}", state.tokenize); return null; } var subStream = new CodeMirror.StringStream(stream.string.slice(state.stack.indented), stream.tabSize); subStream.pos = stream.pos - state.stack.indented; subStream.start = stream.start - state.stack.indented; subStream.lastColumnPos = stream.lastColumnPos - state.stack.indented; subStream.lastColumnValue = stream.lastColumnValue - state.stack.indented; var style = state.subMode.token(subStream, state.subState); stream.pos = subStream.pos + state.stack.indented; return style; } function firstSub(stream, state) { state.stack.indented = stream.column(); state.line = state.tokenize = sub; return state.tokenize(stream, state); } function createMode(mode) { var query = embedded[mode]; var spec = CodeMirror.mimeModes[query]; if (spec) { return CodeMirror.getMode(config, spec); } var factory = CodeMirror.modes[query]; if (factory) { return factory(config, {name: query}); } return CodeMirror.getMode(config, "null"); } function getMode(mode) { if (!modes.hasOwnProperty(mode)) { return modes[mode] = createMode(mode); } return modes[mode]; } function startSubMode(mode, state) { var subMode = getMode(mode); var subState = CodeMirror.startState(subMode); state.subMode = subMode; state.subState = subState; state.stack = { parent: state.stack, style: "sub", indented: state.indented + 1, tokenize: state.line }; state.line = state.tokenize = firstSub; return "slimSubmode"; } function doctypeLine(stream, _state) { stream.skipToEnd(); return "slimDoctype"; } function startLine(stream, state) { var ch = stream.peek(); if (ch == '<') { return (state.tokenize = startHtmlLine(state.tokenize))(stream, state); } if (stream.match(/^[|']/)) { return startHtmlMode(stream, state, 1); } if (stream.match(/^\/(!|\[\w+])?/)) { return commentMode(stream, state); } if (stream.match(/^(-|==?[<>]?)/)) { state.tokenize = lineContinuable(stream.column(), commaContinuable(stream.column(), ruby)); return "slimSwitch"; } if (stream.match(/^doctype\b/)) { state.tokenize = doctypeLine; return "keyword"; } var m = stream.match(embeddedRegexp); if (m) { return startSubMode(m[1], state); } return slimTag(stream, state); } function slim(stream, state) { if (state.startOfLine) { return startLine(stream, state); } return slimTag(stream, state); } function slimTag(stream, state) { if (stream.eat('*')) { state.tokenize = startRubySplat(slimTagExtras); return null; } if (stream.match(nameRegexp)) { state.tokenize = slimTagExtras; return "slimTag"; } return slimClass(stream, state); } function slimTagExtras(stream, state) { if (stream.match(/^(<>?|> state.indented && state.last != "slimSubmode") { state.line = state.tokenize = state.stack.tokenize; state.stack = state.stack.parent; state.subMode = null; state.subState = null; } } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); state.startOfLine = false; if (style) state.last = style; return styleMap.hasOwnProperty(style) ? styleMap[style] : style; }, blankLine: function(state) { if (state.subMode && state.subMode.blankLine) { return state.subMode.blankLine(state.subState); } }, innerMode: function(state) { if (state.subMode) return {state: state.subState, mode: state.subMode}; return {state: state, mode: mode}; } //indent: function(state) { // return state.indented; //} }; return mode; }, "htmlmixed", "ruby"); CodeMirror.defineMIME("text/x-slim", "slim"); CodeMirror.defineMIME("application/x-slim", "slim"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode('smalltalk', function(config) { var specialChars = /[+\-\/\\*~<>=@%|&?!.,:;^]/; var keywords = /true|false|nil|self|super|thisContext/; var Context = function(tokenizer, parent) { this.next = tokenizer; this.parent = parent; }; var Token = function(name, context, eos) { this.name = name; this.context = context; this.eos = eos; }; var State = function() { this.context = new Context(next, null); this.expectVariable = true; this.indentation = 0; this.userIndentationDelta = 0; }; State.prototype.userIndent = function(indentation) { this.userIndentationDelta = indentation > 0 ? (indentation / config.indentUnit - this.indentation) : 0; }; var next = function(stream, context, state) { var token = new Token(null, context, false); var aChar = stream.next(); if (aChar === '"') { token = nextComment(stream, new Context(nextComment, context)); } else if (aChar === '\'') { token = nextString(stream, new Context(nextString, context)); } else if (aChar === '#') { if (stream.peek() === '\'') { stream.next(); token = nextSymbol(stream, new Context(nextSymbol, context)); } else { if (stream.eatWhile(/[^\s.{}\[\]()]/)) token.name = 'string-2'; else token.name = 'meta'; } } else if (aChar === '$') { if (stream.next() === '<') { stream.eatWhile(/[^\s>]/); stream.next(); } token.name = 'string-2'; } else if (aChar === '|' && state.expectVariable) { token.context = new Context(nextTemporaries, context); } else if (/[\[\]{}()]/.test(aChar)) { token.name = 'bracket'; token.eos = /[\[{(]/.test(aChar); if (aChar === '[') { state.indentation++; } else if (aChar === ']') { state.indentation = Math.max(0, state.indentation - 1); } } else if (specialChars.test(aChar)) { stream.eatWhile(specialChars); token.name = 'operator'; token.eos = aChar !== ';'; // ; cascaded message expression } else if (/\d/.test(aChar)) { stream.eatWhile(/[\w\d]/); token.name = 'number'; } else if (/[\w_]/.test(aChar)) { stream.eatWhile(/[\w\d_]/); token.name = state.expectVariable ? (keywords.test(stream.current()) ? 'keyword' : 'variable') : null; } else { token.eos = state.expectVariable; } return token; }; var nextComment = function(stream, context) { stream.eatWhile(/[^"]/); return new Token('comment', stream.eat('"') ? context.parent : context, true); }; var nextString = function(stream, context) { stream.eatWhile(/[^']/); return new Token('string', stream.eat('\'') ? context.parent : context, false); }; var nextSymbol = function(stream, context) { stream.eatWhile(/[^']/); return new Token('string-2', stream.eat('\'') ? context.parent : context, false); }; var nextTemporaries = function(stream, context) { var token = new Token(null, context, false); var aChar = stream.next(); if (aChar === '|') { token.context = context.parent; token.eos = true; } else { stream.eatWhile(/[^|]/); token.name = 'variable'; } return token; }; return { startState: function() { return new State; }, token: function(stream, state) { state.userIndent(stream.indentation()); if (stream.eatSpace()) { return null; } var token = state.context.next(stream, state.context, state); state.context = token.context; state.expectVariable = token.eos; return token.name; }, blankLine: function(state) { state.userIndent(0); }, indent: function(state, textAfter) { var i = state.context.next === next && textAfter && textAfter.charAt(0) === ']' ? -1 : state.userIndentationDelta; return (state.indentation + i) * config.indentUnit; }, electricChars: ']' }; }); CodeMirror.defineMIME('text/x-stsrc', {name: 'smalltalk'}); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /** * Smarty 2 and 3 mode. */ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("smarty", function(config, parserConf) { var rightDelimiter = parserConf.rightDelimiter || "}"; var leftDelimiter = parserConf.leftDelimiter || "{"; var version = parserConf.version || 2; var baseMode = CodeMirror.getMode(config, parserConf.baseMode || "null"); var keyFunctions = ["debug", "extends", "function", "include", "literal"]; var regs = { operatorChars: /[+\-*&%=<>!?]/, validIdentifier: /[a-zA-Z0-9_]/, stringChar: /['"]/ }; var last; function cont(style, lastType) { last = lastType; return style; } function chain(stream, state, parser) { state.tokenize = parser; return parser(stream, state); } // Smarty 3 allows { and } surrounded by whitespace to NOT slip into Smarty mode function doesNotCount(stream, pos) { if (pos == null) pos = stream.pos; return version === 3 && leftDelimiter == "{" && (pos == stream.string.length || /\s/.test(stream.string.charAt(pos))); } function tokenTop(stream, state) { var string = stream.string; for (var scan = stream.pos;;) { var nextMatch = string.indexOf(leftDelimiter, scan); scan = nextMatch + leftDelimiter.length; if (nextMatch == -1 || !doesNotCount(stream, nextMatch + leftDelimiter.length)) break; } if (nextMatch == stream.pos) { stream.match(leftDelimiter); if (stream.eat("*")) { return chain(stream, state, tokenBlock("comment", "*" + rightDelimiter)); } else { state.depth++; state.tokenize = tokenSmarty; last = "startTag"; return "tag"; } } if (nextMatch > -1) stream.string = string.slice(0, nextMatch); var token = baseMode.token(stream, state.base); if (nextMatch > -1) stream.string = string; return token; } // parsing Smarty content function tokenSmarty(stream, state) { if (stream.match(rightDelimiter, true)) { if (version === 3) { state.depth--; if (state.depth <= 0) { state.tokenize = tokenTop; } } else { state.tokenize = tokenTop; } return cont("tag", null); } if (stream.match(leftDelimiter, true)) { state.depth++; return cont("tag", "startTag"); } var ch = stream.next(); if (ch == "$") { stream.eatWhile(regs.validIdentifier); return cont("variable-2", "variable"); } else if (ch == "|") { return cont("operator", "pipe"); } else if (ch == ".") { return cont("operator", "property"); } else if (regs.stringChar.test(ch)) { state.tokenize = tokenAttribute(ch); return cont("string", "string"); } else if (regs.operatorChars.test(ch)) { stream.eatWhile(regs.operatorChars); return cont("operator", "operator"); } else if (ch == "[" || ch == "]") { return cont("bracket", "bracket"); } else if (ch == "(" || ch == ")") { return cont("bracket", "operator"); } else if (/\d/.test(ch)) { stream.eatWhile(/\d/); return cont("number", "number"); } else { if (state.last == "variable") { if (ch == "@") { stream.eatWhile(regs.validIdentifier); return cont("property", "property"); } else if (ch == "|") { stream.eatWhile(regs.validIdentifier); return cont("qualifier", "modifier"); } } else if (state.last == "pipe") { stream.eatWhile(regs.validIdentifier); return cont("qualifier", "modifier"); } else if (state.last == "whitespace") { stream.eatWhile(regs.validIdentifier); return cont("attribute", "modifier"); } if (state.last == "property") { stream.eatWhile(regs.validIdentifier); return cont("property", null); } else if (/\s/.test(ch)) { last = "whitespace"; return null; } var str = ""; if (ch != "/") { str += ch; } var c = null; while (c = stream.eat(regs.validIdentifier)) { str += c; } for (var i=0, j=keyFunctions.length; i]=?)/)) { // Tokenize filter, binary, null propagator, and equality operators. return "operator"; } else if (match = stream.match(/^\$([\w]+)/)) { return ref(state.variables, match[1], !state.lookupVariables); } else if (match = stream.match(/^\w+/)) { return /^(?:as|and|or|not|in|if)$/.test(match[0]) ? "keyword" : null; } stream.next(); return null; } return { startState: function() { return { soyState: [], variables: prepend(null, 'ij'), scopes: null, indent: 0, quoteKind: null, context: null, lookupVariables: true, // Is unknown variables considered an error localStates: [{ mode: modes.html, state: CodeMirror.startState(modes.html) }] }; }, copyState: function(state) { return { tag: state.tag, // Last seen Soy tag. soyState: state.soyState.concat([]), variables: state.variables, context: state.context, indent: state.indent, // Indentation of the following line. quoteKind: state.quoteKind, lookupVariables: state.lookupVariables, localStates: state.localStates.map(function(localState) { return { mode: localState.mode, state: CodeMirror.copyState(localState.mode, localState.state) }; }) }; }, token: function(stream, state) { var match; switch (last(state.soyState)) { case "comment": if (stream.match(/^.*?\*\//)) { state.soyState.pop(); } else { stream.skipToEnd(); } if (!state.context || !state.context.scope) { var paramRe = /@param\??\s+(\S+)/g; var current = stream.current(); for (var match; (match = paramRe.exec(current)); ) { state.variables = prepend(state.variables, match[1]); } } return "comment"; case "string": var match = stream.match(/^.*?(["']|\\[\s\S])/); if (!match) { stream.skipToEnd(); } else if (match[1] == state.quoteKind) { state.quoteKind = null; state.soyState.pop(); } return "string"; } if (!state.soyState.length || last(state.soyState) != "literal") { if (stream.match(/^\/\*/)) { state.soyState.push("comment"); return "comment"; } else if (stream.match(stream.sol() ? /^\s*\/\/.*/ : /^\s+\/\/.*/)) { return "comment"; } } switch (last(state.soyState)) { case "templ-def": if (match = stream.match(/^\.?([\w]+(?!\.[\w]+)*)/)) { state.soyState.pop(); return "def"; } stream.next(); return null; case "templ-ref": if (match = stream.match(/(\.?[a-zA-Z_][a-zA-Z_0-9]+)+/)) { state.soyState.pop(); // If the first character is '.', it can only be a local template. if (match[0][0] == '.') { return "variable-2" } // Otherwise return "variable"; } if (match = stream.match(/^\$([\w]+)/)) { state.soyState.pop(); return ref(state.variables, match[1], !state.lookupVariables); } stream.next(); return null; case "namespace-def": if (match = stream.match(/^\.?([\w\.]+)/)) { state.soyState.pop(); return "variable"; } stream.next(); return null; case "param-def": if (match = stream.match(/^\w+/)) { state.variables = prepend(state.variables, match[0]); state.soyState.pop(); state.soyState.push("param-type"); return "def"; } stream.next(); return null; case "param-ref": if (match = stream.match(/^\w+/)) { state.soyState.pop(); return "property"; } stream.next(); return null; case "open-parentheses": if (stream.match(/[)]/)) { state.soyState.pop(); return null; } return expression(stream, state); case "param-type": var peekChar = stream.peek(); if ("}]=>,".indexOf(peekChar) != -1) { state.soyState.pop(); return null; } else if (peekChar == "[") { state.soyState.push('param-type-record'); return null; } else if (peekChar == "(") { state.soyState.push('param-type-template'); return null; } else if (peekChar == "<") { state.soyState.push('param-type-parameter'); return null; } else if (match = stream.match(/^([\w]+|[?])/)) { return "type"; } stream.next(); return null; case "param-type-record": var peekChar = stream.peek(); if (peekChar == "]") { state.soyState.pop(); return null; } if (stream.match(/^\w+/)) { state.soyState.push('param-type'); return "property"; } stream.next(); return null; case "param-type-parameter": if (stream.match(/^[>]/)) { state.soyState.pop(); return null; } if (stream.match(/^[<,]/)) { state.soyState.push('param-type'); return null; } stream.next(); return null; case "param-type-template": if (stream.match(/[>]/)) { state.soyState.pop(); state.soyState.push('param-type'); return null; } if (stream.match(/^\w+/)) { state.soyState.push('param-type'); return "def"; } stream.next(); return null; case "var-def": if (match = stream.match(/^\$([\w]+)/)) { state.variables = prepend(state.variables, match[1]); state.soyState.pop(); return "def"; } stream.next(); return null; case "for-loop": if (stream.match(/\bin\b/)) { state.soyState.pop(); return "keyword"; } if (stream.peek() == "$") { state.soyState.push('var-def'); return null; } stream.next(); return null; case "record-literal": if (stream.match(/^[)]/)) { state.soyState.pop(); return null; } if (stream.match(/[(,]/)) { state.soyState.push("map-value"); state.soyState.push("record-key"); return null; } stream.next(); return null; case "map-literal": if (stream.match(/^[)]/)) { state.soyState.pop(); return null; } if (stream.match(/[(,]/)) { state.soyState.push("map-value"); state.soyState.push("map-value"); return null; } stream.next(); return null; case "list-literal": if (stream.match(/\]/)) { state.soyState.pop(); state.lookupVariables = true; popcontext(state); return null; } if (stream.match(/\bfor\b/)) { state.lookupVariables = true; state.soyState.push('for-loop'); return "keyword"; } return expression(stream, state); case "record-key": if (stream.match(/[\w]+/)) { return "property"; } if (stream.match(/^[:]/)) { state.soyState.pop(); return null; } stream.next(); return null; case "map-value": if (stream.peek() == ")" || stream.peek() == "," || stream.match(/^[:)]/)) { state.soyState.pop(); return null; } return expression(stream, state); case "import": if (stream.eat(";")) { state.soyState.pop(); state.indent -= 2 * config.indentUnit; return null; } if (stream.match(/\w+(?=\s+as)/)) { return "variable"; } if (match = stream.match(/\w+/)) { return /(from|as)/.test(match[0]) ? "keyword" : "def"; } if (match = stream.match(/^["']/)) { state.soyState.push("string"); state.quoteKind = match[0]; return "string"; } stream.next(); return null; case "tag": var endTag = state.tag[0] == "/"; var tagName = endTag ? state.tag.substring(1) : state.tag; var tag = tags[tagName]; if (stream.match(/^\/?}/)) { var selfClosed = stream.current() == "/}"; if (selfClosed && !endTag) { popcontext(state); } if (state.tag == "/template" || state.tag == "/deltemplate") { state.variables = prepend(null, 'ij'); state.indent = 0; } else { state.indent -= config.indentUnit * (selfClosed || indentingTags.indexOf(state.tag) == -1 ? 2 : 1); } state.soyState.pop(); return "keyword"; } else if (stream.match(/^([\w?]+)(?==)/)) { if (state.context && state.context.tag == tagName && stream.current() == "kind" && (match = stream.match(/^="([^"]+)/, false))) { var kind = match[1]; state.context.kind = kind; var mode = modes[kind] || modes.html; var localState = last(state.localStates); if (localState.mode.indent) { state.indent += localState.mode.indent(localState.state, "", ""); } state.localStates.push({ mode: mode, state: CodeMirror.startState(mode) }); } return "attribute"; } return expression(stream, state); case "literal": if (stream.match(/^(?=\{\/literal})/)) { state.soyState.pop(); return this.token(stream, state); } return tokenUntil(stream, state, /\{\/literal}/); } if (stream.match(/^\{literal}/)) { state.indent += config.indentUnit; state.soyState.push("literal"); state.context = new Context(state.context, "literal", state.variables); return "keyword"; // A tag-keyword must be followed by whitespace, comment or a closing tag. } else if (match = stream.match(/^\{([/@\\]?\w+\??)(?=$|[\s}]|\/[/*])/)) { var prevTag = state.tag; state.tag = match[1]; var endTag = state.tag[0] == "/"; var indentingTag = !!tags[state.tag]; var tagName = endTag ? state.tag.substring(1) : state.tag; var tag = tags[tagName]; if (state.tag != "/switch") state.indent += ((endTag || tag && tag.reduceIndent) && prevTag != "switch" ? 1 : 2) * config.indentUnit; state.soyState.push("tag"); var tagError = false; if (tag) { if (!endTag) { if (tag.soyState) state.soyState.push(tag.soyState); } // If a new tag, open a new context. if (!tag.noEndTag && (indentingTag || !endTag)) { state.context = new Context(state.context, state.tag, tag.variableScope ? state.variables : null); // Otherwise close the current context. } else if (endTag) { if (!state.context || state.context.tag != tagName) { tagError = true; } else if (state.context) { if (state.context.kind) { state.localStates.pop(); var localState = last(state.localStates); if (localState.mode.indent) { state.indent -= localState.mode.indent(localState.state, "", ""); } } popcontext(state); } } } else if (endTag) { // Assume all tags with a closing tag are defined in the config. tagError = true; } return (tagError ? "error " : "") + "keyword"; // Not a tag-keyword; it's an implicit print tag. } else if (stream.eat('{')) { state.tag = "print"; state.indent += 2 * config.indentUnit; state.soyState.push("tag"); return "keyword"; } else if (!state.context && stream.match(/\bimport\b/)) { state.soyState.push("import"); state.indent += 2 * config.indentUnit; return "keyword"; } return tokenUntil(stream, state, /\{|\s+\/\/|\/\*/); }, indent: function(state, textAfter, line) { var indent = state.indent, top = last(state.soyState); if (top == "comment") return CodeMirror.Pass; if (top == "literal") { if (/^\{\/literal}/.test(textAfter)) indent -= config.indentUnit; } else { if (/^\s*\{\/(template|deltemplate)\b/.test(textAfter)) return 0; if (/^\{(\/|(fallbackmsg|elseif|else|ifempty)\b)/.test(textAfter)) indent -= config.indentUnit; if (state.tag != "switch" && /^\{(case|default)\b/.test(textAfter)) indent -= config.indentUnit; if (/^\{\/switch\b/.test(textAfter)) indent -= config.indentUnit; } var localState = last(state.localStates); if (indent && localState.mode.indent) { indent += localState.mode.indent(localState.state, textAfter, line); } return indent; }, innerMode: function(state) { if (state.soyState.length && last(state.soyState) != "literal") return null; else return last(state.localStates); }, electricInput: /^\s*\{(\/|\/template|\/deltemplate|\/switch|fallbackmsg|elseif|else|case|default|ifempty|\/literal\})$/, lineComment: "//", blockCommentStart: "/*", blockCommentEnd: "*/", blockCommentContinue: " * ", useInnerComments: false, fold: "indent" }; }, "htmlmixed"); CodeMirror.registerHelper("wordChars", "soy", /[\w$]/); CodeMirror.registerHelper("hintWords", "soy", Object.keys(tags).concat( ["css", "debugger"])); CodeMirror.defineMIME("text/x-soy", "soy"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("sparql", function(config) { var indentUnit = config.indentUnit; var curPunc; function wordRegexp(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); } var ops = wordRegexp(["str", "lang", "langmatches", "datatype", "bound", "sameterm", "isiri", "isuri", "iri", "uri", "bnode", "count", "sum", "min", "max", "avg", "sample", "group_concat", "rand", "abs", "ceil", "floor", "round", "concat", "substr", "strlen", "replace", "ucase", "lcase", "encode_for_uri", "contains", "strstarts", "strends", "strbefore", "strafter", "year", "month", "day", "hours", "minutes", "seconds", "timezone", "tz", "now", "uuid", "struuid", "md5", "sha1", "sha256", "sha384", "sha512", "coalesce", "if", "strlang", "strdt", "isnumeric", "regex", "exists", "isblank", "isliteral", "a", "bind"]); var keywords = wordRegexp(["base", "prefix", "select", "distinct", "reduced", "construct", "describe", "ask", "from", "named", "where", "order", "limit", "offset", "filter", "optional", "graph", "by", "asc", "desc", "as", "having", "undef", "values", "group", "minus", "in", "not", "service", "silent", "using", "insert", "delete", "union", "true", "false", "with", "data", "copy", "to", "move", "add", "create", "drop", "clear", "load"]); var operatorChars = /[*+\-<>=&|\^\/!\?]/; function tokenBase(stream, state) { var ch = stream.next(); curPunc = null; if (ch == "$" || ch == "?") { if(ch == "?" && stream.match(/\s/, false)){ return "operator"; } stream.match(/^[A-Za-z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][A-Za-z0-9_\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]*/); return "variable-2"; } else if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { stream.match(/^[^\s\u00a0>]*>?/); return "atom"; } else if (ch == "\"" || ch == "'") { state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if (/[{}\(\),\.;\[\]]/.test(ch)) { curPunc = ch; return "bracket"; } else if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (ch === "^") { ch = stream.peek(); if (ch === "^") stream.eat("^"); else stream.eatWhile(operatorChars); return "operator"; } else if (operatorChars.test(ch)) { stream.eatWhile(operatorChars); return "operator"; } else if (ch == ":") { eatPnLocal(stream); return "atom"; } else if (ch == "@") { stream.eatWhile(/[a-z\d\-]/i); return "meta"; } else { stream.eatWhile(/[_\w\d]/); if (stream.eat(":")) { eatPnLocal(stream); return "atom"; } var word = stream.current(); if (ops.test(word)) return "builtin"; else if (keywords.test(word)) return "keyword"; else return "variable"; } } function eatPnLocal(stream) { while (stream.match(/([:\w\d._-]|\\[-\\_~.!$&'()*+,;=/?#@%]|%[a-fA-F0-9][a-fA-F0-9])/)); } function tokenLiteral(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return "string"; }; } function pushContext(state, type, col) { state.context = {prev: state.context, indent: state.indent, col: col, type: type}; } function popContext(state) { state.indent = state.context.indent; state.context = state.context.prev; } return { startState: function() { return {tokenize: tokenBase, context: null, indent: 0, col: 0}; }, token: function(stream, state) { if (stream.sol()) { if (state.context && state.context.align == null) state.context.align = false; state.indent = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { state.context.align = true; } if (curPunc == "(") pushContext(state, ")", stream.column()); else if (curPunc == "[") pushContext(state, "]", stream.column()); else if (curPunc == "{") pushContext(state, "}", stream.column()); else if (/[\]\}\)]/.test(curPunc)) { while (state.context && state.context.type == "pattern") popContext(state); if (state.context && curPunc == state.context.type) { popContext(state); if (curPunc == "}" && state.context && state.context.type == "pattern") popContext(state); } } else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); else if (/atom|string|variable/.test(style) && state.context) { if (/[\}\]]/.test(state.context.type)) pushContext(state, "pattern", stream.column()); else if (state.context.type == "pattern" && !state.context.align) { state.context.align = true; state.context.col = stream.column(); } } return style; }, indent: function(state, textAfter) { var firstChar = textAfter && textAfter.charAt(0); var context = state.context; if (/[\]\}]/.test(firstChar)) while (context && context.type == "pattern") context = context.prev; var closing = context && firstChar == context.type; if (!context) return 0; else if (context.type == "pattern") return context.col; else if (context.align) return context.col + (closing ? 0 : 1); else return context.indent + (closing ? 0 : indentUnit); }, lineComment: "#" }; }); CodeMirror.defineMIME("application/sparql-query", "sparql"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("spreadsheet", function () { return { startState: function () { return { stringType: null, stack: [] }; }, token: function (stream, state) { if (!stream) return; //check for state changes if (state.stack.length === 0) { //strings if ((stream.peek() == '"') || (stream.peek() == "'")) { state.stringType = stream.peek(); stream.next(); // Skip quote state.stack.unshift("string"); } } //return state //stack has switch (state.stack[0]) { case "string": while (state.stack[0] === "string" && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.stack.shift(); // Clear flag } else if (stream.peek() === "\\") { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return "string"; case "characterClass": while (state.stack[0] === "characterClass" && !stream.eol()) { if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) state.stack.shift(); } return "operator"; } var peek = stream.peek(); //no stack switch (peek) { case "[": stream.next(); state.stack.unshift("characterClass"); return "bracket"; case ":": stream.next(); return "operator"; case "\\": if (stream.match(/\\[a-z]+/)) return "string-2"; else { stream.next(); return "atom"; } case ".": case ",": case ";": case "*": case "-": case "+": case "^": case "<": case "/": case "=": stream.next(); return "atom"; case "$": stream.next(); return "builtin"; } if (stream.match(/\d+/)) { if (stream.match(/^\w+/)) return "error"; return "number"; } else if (stream.match(/^[a-zA-Z_]\w*/)) { if (stream.match(/(?=[\(.])/, false)) return "keyword"; return "variable-2"; } else if (["[", "]", "(", ")", "{", "}"].indexOf(peek) != -1) { stream.next(); return "bracket"; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }); CodeMirror.defineMIME("text/x-spreadsheet", "spreadsheet"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("sql", function(config, parserConfig) { var client = parserConfig.client || {}, atoms = parserConfig.atoms || {"false": true, "true": true, "null": true}, builtin = parserConfig.builtin || set(defaultBuiltin), keywords = parserConfig.keywords || set(sqlKeywords), operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^\/]/, support = parserConfig.support || {}, hooks = parserConfig.hooks || {}, dateSQL = parserConfig.dateSQL || {"date" : true, "time" : true, "timestamp" : true}, backslashStringEscapes = parserConfig.backslashStringEscapes !== false, brackets = parserConfig.brackets || /^[\{}\(\)\[\]]/, punctuation = parserConfig.punctuation || /^[;.,:]/; function tokenBase(stream, state) { var ch = stream.next(); // call hooks from the mime type if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (support.hexNumber && ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || (ch == "x" || ch == "X") && stream.match(/^'[0-9a-fA-F]+'/))) { // hex // ref: http://dev.mysql.com/doc/refman/5.5/en/hexadecimal-literals.html return "number"; } else if (support.binaryNumber && (((ch == "b" || ch == "B") && stream.match(/^'[01]+'/)) || (ch == "0" && stream.match(/^b[01]+/)))) { // bitstring // ref: http://dev.mysql.com/doc/refman/5.5/en/bit-field-literals.html return "number"; } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { // numbers // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html stream.match(/^[0-9]*(\.[0-9]+)?([eE][-+]?[0-9]+)?/); support.decimallessFloat && stream.match(/^\.(?!\.)/); return "number"; } else if (ch == "?" && (stream.eatSpace() || stream.eol() || stream.eat(";"))) { // placeholders return "variable-3"; } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { // strings // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if ((((support.nCharCast && (ch == "n" || ch == "N")) || (support.charsetCast && ch == "_" && stream.match(/[a-z][a-z0-9]*/i))) && (stream.peek() == "'" || stream.peek() == '"'))) { // charset casting: _utf8'str', N'str', n'str' // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html return "keyword"; } else if (support.escapeConstant && (ch == "e" || ch == "E") && (stream.peek() == "'" || (stream.peek() == '"' && support.doubleQuote))) { // escape constant: E'str', e'str' // ref: https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-ESCAPE state.tokenize = function(stream, state) { return (state.tokenize = tokenLiteral(stream.next(), true))(stream, state); }; return "keyword"; } else if (support.commentSlashSlash && ch == "/" && stream.eat("/")) { // 1-line comment stream.skipToEnd(); return "comment"; } else if ((support.commentHash && ch == "#") || (ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) { // 1-line comments // ref: https://kb.askmonty.org/en/comment-syntax/ stream.skipToEnd(); return "comment"; } else if (ch == "/" && stream.eat("*")) { // multi-line comments // ref: https://kb.askmonty.org/en/comment-syntax/ state.tokenize = tokenComment(1); return state.tokenize(stream, state); } else if (ch == ".") { // .1 for 0.1 if (support.zerolessFloat && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i)) return "number"; if (stream.match(/^\.+/)) return null // .table_name (ODBC) // // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html if (support.ODBCdotTable && stream.match(/^[\w\d_$#]+/)) return "variable-2"; } else if (operatorChars.test(ch)) { // operators stream.eatWhile(operatorChars); return "operator"; } else if (brackets.test(ch)) { // brackets return "bracket"; } else if (punctuation.test(ch)) { // punctuation stream.eatWhile(punctuation); return "punctuation"; } else if (ch == '{' && (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/))) { // dates (weird ODBC syntax) // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html return "number"; } else { stream.eatWhile(/^[_\w\d]/); var word = stream.current().toLowerCase(); // dates (standard SQL syntax) // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) return "number"; if (atoms.hasOwnProperty(word)) return "atom"; if (builtin.hasOwnProperty(word)) return "builtin"; if (keywords.hasOwnProperty(word)) return "keyword"; if (client.hasOwnProperty(word)) return "string-2"; return null; } } // 'string', with char specified in quote escaped by '\' function tokenLiteral(quote, backslashEscapes) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = (backslashStringEscapes || backslashEscapes) && !escaped && ch == "\\"; } return "string"; }; } function tokenComment(depth) { return function(stream, state) { var m = stream.match(/^.*?(\/\*|\*\/)/); if (!m) stream.skipToEnd(); else if (m[1] == "/*") state.tokenize = tokenComment(depth + 1); else if (depth > 1) state.tokenize = tokenComment(depth - 1); else state.tokenize = tokenBase; return "comment" } } function pushContext(stream, state, type) { state.context = { prev: state.context, indent: stream.indentation(), col: stream.column(), type: type }; } function popContext(state) { state.indent = state.context.indent; state.context = state.context.prev; } return { startState: function() { return {tokenize: tokenBase, context: null}; }, token: function(stream, state) { if (stream.sol()) { if (state.context && state.context.align == null) state.context.align = false; } if (state.tokenize == tokenBase && stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style == "comment") return style; if (state.context && state.context.align == null) state.context.align = true; var tok = stream.current(); if (tok == "(") pushContext(stream, state, ")"); else if (tok == "[") pushContext(stream, state, "]"); else if (state.context && state.context.type == tok) popContext(state); return style; }, indent: function(state, textAfter) { var cx = state.context; if (!cx) return CodeMirror.Pass; var closing = textAfter.charAt(0) == cx.type; if (cx.align) return cx.col + (closing ? 0 : 1); else return cx.indent + (closing ? 0 : config.indentUnit); }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: support.commentSlashSlash ? "//" : support.commentHash ? "#" : "--", closeBrackets: "()[]{}''\"\"``" }; }); // `identifier` function hookIdentifier(stream) { // MySQL/MariaDB identifiers // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html var ch; while ((ch = stream.next()) != null) { if (ch == "`" && !stream.eat("`")) return "variable-2"; } stream.backUp(stream.current().length - 1); return stream.eatWhile(/\w/) ? "variable-2" : null; } // "identifier" function hookIdentifierDoublequote(stream) { // Standard SQL /SQLite identifiers // ref: http://web.archive.org/web/20160813185132/http://savage.net.au/SQL/sql-99.bnf.html#delimited%20identifier // ref: http://sqlite.org/lang_keywords.html var ch; while ((ch = stream.next()) != null) { if (ch == "\"" && !stream.eat("\"")) return "variable-2"; } stream.backUp(stream.current().length - 1); return stream.eatWhile(/\w/) ? "variable-2" : null; } // variable token function hookVar(stream) { // variables // @@prefix.varName @varName // varName can be quoted with ` or ' or " // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html if (stream.eat("@")) { stream.match(/^session\./); stream.match(/^local\./); stream.match(/^global\./); } if (stream.eat("'")) { stream.match(/^.*'/); return "variable-2"; } else if (stream.eat('"')) { stream.match(/^.*"/); return "variable-2"; } else if (stream.eat("`")) { stream.match(/^.*`/); return "variable-2"; } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) { return "variable-2"; } return null; } // short client keyword token function hookClient(stream) { // \N means NULL // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html if (stream.eat("N")) { return "atom"; } // \g, etc // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; } // these keywords are used by all SQL dialects (however, a mode can still overwrite it) var sqlKeywords = "alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit "; // turn a space-separated list into an array function set(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var defaultBuiltin = "bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric"; // A generic SQL Mode. It's not a standard, it just try to support what is generally supported CodeMirror.defineMIME("text/x-sql", { name: "sql", keywords: set(sqlKeywords + "begin"), builtin: set(defaultBuiltin), atoms: set("false true null unknown"), dateSQL: set("date time timestamp"), support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") }); CodeMirror.defineMIME("text/x-mssql", { name: "sql", client: set("$partition binary_checksum checksum connectionproperty context_info current_request_id error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big xact_state object_id"), keywords: set(sqlKeywords + "begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec go if use index holdlock nolock nowait paglock readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot tablock tablockx updlock with"), builtin: set("bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table "), atoms: set("is not null like and or in left right between inner outer join all any some cross unpivot pivot exists"), operatorChars: /^[*+\-%<>!=^\&|\/]/, brackets: /^[\{}\(\)]/, punctuation: /^[;.,:/]/, backslashStringEscapes: false, dateSQL: set("date datetimeoffset datetime2 smalldatetime datetime time"), hooks: { "@": hookVar } }); CodeMirror.defineMIME("text/x-mysql", { name: "sql", client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), keywords: set(sqlKeywords + "accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=&|^]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), hooks: { "@": hookVar, "`": hookIdentifier, "\\": hookClient } }); CodeMirror.defineMIME("text/x-mariadb", { name: "sql", client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), keywords: set(sqlKeywords + "accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group groupby_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=&|^]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), hooks: { "@": hookVar, "`": hookIdentifier, "\\": hookClient } }); // provided by the phpLiteAdmin project - phpliteadmin.org CodeMirror.defineMIME("text/x-sqlite", { name: "sql", // commands of the official SQLite client, ref: https://www.sqlite.org/cli.html#dotcmd client: set("auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width"), // ref: http://sqlite.org/lang_keywords.html keywords: set(sqlKeywords + "abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without"), // SQLite is weakly typed, ref: http://sqlite.org/datatype3.html. This is just a list of some common types. builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real"), // ref: http://sqlite.org/syntax/literal-value.html atoms: set("null current_date current_time current_timestamp"), // ref: http://sqlite.org/lang_expr.html#binaryops operatorChars: /^[*+\-%<>!=&|/~]/, // SQLite is weakly typed, ref: http://sqlite.org/datatype3.html. This is just a list of some common types. dateSQL: set("date time timestamp datetime"), support: set("decimallessFloat zerolessFloat"), identifierQuote: "\"", //ref: http://sqlite.org/lang_keywords.html hooks: { // bind-parameters ref:http://sqlite.org/lang_expr.html#varparam "@": hookVar, ":": hookVar, "?": hookVar, "$": hookVar, // The preferred way to escape Identifiers is using double quotes, ref: http://sqlite.org/lang_keywords.html "\"": hookIdentifierDoublequote, // there is also support for backtics, ref: http://sqlite.org/lang_keywords.html "`": hookIdentifier } }); // the query language used by Apache Cassandra is called CQL, but this mime type // is called Cassandra to avoid confusion with Contextual Query Language CodeMirror.defineMIME("text/x-cassandra", { name: "sql", client: { }, keywords: set("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"), builtin: set("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"), atoms: set("false true infinity NaN"), operatorChars: /^[<>=]/, dateSQL: { }, support: set("commentSlashSlash decimallessFloat"), hooks: { } }); // this is based on Peter Raganitsch's 'plsql' mode CodeMirror.defineMIME("text/x-plsql", { name: "sql", client: set("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"), keywords: set("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"), builtin: set("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"), operatorChars: /^[*\/+\-%<>!=~]/, dateSQL: set("date time timestamp"), support: set("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber") }); // Created to support specific hive keywords CodeMirror.defineMIME("text/x-hive", { name: "sql", keywords: set("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year"), builtin: set("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=]/, dateSQL: set("date timestamp"), support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") }); CodeMirror.defineMIME("text/x-pgsql", { name: "sql", client: set("source"), // For PostgreSQL - https://www.postgresql.org/docs/11/sql-keywords-appendix.html // For pl/pgsql lang - https://github.com/postgres/postgres/blob/REL_11_2/src/pl/plpgsql/src/pl_scanner.c keywords: set(sqlKeywords + "a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone"), // https://www.postgresql.org/docs/11/datatype.html builtin: set("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"), atoms: set("false true null unknown"), operatorChars: /^[*\/+\-%<>!=&|^\/#@?~]/, backslashStringEscapes: false, dateSQL: set("date time timestamp"), support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant") }); // Google's SQL-like query language, GQL CodeMirror.defineMIME("text/x-gql", { name: "sql", keywords: set("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"), atoms: set("false true"), builtin: set("blob datetime first key __key__ string integer double boolean null"), operatorChars: /^[*+\-%<>!=]/ }); // Greenplum CodeMirror.defineMIME("text/x-gpsql", { name: "sql", client: set("source"), //https://github.com/greenplum-db/gpdb/blob/master/src/include/parser/kwlist.h keywords: set("abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone"), builtin: set("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=&|^\/#@?~]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast") }); // Spark SQL CodeMirror.defineMIME("text/x-sparksql", { name: "sql", keywords: set("add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases datata dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with"), builtin: set("tinyint smallint int bigint boolean float double string binary timestamp decimal array map struct uniontype delimited serde sequencefile textfile rcfile inputformat outputformat"), atoms: set("false true null"), operatorChars: /^[*\/+\-%<>!=~&|^]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable doubleQuote zerolessFloat") }); // Esper CodeMirror.defineMIME("text/x-esper", { name: "sql", client: set("source"), // http://www.espertech.com/esper/release-5.5.0/esper-reference/html/appendix_keywords.html keywords: set("alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window"), builtin: {}, atoms: set("false true null"), operatorChars: /^[*+\-%<>!=&|^\/#@?~]/, dateSQL: set("time"), support: set("decimallessFloat zerolessFloat binaryNumber hexNumber") }); }); /* How Properties of Mime Types are used by SQL Mode ================================================= keywords: A list of keywords you want to be highlighted. builtin: A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword"). operatorChars: All characters that must be handled as operators. client: Commands parsed and executed by the client (not the server). support: A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. * ODBCdotTable: .tableName * zerolessFloat: .1 * doubleQuote * nCharCast: N'string' * charsetCast: _utf8'string' * commentHash: use # char for comments * commentSlashSlash: use // for comments * commentSpaceRequired: require a space after -- for comments atoms: Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others: UNKNOWN, INFINITY, UNDERFLOW, NaN... dateSQL: Used for date/time SQL standard syntax, because not all DBMS's support same temporal types. */ }); var stylus = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Stylus mode created by Dmitry Kiselyov http://git.io/AaRB (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("stylus", function(config) { var indentUnit = config.indentUnit, indentUnitString = '', tagKeywords = keySet(tagKeywords_), tagVariablesRegexp = /^(a|b|i|s|col|em)$/i, propertyKeywords = keySet(propertyKeywords_), nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_), valueKeywords = keySet(valueKeywords_), colorKeywords = keySet(colorKeywords_), documentTypes = keySet(documentTypes_), documentTypesRegexp = wordRegexp(documentTypes_), mediaFeatures = keySet(mediaFeatures_), mediaTypes = keySet(mediaTypes_), fontProperties = keySet(fontProperties_), operatorsRegexp = /^\s*([.]{2,3}|&&|\|\||\*\*|[?!=:]?=|[-+*\/%<>]=?|\?:|\~)/, wordOperatorKeywordsRegexp = wordRegexp(wordOperatorKeywords_), blockKeywords = keySet(blockKeywords_), vendorPrefixesRegexp = new RegExp(/^\-(moz|ms|o|webkit)-/i), commonAtoms = keySet(commonAtoms_), firstWordMatch = "", states = {}, ch, style, type, override; while (indentUnitString.length < indentUnit) indentUnitString += ' '; /** * Tokenizers */ function tokenBase(stream, state) { firstWordMatch = stream.string.match(/(^[\w-]+\s*=\s*$)|(^\s*[\w-]+\s*=\s*[\w-])|(^\s*(\.|#|@|\$|\&|\[|\d|\+|::?|\{|\>|~|\/)?\s*[\w-]*([a-z0-9-]|\*|\/\*)(\(|,)?)/); state.context.line.firstWord = firstWordMatch ? firstWordMatch[0].replace(/^\s*/, "") : ""; state.context.line.indent = stream.indentation(); ch = stream.peek(); // Line comment if (stream.match("//")) { stream.skipToEnd(); return ["comment", "comment"]; } // Block comment if (stream.match("/*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } // String if (ch == "\"" || ch == "'") { stream.next(); state.tokenize = tokenString(ch); return state.tokenize(stream, state); } // Def if (ch == "@") { stream.next(); stream.eatWhile(/[\w\\-]/); return ["def", stream.current()]; } // ID selector or Hex color if (ch == "#") { stream.next(); // Hex color if (stream.match(/^[0-9a-f]{3}([0-9a-f]([0-9a-f]{2}){0,2})?\b(?!-)/i)) { return ["atom", "atom"]; } // ID selector if (stream.match(/^[a-z][\w-]*/i)) { return ["builtin", "hash"]; } } // Vendor prefixes if (stream.match(vendorPrefixesRegexp)) { return ["meta", "vendor-prefixes"]; } // Numbers if (stream.match(/^-?[0-9]?\.?[0-9]/)) { stream.eatWhile(/[a-z%]/i); return ["number", "unit"]; } // !important|optional if (ch == "!") { stream.next(); return [stream.match(/^(important|optional)/i) ? "keyword": "operator", "important"]; } // Class if (ch == "." && stream.match(/^\.[a-z][\w-]*/i)) { return ["qualifier", "qualifier"]; } // url url-prefix domain regexp if (stream.match(documentTypesRegexp)) { if (stream.peek() == "(") state.tokenize = tokenParenthesized; return ["property", "word"]; } // Mixins / Functions if (stream.match(/^[a-z][\w-]*\(/i)) { stream.backUp(1); return ["keyword", "mixin"]; } // Block mixins if (stream.match(/^(\+|-)[a-z][\w-]*\(/i)) { stream.backUp(1); return ["keyword", "block-mixin"]; } // Parent Reference BEM naming if (stream.string.match(/^\s*&/) && stream.match(/^[-_]+[a-z][\w-]*/)) { return ["qualifier", "qualifier"]; } // / Root Reference & Parent Reference if (stream.match(/^(\/|&)(-|_|:|\.|#|[a-z])/)) { stream.backUp(1); return ["variable-3", "reference"]; } if (stream.match(/^&{1}\s*$/)) { return ["variable-3", "reference"]; } // Word operator if (stream.match(wordOperatorKeywordsRegexp)) { return ["operator", "operator"]; } // Word if (stream.match(/^\$?[-_]*[a-z0-9]+[\w-]*/i)) { // Variable if (stream.match(/^(\.|\[)[\w-\'\"\]]+/i, false)) { if (!wordIsTag(stream.current())) { stream.match(/\./); return ["variable-2", "variable-name"]; } } return ["variable-2", "word"]; } // Operators if (stream.match(operatorsRegexp)) { return ["operator", stream.current()]; } // Delimiters if (/[:;,{}\[\]\(\)]/.test(ch)) { stream.next(); return [null, ch]; } // Non-detected items stream.next(); return [null, null]; } /** * Token comment */ function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return ["comment", "comment"]; } /** * Token string */ function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { if (quote == ")") stream.backUp(1); break; } escaped = !escaped && ch == "\\"; } if (ch == quote || !escaped && quote != ")") state.tokenize = null; return ["string", "string"]; }; } /** * Token parenthesized */ function tokenParenthesized(stream, state) { stream.next(); // Must be "(" if (!stream.match(/\s*[\"\')]/, false)) state.tokenize = tokenString(")"); else state.tokenize = null; return [null, "("]; } /** * Context management */ function Context(type, indent, prev, line) { this.type = type; this.indent = indent; this.prev = prev; this.line = line || {firstWord: "", indent: 0}; } function pushContext(state, stream, type, indent) { indent = indent >= 0 ? indent : indentUnit; state.context = new Context(type, stream.indentation() + indent, state.context); return type; } function popContext(state, currentIndent) { var contextIndent = state.context.indent - indentUnit; currentIndent = currentIndent || false; state.context = state.context.prev; if (currentIndent) state.context.indent = contextIndent; return state.context.type; } function pass(type, stream, state) { return states[state.context.type](type, stream, state); } function popAndPass(type, stream, state, n) { for (var i = n || 1; i > 0; i--) state.context = state.context.prev; return pass(type, stream, state); } /** * Parser */ function wordIsTag(word) { return word.toLowerCase() in tagKeywords; } function wordIsProperty(word) { word = word.toLowerCase(); return word in propertyKeywords || word in fontProperties; } function wordIsBlock(word) { return word.toLowerCase() in blockKeywords; } function wordIsVendorPrefix(word) { return word.toLowerCase().match(vendorPrefixesRegexp); } function wordAsValue(word) { var wordLC = word.toLowerCase(); var override = "variable-2"; if (wordIsTag(word)) override = "tag"; else if (wordIsBlock(word)) override = "block-keyword"; else if (wordIsProperty(word)) override = "property"; else if (wordLC in valueKeywords || wordLC in commonAtoms) override = "atom"; else if (wordLC == "return" || wordLC in colorKeywords) override = "keyword"; // Font family else if (word.match(/^[A-Z]/)) override = "string"; return override; } function typeIsBlock(type, stream) { return ((endOfLine(stream) && (type == "{" || type == "]" || type == "hash" || type == "qualifier")) || type == "block-mixin"); } function typeIsInterpolation(type, stream) { return type == "{" && stream.match(/^\s*\$?[\w-]+/i, false); } function typeIsPseudo(type, stream) { return type == ":" && stream.match(/^[a-z-]+/, false); } function startOfLine(stream) { return stream.sol() || stream.string.match(new RegExp("^\\s*" + escapeRegExp(stream.current()))); } function endOfLine(stream) { return stream.eol() || stream.match(/^\s*$/, false); } function firstWordOfLine(line) { var re = /^\s*[-_]*[a-z0-9]+[\w-]*/i; var result = typeof line == "string" ? line.match(re) : line.string.match(re); return result ? result[0].replace(/^\s*/, "") : ""; } /** * Block */ states.block = function(type, stream, state) { if ((type == "comment" && startOfLine(stream)) || (type == "," && endOfLine(stream)) || type == "mixin") { return pushContext(state, stream, "block", 0); } if (typeIsInterpolation(type, stream)) { return pushContext(state, stream, "interpolation"); } if (endOfLine(stream) && type == "]") { if (!/^\s*(\.|#|:|\[|\*|&)/.test(stream.string) && !wordIsTag(firstWordOfLine(stream))) { return pushContext(state, stream, "block", 0); } } if (typeIsBlock(type, stream)) { return pushContext(state, stream, "block"); } if (type == "}" && endOfLine(stream)) { return pushContext(state, stream, "block", 0); } if (type == "variable-name") { if (stream.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/) || wordIsBlock(firstWordOfLine(stream))) { return pushContext(state, stream, "variableName"); } else { return pushContext(state, stream, "variableName", 0); } } if (type == "=") { if (!endOfLine(stream) && !wordIsBlock(firstWordOfLine(stream))) { return pushContext(state, stream, "block", 0); } return pushContext(state, stream, "block"); } if (type == "*") { if (endOfLine(stream) || stream.match(/\s*(,|\.|#|\[|:|{)/,false)) { override = "tag"; return pushContext(state, stream, "block"); } } if (typeIsPseudo(type, stream)) { return pushContext(state, stream, "pseudo"); } if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) { return pushContext(state, stream, endOfLine(stream) ? "block" : "atBlock"); } if (/@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { return pushContext(state, stream, "keyframes"); } if (/@extends?/.test(type)) { return pushContext(state, stream, "extend", 0); } if (type && type.charAt(0) == "@") { // Property Lookup if (stream.indentation() > 0 && wordIsProperty(stream.current().slice(1))) { override = "variable-2"; return "block"; } if (/(@import|@require|@charset)/.test(type)) { return pushContext(state, stream, "block", 0); } return pushContext(state, stream, "block"); } if (type == "reference" && endOfLine(stream)) { return pushContext(state, stream, "block"); } if (type == "(") { return pushContext(state, stream, "parens"); } if (type == "vendor-prefixes") { return pushContext(state, stream, "vendorPrefixes"); } if (type == "word") { var word = stream.current(); override = wordAsValue(word); if (override == "property") { if (startOfLine(stream)) { return pushContext(state, stream, "block", 0); } else { override = "atom"; return "block"; } } if (override == "tag") { // tag is a css value if (/embed|menu|pre|progress|sub|table/.test(word)) { if (wordIsProperty(firstWordOfLine(stream))) { override = "atom"; return "block"; } } // tag is an attribute if (stream.string.match(new RegExp("\\[\\s*" + word + "|" + word +"\\s*\\]"))) { override = "atom"; return "block"; } // tag is a variable if (tagVariablesRegexp.test(word)) { if ((startOfLine(stream) && stream.string.match(/=/)) || (!startOfLine(stream) && !stream.string.match(/^(\s*\.|#|\&|\[|\/|>|\*)/) && !wordIsTag(firstWordOfLine(stream)))) { override = "variable-2"; if (wordIsBlock(firstWordOfLine(stream))) return "block"; return pushContext(state, stream, "block", 0); } } if (endOfLine(stream)) return pushContext(state, stream, "block"); } if (override == "block-keyword") { override = "keyword"; // Postfix conditionals if (stream.current(/(if|unless)/) && !startOfLine(stream)) { return "block"; } return pushContext(state, stream, "block"); } if (word == "return") return pushContext(state, stream, "block", 0); // Placeholder selector if (override == "variable-2" && stream.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/)) { return pushContext(state, stream, "block"); } } return state.context.type; }; /** * Parens */ states.parens = function(type, stream, state) { if (type == "(") return pushContext(state, stream, "parens"); if (type == ")") { if (state.context.prev.type == "parens") { return popContext(state); } if ((stream.string.match(/^[a-z][\w-]*\(/i) && endOfLine(stream)) || wordIsBlock(firstWordOfLine(stream)) || /(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(firstWordOfLine(stream)) || (!stream.string.match(/^-?[a-z][\w-\.\[\]\'\"]*\s*=/) && wordIsTag(firstWordOfLine(stream)))) { return pushContext(state, stream, "block"); } if (stream.string.match(/^[\$-]?[a-z][\w-\.\[\]\'\"]*\s*=/) || stream.string.match(/^\s*(\(|\)|[0-9])/) || stream.string.match(/^\s+[a-z][\w-]*\(/i) || stream.string.match(/^\s+[\$-]?[a-z]/i)) { return pushContext(state, stream, "block", 0); } if (endOfLine(stream)) return pushContext(state, stream, "block"); else return pushContext(state, stream, "block", 0); } if (type && type.charAt(0) == "@" && wordIsProperty(stream.current().slice(1))) { override = "variable-2"; } if (type == "word") { var word = stream.current(); override = wordAsValue(word); if (override == "tag" && tagVariablesRegexp.test(word)) { override = "variable-2"; } if (override == "property" || word == "to") override = "atom"; } if (type == "variable-name") { return pushContext(state, stream, "variableName"); } if (typeIsPseudo(type, stream)) { return pushContext(state, stream, "pseudo"); } return state.context.type; }; /** * Vendor prefixes */ states.vendorPrefixes = function(type, stream, state) { if (type == "word") { override = "property"; return pushContext(state, stream, "block", 0); } return popContext(state); }; /** * Pseudo */ states.pseudo = function(type, stream, state) { if (!wordIsProperty(firstWordOfLine(stream.string))) { stream.match(/^[a-z-]+/); override = "variable-3"; if (endOfLine(stream)) return pushContext(state, stream, "block"); return popContext(state); } return popAndPass(type, stream, state); }; /** * atBlock */ states.atBlock = function(type, stream, state) { if (type == "(") return pushContext(state, stream, "atBlock_parens"); if (typeIsBlock(type, stream)) { return pushContext(state, stream, "block"); } if (typeIsInterpolation(type, stream)) { return pushContext(state, stream, "interpolation"); } if (type == "word") { var word = stream.current().toLowerCase(); if (/^(only|not|and|or)$/.test(word)) override = "keyword"; else if (documentTypes.hasOwnProperty(word)) override = "tag"; else if (mediaTypes.hasOwnProperty(word)) override = "attribute"; else if (mediaFeatures.hasOwnProperty(word)) override = "property"; else if (nonStandardPropertyKeywords.hasOwnProperty(word)) override = "string-2"; else override = wordAsValue(stream.current()); if (override == "tag" && endOfLine(stream)) { return pushContext(state, stream, "block"); } } if (type == "operator" && /^(not|and|or)$/.test(stream.current())) { override = "keyword"; } return state.context.type; }; states.atBlock_parens = function(type, stream, state) { if (type == "{" || type == "}") return state.context.type; if (type == ")") { if (endOfLine(stream)) return pushContext(state, stream, "block"); else return pushContext(state, stream, "atBlock"); } if (type == "word") { var word = stream.current().toLowerCase(); override = wordAsValue(word); if (/^(max|min)/.test(word)) override = "property"; if (override == "tag") { tagVariablesRegexp.test(word) ? override = "variable-2" : override = "atom"; } return state.context.type; } return states.atBlock(type, stream, state); }; /** * Keyframes */ states.keyframes = function(type, stream, state) { if (stream.indentation() == "0" && ((type == "}" && startOfLine(stream)) || type == "]" || type == "hash" || type == "qualifier" || wordIsTag(stream.current()))) { return popAndPass(type, stream, state); } if (type == "{") return pushContext(state, stream, "keyframes"); if (type == "}") { if (startOfLine(stream)) return popContext(state, true); else return pushContext(state, stream, "keyframes"); } if (type == "unit" && /^[0-9]+\%$/.test(stream.current())) { return pushContext(state, stream, "keyframes"); } if (type == "word") { override = wordAsValue(stream.current()); if (override == "block-keyword") { override = "keyword"; return pushContext(state, stream, "keyframes"); } } if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) { return pushContext(state, stream, endOfLine(stream) ? "block" : "atBlock"); } if (type == "mixin") { return pushContext(state, stream, "block", 0); } return state.context.type; }; /** * Interpolation */ states.interpolation = function(type, stream, state) { if (type == "{") popContext(state) && pushContext(state, stream, "block"); if (type == "}") { if (stream.string.match(/^\s*(\.|#|:|\[|\*|&|>|~|\+|\/)/i) || (stream.string.match(/^\s*[a-z]/i) && wordIsTag(firstWordOfLine(stream)))) { return pushContext(state, stream, "block"); } if (!stream.string.match(/^(\{|\s*\&)/) || stream.match(/\s*[\w-]/,false)) { return pushContext(state, stream, "block", 0); } return pushContext(state, stream, "block"); } if (type == "variable-name") { return pushContext(state, stream, "variableName", 0); } if (type == "word") { override = wordAsValue(stream.current()); if (override == "tag") override = "atom"; } return state.context.type; }; /** * Extend/s */ states.extend = function(type, stream, state) { if (type == "[" || type == "=") return "extend"; if (type == "]") return popContext(state); if (type == "word") { override = wordAsValue(stream.current()); return "extend"; } return popContext(state); }; /** * Variable name */ states.variableName = function(type, stream, state) { if (type == "string" || type == "[" || type == "]" || stream.current().match(/^(\.|\$)/)) { if (stream.current().match(/^\.[\w-]+/i)) override = "variable-2"; return "variableName"; } return popAndPass(type, stream, state); }; return { startState: function(base) { return { tokenize: null, state: "block", context: new Context("block", base || 0, null) }; }, token: function(stream, state) { if (!state.tokenize && stream.eatSpace()) return null; style = (state.tokenize || tokenBase)(stream, state); if (style && typeof style == "object") { type = style[1]; style = style[0]; } override = style; state.state = states[state.state](type, stream, state); return override; }, indent: function(state, textAfter, line) { var cx = state.context, ch = textAfter && textAfter.charAt(0), indent = cx.indent, lineFirstWord = firstWordOfLine(textAfter), lineIndent = line.match(/^\s*/)[0].replace(/\t/g, indentUnitString).length, prevLineFirstWord = state.context.prev ? state.context.prev.line.firstWord : "", prevLineIndent = state.context.prev ? state.context.prev.line.indent : lineIndent; if (cx.prev && (ch == "}" && (cx.type == "block" || cx.type == "atBlock" || cx.type == "keyframes") || ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || ch == "{" && (cx.type == "at"))) { indent = cx.indent - indentUnit; } else if (!(/(\})/.test(ch))) { if (/@|\$|\d/.test(ch) || /^\{/.test(textAfter) || /^\s*\/(\/|\*)/.test(textAfter) || /^\s*\/\*/.test(prevLineFirstWord) || /^\s*[\w-\.\[\]\'\"]+\s*(\?|:|\+)?=/i.test(textAfter) || /^(\+|-)?[a-z][\w-]*\(/i.test(textAfter) || /^return/.test(textAfter) || wordIsBlock(lineFirstWord)) { indent = lineIndent; } else if (/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(ch) || wordIsTag(lineFirstWord)) { if (/\,\s*$/.test(prevLineFirstWord)) { indent = prevLineIndent; } else if (/^\s+/.test(line) && (/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(prevLineFirstWord) || wordIsTag(prevLineFirstWord))) { indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit; } else { indent = lineIndent; } } else if (!/,\s*$/.test(line) && (wordIsVendorPrefix(lineFirstWord) || wordIsProperty(lineFirstWord))) { if (wordIsBlock(prevLineFirstWord)) { indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit; } else if (/^\{/.test(prevLineFirstWord)) { indent = lineIndent <= prevLineIndent ? lineIndent : prevLineIndent + indentUnit; } else if (wordIsVendorPrefix(prevLineFirstWord) || wordIsProperty(prevLineFirstWord)) { indent = lineIndent >= prevLineIndent ? prevLineIndent : lineIndent; } else if (/^(\.|#|:|\[|\*|&|@|\+|\-|>|~|\/)/.test(prevLineFirstWord) || /=\s*$/.test(prevLineFirstWord) || wordIsTag(prevLineFirstWord) || /^\$[\w-\.\[\]\'\"]/.test(prevLineFirstWord)) { indent = prevLineIndent + indentUnit; } else { indent = lineIndent; } } } return indent; }, electricChars: "}", lineComment: "//", fold: "indent" }; }); // developer.mozilla.org/en-US/docs/Web/HTML/Element var tagKeywords_ = ["a","abbr","address","area","article","aside","audio", "b", "base","bdi", "bdo","bgsound","blockquote","body","br","button","canvas","caption","cite", "code","col","colgroup","data","datalist","dd","del","details","dfn","div", "dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1", "h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe", "img","input","ins","kbd","keygen","label","legend","li","link","main","map", "mark","marquee","menu","menuitem","meta","meter","nav","nobr","noframes", "noscript","object","ol","optgroup","option","output","p","param","pre", "progress","q","rp","rt","ruby","s","samp","script","section","select", "small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track", "u","ul","var","video"]; // github.com/codemirror/CodeMirror/blob/master/mode/css/css.js // Note, "url-prefix" should precede "url" in order to match correctly in documentTypesRegexp var documentTypes_ = ["domain", "regexp", "url-prefix", "url"]; var mediaTypes_ = ["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"]; var mediaFeatures_ = ["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid"]; var propertyKeywords_ = ["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-position","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode","font-smoothing","osx-font-smoothing"]; var nonStandardPropertyKeywords_ = ["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"]; var fontProperties_ = ["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]; var colorKeywords_ = ["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"]; var valueKeywords_ = ["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scale","scale3d","scaleX","scaleY","scaleZ","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","x-large","x-small","xor","xx-large","xx-small","bicubic","optimizespeed","grayscale","row","row-reverse","wrap","wrap-reverse","column-reverse","flex-start","flex-end","space-between","space-around", "unset"]; var wordOperatorKeywords_ = ["in","and","or","not","is not","is a","is","isnt","defined","if unless"], blockKeywords_ = ["for","if","else","unless", "from", "to"], commonAtoms_ = ["null","true","false","href","title","type","not-allowed","readonly","disabled"], commonDef_ = ["@font-face", "@keyframes", "@media", "@viewport", "@page", "@host", "@supports", "@block", "@css"]; var hintWords = tagKeywords_.concat(documentTypes_,mediaTypes_,mediaFeatures_, propertyKeywords_,nonStandardPropertyKeywords_, colorKeywords_,valueKeywords_,fontProperties_, wordOperatorKeywords_,blockKeywords_, commonAtoms_,commonDef_); function wordRegexp(words) { words = words.sort(function(a,b){return b > a;}); return new RegExp("^((" + words.join(")|(") + "))\\b"); } function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) keys[array[i]] = true; return keys; } function escapeRegExp(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); } CodeMirror.registerHelper("hintWords", "stylus", hintWords); CodeMirror.defineMIME("text/x-styl", "stylus"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Swift mode created by Michael Kaminsky https://github.com/mkaminsky11 (function(mod) { mod(codemirror); })(function(CodeMirror) { function wordSet(words) { var set = {}; for (var i = 0; i < words.length; i++) set[words[i]] = true; return set } var keywords = wordSet(["_","var","let","class","enum","extension","import","protocol","struct","func","typealias","associatedtype", "open","public","internal","fileprivate","private","deinit","init","new","override","self","subscript","super", "convenience","dynamic","final","indirect","lazy","required","static","unowned","unowned(safe)","unowned(unsafe)","weak","as","is", "break","case","continue","default","else","fallthrough","for","guard","if","in","repeat","switch","where","while", "defer","return","inout","mutating","nonmutating","catch","do","rethrows","throw","throws","try","didSet","get","set","willSet", "assignment","associativity","infix","left","none","operator","postfix","precedence","precedencegroup","prefix","right", "Any","AnyObject","Type","dynamicType","Self","Protocol","__COLUMN__","__FILE__","__FUNCTION__","__LINE__"]); var definingKeywords = wordSet(["var","let","class","enum","extension","import","protocol","struct","func","typealias","associatedtype","for"]); var atoms = wordSet(["true","false","nil","self","super","_"]); var types = wordSet(["Array","Bool","Character","Dictionary","Double","Float","Int","Int8","Int16","Int32","Int64","Never","Optional","Set","String", "UInt8","UInt16","UInt32","UInt64","Void"]); var operators = "+-/*%=|&<>~^?!"; var punc = ":;,.(){}[]"; var binary = /^\-?0b[01][01_]*/; var octal = /^\-?0o[0-7][0-7_]*/; var hexadecimal = /^\-?0x[\dA-Fa-f][\dA-Fa-f_]*(?:(?:\.[\dA-Fa-f][\dA-Fa-f_]*)?[Pp]\-?\d[\d_]*)?/; var decimal = /^\-?\d[\d_]*(?:\.\d[\d_]*)?(?:[Ee]\-?\d[\d_]*)?/; var identifier = /^\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1/; var property = /^\.(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/; var instruction = /^\#[A-Za-z]+/; var attribute = /^@(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/; //var regexp = /^\/(?!\s)(?:\/\/)?(?:\\.|[^\/])+\// function tokenBase(stream, state, prev) { if (stream.sol()) state.indented = stream.indentation(); if (stream.eatSpace()) return null var ch = stream.peek(); if (ch == "/") { if (stream.match("//")) { stream.skipToEnd(); return "comment" } if (stream.match("/*")) { state.tokenize.push(tokenComment); return tokenComment(stream, state) } } if (stream.match(instruction)) return "builtin" if (stream.match(attribute)) return "attribute" if (stream.match(binary)) return "number" if (stream.match(octal)) return "number" if (stream.match(hexadecimal)) return "number" if (stream.match(decimal)) return "number" if (stream.match(property)) return "property" if (operators.indexOf(ch) > -1) { stream.next(); return "operator" } if (punc.indexOf(ch) > -1) { stream.next(); stream.match(".."); return "punctuation" } var stringMatch; if (stringMatch = stream.match(/("""|"|')/)) { var tokenize = tokenString.bind(null, stringMatch[0]); state.tokenize.push(tokenize); return tokenize(stream, state) } if (stream.match(identifier)) { var ident = stream.current(); if (types.hasOwnProperty(ident)) return "variable-2" if (atoms.hasOwnProperty(ident)) return "atom" if (keywords.hasOwnProperty(ident)) { if (definingKeywords.hasOwnProperty(ident)) state.prev = "define"; return "keyword" } if (prev == "define") return "def" return "variable" } stream.next(); return null } function tokenUntilClosingParen() { var depth = 0; return function(stream, state, prev) { var inner = tokenBase(stream, state, prev); if (inner == "punctuation") { if (stream.current() == "(") ++depth; else if (stream.current() == ")") { if (depth == 0) { stream.backUp(1); state.tokenize.pop(); return state.tokenize[state.tokenize.length - 1](stream, state) } else --depth; } } return inner } } function tokenString(openQuote, stream, state) { var singleLine = openQuote.length == 1; var ch, escaped = false; while (ch = stream.peek()) { if (escaped) { stream.next(); if (ch == "(") { state.tokenize.push(tokenUntilClosingParen()); return "string" } escaped = false; } else if (stream.match(openQuote)) { state.tokenize.pop(); return "string" } else { stream.next(); escaped = ch == "\\"; } } if (singleLine) { state.tokenize.pop(); } return "string" } function tokenComment(stream, state) { var ch; while (true) { stream.match(/^[^/*]+/, true); ch = stream.next(); if (!ch) break if (ch === "/" && stream.eat("*")) { state.tokenize.push(tokenComment); } else if (ch === "*" && stream.eat("/")) { state.tokenize.pop(); } } return "comment" } function Context(prev, align, indented) { this.prev = prev; this.align = align; this.indented = indented; } function pushContext(state, stream) { var align = stream.match(/^\s*($|\/[\/\*])/, false) ? null : stream.column() + 1; state.context = new Context(state.context, align, state.indented); } function popContext(state) { if (state.context) { state.indented = state.context.indented; state.context = state.context.prev; } } CodeMirror.defineMode("swift", function(config) { return { startState: function() { return { prev: null, context: null, indented: 0, tokenize: [] } }, token: function(stream, state) { var prev = state.prev; state.prev = null; var tokenize = state.tokenize[state.tokenize.length - 1] || tokenBase; var style = tokenize(stream, state, prev); if (!style || style == "comment") state.prev = prev; else if (!state.prev) state.prev = style; if (style == "punctuation") { var bracket = /[\(\[\{]|([\]\)\}])/.exec(stream.current()); if (bracket) (bracket[1] ? popContext : pushContext)(state, stream); } return style }, indent: function(state, textAfter) { var cx = state.context; if (!cx) return 0 var closing = /^[\]\}\)]/.test(textAfter); if (cx.align != null) return cx.align - (closing ? 1 : 0) return cx.indented + (closing ? 0 : config.indentUnit) }, electricInput: /^\s*[\)\}\]]$/, lineComment: "//", blockCommentStart: "/*", blockCommentEnd: "*/", fold: "brace", closeBrackets: "()[]{}''\"\"``" } }); CodeMirror.defineMIME("text/x-swift","swift"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE //tcl mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("tcl", function() { function parseWords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = parseWords("Tcl safe after append array auto_execok auto_import auto_load " + "auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror " + "binary break catch cd close concat continue dde eof encoding error " + "eval exec exit expr fblocked fconfigure fcopy file fileevent filename " + "filename flush for foreach format gets glob global history http if " + "incr info interp join lappend lindex linsert list llength load lrange " + "lreplace lsearch lset lsort memory msgcat namespace open package parray " + "pid pkg::create pkg_mkIndex proc puts pwd re_syntax read regex regexp " + "registry regsub rename resource return scan seek set socket source split " + "string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord " + "tcl_wordBreakAfter tcl_startOfPreviousWord tcl_wordBreakBefore tcltest " + "tclvars tell time trace unknown unset update uplevel upvar variable " + "vwait"); var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var beforeParams = state.beforeParams; state.beforeParams = false; var ch = stream.next(); if ((ch == '"' || ch == "'") && state.inParams) { return chain(stream, state, tokenString(ch)); } else if (/[\[\]{}\(\),;\.]/.test(ch)) { if (ch == "(" && beforeParams) state.inParams = true; else if (ch == ")") state.inParams = false; return null; } else if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } else if (ch == "#") { if (stream.eat("*")) return chain(stream, state, tokenComment); if (ch == "#" && stream.match(/ *\[ *\[/)) return chain(stream, state, tokenUnparsed); stream.skipToEnd(); return "comment"; } else if (ch == '"') { stream.skipTo(/"/); return "comment"; } else if (ch == "$") { stream.eatWhile(/[$_a-z0-9A-Z\.{:]/); stream.eatWhile(/}/); state.beforeParams = true; return "builtin"; } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "comment"; } else { stream.eatWhile(/[\w\$_{}\xa1-\uffff]/); var word = stream.current().toLowerCase(); if (keywords && keywords.propertyIsEnumerable(word)) return "keyword"; if (functions && functions.propertyIsEnumerable(word)) { state.beforeParams = true; return "keyword"; } return null; } } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenUnparsed(stream, state) { var maybeEnd = 0, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd == 2) { state.tokenize = tokenBase; break; } if (ch == "]") maybeEnd++; else if (ch != " ") maybeEnd = 0; } return "meta"; } return { startState: function() { return { tokenize: tokenBase, beforeParams: false, inParams: false }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, lineComment: "#" }; }); CodeMirror.defineMIME("text/x-tcl", "tcl"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { { // CommonJS mod(codemirror); } })(function(CodeMirror) { var TOKEN_STYLES = { addition: "positive", attributes: "attribute", bold: "strong", cite: "keyword", code: "atom", definitionList: "number", deletion: "negative", div: "punctuation", em: "em", footnote: "variable", footCite: "qualifier", header: "header", html: "comment", image: "string", italic: "em", link: "link", linkDefinition: "link", list1: "variable-2", list2: "variable-3", list3: "keyword", notextile: "string-2", pre: "operator", p: "property", quote: "bracket", span: "quote", specialChar: "tag", strong: "strong", sub: "builtin", sup: "builtin", table: "variable-3", tableHeading: "operator" }; function startNewLine(stream, state) { state.mode = Modes.newLayout; state.tableHeading = false; if (state.layoutType === "definitionList" && state.spanningLayout && stream.match(RE("definitionListEnd"), false)) state.spanningLayout = false; } function handlePhraseModifier(stream, state, ch) { if (ch === "_") { if (stream.eat("_")) return togglePhraseModifier(stream, state, "italic", /__/, 2); else return togglePhraseModifier(stream, state, "em", /_/, 1); } if (ch === "*") { if (stream.eat("*")) { return togglePhraseModifier(stream, state, "bold", /\*\*/, 2); } return togglePhraseModifier(stream, state, "strong", /\*/, 1); } if (ch === "[") { if (stream.match(/\d+\]/)) state.footCite = true; return tokenStyles(state); } if (ch === "(") { var spec = stream.match(/^(r|tm|c)\)/); if (spec) return tokenStylesWith(state, TOKEN_STYLES.specialChar); } if (ch === "<" && stream.match(/(\w+)[^>]+>[^<]+<\/\1>/)) return tokenStylesWith(state, TOKEN_STYLES.html); if (ch === "?" && stream.eat("?")) return togglePhraseModifier(stream, state, "cite", /\?\?/, 2); if (ch === "=" && stream.eat("=")) return togglePhraseModifier(stream, state, "notextile", /==/, 2); if (ch === "-" && !stream.eat("-")) return togglePhraseModifier(stream, state, "deletion", /-/, 1); if (ch === "+") return togglePhraseModifier(stream, state, "addition", /\+/, 1); if (ch === "~") return togglePhraseModifier(stream, state, "sub", /~/, 1); if (ch === "^") return togglePhraseModifier(stream, state, "sup", /\^/, 1); if (ch === "%") return togglePhraseModifier(stream, state, "span", /%/, 1); if (ch === "@") return togglePhraseModifier(stream, state, "code", /@/, 1); if (ch === "!") { var type = togglePhraseModifier(stream, state, "image", /(?:\([^\)]+\))?!/, 1); stream.match(/^:\S+/); // optional Url portion return type; } return tokenStyles(state); } function togglePhraseModifier(stream, state, phraseModifier, closeRE, openSize) { var charBefore = stream.pos > openSize ? stream.string.charAt(stream.pos - openSize - 1) : null; var charAfter = stream.peek(); if (state[phraseModifier]) { if ((!charAfter || /\W/.test(charAfter)) && charBefore && /\S/.test(charBefore)) { var type = tokenStyles(state); state[phraseModifier] = false; return type; } } else if ((!charBefore || /\W/.test(charBefore)) && charAfter && /\S/.test(charAfter) && stream.match(new RegExp("^.*\\S" + closeRE.source + "(?:\\W|$)"), false)) { state[phraseModifier] = true; state.mode = Modes.attributes; } return tokenStyles(state); } function tokenStyles(state) { var disabled = textileDisabled(state); if (disabled) return disabled; var styles = []; if (state.layoutType) styles.push(TOKEN_STYLES[state.layoutType]); styles = styles.concat(activeStyles( state, "addition", "bold", "cite", "code", "deletion", "em", "footCite", "image", "italic", "link", "span", "strong", "sub", "sup", "table", "tableHeading")); if (state.layoutType === "header") styles.push(TOKEN_STYLES.header + "-" + state.header); return styles.length ? styles.join(" ") : null; } function textileDisabled(state) { var type = state.layoutType; switch(type) { case "notextile": case "code": case "pre": return TOKEN_STYLES[type]; default: if (state.notextile) return TOKEN_STYLES.notextile + (type ? (" " + TOKEN_STYLES[type]) : ""); return null; } } function tokenStylesWith(state, extraStyles) { var disabled = textileDisabled(state); if (disabled) return disabled; var type = tokenStyles(state); if (extraStyles) return type ? (type + " " + extraStyles) : extraStyles; else return type; } function activeStyles(state) { var styles = []; for (var i = 1; i < arguments.length; ++i) { if (state[arguments[i]]) styles.push(TOKEN_STYLES[arguments[i]]); } return styles; } function blankLine(state) { var spanningLayout = state.spanningLayout, type = state.layoutType; for (var key in state) if (state.hasOwnProperty(key)) delete state[key]; state.mode = Modes.newLayout; if (spanningLayout) { state.layoutType = type; state.spanningLayout = true; } } var REs = { cache: {}, single: { bc: "bc", bq: "bq", definitionList: /- .*?:=+/, definitionListEnd: /.*=:\s*$/, div: "div", drawTable: /\|.*\|/, foot: /fn\d+/, header: /h[1-6]/, html: /\s*<(?:\/)?(\w+)(?:[^>]+)?>(?:[^<]+<\/\1>)?/, link: /[^"]+":\S/, linkDefinition: /\[[^\s\]]+\]\S+/, list: /(?:#+|\*+)/, notextile: "notextile", para: "p", pre: "pre", table: "table", tableCellAttributes: /[\/\\]\d+/, tableHeading: /\|_\./, tableText: /[^"_\*\[\(\?\+~\^%@|-]+/, text: /[^!"_=\*\[\(<\?\+~\^%@-]+/ }, attributes: { align: /(?:<>|<|>|=)/, selector: /\([^\(][^\)]+\)/, lang: /\[[^\[\]]+\]/, pad: /(?:\(+|\)+){1,2}/, css: /\{[^\}]+\}/ }, createRe: function(name) { switch (name) { case "drawTable": return REs.makeRe("^", REs.single.drawTable, "$"); case "html": return REs.makeRe("^", REs.single.html, "(?:", REs.single.html, ")*", "$"); case "linkDefinition": return REs.makeRe("^", REs.single.linkDefinition, "$"); case "listLayout": return REs.makeRe("^", REs.single.list, RE("allAttributes"), "*\\s+"); case "tableCellAttributes": return REs.makeRe("^", REs.choiceRe(REs.single.tableCellAttributes, RE("allAttributes")), "+\\."); case "type": return REs.makeRe("^", RE("allTypes")); case "typeLayout": return REs.makeRe("^", RE("allTypes"), RE("allAttributes"), "*\\.\\.?", "(\\s+|$)"); case "attributes": return REs.makeRe("^", RE("allAttributes"), "+"); case "allTypes": return REs.choiceRe(REs.single.div, REs.single.foot, REs.single.header, REs.single.bc, REs.single.bq, REs.single.notextile, REs.single.pre, REs.single.table, REs.single.para); case "allAttributes": return REs.choiceRe(REs.attributes.selector, REs.attributes.css, REs.attributes.lang, REs.attributes.align, REs.attributes.pad); default: return REs.makeRe("^", REs.single[name]); } }, makeRe: function() { var pattern = ""; for (var i = 0; i < arguments.length; ++i) { var arg = arguments[i]; pattern += (typeof arg === "string") ? arg : arg.source; } return new RegExp(pattern); }, choiceRe: function() { var parts = [arguments[0]]; for (var i = 1; i < arguments.length; ++i) { parts[i * 2 - 1] = "|"; parts[i * 2] = arguments[i]; } parts.unshift("(?:"); parts.push(")"); return REs.makeRe.apply(null, parts); } }; function RE(name) { return (REs.cache[name] || (REs.cache[name] = REs.createRe(name))); } var Modes = { newLayout: function(stream, state) { if (stream.match(RE("typeLayout"), false)) { state.spanningLayout = false; return (state.mode = Modes.blockType)(stream, state); } var newMode; if (!textileDisabled(state)) { if (stream.match(RE("listLayout"), false)) newMode = Modes.list; else if (stream.match(RE("drawTable"), false)) newMode = Modes.table; else if (stream.match(RE("linkDefinition"), false)) newMode = Modes.linkDefinition; else if (stream.match(RE("definitionList"))) newMode = Modes.definitionList; else if (stream.match(RE("html"), false)) newMode = Modes.html; } return (state.mode = (newMode || Modes.text))(stream, state); }, blockType: function(stream, state) { var match, type; state.layoutType = null; if (match = stream.match(RE("type"))) type = match[0]; else return (state.mode = Modes.text)(stream, state); if (match = type.match(RE("header"))) { state.layoutType = "header"; state.header = parseInt(match[0][1]); } else if (type.match(RE("bq"))) { state.layoutType = "quote"; } else if (type.match(RE("bc"))) { state.layoutType = "code"; } else if (type.match(RE("foot"))) { state.layoutType = "footnote"; } else if (type.match(RE("notextile"))) { state.layoutType = "notextile"; } else if (type.match(RE("pre"))) { state.layoutType = "pre"; } else if (type.match(RE("div"))) { state.layoutType = "div"; } else if (type.match(RE("table"))) { state.layoutType = "table"; } state.mode = Modes.attributes; return tokenStyles(state); }, text: function(stream, state) { if (stream.match(RE("text"))) return tokenStyles(state); var ch = stream.next(); if (ch === '"') return (state.mode = Modes.link)(stream, state); return handlePhraseModifier(stream, state, ch); }, attributes: function(stream, state) { state.mode = Modes.layoutLength; if (stream.match(RE("attributes"))) return tokenStylesWith(state, TOKEN_STYLES.attributes); else return tokenStyles(state); }, layoutLength: function(stream, state) { if (stream.eat(".") && stream.eat(".")) state.spanningLayout = true; state.mode = Modes.text; return tokenStyles(state); }, list: function(stream, state) { var match = stream.match(RE("list")); state.listDepth = match[0].length; var listMod = (state.listDepth - 1) % 3; if (!listMod) state.layoutType = "list1"; else if (listMod === 1) state.layoutType = "list2"; else state.layoutType = "list3"; state.mode = Modes.attributes; return tokenStyles(state); }, link: function(stream, state) { state.mode = Modes.text; if (stream.match(RE("link"))) { stream.match(/\S+/); return tokenStylesWith(state, TOKEN_STYLES.link); } return tokenStyles(state); }, linkDefinition: function(stream, state) { stream.skipToEnd(); return tokenStylesWith(state, TOKEN_STYLES.linkDefinition); }, definitionList: function(stream, state) { stream.match(RE("definitionList")); state.layoutType = "definitionList"; if (stream.match(/\s*$/)) state.spanningLayout = true; else state.mode = Modes.attributes; return tokenStyles(state); }, html: function(stream, state) { stream.skipToEnd(); return tokenStylesWith(state, TOKEN_STYLES.html); }, table: function(stream, state) { state.layoutType = "table"; return (state.mode = Modes.tableCell)(stream, state); }, tableCell: function(stream, state) { if (stream.match(RE("tableHeading"))) state.tableHeading = true; else stream.eat("|"); state.mode = Modes.tableCellAttributes; return tokenStyles(state); }, tableCellAttributes: function(stream, state) { state.mode = Modes.tableText; if (stream.match(RE("tableCellAttributes"))) return tokenStylesWith(state, TOKEN_STYLES.attributes); else return tokenStyles(state); }, tableText: function(stream, state) { if (stream.match(RE("tableText"))) return tokenStyles(state); if (stream.peek() === "|") { // end of cell state.mode = Modes.tableCell; return tokenStyles(state); } return handlePhraseModifier(stream, state, stream.next()); } }; CodeMirror.defineMode("textile", function() { return { startState: function() { return { mode: Modes.newLayout }; }, token: function(stream, state) { if (stream.sol()) startNewLine(stream, state); return state.mode(stream, state); }, blankLine: blankLine }; }); CodeMirror.defineMIME("text/x-textile", "textile"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /*** |''Name''|tiddlywiki.js| |''Description''|Enables TiddlyWikiy syntax highlighting using CodeMirror| |''Author''|PMario| |''Version''|0.1.7| |''Status''|''stable''| |''Source''|[[GitHub|https://github.com/pmario/CodeMirror2/blob/tw-syntax/mode/tiddlywiki]]| |''Documentation''|https://codemirror.tiddlyspace.com/| |''License''|[[MIT License|http://www.opensource.org/licenses/mit-license.php]]| |''CoreVersion''|2.5.0| |''Requires''|codemirror.js| |''Keywords''|syntax highlighting color code mirror codemirror| ! Info CoreVersion parameter is needed for TiddlyWiki only! ***/ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("tiddlywiki", function () { // Tokenizer var textwords = {}; var keywords = { "allTags": true, "closeAll": true, "list": true, "newJournal": true, "newTiddler": true, "permaview": true, "saveChanges": true, "search": true, "slider": true, "tabs": true, "tag": true, "tagging": true, "tags": true, "tiddler": true, "timeline": true, "today": true, "version": true, "option": true, "with": true, "filter": true }; var isSpaceName = /[\w_\-]/i, reHR = /^\-\-\-\-+$/, //
reWikiCommentStart = /^\/\*\*\*$/, // /*** reWikiCommentStop = /^\*\*\*\/$/, // ***/ reBlockQuote = /^<<<$/, reJsCodeStart = /^\/\/\{\{\{$/, // //{{{ js block start reJsCodeStop = /^\/\/\}\}\}$/, // //}}} js stop reXmlCodeStart = /^$/, // xml block start reXmlCodeStop = /^$/, // xml stop reCodeBlockStart = /^\{\{\{$/, // {{{ TW text div block start reCodeBlockStop = /^\}\}\}$/, // }}} TW text stop reUntilCodeStop = /.*?\}\}\}/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var sol = stream.sol(), ch = stream.peek(); state.block = false; // indicates the start of a code block. // check start of blocks if (sol && /[<\/\*{}\-]/.test(ch)) { if (stream.match(reCodeBlockStart)) { state.block = true; return chain(stream, state, twTokenCode); } if (stream.match(reBlockQuote)) return 'quote'; if (stream.match(reWikiCommentStart) || stream.match(reWikiCommentStop)) return 'comment'; if (stream.match(reJsCodeStart) || stream.match(reJsCodeStop) || stream.match(reXmlCodeStart) || stream.match(reXmlCodeStop)) return 'comment'; if (stream.match(reHR)) return 'hr'; } stream.next(); if (sol && /[\/\*!#;:>|]/.test(ch)) { if (ch == "!") { // tw header stream.skipToEnd(); return "header"; } if (ch == "*") { // tw list stream.eatWhile('*'); return "comment"; } if (ch == "#") { // tw numbered list stream.eatWhile('#'); return "comment"; } if (ch == ";") { // definition list, term stream.eatWhile(';'); return "comment"; } if (ch == ":") { // definition list, description stream.eatWhile(':'); return "comment"; } if (ch == ">") { // single line quote stream.eatWhile(">"); return "quote"; } if (ch == '|') return 'header'; } if (ch == '{' && stream.match(/\{\{/)) return chain(stream, state, twTokenCode); // rudimentary html:// file:// link matching. TW knows much more ... if (/[hf]/i.test(ch) && /[ti]/i.test(stream.peek()) && stream.match(/\b(ttps?|tp|ile):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i)) return "link"; // just a little string indicator, don't want to have the whole string covered if (ch == '"') return 'string'; if (ch == '~') // _no_ CamelCase indicator should be bold return 'brace'; if (/[\[\]]/.test(ch) && stream.match(ch)) // check for [[..]] return 'brace'; if (ch == "@") { // check for space link. TODO fix @@...@@ highlighting stream.eatWhile(isSpaceName); return "link"; } if (/\d/.test(ch)) { // numbers stream.eatWhile(/\d/); return "number"; } if (ch == "/") { // tw invisible comment if (stream.eat("%")) { return chain(stream, state, twTokenComment); } else if (stream.eat("/")) { // return chain(stream, state, twTokenEm); } } if (ch == "_" && stream.eat("_")) // tw underline return chain(stream, state, twTokenUnderline); // strikethrough and mdash handling if (ch == "-" && stream.eat("-")) { // if strikethrough looks ugly, change CSS. if (stream.peek() != ' ') return chain(stream, state, twTokenStrike); // mdash if (stream.peek() == ' ') return 'brace'; } if (ch == "'" && stream.eat("'")) // tw bold return chain(stream, state, twTokenStrong); if (ch == "<" && stream.eat("<")) // tw macro return chain(stream, state, twTokenMacro); // core macro handling stream.eatWhile(/[\w\$_]/); return textwords.propertyIsEnumerable(stream.current()) ? "keyword" : null } // tw invisible comment function twTokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "%"); } return "comment"; } // tw strong / bold function twTokenStrong(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "'" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "'"); } return "strong"; } // tw code function twTokenCode(stream, state) { var sb = state.block; if (sb && stream.current()) { return "comment"; } if (!sb && stream.match(reUntilCodeStop)) { state.tokenize = tokenBase; return "comment"; } if (sb && stream.sol() && stream.match(reCodeBlockStop)) { state.tokenize = tokenBase; return "comment"; } stream.next(); return "comment"; } // tw em / italic function twTokenEm(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "/"); } return "em"; } // tw underlined text function twTokenUnderline(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "_" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "_"); } return "underlined"; } // tw strike through text looks ugly // change CSS if needed function twTokenStrike(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "-" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "-"); } return "strikethrough"; } // macro function twTokenMacro(stream, state) { if (stream.current() == '<<') { return 'macro'; } var ch = stream.next(); if (!ch) { state.tokenize = tokenBase; return null; } if (ch == ">") { if (stream.peek() == '>') { stream.next(); state.tokenize = tokenBase; return "macro"; } } stream.eatWhile(/[\w\$_]/); return keywords.propertyIsEnumerable(stream.current()) ? "keyword" : null } // Interface return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; } }; }); CodeMirror.defineMIME("text/x-tiddlywiki", "tiddlywiki"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode('tiki', function(config) { function inBlock(style, terminator, returnTokenizer) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = inText; break; } stream.next(); } if (returnTokenizer) state.tokenize = returnTokenizer; return style; }; } function inLine(style) { return function(stream, state) { while(!stream.eol()) { stream.next(); } state.tokenize = inText; return style; }; } function inText(stream, state) { function chain(parser) { state.tokenize = parser; return parser(stream, state); } var sol = stream.sol(); var ch = stream.next(); //non start of line switch (ch) { //switch is generally much faster than if, so it is used here case "{": //plugin stream.eat("/"); stream.eatSpace(); stream.eatWhile(/[^\s\u00a0=\"\'\/?(}]/); state.tokenize = inPlugin; return "tag"; case "_": //bold if (stream.eat("_")) return chain(inBlock("strong", "__", inText)); break; case "'": //italics if (stream.eat("'")) return chain(inBlock("em", "''", inText)); break; case "(":// Wiki Link if (stream.eat("(")) return chain(inBlock("variable-2", "))", inText)); break; case "[":// Weblink return chain(inBlock("variable-3", "]", inText)); case "|": //table if (stream.eat("|")) return chain(inBlock("comment", "||")); break; case "-": if (stream.eat("=")) {//titleBar return chain(inBlock("header string", "=-", inText)); } else if (stream.eat("-")) {//deleted return chain(inBlock("error tw-deleted", "--", inText)); } break; case "=": //underline if (stream.match("==")) return chain(inBlock("tw-underline", "===", inText)); break; case ":": if (stream.eat(":")) return chain(inBlock("comment", "::")); break; case "^": //box return chain(inBlock("tw-box", "^")); case "~": //np if (stream.match("np~")) return chain(inBlock("meta", "~/np~")); break; } //start of line types if (sol) { switch (ch) { case "!": //header at start of line if (stream.match('!!!!!')) { return chain(inLine("header string")); } else if (stream.match('!!!!')) { return chain(inLine("header string")); } else if (stream.match('!!!')) { return chain(inLine("header string")); } else if (stream.match('!!')) { return chain(inLine("header string")); } else { return chain(inLine("header string")); } case "*": //unordered list line item, or
  • at start of line case "#": //ordered list line item, or
  • at start of line case "+": //ordered list line item, or
  • at start of line return chain(inLine("tw-listitem bracket")); } } //stream.eatWhile(/[&{]/); was eating up plugins, turned off to act less like html and more like tiki return null; } var indentUnit = config.indentUnit; // Return variables for tokenizers var pluginName, type; function inPlugin(stream, state) { var ch = stream.next(); var peek = stream.peek(); if (ch == "}") { state.tokenize = inText; //type = ch == ")" ? "endPlugin" : "selfclosePlugin"; inPlugin return "tag"; } else if (ch == "(" || ch == ")") { return "bracket"; } else if (ch == "=") { type = "equals"; if (peek == ">") { stream.next(); peek = stream.peek(); } //here we detect values directly after equal character with no quotes if (!/[\'\"]/.test(peek)) { state.tokenize = inAttributeNoQuote(); } //end detect values return "operator"; } else if (/[\'\"]/.test(ch)) { state.tokenize = inAttribute(ch); return state.tokenize(stream, state); } else { stream.eatWhile(/[^\s\u00a0=\"\'\/?]/); return "keyword"; } } function inAttribute(quote) { return function(stream, state) { while (!stream.eol()) { if (stream.next() == quote) { state.tokenize = inPlugin; break; } } return "string"; }; } function inAttributeNoQuote() { return function(stream, state) { while (!stream.eol()) { var ch = stream.next(); var peek = stream.peek(); if (ch == " " || ch == "," || /[ )}]/.test(peek)) { state.tokenize = inPlugin; break; } } return "string"; }; } var curState, setStyle; function pass() { for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function pushContext(pluginName, startOfLine) { var noIndent = curState.context && curState.context.noIndent; curState.context = { prev: curState.context, pluginName: pluginName, indent: curState.indented, startOfLine: startOfLine, noIndent: noIndent }; } function popContext() { if (curState.context) curState.context = curState.context.prev; } function element(type) { if (type == "openPlugin") {curState.pluginName = pluginName; return cont(attributes, endplugin(curState.startOfLine));} else if (type == "closePlugin") { var err = false; if (curState.context) { err = curState.context.pluginName != pluginName; popContext(); } else { err = true; } if (err) setStyle = "error"; return cont(endcloseplugin(err)); } else if (type == "string") { if (!curState.context || curState.context.name != "!cdata") pushContext("!cdata"); if (curState.tokenize == inText) popContext(); return cont(); } else return cont(); } function endplugin(startOfLine) { return function(type) { if ( type == "selfclosePlugin" || type == "endPlugin" ) return cont(); if (type == "endPlugin") {pushContext(curState.pluginName, startOfLine); return cont();} return cont(); }; } function endcloseplugin(err) { return function(type) { if (err) setStyle = "error"; if (type == "endPlugin") return cont(); return pass(); }; } function attributes(type) { if (type == "keyword") {setStyle = "attribute"; return cont(attributes);} if (type == "equals") return cont(attvalue, attributes); return pass(); } function attvalue(type) { if (type == "keyword") {setStyle = "string"; return cont();} if (type == "string") return cont(attvaluemaybe); return pass(); } function attvaluemaybe(type) { if (type == "string") return cont(attvaluemaybe); else return pass(); } return { startState: function() { return {tokenize: inText, cc: [], indented: 0, startOfLine: true, pluginName: null, context: null}; }, token: function(stream, state) { if (stream.sol()) { state.startOfLine = true; state.indented = stream.indentation(); } if (stream.eatSpace()) return null; setStyle = type = pluginName = null; var style = state.tokenize(stream, state); if ((style || type) && style != "comment") { curState = state; while (true) { var comb = state.cc.pop() || element; if (comb(type || style)) break; } } state.startOfLine = false; return setStyle || style; }, indent: function(state, textAfter) { var context = state.context; if (context && context.noIndent) return 0; if (context && /^{\//.test(textAfter)) context = context.prev; while (context && !context.startOfLine) context = context.prev; if (context) return context.indent + indentUnit; else return 0; }, electricChars: "/" }; }); CodeMirror.defineMIME("text/tiki", "tiki"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("toml", function () { return { startState: function () { return { inString: false, stringType: "", lhs: true, inArray: 0 }; }, token: function (stream, state) { //check for state changes if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) { state.stringType = stream.peek(); stream.next(); // Skip quote state.inString = true; // Update state } if (stream.sol() && state.inArray === 0) { state.lhs = true; } //return state if (state.inString) { while (state.inString && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.inString = false; // Clear flag } else if (stream.peek() === '\\') { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return state.lhs ? "property string" : "string"; // Token style } else if (state.inArray && stream.peek() === ']') { stream.next(); state.inArray--; return 'bracket'; } else if (state.lhs && stream.peek() === '[' && stream.skipTo(']')) { stream.next();//skip closing ] // array of objects has an extra open & close [] if (stream.peek() === ']') stream.next(); return "atom"; } else if (stream.peek() === "#") { stream.skipToEnd(); return "comment"; } else if (stream.eatSpace()) { return null; } else if (state.lhs && stream.eatWhile(function (c) { return c != '=' && c != ' '; })) { return "property"; } else if (state.lhs && stream.peek() === "=") { stream.next(); state.lhs = false; return null; } else if (!state.lhs && stream.match(/^\d\d\d\d[\d\-\:\.T]*Z/)) { return 'atom'; //date } else if (!state.lhs && (stream.match('true') || stream.match('false'))) { return 'atom'; } else if (!state.lhs && stream.peek() === '[') { state.inArray++; stream.next(); return 'bracket'; } else if (!state.lhs && stream.match(/^\-?\d+(?:\.\d+)?/)) { return 'number'; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }); CodeMirror.defineMIME('text/x-toml', 'toml'); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, htmlmixed, overlay); })(function(CodeMirror) { CodeMirror.defineMode("tornado:inner", function() { var keywords = ["and","as","assert","autoescape","block","break","class","comment","context", "continue","datetime","def","del","elif","else","end","escape","except", "exec","extends","false","finally","for","from","global","if","import","in", "include","is","json_encode","lambda","length","linkify","load","module", "none","not","or","pass","print","put","raise","raw","return","self","set", "squeeze","super","true","try","url_escape","while","with","without","xhtml_escape","yield"]; keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b"); function tokenBase (stream, state) { stream.eatWhile(/[^\{]/); var ch = stream.next(); if (ch == "{") { if (ch = stream.eat(/\{|%|#/)) { state.tokenize = inTag(ch); return "tag"; } } } function inTag (close) { if (close == "{") { close = "}"; } return function (stream, state) { var ch = stream.next(); if ((ch == close) && stream.eat("}")) { state.tokenize = tokenBase; return "tag"; } if (stream.match(keywords)) { return "keyword"; } return close == "#" ? "comment" : "string"; }; } return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { return state.tokenize(stream, state); } }; }); CodeMirror.defineMode("tornado", function(config) { var htmlBase = CodeMirror.getMode(config, "text/html"); var tornadoInner = CodeMirror.getMode(config, "tornado:inner"); return CodeMirror.overlayMode(htmlBase, tornadoInner); }); CodeMirror.defineMIME("text/x-tornado", "tornado"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode('troff', function() { var words = {}; function tokenBase(stream) { if (stream.eatSpace()) return null; var sol = stream.sol(); var ch = stream.next(); if (ch === '\\') { if (stream.match('fB') || stream.match('fR') || stream.match('fI') || stream.match('u') || stream.match('d') || stream.match('%') || stream.match('&')) { return 'string'; } if (stream.match('m[')) { stream.skipTo(']'); stream.next(); return 'string'; } if (stream.match('s+') || stream.match('s-')) { stream.eatWhile(/[\d-]/); return 'string'; } if (stream.match('\(') || stream.match('*\(')) { stream.eatWhile(/[\w-]/); return 'string'; } return 'string'; } if (sol && (ch === '.' || ch === '\'')) { if (stream.eat('\\') && stream.eat('\"')) { stream.skipToEnd(); return 'comment'; } } if (sol && ch === '.') { if (stream.match('B ') || stream.match('I ') || stream.match('R ')) { return 'attribute'; } if (stream.match('TH ') || stream.match('SH ') || stream.match('SS ') || stream.match('HP ')) { stream.skipToEnd(); return 'quote'; } if ((stream.match(/[A-Z]/) && stream.match(/[A-Z]/)) || (stream.match(/[a-z]/) && stream.match(/[a-z]/))) { return 'attribute'; } } stream.eatWhile(/[\w-]/); var cur = stream.current(); return words.hasOwnProperty(cur) ? words[cur] : null; } function tokenize(stream, state) { return (state.tokens[0] || tokenBase) (stream, state); } return { startState: function() {return {tokens:[]};}, token: function(stream, state) { return tokenize(stream, state); } }; }); CodeMirror.defineMIME('text/troff', 'troff'); CodeMirror.defineMIME('text/x-troff', 'troff'); CodeMirror.defineMIME('application/x-troff', 'troff'); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("ttcn", function(config, parserConfig) { var indentUnit = config.indentUnit, keywords = parserConfig.keywords || {}, builtin = parserConfig.builtin || {}, timerOps = parserConfig.timerOps || {}, portOps = parserConfig.portOps || {}, configOps = parserConfig.configOps || {}, verdictOps = parserConfig.verdictOps || {}, sutOps = parserConfig.sutOps || {}, functionOps = parserConfig.functionOps || {}, verdictConsts = parserConfig.verdictConsts || {}, booleanConsts = parserConfig.booleanConsts || {}, otherConsts = parserConfig.otherConsts || {}, types = parserConfig.types || {}, visibilityModifiers = parserConfig.visibilityModifiers || {}, templateMatch = parserConfig.templateMatch || {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false; var isOperatorChar = /[+\-*&@=<>!\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]{}\(\),;\\:\?\.]/.test(ch)) { curPunc = ch; return "punctuation"; } if (ch == "#"){ stream.skipToEnd(); return "atom preprocessor"; } if (ch == "%"){ stream.eatWhile(/\b/); return "atom ttcn3Macros"; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { if(ch == "@"){ if(stream.match("try") || stream.match("catch") || stream.match("lazy")){ return "keyword"; } } stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (builtin.propertyIsEnumerable(cur)) return "builtin"; if (timerOps.propertyIsEnumerable(cur)) return "def timerOps"; if (configOps.propertyIsEnumerable(cur)) return "def configOps"; if (verdictOps.propertyIsEnumerable(cur)) return "def verdictOps"; if (portOps.propertyIsEnumerable(cur)) return "def portOps"; if (sutOps.propertyIsEnumerable(cur)) return "def sutOps"; if (functionOps.propertyIsEnumerable(cur)) return "def functionOps"; if (verdictConsts.propertyIsEnumerable(cur)) return "string verdictConsts"; if (booleanConsts.propertyIsEnumerable(cur)) return "string booleanConsts"; if (otherConsts.propertyIsEnumerable(cur)) return "string otherConsts"; if (types.propertyIsEnumerable(cur)) return "builtin types"; if (visibilityModifiers.propertyIsEnumerable(cur)) return "builtin visibilityModifiers"; if (templateMatch.propertyIsEnumerable(cur)) return "atom templateMatch"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped){ var afterQuote = stream.peek(); //look if the character after the quote is like the B in '10100010'B if (afterQuote){ afterQuote = afterQuote.toLowerCase(); if(afterQuote == "b" || afterQuote == "h" || afterQuote == "o") stream.next(); } end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } //Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement"){ popContext(state); } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement"))) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, electricChars: "{}", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function def(mimes, mode) { if (typeof mimes == "string") mimes = [mimes]; var words = []; function add(obj) { if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) words.push(prop); } add(mode.keywords); add(mode.builtin); add(mode.timerOps); add(mode.portOps); if (words.length) { mode.helperType = mimes[0]; CodeMirror.registerHelper("hintWords", mimes[0], words); } for (var i = 0; i < mimes.length; ++i) CodeMirror.defineMIME(mimes[i], mode); } def(["text/x-ttcn", "text/x-ttcn3", "text/x-ttcnpp"], { name: "ttcn", keywords: words("activate address alive all alt altstep and and4b any" + " break case component const continue control deactivate" + " display do else encode enumerated except exception" + " execute extends extension external for from function" + " goto group if import in infinity inout interleave" + " label language length log match message mixed mod" + " modifies module modulepar mtc noblock not not4b nowait" + " of on optional or or4b out override param pattern port" + " procedure record recursive rem repeat return runs select" + " self sender set signature system template testcase to" + " type union value valueof var variant while with xor xor4b"), builtin: words("bit2hex bit2int bit2oct bit2str char2int char2oct encvalue" + " decomp decvalue float2int float2str hex2bit hex2int" + " hex2oct hex2str int2bit int2char int2float int2hex" + " int2oct int2str int2unichar isbound ischosen ispresent" + " isvalue lengthof log2str oct2bit oct2char oct2hex oct2int" + " oct2str regexp replace rnd sizeof str2bit str2float" + " str2hex str2int str2oct substr unichar2int unichar2char" + " enum2int"), types: words("anytype bitstring boolean char charstring default float" + " hexstring integer objid octetstring universal verdicttype timer"), timerOps: words("read running start stop timeout"), portOps: words("call catch check clear getcall getreply halt raise receive" + " reply send trigger"), configOps: words("create connect disconnect done kill killed map unmap"), verdictOps: words("getverdict setverdict"), sutOps: words("action"), functionOps: words("apply derefers refers"), verdictConsts: words("error fail inconc none pass"), booleanConsts: words("true false"), otherConsts: words("null NULL omit"), visibilityModifiers: words("private public friend"), templateMatch: words("complement ifpresent subset superset permutation"), multiLineStrings: true }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("ttcn-cfg", function(config, parserConfig) { var indentUnit = config.indentUnit, keywords = parserConfig.keywords || {}, fileNCtrlMaskOptions = parserConfig.fileNCtrlMaskOptions || {}, externalCommands = parserConfig.externalCommands || {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false; var isOperatorChar = /[\|]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[:=]/.test(ch)) { curPunc = ch; return "punctuation"; } if (ch == "#"){ stream.skipToEnd(); return "comment"; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } if (ch == "["){ stream.eatWhile(/[\w_\]]/); return "number sectionTitle"; } stream.eatWhile(/[\w\$_]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (fileNCtrlMaskOptions.propertyIsEnumerable(cur)) return "negative fileNCtrlMaskOptions"; if (externalCommands.propertyIsEnumerable(cur)) return "negative externalCommands"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped){ var afterNext = stream.peek(); //look if the character if the quote is like the B in '10100010'B if (afterNext){ afterNext = afterNext.toLowerCase(); if(afterNext == "b" || afterNext == "h" || afterNext == "o") stream.next(); } end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } //Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement"){ popContext(state); } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement"))) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, electricChars: "{}", lineComment: "#", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } CodeMirror.defineMIME("text/x-ttcn-cfg", { name: "ttcn-cfg", keywords: words("Yes No LogFile FileMask ConsoleMask AppendFile" + " TimeStampFormat LogEventTypes SourceInfoFormat" + " LogEntityName LogSourceInfo DiskFullAction" + " LogFileNumber LogFileSize MatchingHints Detailed" + " Compact SubCategories Stack Single None Seconds" + " DateTime Time Stop Error Retry Delete TCPPort KillTimer" + " NumHCs UnixSocketsEnabled LocalAddress"), fileNCtrlMaskOptions: words("TTCN_EXECUTOR TTCN_ERROR TTCN_WARNING" + " TTCN_PORTEVENT TTCN_TIMEROP TTCN_VERDICTOP" + " TTCN_DEFAULTOP TTCN_TESTCASE TTCN_ACTION" + " TTCN_USER TTCN_FUNCTION TTCN_STATISTICS" + " TTCN_PARALLEL TTCN_MATCHING TTCN_DEBUG" + " EXECUTOR ERROR WARNING PORTEVENT TIMEROP" + " VERDICTOP DEFAULTOP TESTCASE ACTION USER" + " FUNCTION STATISTICS PARALLEL MATCHING DEBUG" + " LOG_ALL LOG_NOTHING ACTION_UNQUALIFIED" + " DEBUG_ENCDEC DEBUG_TESTPORT" + " DEBUG_UNQUALIFIED DEFAULTOP_ACTIVATE" + " DEFAULTOP_DEACTIVATE DEFAULTOP_EXIT" + " DEFAULTOP_UNQUALIFIED ERROR_UNQUALIFIED" + " EXECUTOR_COMPONENT EXECUTOR_CONFIGDATA" + " EXECUTOR_EXTCOMMAND EXECUTOR_LOGOPTIONS" + " EXECUTOR_RUNTIME EXECUTOR_UNQUALIFIED" + " FUNCTION_RND FUNCTION_UNQUALIFIED" + " MATCHING_DONE MATCHING_MCSUCCESS" + " MATCHING_MCUNSUCC MATCHING_MMSUCCESS" + " MATCHING_MMUNSUCC MATCHING_PCSUCCESS" + " MATCHING_PCUNSUCC MATCHING_PMSUCCESS" + " MATCHING_PMUNSUCC MATCHING_PROBLEM" + " MATCHING_TIMEOUT MATCHING_UNQUALIFIED" + " PARALLEL_PORTCONN PARALLEL_PORTMAP" + " PARALLEL_PTC PARALLEL_UNQUALIFIED" + " PORTEVENT_DUALRECV PORTEVENT_DUALSEND" + " PORTEVENT_MCRECV PORTEVENT_MCSEND" + " PORTEVENT_MMRECV PORTEVENT_MMSEND" + " PORTEVENT_MQUEUE PORTEVENT_PCIN" + " PORTEVENT_PCOUT PORTEVENT_PMIN" + " PORTEVENT_PMOUT PORTEVENT_PQUEUE" + " PORTEVENT_STATE PORTEVENT_UNQUALIFIED" + " STATISTICS_UNQUALIFIED STATISTICS_VERDICT" + " TESTCASE_FINISH TESTCASE_START" + " TESTCASE_UNQUALIFIED TIMEROP_GUARD" + " TIMEROP_READ TIMEROP_START TIMEROP_STOP" + " TIMEROP_TIMEOUT TIMEROP_UNQUALIFIED" + " USER_UNQUALIFIED VERDICTOP_FINAL" + " VERDICTOP_GETVERDICT VERDICTOP_SETVERDICT" + " VERDICTOP_UNQUALIFIED WARNING_UNQUALIFIED"), externalCommands: words("BeginControlPart EndControlPart BeginTestCase" + " EndTestCase"), multiLineStrings: true }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("turtle", function(config) { var indentUnit = config.indentUnit; var curPunc; function wordRegexp(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); } wordRegexp([]); var keywords = wordRegexp(["@prefix", "@base", "a"]); var operatorChars = /[*+\-<>=&|]/; function tokenBase(stream, state) { var ch = stream.next(); curPunc = null; if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { stream.match(/^[^\s\u00a0>]*>?/); return "atom"; } else if (ch == "\"" || ch == "'") { state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if (/[{}\(\),\.;\[\]]/.test(ch)) { curPunc = ch; return null; } else if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (operatorChars.test(ch)) { stream.eatWhile(operatorChars); return null; } else if (ch == ":") { return "operator"; } else { stream.eatWhile(/[_\w\d]/); if(stream.peek() == ":") { return "variable-3"; } else { var word = stream.current(); if(keywords.test(word)) { return "meta"; } if(ch >= "A" && ch <= "Z") { return "comment"; } else { return "keyword"; } } var word = stream.current(); } } function tokenLiteral(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return "string"; }; } function pushContext(state, type, col) { state.context = {prev: state.context, indent: state.indent, col: col, type: type}; } function popContext(state) { state.indent = state.context.indent; state.context = state.context.prev; } return { startState: function() { return {tokenize: tokenBase, context: null, indent: 0, col: 0}; }, token: function(stream, state) { if (stream.sol()) { if (state.context && state.context.align == null) state.context.align = false; state.indent = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { state.context.align = true; } if (curPunc == "(") pushContext(state, ")", stream.column()); else if (curPunc == "[") pushContext(state, "]", stream.column()); else if (curPunc == "{") pushContext(state, "}", stream.column()); else if (/[\]\}\)]/.test(curPunc)) { while (state.context && state.context.type == "pattern") popContext(state); if (state.context && curPunc == state.context.type) popContext(state); } else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); else if (/atom|string|variable/.test(style) && state.context) { if (/[\}\]]/.test(state.context.type)) pushContext(state, "pattern", stream.column()); else if (state.context.type == "pattern" && !state.context.align) { state.context.align = true; state.context.col = stream.column(); } } return style; }, indent: function(state, textAfter) { var firstChar = textAfter && textAfter.charAt(0); var context = state.context; if (/[\]\}]/.test(firstChar)) while (context && context.type == "pattern") context = context.prev; var closing = context && firstChar == context.type; if (!context) return 0; else if (context.type == "pattern") return context.col; else if (context.align) return context.col + (closing ? 0 : 1); else return context.indent + (closing ? 0 : indentUnit); }, lineComment: "#" }; }); CodeMirror.defineMIME("text/turtle", "turtle"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror, multiplex); })(function(CodeMirror) { CodeMirror.defineMode("twig:inner", function() { var keywords = ["and", "as", "autoescape", "endautoescape", "block", "do", "endblock", "else", "elseif", "extends", "for", "endfor", "embed", "endembed", "filter", "endfilter", "flush", "from", "if", "endif", "in", "is", "include", "import", "not", "or", "set", "spaceless", "endspaceless", "with", "endwith", "trans", "endtrans", "blocktrans", "endblocktrans", "macro", "endmacro", "use", "verbatim", "endverbatim"], operator = /^[+\-*&%=<>!?|~^]/, sign = /^[:\[\(\{]/, atom = ["true", "false", "null", "empty", "defined", "divisibleby", "divisible by", "even", "odd", "iterable", "sameas", "same as"], number = /^(\d[+\-\*\/])?\d+(\.\d+)?/; keywords = new RegExp("((" + keywords.join(")|(") + "))\\b"); atom = new RegExp("((" + atom.join(")|(") + "))\\b"); function tokenBase (stream, state) { var ch = stream.peek(); //Comment if (state.incomment) { if (!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Tag } else if (state.intag) { //After operator if (state.operator) { state.operator = false; if (stream.match(atom)) { return "atom"; } if (stream.match(number)) { return "number"; } } //After sign if (state.sign) { state.sign = false; if (stream.match(atom)) { return "atom"; } if (stream.match(number)) { return "number"; } } if (state.instring) { if (ch == state.instring) { state.instring = false; } stream.next(); return "string"; } else if (ch == "'" || ch == '"') { state.instring = ch; stream.next(); return "string"; } else if (stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) { state.intag = false; return "tag"; } else if (stream.match(operator)) { state.operator = true; return "operator"; } else if (stream.match(sign)) { state.sign = true; } else { if (stream.eat(" ") || stream.sol()) { if (stream.match(keywords)) { return "keyword"; } if (stream.match(atom)) { return "atom"; } if (stream.match(number)) { return "number"; } if (stream.sol()) { stream.next(); } } else { stream.next(); } } return "variable"; } else if (stream.eat("{")) { if (stream.eat("#")) { state.incomment = true; if (!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Open tag } else if (ch = stream.eat(/\{|%/)) { //Cache close tag state.intag = ch; if (ch == "{") { state.intag = "}"; } stream.eat("-"); return "tag"; } } stream.next(); } return { startState: function () { return {}; }, token: function (stream, state) { return tokenBase(stream, state); } }; }); CodeMirror.defineMode("twig", function(config, parserConfig) { var twigInner = CodeMirror.getMode(config, "twig:inner"); if (!parserConfig || !parserConfig.base) return twigInner; return CodeMirror.multiplexingMode( CodeMirror.getMode(config, parserConfig.base), { open: /\{[{#%]/, close: /[}#%]\}/, mode: twigInner, parseDelimiters: true } ); }); CodeMirror.defineMIME("text/x-twig", "twig"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("vb", function(conf, parserConf) { var ERRORCLASS = 'error'; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); } var singleOperators = new RegExp("^[\\+\\-\\*/%&\\\\|\\^~<>!]"); var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]'); var doubleOperators = new RegExp("^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"); var doubleDelimiters = new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); var tripleDelimiters = new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"); var identifiers = new RegExp("^[_A-Za-z][_A-Za-z0-9]*"); var openingKeywords = ['class','module', 'sub','enum','select','while','if','function', 'get','set','property', 'try', 'structure', 'synclock', 'using', 'with']; var middleKeywords = ['else','elseif','case', 'catch', 'finally']; var endKeywords = ['next','loop']; var operatorKeywords = ['and', "andalso", 'or', 'orelse', 'xor', 'in', 'not', 'is', 'isnot', 'like']; var wordOperators = wordRegexp(operatorKeywords); var commonKeywords = ["#const", "#else", "#elseif", "#end", "#if", "#region", "addhandler", "addressof", "alias", "as", "byref", "byval", "cbool", "cbyte", "cchar", "cdate", "cdbl", "cdec", "cint", "clng", "cobj", "compare", "const", "continue", "csbyte", "cshort", "csng", "cstr", "cuint", "culng", "cushort", "declare", "default", "delegate", "dim", "directcast", "each", "erase", "error", "event", "exit", "explicit", "false", "for", "friend", "gettype", "goto", "handles", "implements", "imports", "infer", "inherits", "interface", "isfalse", "istrue", "lib", "me", "mod", "mustinherit", "mustoverride", "my", "mybase", "myclass", "namespace", "narrowing", "new", "nothing", "notinheritable", "notoverridable", "of", "off", "on", "operator", "option", "optional", "out", "overloads", "overridable", "overrides", "paramarray", "partial", "private", "protected", "public", "raiseevent", "readonly", "redim", "removehandler", "resume", "return", "shadows", "shared", "static", "step", "stop", "strict", "then", "throw", "to", "true", "trycast", "typeof", "until", "until", "when", "widening", "withevents", "writeonly"]; var commontypes = ['object', 'boolean', 'char', 'string', 'byte', 'sbyte', 'short', 'ushort', 'int16', 'uint16', 'integer', 'uinteger', 'int32', 'uint32', 'long', 'ulong', 'int64', 'uint64', 'decimal', 'single', 'double', 'float', 'date', 'datetime', 'intptr', 'uintptr']; var keywords = wordRegexp(commonKeywords); var types = wordRegexp(commontypes); var stringPrefixes = '"'; var opening = wordRegexp(openingKeywords); var middle = wordRegexp(middleKeywords); var closing = wordRegexp(endKeywords); var doubleClosing = wordRegexp(['end']); var doOpening = wordRegexp(['do']); CodeMirror.registerHelper("hintWords", "vb", openingKeywords.concat(middleKeywords).concat(endKeywords) .concat(operatorKeywords).concat(commonKeywords).concat(commontypes)); function indent(_stream, state) { state.currentIndent++; } function dedent(_stream, state) { state.currentIndent--; } // tokenizers function tokenBase(stream, state) { if (stream.eatSpace()) { return null; } var ch = stream.peek(); // Handle Comments if (ch === "'") { stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^((&H)|(&O))?[0-9\.a-f]/i, false)) { var floatLiteral = false; // Floats if (stream.match(/^\d*\.\d+F?/i)) { floatLiteral = true; } else if (stream.match(/^\d+\.\d*F?/)) { floatLiteral = true; } else if (stream.match(/^\.\d+F?/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.eat(/J/i); return 'number'; } // Integers var intLiteral = false; // Hex if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } // Octal else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } // Decimal else if (stream.match(/^[1-9]\d*F?/)) { // Decimal literals may be "imaginary" stream.eat(/J/i); // TODO - Can you have imaginary longs? intLiteral = true; } // Zero by itself with no other piece of number. else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { // Integer literals may be "long" stream.eat(/L/i); return 'number'; } } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } // Handle operators and Delimiters if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) { return null; } if (stream.match(doubleOperators) || stream.match(singleOperators) || stream.match(wordOperators)) { return 'operator'; } if (stream.match(singleDelimiters)) { return null; } if (stream.match(doOpening)) { indent(stream,state); state.doInCurrentLine = true; return 'keyword'; } if (stream.match(opening)) { if (! state.doInCurrentLine) indent(stream,state); else state.doInCurrentLine = false; return 'keyword'; } if (stream.match(middle)) { return 'keyword'; } if (stream.match(doubleClosing)) { dedent(stream,state); dedent(stream,state); return 'keyword'; } if (stream.match(closing)) { dedent(stream,state); return 'keyword'; } if (stream.match(types)) { return 'keyword'; } if (stream.match(keywords)) { return 'keyword'; } if (stream.match(identifiers)) { return 'variable'; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenStringFactory(delimiter) { var singleline = delimiter.length == 1; var OUTCLASS = 'string'; return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"]/); if (stream.match(delimiter)) { state.tokenize = tokenBase; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { return ERRORCLASS; } else { state.tokenize = tokenBase; } } return OUTCLASS; }; } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle '.' connected identifiers if (current === '.') { style = state.tokenize(stream, state); if (style === 'variable') { return 'variable'; } else { return ERRORCLASS; } } var delimiter_index = '[({'.indexOf(current); if (delimiter_index !== -1) { indent(stream, state ); } delimiter_index = '])}'.indexOf(current); if (delimiter_index !== -1) { if (dedent(stream, state)) { return ERRORCLASS; } } return style; } var external = { electricChars:"dDpPtTfFeE ", startState: function() { return { tokenize: tokenBase, lastToken: null, currentIndent: 0, nextLineIndent: 0, doInCurrentLine: false }; }, token: function(stream, state) { if (stream.sol()) { state.currentIndent += state.nextLineIndent; state.nextLineIndent = 0; state.doInCurrentLine = 0; } var style = tokenLexer(stream, state); state.lastToken = {style:style, content: stream.current()}; return style; }, indent: function(state, textAfter) { var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); if(state.currentIndent < 0) return 0; return state.currentIndent * conf.indentUnit; }, lineComment: "'" }; return external; }); CodeMirror.defineMIME("text/x-vb", "vb"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE /* For extra ASP classic objects, initialize CodeMirror instance with this option: isASP: true E.G.: var editor = CodeMirror.fromTextArea(document.getElementById("code"), { lineNumbers: true, isASP: true }); */ (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("vbscript", function(conf, parserConf) { var ERRORCLASS = 'error'; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); } var singleOperators = new RegExp("^[\\+\\-\\*/&\\\\\\^<>=]"); var doubleOperators = new RegExp("^((<>)|(<=)|(>=))"); var singleDelimiters = new RegExp('^[\\.,]'); var brakets = new RegExp('^[\\(\\)]'); var identifiers = new RegExp("^[A-Za-z][_A-Za-z0-9]*"); var openingKeywords = ['class','sub','select','while','if','function', 'property', 'with', 'for']; var middleKeywords = ['else','elseif','case']; var endKeywords = ['next','loop','wend']; var wordOperators = wordRegexp(['and', 'or', 'not', 'xor', 'is', 'mod', 'eqv', 'imp']); var commonkeywords = ['dim', 'redim', 'then', 'until', 'randomize', 'byval','byref','new','property', 'exit', 'in', 'const','private', 'public', 'get','set','let', 'stop', 'on error resume next', 'on error goto 0', 'option explicit', 'call', 'me']; //This list was from: http://msdn.microsoft.com/en-us/library/f8tbc79x(v=vs.84).aspx var atomWords = ['true', 'false', 'nothing', 'empty', 'null']; //This list was from: http://msdn.microsoft.com/en-us/library/3ca8tfek(v=vs.84).aspx var builtinFuncsWords = ['abs', 'array', 'asc', 'atn', 'cbool', 'cbyte', 'ccur', 'cdate', 'cdbl', 'chr', 'cint', 'clng', 'cos', 'csng', 'cstr', 'date', 'dateadd', 'datediff', 'datepart', 'dateserial', 'datevalue', 'day', 'escape', 'eval', 'execute', 'exp', 'filter', 'formatcurrency', 'formatdatetime', 'formatnumber', 'formatpercent', 'getlocale', 'getobject', 'getref', 'hex', 'hour', 'inputbox', 'instr', 'instrrev', 'int', 'fix', 'isarray', 'isdate', 'isempty', 'isnull', 'isnumeric', 'isobject', 'join', 'lbound', 'lcase', 'left', 'len', 'loadpicture', 'log', 'ltrim', 'rtrim', 'trim', 'maths', 'mid', 'minute', 'month', 'monthname', 'msgbox', 'now', 'oct', 'replace', 'rgb', 'right', 'rnd', 'round', 'scriptengine', 'scriptenginebuildversion', 'scriptenginemajorversion', 'scriptengineminorversion', 'second', 'setlocale', 'sgn', 'sin', 'space', 'split', 'sqr', 'strcomp', 'string', 'strreverse', 'tan', 'time', 'timer', 'timeserial', 'timevalue', 'typename', 'ubound', 'ucase', 'unescape', 'vartype', 'weekday', 'weekdayname', 'year']; //This list was from: http://msdn.microsoft.com/en-us/library/ydz4cfk3(v=vs.84).aspx var builtinConsts = ['vbBlack', 'vbRed', 'vbGreen', 'vbYellow', 'vbBlue', 'vbMagenta', 'vbCyan', 'vbWhite', 'vbBinaryCompare', 'vbTextCompare', 'vbSunday', 'vbMonday', 'vbTuesday', 'vbWednesday', 'vbThursday', 'vbFriday', 'vbSaturday', 'vbUseSystemDayOfWeek', 'vbFirstJan1', 'vbFirstFourDays', 'vbFirstFullWeek', 'vbGeneralDate', 'vbLongDate', 'vbShortDate', 'vbLongTime', 'vbShortTime', 'vbObjectError', 'vbOKOnly', 'vbOKCancel', 'vbAbortRetryIgnore', 'vbYesNoCancel', 'vbYesNo', 'vbRetryCancel', 'vbCritical', 'vbQuestion', 'vbExclamation', 'vbInformation', 'vbDefaultButton1', 'vbDefaultButton2', 'vbDefaultButton3', 'vbDefaultButton4', 'vbApplicationModal', 'vbSystemModal', 'vbOK', 'vbCancel', 'vbAbort', 'vbRetry', 'vbIgnore', 'vbYes', 'vbNo', 'vbCr', 'VbCrLf', 'vbFormFeed', 'vbLf', 'vbNewLine', 'vbNullChar', 'vbNullString', 'vbTab', 'vbVerticalTab', 'vbUseDefault', 'vbTrue', 'vbFalse', 'vbEmpty', 'vbNull', 'vbInteger', 'vbLong', 'vbSingle', 'vbDouble', 'vbCurrency', 'vbDate', 'vbString', 'vbObject', 'vbError', 'vbBoolean', 'vbVariant', 'vbDataObject', 'vbDecimal', 'vbByte', 'vbArray']; //This list was from: http://msdn.microsoft.com/en-us/library/hkc375ea(v=vs.84).aspx var builtinObjsWords = ['WScript', 'err', 'debug', 'RegExp']; var knownProperties = ['description', 'firstindex', 'global', 'helpcontext', 'helpfile', 'ignorecase', 'length', 'number', 'pattern', 'source', 'value', 'count']; var knownMethods = ['clear', 'execute', 'raise', 'replace', 'test', 'write', 'writeline', 'close', 'open', 'state', 'eof', 'update', 'addnew', 'end', 'createobject', 'quit']; var aspBuiltinObjsWords = ['server', 'response', 'request', 'session', 'application']; var aspKnownProperties = ['buffer', 'cachecontrol', 'charset', 'contenttype', 'expires', 'expiresabsolute', 'isclientconnected', 'pics', 'status', //response 'clientcertificate', 'cookies', 'form', 'querystring', 'servervariables', 'totalbytes', //request 'contents', 'staticobjects', //application 'codepage', 'lcid', 'sessionid', 'timeout', //session 'scripttimeout']; //server var aspKnownMethods = ['addheader', 'appendtolog', 'binarywrite', 'end', 'flush', 'redirect', //response 'binaryread', //request 'remove', 'removeall', 'lock', 'unlock', //application 'abandon', //session 'getlasterror', 'htmlencode', 'mappath', 'transfer', 'urlencode']; //server var knownWords = knownMethods.concat(knownProperties); builtinObjsWords = builtinObjsWords.concat(builtinConsts); if (conf.isASP){ builtinObjsWords = builtinObjsWords.concat(aspBuiltinObjsWords); knownWords = knownWords.concat(aspKnownMethods, aspKnownProperties); } var keywords = wordRegexp(commonkeywords); var atoms = wordRegexp(atomWords); var builtinFuncs = wordRegexp(builtinFuncsWords); var builtinObjs = wordRegexp(builtinObjsWords); var known = wordRegexp(knownWords); var stringPrefixes = '"'; var opening = wordRegexp(openingKeywords); var middle = wordRegexp(middleKeywords); var closing = wordRegexp(endKeywords); var doubleClosing = wordRegexp(['end']); var doOpening = wordRegexp(['do']); var noIndentWords = wordRegexp(['on error resume next', 'exit']); var comment = wordRegexp(['rem']); function indent(_stream, state) { state.currentIndent++; } function dedent(_stream, state) { state.currentIndent--; } // tokenizers function tokenBase(stream, state) { if (stream.eatSpace()) { return 'space'; //return null; } var ch = stream.peek(); // Handle Comments if (ch === "'") { stream.skipToEnd(); return 'comment'; } if (stream.match(comment)){ stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^((&H)|(&O))?[0-9\.]/i, false) && !stream.match(/^((&H)|(&O))?[0-9\.]+[a-z_]/i, false)) { var floatLiteral = false; // Floats if (stream.match(/^\d*\.\d+/i)) { floatLiteral = true; } else if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } else if (stream.match(/^\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.eat(/J/i); return 'number'; } // Integers var intLiteral = false; // Hex if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } // Octal else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } // Decimal else if (stream.match(/^[1-9]\d*F?/)) { // Decimal literals may be "imaginary" stream.eat(/J/i); // TODO - Can you have imaginary longs? intLiteral = true; } // Zero by itself with no other piece of number. else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { // Integer literals may be "long" stream.eat(/L/i); return 'number'; } } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } // Handle operators and Delimiters if (stream.match(doubleOperators) || stream.match(singleOperators) || stream.match(wordOperators)) { return 'operator'; } if (stream.match(singleDelimiters)) { return null; } if (stream.match(brakets)) { return "bracket"; } if (stream.match(noIndentWords)) { state.doInCurrentLine = true; return 'keyword'; } if (stream.match(doOpening)) { indent(stream,state); state.doInCurrentLine = true; return 'keyword'; } if (stream.match(opening)) { if (! state.doInCurrentLine) indent(stream,state); else state.doInCurrentLine = false; return 'keyword'; } if (stream.match(middle)) { return 'keyword'; } if (stream.match(doubleClosing)) { dedent(stream,state); dedent(stream,state); return 'keyword'; } if (stream.match(closing)) { if (! state.doInCurrentLine) dedent(stream,state); else state.doInCurrentLine = false; return 'keyword'; } if (stream.match(keywords)) { return 'keyword'; } if (stream.match(atoms)) { return 'atom'; } if (stream.match(known)) { return 'variable-2'; } if (stream.match(builtinFuncs)) { return 'builtin'; } if (stream.match(builtinObjs)){ return 'variable-2'; } if (stream.match(identifiers)) { return 'variable'; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenStringFactory(delimiter) { var singleline = delimiter.length == 1; var OUTCLASS = 'string'; return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"]/); if (stream.match(delimiter)) { state.tokenize = tokenBase; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { return ERRORCLASS; } else { state.tokenize = tokenBase; } } return OUTCLASS; }; } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle '.' connected identifiers if (current === '.') { style = state.tokenize(stream, state); current = stream.current(); if (style && (style.substr(0, 8) === 'variable' || style==='builtin' || style==='keyword')){//|| knownWords.indexOf(current.substring(1)) > -1) { if (style === 'builtin' || style === 'keyword') style='variable'; if (knownWords.indexOf(current.substr(1)) > -1) style='variable-2'; return style; } else { return ERRORCLASS; } } return style; } var external = { electricChars:"dDpPtTfFeE ", startState: function() { return { tokenize: tokenBase, lastToken: null, currentIndent: 0, nextLineIndent: 0, doInCurrentLine: false, ignoreKeyword: false }; }, token: function(stream, state) { if (stream.sol()) { state.currentIndent += state.nextLineIndent; state.nextLineIndent = 0; state.doInCurrentLine = 0; } var style = tokenLexer(stream, state); state.lastToken = {style:style, content: stream.current()}; if (style==='space') style=null; return style; }, indent: function(state, textAfter) { var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); if(state.currentIndent < 0) return 0; return state.currentIndent * conf.indentUnit; } }; return external; }); CodeMirror.defineMIME("text/vbscript", "vbscript"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("velocity", function() { function parseWords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = parseWords("#end #else #break #stop #[[ #]] " + "#{end} #{else} #{break} #{stop}"); var functions = parseWords("#if #elseif #foreach #set #include #parse #macro #define #evaluate " + "#{if} #{elseif} #{foreach} #{set} #{include} #{parse} #{macro} #{define} #{evaluate}"); var specials = parseWords("$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent.count $foreach.parent.hasNext $foreach.parent.first $foreach.parent.last $foreach.parent $velocityCount $!bodyContent $bodyContent"); var isOperatorChar = /[+\-*&%=<>!?:\/|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var beforeParams = state.beforeParams; state.beforeParams = false; var ch = stream.next(); // start of unparsed string? if ((ch == "'") && !state.inString && state.inParams) { state.lastTokenWasBuiltin = false; return chain(stream, state, tokenString(ch)); } // start of parsed string? else if ((ch == '"')) { state.lastTokenWasBuiltin = false; if (state.inString) { state.inString = false; return "string"; } else if (state.inParams) return chain(stream, state, tokenString(ch)); } // is it one of the special signs []{}().,;? Seperator? else if (/[\[\]{}\(\),;\.]/.test(ch)) { if (ch == "(" && beforeParams) state.inParams = true; else if (ch == ")") { state.inParams = false; state.lastTokenWasBuiltin = true; } return null; } // start of a number value? else if (/\d/.test(ch)) { state.lastTokenWasBuiltin = false; stream.eatWhile(/[\w\.]/); return "number"; } // multi line comment? else if (ch == "#" && stream.eat("*")) { state.lastTokenWasBuiltin = false; return chain(stream, state, tokenComment); } // unparsed content? else if (ch == "#" && stream.match(/ *\[ *\[/)) { state.lastTokenWasBuiltin = false; return chain(stream, state, tokenUnparsed); } // single line comment? else if (ch == "#" && stream.eat("#")) { state.lastTokenWasBuiltin = false; stream.skipToEnd(); return "comment"; } // variable? else if (ch == "$") { stream.eatWhile(/[\w\d\$_\.{}-]/); // is it one of the specials? if (specials && specials.propertyIsEnumerable(stream.current())) { return "keyword"; } else { state.lastTokenWasBuiltin = true; state.beforeParams = true; return "builtin"; } } // is it a operator? else if (isOperatorChar.test(ch)) { state.lastTokenWasBuiltin = false; stream.eatWhile(isOperatorChar); return "operator"; } else { // get the whole word stream.eatWhile(/[\w\$_{}@]/); var word = stream.current(); // is it one of the listed keywords? if (keywords && keywords.propertyIsEnumerable(word)) return "keyword"; // is it one of the listed functions? if (functions && functions.propertyIsEnumerable(word) || (stream.current().match(/^#@?[a-z0-9_]+ *$/i) && stream.peek()=="(") && !(functions && functions.propertyIsEnumerable(word.toLowerCase()))) { state.beforeParams = true; state.lastTokenWasBuiltin = false; return "keyword"; } if (state.inString) { state.lastTokenWasBuiltin = false; return "string"; } if (stream.pos > word.length && stream.string.charAt(stream.pos-word.length-1)=="." && state.lastTokenWasBuiltin) return "builtin"; // default: just a "word" state.lastTokenWasBuiltin = false; return null; } } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if ((next == quote) && !escaped) { end = true; break; } if (quote=='"' && stream.peek() == '$' && !escaped) { state.inString = true; end = true; break; } escaped = !escaped && next == "\\"; } if (end) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenUnparsed(stream, state) { var maybeEnd = 0, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd == 2) { state.tokenize = tokenBase; break; } if (ch == "]") maybeEnd++; else if (ch != " ") maybeEnd = 0; } return "meta"; } // Interface return { startState: function() { return { tokenize: tokenBase, beforeParams: false, inParams: false, inString: false, lastTokenWasBuiltin: false }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, blockCommentStart: "#*", blockCommentEnd: "*#", lineComment: "##", fold: "velocity" }; }); CodeMirror.defineMIME("text/velocity", "velocity"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("verilog", function(config, parserConfig) { var indentUnit = config.indentUnit, statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, dontAlignCalls = parserConfig.dontAlignCalls, noIndentKeywords = parserConfig.noIndentKeywords || [], multiLineStrings = parserConfig.multiLineStrings, hooks = parserConfig.hooks || {}; function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } /** * Keywords from IEEE 1800-2012 */ var keywords = words( "accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind " + "bins binsof bit break buf bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config " + "const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable " + "dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup " + "endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask " + "enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin " + "function generate genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import " + "incdir include initial inout input inside instance int integer interconnect interface intersect join join_any " + "join_none large let liblist library local localparam logic longint macromodule matches medium modport module " + "nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 null or output package packed " + "parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup " + "pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg " + "reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime " + "s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify " + "specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on " + "table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior " + "trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void " + "wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor"); /** Operators from IEEE 1800-2012 unary_operator ::= + | - | ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~ binary_operator ::= + | - | * | / | % | == | != | === | !== | ==? | !=? | && | || | ** | < | <= | > | >= | & | | | ^ | ^~ | ~^ | >> | << | >>> | <<< | -> | <-> inc_or_dec_operator ::= ++ | -- unary_module_path_operator ::= ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~ binary_module_path_operator ::= == | != | && | || | & | | | ^ | ^~ | ~^ */ var isOperatorChar = /[\+\-\*\/!~&|^%=?:]/; var isBracketChar = /[\[\]{}()]/; var unsignedNumber = /\d[0-9_]*/; var decimalLiteral = /\d*\s*'s?d\s*\d[0-9_]*/i; var binaryLiteral = /\d*\s*'s?b\s*[xz01][xz01_]*/i; var octLiteral = /\d*\s*'s?o\s*[xz0-7][xz0-7_]*/i; var hexLiteral = /\d*\s*'s?h\s*[0-9a-fxz?][0-9a-fxz?_]*/i; var realLiteral = /(\d[\d_]*(\.\d[\d_]*)?E-?[\d_]+)|(\d[\d_]*\.\d[\d_]*)/i; var closingBracketOrWord = /^((\w+)|[)}\]])/; var closingBracket = /[)}\]]/; var curPunc; var curKeyword; // Block openings which are closed by a matching keyword in the form of ("end" + keyword) // E.g. "task" => "endtask" var blockKeywords = words( "case checker class clocking config function generate interface module package " + "primitive program property specify sequence table task" ); // Opening/closing pairs var openClose = {}; for (var keyword in blockKeywords) { openClose[keyword] = "end" + keyword; } openClose["begin"] = "end"; openClose["casex"] = "endcase"; openClose["casez"] = "endcase"; openClose["do" ] = "while"; openClose["fork" ] = "join;join_any;join_none"; openClose["covergroup"] = "endgroup"; for (var i in noIndentKeywords) { var keyword = noIndentKeywords[i]; if (openClose[keyword]) { openClose[keyword] = undefined; } } // Keywords which open statements that are ended with a semi-colon var statementKeywords = words("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while"); function tokenBase(stream, state) { var ch = stream.peek(), style; if (hooks[ch] && (style = hooks[ch](stream, state)) != false) return style; if (hooks.tokenBase && (style = hooks.tokenBase(stream, state)) != false) return style; if (/[,;:\.]/.test(ch)) { curPunc = stream.next(); return null; } if (isBracketChar.test(ch)) { curPunc = stream.next(); return "bracket"; } // Macros (tick-defines) if (ch == '`') { stream.next(); if (stream.eatWhile(/[\w\$_]/)) { return "def"; } else { return null; } } // System calls if (ch == '$') { stream.next(); if (stream.eatWhile(/[\w\$_]/)) { return "meta"; } else { return null; } } // Time literals if (ch == '#') { stream.next(); stream.eatWhile(/[\d_.]/); return "def"; } // Strings if (ch == '"') { stream.next(); state.tokenize = tokenString(ch); return state.tokenize(stream, state); } // Comments if (ch == "/") { stream.next(); if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } stream.backUp(1); } // Numeric literals if (stream.match(realLiteral) || stream.match(decimalLiteral) || stream.match(binaryLiteral) || stream.match(octLiteral) || stream.match(hexLiteral) || stream.match(unsignedNumber) || stream.match(realLiteral)) { return "number"; } // Operators if (stream.eatWhile(isOperatorChar)) { return "meta"; } // Keywords / plain variables if (stream.eatWhile(/[\w\$_]/)) { var cur = stream.current(); if (keywords[cur]) { if (openClose[cur]) { curPunc = "newblock"; } if (statementKeywords[cur]) { curPunc = "newstatement"; } curKeyword = cur; return "keyword"; } return "variable"; } stream.next(); return null; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; var c = new Context(indent, col, type, null, state.context); return state.context = c; } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") { state.indented = state.context.indented; } return state.context = state.context.prev; } function isClosing(text, contextClosing) { if (text == contextClosing) { return true; } else { // contextClosing may be multiple keywords separated by ; var closingKeywords = contextClosing.split(";"); for (var i in closingKeywords) { if (text == closingKeywords[i]) { return true; } } return false; } } function buildElectricInputRegEx() { // Reindentation should occur on any bracket char: {}()[] // or on a match of any of the block closing keywords, at // the end of a line var allClosings = []; for (var i in openClose) { if (openClose[i]) { var closings = openClose[i].split(";"); for (var j in closings) { allClosings.push(closings[j]); } } } var re = new RegExp("[{}()\\[\\]]|(" + allClosings.join("|") + ")$"); return re; } // Interface return { // Regex to force current line to reindent electricInput: buildElectricInputRegEx(), startState: function(basecolumn) { var state = { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; if (hooks.startState) hooks.startState(state); return state; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (hooks.token) { // Call hook, with an optional return value of a style to override verilog styling. var style = hooks.token(stream, state); if (style !== undefined) { return style; } } if (stream.eatSpace()) return null; curPunc = null; curKeyword = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta" || style == "variable") return style; if (ctx.align == null) ctx.align = true; if (curPunc == ctx.type) { popContext(state); } else if ((curPunc == ";" && ctx.type == "statement") || (ctx.type && isClosing(curKeyword, ctx.type))) { ctx = popContext(state); while (ctx && ctx.type == "statement") ctx = popContext(state); } else if (curPunc == "{") { pushContext(state, stream.column(), "}"); } else if (curPunc == "[") { pushContext(state, stream.column(), "]"); } else if (curPunc == "(") { pushContext(state, stream.column(), ")"); } else if (ctx && ctx.type == "endcase" && curPunc == ":") { pushContext(state, stream.column(), "statement"); } else if (curPunc == "newstatement") { pushContext(state, stream.column(), "statement"); } else if (curPunc == "newblock") { if (curKeyword == "function" && ctx && (ctx.type == "statement" || ctx.type == "endgroup")) ; else if (curKeyword == "task" && ctx && ctx.type == "statement") ; else { var close = openClose[curKeyword]; pushContext(state, stream.column(), close); } } state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; if (hooks.indent) { var fromHook = hooks.indent(state); if (fromHook >= 0) return fromHook; } var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = false; var possibleClosing = textAfter.match(closingBracketOrWord); if (possibleClosing) closing = isClosing(possibleClosing[0], ctx.type); if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); else if (closingBracket.test(ctx.type) && ctx.align && !dontAlignCalls) return ctx.column + (closing ? 0 : 1); else if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit; else return ctx.indented + (closing ? 0 : indentUnit); }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", fold: "indent" }; }); CodeMirror.defineMIME("text/x-verilog", { name: "verilog" }); CodeMirror.defineMIME("text/x-systemverilog", { name: "verilog" }); // TL-Verilog mode. // See tl-x.org for language spec. // See the mode in action at makerchip.com. // Contact: steve.hoover@redwoodeda.com // TLV Identifier prefixes. // Note that sign is not treated separately, so "+/-" versions of numeric identifiers // are included. var tlvIdentifierStyle = { "|": "link", ">": "property", // Should condition this off for > TLV 1c. "$": "variable", "$$": "variable", "?$": "qualifier", "?*": "qualifier", "-": "hr", "/": "property", "/-": "property", "@": "variable-3", "@-": "variable-3", "@++": "variable-3", "@+=": "variable-3", "@+=-": "variable-3", "@--": "variable-3", "@-=": "variable-3", "%+": "tag", "%-": "tag", "%": "tag", ">>": "tag", "<<": "tag", "<>": "tag", "#": "tag", // Need to choose a style for this. "^": "attribute", "^^": "attribute", "^!": "attribute", "*": "variable-2", "**": "variable-2", "\\": "keyword", "\"": "comment" }; // Lines starting with these characters define scope (result in indentation). var tlvScopePrefixChars = { "/": "beh-hier", ">": "beh-hier", "-": "phys-hier", "|": "pipe", "?": "when", "@": "stage", "\\": "keyword" }; var tlvIndentUnit = 3; var tlvIdentMatch = /^([~!@#\$%\^&\*-\+=\?\/\\\|'"<>]+)([\d\w_]*)/; // Matches an identifiere. // Note that ':' is excluded, because of it's use in [:]. var tlvFirstLevelIndentMatch = /^[! ] /; var tlvLineIndentationMatch = /^[! ] */; var tlvCommentMatch = /^\/[\/\*]/; // Returns a style specific to the scope at the given indentation column. // Type is one of: "indent", "scope-ident", "before-scope-ident". function tlvScopeStyle(state, indentation, type) { // Begin scope. var depth = indentation / tlvIndentUnit; // TODO: Pass this in instead. return "tlv-" + state.tlvIndentationStyle[depth] + "-" + type; } // Return true if the next thing in the stream is an identifier with a mnemonic. function tlvIdentNext(stream) { var match; return (match = stream.match(tlvIdentMatch, false)) && match[2].length > 0; } CodeMirror.defineMIME("text/x-tlv", { name: "verilog", hooks: { electricInput: false, // Return undefined for verilog tokenizing, or style for TLV token (null not used). // Standard CM styles are used for most formatting, but some TL-Verilog-specific highlighting // can be enabled with the definition of cm-tlv-* styles, including highlighting for: // - M4 tokens // - TLV scope indentation // - Statement delimitation (enabled by tlvTrackStatements) token: function(stream, state) { var style = undefined; var match; // Return value of pattern matches. // Set highlighting mode based on code region (TLV or SV). if (stream.sol() && ! state.tlvInBlockComment) { // Process region. if (stream.peek() == '\\') { style = "def"; stream.skipToEnd(); if (stream.string.match(/\\SV/)) { state.tlvCodeActive = false; } else if (stream.string.match(/\\TLV/)){ state.tlvCodeActive = true; } } // Correct indentation in the face of a line prefix char. if (state.tlvCodeActive && stream.pos == 0 && (state.indented == 0) && (match = stream.match(tlvLineIndentationMatch, false))) { state.indented = match[0].length; } // Compute indentation state: // o Auto indentation on next line // o Indentation scope styles var indented = state.indented; var depth = indented / tlvIndentUnit; if (depth <= state.tlvIndentationStyle.length) { // not deeper than current scope var blankline = stream.string.length == indented; var chPos = depth * tlvIndentUnit; if (chPos < stream.string.length) { var bodyString = stream.string.slice(chPos); var ch = bodyString[0]; if (tlvScopePrefixChars[ch] && ((match = bodyString.match(tlvIdentMatch)) && tlvIdentifierStyle[match[1]])) { // This line begins scope. // Next line gets indented one level. indented += tlvIndentUnit; // Style the next level of indentation (except non-region keyword identifiers, // which are statements themselves) if (!(ch == "\\" && chPos > 0)) { state.tlvIndentationStyle[depth] = tlvScopePrefixChars[ch]; depth++; } } } // Clear out deeper indentation levels unless line is blank. if (!blankline) { while (state.tlvIndentationStyle.length > depth) { state.tlvIndentationStyle.pop(); } } } // Set next level of indentation. state.tlvNextIndent = indented; } if (state.tlvCodeActive) { // Highlight as TLV. var beginStatement = false; var match; if (style !== undefined) { // Region line. style += " " + tlvScopeStyle(state, 0, "scope-ident"); } else if (((stream.pos / tlvIndentUnit) < state.tlvIndentationStyle.length) && (match = stream.match(stream.sol() ? tlvFirstLevelIndentMatch : /^ /))) { // Indentation style = // make this style distinct from the previous one to prevent // codemirror from combining spans "tlv-indent-" + (((stream.pos % 2) == 0) ? "even" : "odd") + // and style it " " + tlvScopeStyle(state, stream.pos - tlvIndentUnit, "indent"); // Style the line prefix character. if (match[0].charAt(0) == "!") { style += " tlv-alert-line-prefix"; } // Place a class before a scope identifier. if (tlvIdentNext(stream)) { style += " " + tlvScopeStyle(state, stream.pos, "before-scope-ident"); } } else if (state.tlvInBlockComment) { // In a block comment. if (stream.match(/^.*?\*\//)) { // Exit block comment. state.tlvInBlockComment = false; } else { stream.skipToEnd(); } style = "comment"; } else if ((match = stream.match(tlvCommentMatch)) && !state.tlvInBlockComment) { // Start comment. if (match[0] == "//") { // Line comment. stream.skipToEnd(); } else { // Block comment. state.tlvInBlockComment = true; } style = "comment"; } else if (match = stream.match(tlvIdentMatch)) { // looks like an identifier (or identifier prefix) var prefix = match[1]; var mnemonic = match[2]; if (// is identifier prefix tlvIdentifierStyle.hasOwnProperty(prefix) && // has mnemonic or we're at the end of the line (maybe it hasn't been typed yet) (mnemonic.length > 0 || stream.eol())) { style = tlvIdentifierStyle[prefix]; if (stream.column() == state.indented) { // Begin scope. style += " " + tlvScopeStyle(state, stream.column(), "scope-ident"); } } else { // Just swallow one character and try again. // This enables subsequent identifier match with preceding symbol character, which // is legal within a statement. (Eg, !$reset). It also enables detection of // comment start with preceding symbols. stream.backUp(stream.current().length - 1); style = "tlv-default"; } } else if (stream.match(/^\t+/)) { // Highlight tabs, which are illegal. style = "tlv-tab"; } else if (stream.match(/^[\[\]{}\(\);\:]+/)) { // [:], (), {}, ;. style = "meta"; } else if (match = stream.match(/^[mM]4([\+_])?[\w\d_]*/)) { // m4 pre proc style = (match[1] == "+") ? "tlv-m4-plus" : "tlv-m4"; } else if (stream.match(/^ +/)){ // Skip over spaces. if (stream.eol()) { // Trailing spaces. style = "error"; } else { // Non-trailing spaces. style = "tlv-default"; } } else if (stream.match(/^[\w\d_]+/)) { // alpha-numeric token. style = "number"; } else { // Eat the next char w/ no formatting. stream.next(); style = "tlv-default"; } if (beginStatement) { style += " tlv-statement"; } } else { if (stream.match(/^[mM]4([\w\d_]*)/)) { // m4 pre proc style = "tlv-m4"; } } return style; }, indent: function(state) { return (state.tlvCodeActive == true) ? state.tlvNextIndent : -1; }, startState: function(state) { state.tlvIndentationStyle = []; // Styles to use for each level of indentation. state.tlvCodeActive = true; // True when we're in a TLV region (and at beginning of file). state.tlvNextIndent = -1; // The number of spaces to autoindent the next line if tlvCodeActive. state.tlvInBlockComment = false; // True inside /**/ comment. } } }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Originally written by Alf Nielsen, re-written by Michael Zhou (function(mod) { mod(codemirror); })(function(CodeMirror) { function words(str) { var obj = {}, words = str.split(","); for (var i = 0; i < words.length; ++i) { var allCaps = words[i].toUpperCase(); var firstCap = words[i].charAt(0).toUpperCase() + words[i].slice(1); obj[words[i]] = true; obj[allCaps] = true; obj[firstCap] = true; } return obj; } function metaHook(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; } CodeMirror.defineMode("vhdl", function(config, parserConfig) { var indentUnit = config.indentUnit, atoms = parserConfig.atoms || words("null"), hooks = parserConfig.hooks || {"`": metaHook, "$": metaHook}, multiLineStrings = parserConfig.multiLineStrings; var keywords = words("abs,access,after,alias,all,and,architecture,array,assert,attribute,begin,block," + "body,buffer,bus,case,component,configuration,constant,disconnect,downto,else,elsif,end,end block,end case," + "end component,end for,end generate,end if,end loop,end process,end record,end units,entity,exit,file,for," + "function,generate,generic,generic map,group,guarded,if,impure,in,inertial,inout,is,label,library,linkage," + "literal,loop,map,mod,nand,new,next,nor,null,of,on,open,or,others,out,package,package body,port,port map," + "postponed,procedure,process,pure,range,record,register,reject,rem,report,return,rol,ror,select,severity,signal," + "sla,sll,sra,srl,subtype,then,to,transport,type,unaffected,units,until,use,variable,wait,when,while,with,xnor,xor"); var blockKeywords = words("architecture,entity,begin,case,port,else,elsif,end,for,function,if"); var isOperatorChar = /[&|~>!\?@#$%&|:\.]+)/, token: "variable-2"}, {regex: /"(?:[^"\\\x00-\x1f\x7f]|\\[nt\\'"]|\\[0-9a-fA-F][0-9a-fA-F])*"/, token: "string"}, {regex: /\(;.*?/, token: "comment", next: "comment"}, {regex: /;;.*$/, token: "comment"}, {regex: /\(/, indent: true}, {regex: /\)/, dedent: true}, ], comment: [ {regex: /.*?;\)/, token: "comment", next: "start"}, {regex: /.*/, token: "comment"}, ], meta: { dontIndentStates: ['comment'], }, }); // https://github.com/WebAssembly/design/issues/981 mentions text/webassembly, // which seems like a reasonable choice, although it's not standard right now. CodeMirror.defineMIME("text/webassembly", "wast"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var builtinArray = [ "Clamp", "Constructor", "EnforceRange", "Exposed", "ImplicitThis", "Global", "PrimaryGlobal", "LegacyArrayClass", "LegacyUnenumerableNamedProperties", "LenientThis", "NamedConstructor", "NewObject", "NoInterfaceObject", "OverrideBuiltins", "PutForwards", "Replaceable", "SameObject", "TreatNonObjectAsNull", "TreatNullAs", "EmptyString", "Unforgeable", "Unscopeable" ]; var builtins = wordRegexp(builtinArray); var typeArray = [ "unsigned", "short", "long", // UnsignedIntegerType "unrestricted", "float", "double", // UnrestrictedFloatType "boolean", "byte", "octet", // Rest of PrimitiveType "Promise", // PromiseType "ArrayBuffer", "DataView", "Int8Array", "Int16Array", "Int32Array", "Uint8Array", "Uint16Array", "Uint32Array", "Uint8ClampedArray", "Float32Array", "Float64Array", // BufferRelatedType "ByteString", "DOMString", "USVString", "sequence", "object", "RegExp", "Error", "DOMException", "FrozenArray", // Rest of NonAnyType "any", // Rest of SingleType "void" // Rest of ReturnType ]; var types = wordRegexp(typeArray); var keywordArray = [ "attribute", "callback", "const", "deleter", "dictionary", "enum", "getter", "implements", "inherit", "interface", "iterable", "legacycaller", "maplike", "partial", "required", "serializer", "setlike", "setter", "static", "stringifier", "typedef", // ArgumentNameKeyword except // "unrestricted" "optional", "readonly", "or" ]; var keywords = wordRegexp(keywordArray); var atomArray = [ "true", "false", // BooleanLiteral "Infinity", "NaN", // FloatLiteral "null" // Rest of ConstValue ]; var atoms = wordRegexp(atomArray); CodeMirror.registerHelper("hintWords", "webidl", builtinArray.concat(typeArray).concat(keywordArray).concat(atomArray)); var startDefArray = ["callback", "dictionary", "enum", "interface"]; var startDefs = wordRegexp(startDefArray); var endDefArray = ["typedef"]; var endDefs = wordRegexp(endDefArray); var singleOperators = /^[:<=>?]/; var integers = /^-?([1-9][0-9]*|0[Xx][0-9A-Fa-f]+|0[0-7]*)/; var floats = /^-?(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][+-]?[0-9]+)?|[0-9]+[Ee][+-]?[0-9]+)/; var identifiers = /^_?[A-Za-z][0-9A-Z_a-z-]*/; var identifiersEnd = /^_?[A-Za-z][0-9A-Z_a-z-]*(?=\s*;)/; var strings = /^"[^"]*"/; var multilineComments = /^\/\*.*?\*\//; var multilineCommentsStart = /^\/\*.*/; var multilineCommentsEnd = /^.*?\*\//; function readToken(stream, state) { // whitespace if (stream.eatSpace()) return null; // comment if (state.inComment) { if (stream.match(multilineCommentsEnd)) { state.inComment = false; return "comment"; } stream.skipToEnd(); return "comment"; } if (stream.match("//")) { stream.skipToEnd(); return "comment"; } if (stream.match(multilineComments)) return "comment"; if (stream.match(multilineCommentsStart)) { state.inComment = true; return "comment"; } // integer and float if (stream.match(/^-?[0-9\.]/, false)) { if (stream.match(integers) || stream.match(floats)) return "number"; } // string if (stream.match(strings)) return "string"; // identifier if (state.startDef && stream.match(identifiers)) return "def"; if (state.endDef && stream.match(identifiersEnd)) { state.endDef = false; return "def"; } if (stream.match(keywords)) return "keyword"; if (stream.match(types)) { var lastToken = state.lastToken; var nextToken = (stream.match(/^\s*(.+?)\b/, false) || [])[1]; if (lastToken === ":" || lastToken === "implements" || nextToken === "implements" || nextToken === "=") { // Used as identifier return "builtin"; } else { // Used as type return "variable-3"; } } if (stream.match(builtins)) return "builtin"; if (stream.match(atoms)) return "atom"; if (stream.match(identifiers)) return "variable"; // other if (stream.match(singleOperators)) return "operator"; // unrecognized stream.next(); return null; } CodeMirror.defineMode("webidl", function() { return { startState: function() { return { // Is in multiline comment inComment: false, // Last non-whitespace, matched token lastToken: "", // Next token is a definition startDef: false, // Last token of the statement is a definition endDef: false }; }, token: function(stream, state) { var style = readToken(stream, state); if (style) { var cur = stream.current(); state.lastToken = cur; if (style === "keyword") { state.startDef = startDefs.test(cur); state.endDef = state.endDef || endDefs.test(cur); } else { state.startDef = false; } } return style; } }; }); CodeMirror.defineMIME("text/x-webidl", "webidl"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("xquery", function() { // The keywords object is set to the result of this self executing // function. Each keyword is a property of the keywords object whose // value is {type: atype, style: astyle} var keywords = function(){ // convenience functions used to build keywords object function kw(type) {return {type: type, style: "keyword"};} var operator = kw("operator") , atom = {type: "atom", style: "atom"} , punctuation = {type: "punctuation", style: null} , qualifier = {type: "axis_specifier", style: "qualifier"}; // kwObj is what is return from this function at the end var kwObj = { ',': punctuation }; // a list of 'basic' keywords. For each add a property to kwObj with the value of // {type: basic[i], style: "keyword"} e.g. 'after' --> {type: "after", style: "keyword"} var basic = ['after', 'all', 'allowing', 'ancestor', 'ancestor-or-self', 'any', 'array', 'as', 'ascending', 'at', 'attribute', 'base-uri', 'before', 'boundary-space', 'by', 'case', 'cast', 'castable', 'catch', 'child', 'collation', 'comment', 'construction', 'contains', 'content', 'context', 'copy', 'copy-namespaces', 'count', 'decimal-format', 'declare', 'default', 'delete', 'descendant', 'descendant-or-self', 'descending', 'diacritics', 'different', 'distance', 'document', 'document-node', 'element', 'else', 'empty', 'empty-sequence', 'encoding', 'end', 'entire', 'every', 'exactly', 'except', 'external', 'first', 'following', 'following-sibling', 'for', 'from', 'ftand', 'ftnot', 'ft-option', 'ftor', 'function', 'fuzzy', 'greatest', 'group', 'if', 'import', 'in', 'inherit', 'insensitive', 'insert', 'instance', 'intersect', 'into', 'invoke', 'is', 'item', 'language', 'last', 'lax', 'least', 'let', 'levels', 'lowercase', 'map', 'modify', 'module', 'most', 'namespace', 'next', 'no', 'node', 'nodes', 'no-inherit', 'no-preserve', 'not', 'occurs', 'of', 'only', 'option', 'order', 'ordered', 'ordering', 'paragraph', 'paragraphs', 'parent', 'phrase', 'preceding', 'preceding-sibling', 'preserve', 'previous', 'processing-instruction', 'relationship', 'rename', 'replace', 'return', 'revalidation', 'same', 'satisfies', 'schema', 'schema-attribute', 'schema-element', 'score', 'self', 'sensitive', 'sentence', 'sentences', 'sequence', 'skip', 'sliding', 'some', 'stable', 'start', 'stemming', 'stop', 'strict', 'strip', 'switch', 'text', 'then', 'thesaurus', 'times', 'to', 'transform', 'treat', 'try', 'tumbling', 'type', 'typeswitch', 'union', 'unordered', 'update', 'updating', 'uppercase', 'using', 'validate', 'value', 'variable', 'version', 'weight', 'when', 'where', 'wildcards', 'window', 'with', 'without', 'word', 'words', 'xquery']; for(var i=0, l=basic.length; i < l; i++) { kwObj[basic[i]] = kw(basic[i]);} // a list of types. For each add a property to kwObj with the value of // {type: "atom", style: "atom"} var types = ['xs:anyAtomicType', 'xs:anySimpleType', 'xs:anyType', 'xs:anyURI', 'xs:base64Binary', 'xs:boolean', 'xs:byte', 'xs:date', 'xs:dateTime', 'xs:dateTimeStamp', 'xs:dayTimeDuration', 'xs:decimal', 'xs:double', 'xs:duration', 'xs:ENTITIES', 'xs:ENTITY', 'xs:float', 'xs:gDay', 'xs:gMonth', 'xs:gMonthDay', 'xs:gYear', 'xs:gYearMonth', 'xs:hexBinary', 'xs:ID', 'xs:IDREF', 'xs:IDREFS', 'xs:int', 'xs:integer', 'xs:item', 'xs:java', 'xs:language', 'xs:long', 'xs:Name', 'xs:NCName', 'xs:negativeInteger', 'xs:NMTOKEN', 'xs:NMTOKENS', 'xs:nonNegativeInteger', 'xs:nonPositiveInteger', 'xs:normalizedString', 'xs:NOTATION', 'xs:numeric', 'xs:positiveInteger', 'xs:precisionDecimal', 'xs:QName', 'xs:short', 'xs:string', 'xs:time', 'xs:token', 'xs:unsignedByte', 'xs:unsignedInt', 'xs:unsignedLong', 'xs:unsignedShort', 'xs:untyped', 'xs:untypedAtomic', 'xs:yearMonthDuration']; for(var i=0, l=types.length; i < l; i++) { kwObj[types[i]] = atom;} // each operator will add a property to kwObj with value of {type: "operator", style: "keyword"} var operators = ['eq', 'ne', 'lt', 'le', 'gt', 'ge', ':=', '=', '>', '>=', '<', '<=', '.', '|', '?', 'and', 'or', 'div', 'idiv', 'mod', '*', '/', '+', '-']; for(var i=0, l=operators.length; i < l; i++) { kwObj[operators[i]] = operator;} // each axis_specifiers will add a property to kwObj with value of {type: "axis_specifier", style: "qualifier"} var axis_specifiers = ["self::", "attribute::", "child::", "descendant::", "descendant-or-self::", "parent::", "ancestor::", "ancestor-or-self::", "following::", "preceding::", "following-sibling::", "preceding-sibling::"]; for(var i=0, l=axis_specifiers.length; i < l; i++) { kwObj[axis_specifiers[i]] = qualifier; } return kwObj; }(); function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } // the primary mode tokenizer function tokenBase(stream, state) { var ch = stream.next(), mightBeFunction = false, isEQName = isEQNameAhead(stream); // an XML tag (if not in some sub, chained tokenizer) if (ch == "<") { if(stream.match("!--", true)) return chain(stream, state, tokenXMLComment); if(stream.match("![CDATA", false)) { state.tokenize = tokenCDATA; return "tag"; } if(stream.match("?", false)) { return chain(stream, state, tokenPreProcessing); } var isclose = stream.eat("/"); stream.eatSpace(); var tagName = "", c; while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c; return chain(stream, state, tokenTag(tagName, isclose)); } // start code block else if(ch == "{") { pushStateStack(state, { type: "codeblock"}); return null; } // end code block else if(ch == "}") { popStateStack(state); return null; } // if we're in an XML block else if(isInXmlBlock(state)) { if(ch == ">") return "tag"; else if(ch == "/" && stream.eat(">")) { popStateStack(state); return "tag"; } else return "variable"; } // if a number else if (/\d/.test(ch)) { stream.match(/^\d*(?:\.\d*)?(?:E[+\-]?\d+)?/); return "atom"; } // comment start else if (ch === "(" && stream.eat(":")) { pushStateStack(state, { type: "comment"}); return chain(stream, state, tokenComment); } // quoted string else if (!isEQName && (ch === '"' || ch === "'")) return chain(stream, state, tokenString(ch)); // variable else if(ch === "$") { return chain(stream, state, tokenVariable); } // assignment else if(ch ===":" && stream.eat("=")) { return "keyword"; } // open paren else if(ch === "(") { pushStateStack(state, { type: "paren"}); return null; } // close paren else if(ch === ")") { popStateStack(state); return null; } // open paren else if(ch === "[") { pushStateStack(state, { type: "bracket"}); return null; } // close paren else if(ch === "]") { popStateStack(state); return null; } else { var known = keywords.propertyIsEnumerable(ch) && keywords[ch]; // if there's a EQName ahead, consume the rest of the string portion, it's likely a function if(isEQName && ch === '\"') while(stream.next() !== '"'){} if(isEQName && ch === '\'') while(stream.next() !== '\''){} // gobble up a word if the character is not known if(!known) stream.eatWhile(/[\w\$_-]/); // gobble a colon in the case that is a lib func type call fn:doc var foundColon = stream.eat(":"); // if there's not a second colon, gobble another word. Otherwise, it's probably an axis specifier // which should get matched as a keyword if(!stream.eat(":") && foundColon) { stream.eatWhile(/[\w\$_-]/); } // if the next non whitespace character is an open paren, this is probably a function (if not a keyword of other sort) if(stream.match(/^[ \t]*\(/, false)) { mightBeFunction = true; } // is the word a keyword? var word = stream.current(); known = keywords.propertyIsEnumerable(word) && keywords[word]; // if we think it's a function call but not yet known, // set style to variable for now for lack of something better if(mightBeFunction && !known) known = {type: "function_call", style: "variable def"}; // if the previous word was element, attribute, axis specifier, this word should be the name of that if(isInXmlConstructor(state)) { popStateStack(state); return "variable"; } // as previously checked, if the word is element,attribute, axis specifier, call it an "xmlconstructor" and // push the stack so we know to look for it on the next word if(word == "element" || word == "attribute" || known.type == "axis_specifier") pushStateStack(state, {type: "xmlconstructor"}); // if the word is known, return the details of that else just call this a generic 'word' return known ? known.style : "variable"; } } // handle comments, including nested function tokenComment(stream, state) { var maybeEnd = false, maybeNested = false, nestedCount = 0, ch; while (ch = stream.next()) { if (ch == ")" && maybeEnd) { if(nestedCount > 0) nestedCount--; else { popStateStack(state); break; } } else if(ch == ":" && maybeNested) { nestedCount++; } maybeEnd = (ch == ":"); maybeNested = (ch == "("); } return "comment"; } // tokenizer for string literals // optionally pass a tokenizer function to set state.tokenize back to when finished function tokenString(quote, f) { return function(stream, state) { var ch; if(isInString(state) && stream.current() == quote) { popStateStack(state); if(f) state.tokenize = f; return "string"; } pushStateStack(state, { type: "string", name: quote, tokenize: tokenString(quote, f) }); // if we're in a string and in an XML block, allow an embedded code block if(stream.match("{", false) && isInXmlAttributeBlock(state)) { state.tokenize = tokenBase; return "string"; } while (ch = stream.next()) { if (ch == quote) { popStateStack(state); if(f) state.tokenize = f; break; } else { // if we're in a string and in an XML block, allow an embedded code block in an attribute if(stream.match("{", false) && isInXmlAttributeBlock(state)) { state.tokenize = tokenBase; return "string"; } } } return "string"; }; } // tokenizer for variables function tokenVariable(stream, state) { var isVariableChar = /[\w\$_-]/; // a variable may start with a quoted EQName so if the next character is quote, consume to the next quote if(stream.eat("\"")) { while(stream.next() !== '\"'){} stream.eat(":"); } else { stream.eatWhile(isVariableChar); if(!stream.match(":=", false)) stream.eat(":"); } stream.eatWhile(isVariableChar); state.tokenize = tokenBase; return "variable"; } // tokenizer for XML tags function tokenTag(name, isclose) { return function(stream, state) { stream.eatSpace(); if(isclose && stream.eat(">")) { popStateStack(state); state.tokenize = tokenBase; return "tag"; } // self closing tag without attributes? if(!stream.eat("/")) pushStateStack(state, { type: "tag", name: name, tokenize: tokenBase}); if(!stream.eat(">")) { state.tokenize = tokenAttribute; return "tag"; } else { state.tokenize = tokenBase; } return "tag"; }; } // tokenizer for XML attributes function tokenAttribute(stream, state) { var ch = stream.next(); if(ch == "/" && stream.eat(">")) { if(isInXmlAttributeBlock(state)) popStateStack(state); if(isInXmlBlock(state)) popStateStack(state); return "tag"; } if(ch == ">") { if(isInXmlAttributeBlock(state)) popStateStack(state); return "tag"; } if(ch == "=") return null; // quoted string if (ch == '"' || ch == "'") return chain(stream, state, tokenString(ch, tokenAttribute)); if(!isInXmlAttributeBlock(state)) pushStateStack(state, { type: "attribute", tokenize: tokenAttribute}); stream.eat(/[a-zA-Z_:]/); stream.eatWhile(/[-a-zA-Z0-9_:.]/); stream.eatSpace(); // the case where the attribute has not value and the tag was closed if(stream.match(">", false) || stream.match("/", false)) { popStateStack(state); state.tokenize = tokenBase; } return "attribute"; } // handle comments, including nested function tokenXMLComment(stream, state) { var ch; while (ch = stream.next()) { if (ch == "-" && stream.match("->", true)) { state.tokenize = tokenBase; return "comment"; } } } // handle CDATA function tokenCDATA(stream, state) { var ch; while (ch = stream.next()) { if (ch == "]" && stream.match("]", true)) { state.tokenize = tokenBase; return "comment"; } } } // handle preprocessing instructions function tokenPreProcessing(stream, state) { var ch; while (ch = stream.next()) { if (ch == "?" && stream.match(">", true)) { state.tokenize = tokenBase; return "comment meta"; } } } // functions to test the current context of the state function isInXmlBlock(state) { return isIn(state, "tag"); } function isInXmlAttributeBlock(state) { return isIn(state, "attribute"); } function isInXmlConstructor(state) { return isIn(state, "xmlconstructor"); } function isInString(state) { return isIn(state, "string"); } function isEQNameAhead(stream) { // assume we've already eaten a quote (") if(stream.current() === '"') return stream.match(/^[^\"]+\"\:/, false); else if(stream.current() === '\'') return stream.match(/^[^\"]+\'\:/, false); else return false; } function isIn(state, type) { return (state.stack.length && state.stack[state.stack.length - 1].type == type); } function pushStateStack(state, newState) { state.stack.push(newState); } function popStateStack(state) { state.stack.pop(); var reinstateTokenize = state.stack.length && state.stack[state.stack.length-1].tokenize; state.tokenize = reinstateTokenize || tokenBase; } // the interface for the mode API return { startState: function() { return { tokenize: tokenBase, cc: [], stack: [] }; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; }, blockCommentStart: "(:", blockCommentEnd: ":)" }; }); CodeMirror.defineMIME("application/xquery", "xquery"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Yacas mode copyright (c) 2015 by Grzegorz Mazur // Loosely based on mathematica mode by Calin Barbat (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode('yacas', function(_config, _parserConfig) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var bodiedOps = words("Assert BackQuote D Defun Deriv For ForEach FromFile " + "FromString Function Integrate InverseTaylor Limit " + "LocalSymbols Macro MacroRule MacroRulePattern " + "NIntegrate Rule RulePattern Subst TD TExplicitSum " + "TSum Taylor Taylor1 Taylor2 Taylor3 ToFile " + "ToStdout ToString TraceRule Until While"); // patterns var pFloatForm = "(?:(?:\\.\\d+|\\d+\\.\\d*|\\d+)(?:[eE][+-]?\\d+)?)"; var pIdentifier = "(?:[a-zA-Z\\$'][a-zA-Z0-9\\$']*)"; // regular expressions var reFloatForm = new RegExp(pFloatForm); var reIdentifier = new RegExp(pIdentifier); var rePattern = new RegExp(pIdentifier + "?_" + pIdentifier); var reFunctionLike = new RegExp(pIdentifier + "\\s*\\("); function tokenBase(stream, state) { var ch; // get next character ch = stream.next(); // string if (ch === '"') { state.tokenize = tokenString; return state.tokenize(stream, state); } // comment if (ch === '/') { if (stream.eat('*')) { state.tokenize = tokenComment; return state.tokenize(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } // go back one character stream.backUp(1); // update scope info var m = stream.match(/^(\w+)\s*\(/, false); if (m !== null && bodiedOps.hasOwnProperty(m[1])) state.scopes.push('bodied'); var scope = currentScope(state); if (scope === 'bodied' && ch === '[') state.scopes.pop(); if (ch === '[' || ch === '{' || ch === '(') state.scopes.push(ch); scope = currentScope(state); if (scope === '[' && ch === ']' || scope === '{' && ch === '}' || scope === '(' && ch === ')') state.scopes.pop(); if (ch === ';') { while (scope === 'bodied') { state.scopes.pop(); scope = currentScope(state); } } // look for ordered rules if (stream.match(/\d+ *#/, true, false)) { return 'qualifier'; } // look for numbers if (stream.match(reFloatForm, true, false)) { return 'number'; } // look for placeholders if (stream.match(rePattern, true, false)) { return 'variable-3'; } // match all braces separately if (stream.match(/(?:\[|\]|{|}|\(|\))/, true, false)) { return 'bracket'; } // literals looking like function calls if (stream.match(reFunctionLike, true, false)) { stream.backUp(1); return 'variable'; } // all other identifiers if (stream.match(reIdentifier, true, false)) { return 'variable-2'; } // operators; note that operators like @@ or /; are matched separately for each symbol. if (stream.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%|#)/, true, false)) { return 'operator'; } // everything else is an error return 'error'; } function tokenString(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === '"' && !escaped) { end = true; break; } escaped = !escaped && next === '\\'; } if (end && !escaped) { state.tokenize = tokenBase; } return 'string'; } function tokenComment(stream, state) { var prev, next; while((next = stream.next()) != null) { if (prev === '*' && next === '/') { state.tokenize = tokenBase; break; } prev = next; } return 'comment'; } function currentScope(state) { var scope = null; if (state.scopes.length > 0) scope = state.scopes[state.scopes.length - 1]; return scope; } return { startState: function() { return { tokenize: tokenBase, scopes: [] }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, indent: function(state, textAfter) { if (state.tokenize !== tokenBase && state.tokenize !== null) return CodeMirror.Pass; var delta = 0; if (textAfter === ']' || textAfter === '];' || textAfter === '}' || textAfter === '};' || textAfter === ');') delta = -1; return (state.scopes.length + delta) * _config.indentUnit; }, electricChars: "{}[]();", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME('text/x-yacas', { name: 'yacas' }); }); }); var yaml = createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode("yaml", function() { var cons = ['true', 'false', 'on', 'off', 'yes', 'no']; var keywordRegex = new RegExp("\\b(("+cons.join(")|(")+"))$", 'i'); return { token: function(stream, state) { var ch = stream.peek(); var esc = state.escaped; state.escaped = false; /* comments */ if (ch == "#" && (stream.pos == 0 || /\s/.test(stream.string.charAt(stream.pos - 1)))) { stream.skipToEnd(); return "comment"; } if (stream.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/)) return "string"; if (state.literal && stream.indentation() > state.keyCol) { stream.skipToEnd(); return "string"; } else if (state.literal) { state.literal = false; } if (stream.sol()) { state.keyCol = 0; state.pair = false; state.pairStart = false; /* document start */ if(stream.match(/---/)) { return "def"; } /* document end */ if (stream.match(/\.\.\./)) { return "def"; } /* array list item */ if (stream.match(/\s*-\s+/)) { return 'meta'; } } /* inline pairs/lists */ if (stream.match(/^(\{|\}|\[|\])/)) { if (ch == '{') state.inlinePairs++; else if (ch == '}') state.inlinePairs--; else if (ch == '[') state.inlineList++; else state.inlineList--; return 'meta'; } /* list seperator */ if (state.inlineList > 0 && !esc && ch == ',') { stream.next(); return 'meta'; } /* pairs seperator */ if (state.inlinePairs > 0 && !esc && ch == ',') { state.keyCol = 0; state.pair = false; state.pairStart = false; stream.next(); return 'meta'; } /* start of value of a pair */ if (state.pairStart) { /* block literals */ if (stream.match(/^\s*(\||\>)\s*/)) { state.literal = true; return 'meta'; } /* references */ if (stream.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) { return 'variable-2'; } /* numbers */ if (state.inlinePairs == 0 && stream.match(/^\s*-?[0-9\.\,]+\s?$/)) { return 'number'; } if (state.inlinePairs > 0 && stream.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) { return 'number'; } /* keywords */ if (stream.match(keywordRegex)) { return 'keyword'; } } /* pairs (associative arrays) -> key */ if (!state.pair && stream.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)) { state.pair = true; state.keyCol = stream.indentation(); return "atom"; } if (state.pair && stream.match(/^:\s*/)) { state.pairStart = true; return 'meta'; } /* nothing found, continue */ state.pairStart = false; state.escaped = (ch == '\\'); stream.next(); return null; }, startState: function() { return { pair: false, pairStart: false, keyCol: 0, inlinePairs: 0, inlineList: 0, literal: false, escaped: false }; }, lineComment: "#", fold: "indent" }; }); CodeMirror.defineMIME("text/x-yaml", "yaml"); CodeMirror.defineMIME("text/yaml", "yaml"); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function (mod) { mod(codemirror, yaml); })(function (CodeMirror) { var START = 0, FRONTMATTER = 1, BODY = 2; // a mixed mode for Markdown text with an optional YAML front matter CodeMirror.defineMode("yaml-frontmatter", function (config, parserConfig) { var yamlMode = CodeMirror.getMode(config, "yaml"); var innerMode = CodeMirror.getMode(config, parserConfig && parserConfig.base || "gfm"); function curMode(state) { return state.state == BODY ? innerMode : yamlMode } return { startState: function () { return { state: START, inner: CodeMirror.startState(yamlMode) } }, copyState: function (state) { return { state: state.state, inner: CodeMirror.copyState(curMode(state), state.inner) } }, token: function (stream, state) { if (state.state == START) { if (stream.match(/---/, false)) { state.state = FRONTMATTER; return yamlMode.token(stream, state.inner) } else { state.state = BODY; state.inner = CodeMirror.startState(innerMode); return innerMode.token(stream, state.inner) } } else if (state.state == FRONTMATTER) { var end = stream.sol() && stream.match(/(---|\.\.\.)/, false); var style = yamlMode.token(stream, state.inner); if (end) { state.state = BODY; state.inner = CodeMirror.startState(innerMode); } return style } else { return innerMode.token(stream, state.inner) } }, innerMode: function (state) { return {mode: curMode(state), state: state.inner} }, blankLine: function (state) { var mode = curMode(state); if (mode.blankLine) return mode.blankLine(state.inner) } } }); }); }); createCommonjsModule(function (module, exports) { // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { mod(codemirror); })(function(CodeMirror) { CodeMirror.defineMode('z80', function(_config, parserConfig) { var ez80 = parserConfig.ez80; var keywords1, keywords2; if (ez80) { keywords1 = /^(exx?|(ld|cp)([di]r?)?|[lp]ea|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|[de]i|halt|im|in([di]mr?|ir?|irx|2r?)|ot(dmr?|[id]rx|imr?)|out(0?|[di]r?|[di]2r?)|tst(io)?|slp)(\.([sl]?i)?[sl])?\b/i; keywords2 = /^(((call|j[pr]|rst|ret[in]?)(\.([sl]?i)?[sl])?)|(rs|st)mix)\b/i; } else { keywords1 = /^(exx?|(ld|cp|in)([di]r?)?|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|rst|[de]i|halt|im|ot[di]r|out[di]?)\b/i; keywords2 = /^(call|j[pr]|ret[in]?|b_?(call|jump))\b/i; } var variables1 = /^(af?|bc?|c|de?|e|hl?|l|i[xy]?|r|sp)\b/i; var variables2 = /^(n?[zc]|p[oe]?|m)\b/i; var errors = /^([hl][xy]|i[xy][hl]|slia|sll)\b/i; var numbers = /^([\da-f]+h|[0-7]+o|[01]+b|\d+d?)\b/i; return { startState: function() { return { context: 0 }; }, token: function(stream, state) { if (!stream.column()) state.context = 0; if (stream.eatSpace()) return null; var w; if (stream.eatWhile(/\w/)) { if (ez80 && stream.eat('.')) { stream.eatWhile(/\w/); } w = stream.current(); if (stream.indentation()) { if ((state.context == 1 || state.context == 4) && variables1.test(w)) { state.context = 4; return 'var2'; } if (state.context == 2 && variables2.test(w)) { state.context = 4; return 'var3'; } if (keywords1.test(w)) { state.context = 1; return 'keyword'; } else if (keywords2.test(w)) { state.context = 2; return 'keyword'; } else if (state.context == 4 && numbers.test(w)) { return 'number'; } if (errors.test(w)) return 'error'; } else if (stream.match(numbers)) { return 'number'; } else { return null; } } else if (stream.eat(';')) { stream.skipToEnd(); return 'comment'; } else if (stream.eat('"')) { while (w = stream.next()) { if (w == '"') break; if (w == '\\') stream.next(); } return 'string'; } else if (stream.eat('\'')) { if (stream.match(/\\?.'/)) return 'number'; } else if (stream.eat('.') || stream.sol() && stream.eat('#')) { state.context = 5; if (stream.eatWhile(/\w/)) return 'def'; } else if (stream.eat('$')) { if (stream.eatWhile(/[\da-f]/i)) return 'number'; } else if (stream.eat('%')) { if (stream.eatWhile(/[01]/)) return 'number'; } else { stream.next(); } return null; } }; }); CodeMirror.defineMIME("text/x-z80", "z80"); CodeMirror.defineMIME("text/x-ez80", { name: "z80", ez80: true }); }); }); var CMSyntaxHighlightPlugin = /** @class */ (function (_super) { __extends(CMSyntaxHighlightPlugin, _super); function CMSyntaxHighlightPlugin() { var _this = _super !== null && _super.apply(this, arguments) || this; // these are the CodeMirror modes that Obsidian uses by default _this.modesToKeep = ["hypermd", "markdown", "null", "xml"]; _this.layoutReady = function () { // don't need the event handler anymore, get rid of it _this.app.workspace.off('layout-ready', _this.layoutReady); _this.refreshLeaves(); }; _this.refreshLeaves = function () { // re-set the editor mode to refresh the syntax highlighting _this.app.workspace.iterateCodeMirrors(function (cm) { return cm.setOption("mode", cm.getOption("mode")); }); }; return _this; } CMSyntaxHighlightPlugin.prototype.onload = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { // wait for layout to be ready to perform the rest this.app.workspace.layoutReady ? this.layoutReady() : this.app.workspace.on('layout-ready', this.layoutReady); return [2 /*return*/]; }); }); }; CMSyntaxHighlightPlugin.prototype.onunload = function () { // Delete all the codemirror modes, to disable the syntax highlighting // except the default ones, obviously for (var key in CodeMirror.modes) { if (CodeMirror.modes.hasOwnProperty(key) && !this.modesToKeep.includes(key)) { delete CodeMirror.modes[key]; } } this.refreshLeaves(); }; return CMSyntaxHighlightPlugin; }(obsidian.Plugin)); module.exports = CMSyntaxHighlightPlugin; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsImxpYi9jb2RlbWlycm9yLmpzIiwibW9kZS9tZXRhLmpzIiwibW9kZS9hcGwvYXBsLmpzIiwibW9kZS9hc2NpaWFybW9yL2FzY2lpYXJtb3IuanMiLCJtb2RlL2Fzbi4xL2Fzbi4xLmpzIiwibW9kZS9hc3Rlcmlzay9hc3Rlcmlzay5qcyIsIm1vZGUvYnJhaW5mdWNrL2JyYWluZnVjay5qcyIsIm1vZGUvY2xpa2UvY2xpa2UuanMiLCJtb2RlL2Nsb2p1cmUvY2xvanVyZS5qcyIsIm1vZGUvY21ha2UvY21ha2UuanMiLCJtb2RlL2NvYm9sL2NvYm9sLmpzIiwibW9kZS9jb2ZmZWVzY3JpcHQvY29mZmVlc2NyaXB0LmpzIiwibW9kZS9jb21tb25saXNwL2NvbW1vbmxpc3AuanMiLCJtb2RlL2NyeXN0YWwvY3J5c3RhbC5qcyIsIm1vZGUvY3NzL2Nzcy5qcyIsIm1vZGUvY3lwaGVyL2N5cGhlci5qcyIsIm1vZGUvZC9kLmpzIiwibW9kZS9kYXJ0L2RhcnQuanMiLCJtb2RlL2RpZmYvZGlmZi5qcyIsIm1vZGUveG1sL3htbC5qcyIsIm1vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIiwibW9kZS9odG1sbWl4ZWQvaHRtbG1peGVkLmpzIiwiYWRkb24vbW9kZS9vdmVybGF5LmpzIiwibW9kZS9kamFuZ28vZGphbmdvLmpzIiwiYWRkb24vbW9kZS9zaW1wbGUuanMiLCJtb2RlL2RvY2tlcmZpbGUvZG9ja2VyZmlsZS5qcyIsIm1vZGUvZHRkL2R0ZC5qcyIsIm1vZGUvZHlsYW4vZHlsYW4uanMiLCJtb2RlL2VibmYvZWJuZi5qcyIsIm1vZGUvZWNsL2VjbC5qcyIsIm1vZGUvZWlmZmVsL2VpZmZlbC5qcyIsIm1vZGUvZWxpeGlyL2VsaXhpci5qcyIsIm1vZGUvZWxtL2VsbS5qcyIsIm1vZGUvZXJsYW5nL2VybGFuZy5qcyIsIm1vZGUvZmFjdG9yL2ZhY3Rvci5qcyIsIm1vZGUvZmNsL2ZjbC5qcyIsIm1vZGUvZm9ydGgvZm9ydGguanMiLCJtb2RlL2ZvcnRyYW4vZm9ydHJhbi5qcyIsIm1vZGUvZ2FzL2dhcy5qcyIsIm1vZGUvZ2hlcmtpbi9naGVya2luLmpzIiwibW9kZS9nby9nby5qcyIsIm1vZGUvZ3Jvb3Z5L2dyb292eS5qcyIsIm1vZGUvcnVieS9ydWJ5LmpzIiwibW9kZS9oYW1sL2hhbWwuanMiLCJhZGRvbi9tb2RlL211bHRpcGxleC5qcyIsIm1vZGUvaGFuZGxlYmFycy9oYW5kbGViYXJzLmpzIiwibW9kZS9oYXNrZWxsL2hhc2tlbGwuanMiLCJtb2RlL2hhc2tlbGwtbGl0ZXJhdGUvaGFza2VsbC1saXRlcmF0ZS5qcyIsIm1vZGUvaGF4ZS9oYXhlLmpzIiwibW9kZS9odG1sZW1iZWRkZWQvaHRtbGVtYmVkZGVkLmpzIiwibW9kZS9odHRwL2h0dHAuanMiLCJtb2RlL2lkbC9pZGwuanMiLCJtb2RlL2ppbmphMi9qaW5qYTIuanMiLCJtb2RlL2pzeC9qc3guanMiLCJtb2RlL2p1bGlhL2p1bGlhLmpzIiwibW9kZS9saXZlc2NyaXB0L2xpdmVzY3JpcHQuanMiLCJtb2RlL2x1YS9sdWEuanMiLCJtb2RlL21hdGhlbWF0aWNhL21hdGhlbWF0aWNhLmpzIiwibW9kZS9tYm94L21ib3guanMiLCJtb2RlL21pcmMvbWlyYy5qcyIsIm1vZGUvbWxsaWtlL21sbGlrZS5qcyIsIm1vZGUvbW9kZWxpY2EvbW9kZWxpY2EuanMiLCJtb2RlL21zY2dlbi9tc2NnZW4uanMiLCJtb2RlL211bXBzL211bXBzLmpzIiwibW9kZS9uZ2lueC9uZ2lueC5qcyIsIm1vZGUvbnNpcy9uc2lzLmpzIiwibW9kZS9udHJpcGxlcy9udHJpcGxlcy5qcyIsIm1vZGUvb2N0YXZlL29jdGF2ZS5qcyIsIm1vZGUvb3ovb3ouanMiLCJtb2RlL3Bhc2NhbC9wYXNjYWwuanMiLCJtb2RlL3BlZ2pzL3BlZ2pzLmpzIiwibW9kZS9wZXJsL3BlcmwuanMiLCJtb2RlL3BocC9waHAuanMiLCJtb2RlL3BpZy9waWcuanMiLCJtb2RlL3Bvd2Vyc2hlbGwvcG93ZXJzaGVsbC5qcyIsIm1vZGUvcHJvcGVydGllcy9wcm9wZXJ0aWVzLmpzIiwibW9kZS9wcm90b2J1Zi9wcm90b2J1Zi5qcyIsIm1vZGUvcHVnL3B1Zy5qcyIsIm1vZGUvcHVwcGV0L3B1cHBldC5qcyIsIm1vZGUvcHl0aG9uL3B5dGhvbi5qcyIsIm1vZGUvcS9xLmpzIiwibW9kZS9yL3IuanMiLCJtb2RlL3JwbS9ycG0uanMiLCJtb2RlL3N0ZXgvc3RleC5qcyIsIm1vZGUvcnN0L3JzdC5qcyIsIm1vZGUvcnVzdC9ydXN0LmpzIiwibW9kZS9zYXMvc2FzLmpzIiwibW9kZS9zYXNzL3Nhc3MuanMiLCJtb2RlL3NjaGVtZS9zY2hlbWUuanMiLCJtb2RlL3NoZWxsL3NoZWxsLmpzIiwibW9kZS9zaWV2ZS9zaWV2ZS5qcyIsIm1vZGUvc2xpbS9zbGltLmpzIiwibW9kZS9zbWFsbHRhbGsvc21hbGx0YWxrLmpzIiwibW9kZS9zbWFydHkvc21hcnR5LmpzIiwibW9kZS9zb2xyL3NvbHIuanMiLCJtb2RlL3NveS9zb3kuanMiLCJtb2RlL3NwYXJxbC9zcGFycWwuanMiLCJtb2RlL3NwcmVhZHNoZWV0L3NwcmVhZHNoZWV0LmpzIiwibW9kZS9zcWwvc3FsLmpzIiwibW9kZS9zdHlsdXMvc3R5bHVzLmpzIiwibW9kZS9zd2lmdC9zd2lmdC5qcyIsIm1vZGUvdGNsL3RjbC5qcyIsIm1vZGUvdGV4dGlsZS90ZXh0aWxlLmpzIiwibW9kZS90aWRkbHl3aWtpL3RpZGRseXdpa2kuanMiLCJtb2RlL3Rpa2kvdGlraS5qcyIsIm1vZGUvdG9tbC90b21sLmpzIiwibW9kZS90b3JuYWRvL3Rvcm5hZG8uanMiLCJtb2RlL3Ryb2ZmL3Ryb2ZmLmpzIiwibW9kZS90dGNuL3R0Y24uanMiLCJtb2RlL3R0Y24tY2ZnL3R0Y24tY2ZnLmpzIiwibW9kZS90dXJ0bGUvdHVydGxlLmpzIiwibW9kZS90d2lnL3R3aWcuanMiLCJtb2RlL3ZiL3ZiLmpzIiwibW9kZS92YnNjcmlwdC92YnNjcmlwdC5qcyIsIm1vZGUvdmVsb2NpdHkvdmVsb2NpdHkuanMiLCJtb2RlL3Zlcmlsb2cvdmVyaWxvZy5qcyIsIm1vZGUvdmhkbC92aGRsLmpzIiwibW9kZS92dWUvdnVlLmpzIiwibW9kZS93YXN0L3dhc3QuanMiLCJtb2RlL3dlYmlkbC93ZWJpZGwuanMiLCJtb2RlL3hxdWVyeS94cXVlcnkuanMiLCJtb2RlL3lhY2FzL3lhY2FzLmpzIiwibW9kZS95YW1sL3lhbWwuanMiLCJtb2RlL3lhbWwtZnJvbnRtYXR0ZXIveWFtbC1mcm9udG1hdHRlci5qcyIsIm1vZGUvejgwL3o4MC5qcyIsIm1haW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IENvZGVNaXJyb3I7IiwiICBDb2RlTWlycm9yLm1vZGVJbmZvID0gW1xuICAgIHtuYW1lOiBcIkFQTFwiLCBtaW1lOiBcInRleHQvYXBsXCIsIG1vZGU6IFwiYXBsXCIsIGV4dDogW1wiZHlhbG9nXCIsIFwiYXBsXCJdfSxcbiAgICB7bmFtZTogXCJQR1BcIiwgbWltZXM6IFtcImFwcGxpY2F0aW9uL3BncFwiLCBcImFwcGxpY2F0aW9uL3BncC1lbmNyeXB0ZWRcIiwgXCJhcHBsaWNhdGlvbi9wZ3Ata2V5c1wiLCBcImFwcGxpY2F0aW9uL3BncC1zaWduYXR1cmVcIl0sIG1vZGU6IFwiYXNjaWlhcm1vclwiLCBleHQ6IFtcImFzY1wiLCBcInBncFwiLCBcInNpZ1wiXX0sXG4gICAge25hbWU6IFwiQVNOLjFcIiwgbWltZTogXCJ0ZXh0L3gtdHRjbi1hc25cIiwgbW9kZTogXCJhc24uMVwiLCBleHQ6IFtcImFzblwiLCBcImFzbjFcIl19LFxuICAgIHtuYW1lOiBcIkFzdGVyaXNrXCIsIG1pbWU6IFwidGV4dC94LWFzdGVyaXNrXCIsIG1vZGU6IFwiYXN0ZXJpc2tcIiwgZmlsZTogL15leHRlbnNpb25zXFwuY29uZiQvaX0sXG4gICAge25hbWU6IFwiQnJhaW5mdWNrXCIsIG1pbWU6IFwidGV4dC94LWJyYWluZnVja1wiLCBtb2RlOiBcImJyYWluZnVja1wiLCBleHQ6IFtcImJcIiwgXCJiZlwiXX0sXG4gICAge25hbWU6IFwiQ1wiLCBtaW1lOiBcInRleHQveC1jc3JjXCIsIG1vZGU6IFwiY2xpa2VcIiwgZXh0OiBbXCJjXCIsIFwiaFwiLCBcImlub1wiXX0sXG4gICAge25hbWU6IFwiQysrXCIsIG1pbWU6IFwidGV4dC94LWMrK3NyY1wiLCBtb2RlOiBcImNsaWtlXCIsIGV4dDogW1wiY3BwXCIsIFwiYysrXCIsIFwiY2NcIiwgXCJjeHhcIiwgXCJocHBcIiwgXCJoKytcIiwgXCJoaFwiLCBcImh4eFwiXSwgYWxpYXM6IFtcImNwcFwiXX0sXG4gICAge25hbWU6IFwiQ29ib2xcIiwgbWltZTogXCJ0ZXh0L3gtY29ib2xcIiwgbW9kZTogXCJjb2JvbFwiLCBleHQ6IFtcImNvYlwiLCBcImNweVwiXX0sXG4gICAge25hbWU6IFwiQyNcIiwgbWltZTogXCJ0ZXh0L3gtY3NoYXJwXCIsIG1vZGU6IFwiY2xpa2VcIiwgZXh0OiBbXCJjc1wiXSwgYWxpYXM6IFtcImNzaGFycFwiLCBcImNzXCJdfSxcbiAgICB7bmFtZTogXCJDbG9qdXJlXCIsIG1pbWU6IFwidGV4dC94LWNsb2p1cmVcIiwgbW9kZTogXCJjbG9qdXJlXCIsIGV4dDogW1wiY2xqXCIsIFwiY2xqY1wiLCBcImNsanhcIl19LFxuICAgIHtuYW1lOiBcIkNsb2p1cmVTY3JpcHRcIiwgbWltZTogXCJ0ZXh0L3gtY2xvanVyZXNjcmlwdFwiLCBtb2RlOiBcImNsb2p1cmVcIiwgZXh0OiBbXCJjbGpzXCJdfSxcbiAgICB7bmFtZTogXCJDbG9zdXJlIFN0eWxlc2hlZXRzIChHU1MpXCIsIG1pbWU6IFwidGV4dC94LWdzc1wiLCBtb2RlOiBcImNzc1wiLCBleHQ6IFtcImdzc1wiXX0sXG4gICAge25hbWU6IFwiQ01ha2VcIiwgbWltZTogXCJ0ZXh0L3gtY21ha2VcIiwgbW9kZTogXCJjbWFrZVwiLCBleHQ6IFtcImNtYWtlXCIsIFwiY21ha2UuaW5cIl0sIGZpbGU6IC9eQ01ha2VMaXN0c1xcLnR4dCQvfSxcbiAgICB7bmFtZTogXCJDb2ZmZWVTY3JpcHRcIiwgbWltZXM6IFtcImFwcGxpY2F0aW9uL3ZuZC5jb2ZmZWVzY3JpcHRcIiwgXCJ0ZXh0L2NvZmZlZXNjcmlwdFwiLCBcInRleHQveC1jb2ZmZWVzY3JpcHRcIl0sIG1vZGU6IFwiY29mZmVlc2NyaXB0XCIsIGV4dDogW1wiY29mZmVlXCJdLCBhbGlhczogW1wiY29mZmVlXCIsIFwiY29mZmVlLXNjcmlwdFwiXX0sXG4gICAge25hbWU6IFwiQ29tbW9uIExpc3BcIiwgbWltZTogXCJ0ZXh0L3gtY29tbW9uLWxpc3BcIiwgbW9kZTogXCJjb21tb25saXNwXCIsIGV4dDogW1wiY2xcIiwgXCJsaXNwXCIsIFwiZWxcIl0sIGFsaWFzOiBbXCJsaXNwXCJdfSxcbiAgICB7bmFtZTogXCJDeXBoZXJcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94LWN5cGhlci1xdWVyeVwiLCBtb2RlOiBcImN5cGhlclwiLCBleHQ6IFtcImN5cFwiLCBcImN5cGhlclwiXX0sXG4gICAge25hbWU6IFwiQ3l0aG9uXCIsIG1pbWU6IFwidGV4dC94LWN5dGhvblwiLCBtb2RlOiBcInB5dGhvblwiLCBleHQ6IFtcInB5eFwiLCBcInB4ZFwiLCBcInB4aVwiXX0sXG4gICAge25hbWU6IFwiQ3J5c3RhbFwiLCBtaW1lOiBcInRleHQveC1jcnlzdGFsXCIsIG1vZGU6IFwiY3J5c3RhbFwiLCBleHQ6IFtcImNyXCJdfSxcbiAgICB7bmFtZTogXCJDU1NcIiwgbWltZTogXCJ0ZXh0L2Nzc1wiLCBtb2RlOiBcImNzc1wiLCBleHQ6IFtcImNzc1wiXX0sXG4gICAge25hbWU6IFwiQ1FMXCIsIG1pbWU6IFwidGV4dC94LWNhc3NhbmRyYVwiLCBtb2RlOiBcInNxbFwiLCBleHQ6IFtcImNxbFwiXX0sXG4gICAge25hbWU6IFwiRFwiLCBtaW1lOiBcInRleHQveC1kXCIsIG1vZGU6IFwiZFwiLCBleHQ6IFtcImRcIl19LFxuICAgIHtuYW1lOiBcIkRhcnRcIiwgbWltZXM6IFtcImFwcGxpY2F0aW9uL2RhcnRcIiwgXCJ0ZXh0L3gtZGFydFwiXSwgbW9kZTogXCJkYXJ0XCIsIGV4dDogW1wiZGFydFwiXX0sXG4gICAge25hbWU6IFwiZGlmZlwiLCBtaW1lOiBcInRleHQveC1kaWZmXCIsIG1vZGU6IFwiZGlmZlwiLCBleHQ6IFtcImRpZmZcIiwgXCJwYXRjaFwiXX0sXG4gICAge25hbWU6IFwiRGphbmdvXCIsIG1pbWU6IFwidGV4dC94LWRqYW5nb1wiLCBtb2RlOiBcImRqYW5nb1wifSxcbiAgICB7bmFtZTogXCJEb2NrZXJmaWxlXCIsIG1pbWU6IFwidGV4dC94LWRvY2tlcmZpbGVcIiwgbW9kZTogXCJkb2NrZXJmaWxlXCIsIGZpbGU6IC9eRG9ja2VyZmlsZSQvfSxcbiAgICB7bmFtZTogXCJEVERcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94bWwtZHRkXCIsIG1vZGU6IFwiZHRkXCIsIGV4dDogW1wiZHRkXCJdfSxcbiAgICB7bmFtZTogXCJEeWxhblwiLCBtaW1lOiBcInRleHQveC1keWxhblwiLCBtb2RlOiBcImR5bGFuXCIsIGV4dDogW1wiZHlsYW5cIiwgXCJkeWxcIiwgXCJpbnRyXCJdfSxcbiAgICB7bmFtZTogXCJFQk5GXCIsIG1pbWU6IFwidGV4dC94LWVibmZcIiwgbW9kZTogXCJlYm5mXCJ9LFxuICAgIHtuYW1lOiBcIkVDTFwiLCBtaW1lOiBcInRleHQveC1lY2xcIiwgbW9kZTogXCJlY2xcIiwgZXh0OiBbXCJlY2xcIl19LFxuICAgIHtuYW1lOiBcImVkblwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL2VkblwiLCBtb2RlOiBcImNsb2p1cmVcIiwgZXh0OiBbXCJlZG5cIl19LFxuICAgIHtuYW1lOiBcIkVpZmZlbFwiLCBtaW1lOiBcInRleHQveC1laWZmZWxcIiwgbW9kZTogXCJlaWZmZWxcIiwgZXh0OiBbXCJlXCJdfSxcbiAgICB7bmFtZTogXCJFbGl4aXJcIiwgbWltZTogXCJ0ZXh0L3gtZWxpeGlyXCIsIG1vZGU6IFwiZWxpeGlyXCIsIGV4dDogW1wiZXhcIiwgXCJleHNcIl19LFxuICAgIHtuYW1lOiBcIkVsbVwiLCBtaW1lOiBcInRleHQveC1lbG1cIiwgbW9kZTogXCJlbG1cIiwgZXh0OiBbXCJlbG1cIl19LFxuICAgIHtuYW1lOiBcIkVtYmVkZGVkIEphdmFzY3JpcHRcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94LWVqc1wiLCBtb2RlOiBcImh0bWxlbWJlZGRlZFwiLCBleHQ6IFtcImVqc1wiXX0sXG4gICAge25hbWU6IFwiRW1iZWRkZWQgUnVieVwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtZXJiXCIsIG1vZGU6IFwiaHRtbGVtYmVkZGVkXCIsIGV4dDogW1wiZXJiXCJdfSxcbiAgICB7bmFtZTogXCJFcmxhbmdcIiwgbWltZTogXCJ0ZXh0L3gtZXJsYW5nXCIsIG1vZGU6IFwiZXJsYW5nXCIsIGV4dDogW1wiZXJsXCJdfSxcbiAgICB7bmFtZTogXCJFc3BlclwiLCBtaW1lOiBcInRleHQveC1lc3BlclwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJGYWN0b3JcIiwgbWltZTogXCJ0ZXh0L3gtZmFjdG9yXCIsIG1vZGU6IFwiZmFjdG9yXCIsIGV4dDogW1wiZmFjdG9yXCJdfSxcbiAgICB7bmFtZTogXCJGQ0xcIiwgbWltZTogXCJ0ZXh0L3gtZmNsXCIsIG1vZGU6IFwiZmNsXCJ9LFxuICAgIHtuYW1lOiBcIkZvcnRoXCIsIG1pbWU6IFwidGV4dC94LWZvcnRoXCIsIG1vZGU6IFwiZm9ydGhcIiwgZXh0OiBbXCJmb3J0aFwiLCBcImZ0aFwiLCBcIjR0aFwiXX0sXG4gICAge25hbWU6IFwiRm9ydHJhblwiLCBtaW1lOiBcInRleHQveC1mb3J0cmFuXCIsIG1vZGU6IFwiZm9ydHJhblwiLCBleHQ6IFtcImZcIiwgXCJmb3JcIiwgXCJmNzdcIiwgXCJmOTBcIiwgXCJmOTVcIl19LFxuICAgIHtuYW1lOiBcIkYjXCIsIG1pbWU6IFwidGV4dC94LWZzaGFycFwiLCBtb2RlOiBcIm1sbGlrZVwiLCBleHQ6IFtcImZzXCJdLCBhbGlhczogW1wiZnNoYXJwXCJdfSxcbiAgICB7bmFtZTogXCJHYXNcIiwgbWltZTogXCJ0ZXh0L3gtZ2FzXCIsIG1vZGU6IFwiZ2FzXCIsIGV4dDogW1wic1wiXX0sXG4gICAge25hbWU6IFwiR2hlcmtpblwiLCBtaW1lOiBcInRleHQveC1mZWF0dXJlXCIsIG1vZGU6IFwiZ2hlcmtpblwiLCBleHQ6IFtcImZlYXR1cmVcIl19LFxuICAgIHtuYW1lOiBcIkdpdEh1YiBGbGF2b3JlZCBNYXJrZG93blwiLCBtaW1lOiBcInRleHQveC1nZm1cIiwgbW9kZTogXCJnZm1cIiwgZmlsZTogL14ocmVhZG1lfGNvbnRyaWJ1dGluZ3xoaXN0b3J5KVxcLm1kJC9pfSxcbiAgICB7bmFtZTogXCJHb1wiLCBtaW1lOiBcInRleHQveC1nb1wiLCBtb2RlOiBcImdvXCIsIGV4dDogW1wiZ29cIl19LFxuICAgIHtuYW1lOiBcIkdyb292eVwiLCBtaW1lOiBcInRleHQveC1ncm9vdnlcIiwgbW9kZTogXCJncm9vdnlcIiwgZXh0OiBbXCJncm9vdnlcIiwgXCJncmFkbGVcIl0sIGZpbGU6IC9eSmVua2luc2ZpbGUkL30sXG4gICAge25hbWU6IFwiSEFNTFwiLCBtaW1lOiBcInRleHQveC1oYW1sXCIsIG1vZGU6IFwiaGFtbFwiLCBleHQ6IFtcImhhbWxcIl19LFxuICAgIHtuYW1lOiBcIkhhc2tlbGxcIiwgbWltZTogXCJ0ZXh0L3gtaGFza2VsbFwiLCBtb2RlOiBcImhhc2tlbGxcIiwgZXh0OiBbXCJoc1wiXX0sXG4gICAge25hbWU6IFwiSGFza2VsbCAoTGl0ZXJhdGUpXCIsIG1pbWU6IFwidGV4dC94LWxpdGVyYXRlLWhhc2tlbGxcIiwgbW9kZTogXCJoYXNrZWxsLWxpdGVyYXRlXCIsIGV4dDogW1wibGhzXCJdfSxcbiAgICB7bmFtZTogXCJIYXhlXCIsIG1pbWU6IFwidGV4dC94LWhheGVcIiwgbW9kZTogXCJoYXhlXCIsIGV4dDogW1wiaHhcIl19LFxuICAgIHtuYW1lOiBcIkhYTUxcIiwgbWltZTogXCJ0ZXh0L3gtaHhtbFwiLCBtb2RlOiBcImhheGVcIiwgZXh0OiBbXCJoeG1sXCJdfSxcbiAgICB7bmFtZTogXCJBU1AuTkVUXCIsIG1pbWU6IFwiYXBwbGljYXRpb24veC1hc3B4XCIsIG1vZGU6IFwiaHRtbGVtYmVkZGVkXCIsIGV4dDogW1wiYXNweFwiXSwgYWxpYXM6IFtcImFzcFwiLCBcImFzcHhcIl19LFxuICAgIHtuYW1lOiBcIkhUTUxcIiwgbWltZTogXCJ0ZXh0L2h0bWxcIiwgbW9kZTogXCJodG1sbWl4ZWRcIiwgZXh0OiBbXCJodG1sXCIsIFwiaHRtXCIsIFwiaGFuZGxlYmFyc1wiLCBcImhic1wiXSwgYWxpYXM6IFtcInhodG1sXCJdfSxcbiAgICB7bmFtZTogXCJIVFRQXCIsIG1pbWU6IFwibWVzc2FnZS9odHRwXCIsIG1vZGU6IFwiaHR0cFwifSxcbiAgICB7bmFtZTogXCJJRExcIiwgbWltZTogXCJ0ZXh0L3gtaWRsXCIsIG1vZGU6IFwiaWRsXCIsIGV4dDogW1wicHJvXCJdfSxcbiAgICB7bmFtZTogXCJQdWdcIiwgbWltZTogXCJ0ZXh0L3gtcHVnXCIsIG1vZGU6IFwicHVnXCIsIGV4dDogW1wiamFkZVwiLCBcInB1Z1wiXSwgYWxpYXM6IFtcImphZGVcIl19LFxuICAgIHtuYW1lOiBcIkphdmFcIiwgbWltZTogXCJ0ZXh0L3gtamF2YVwiLCBtb2RlOiBcImNsaWtlXCIsIGV4dDogW1wiamF2YVwiXX0sXG4gICAge25hbWU6IFwiSmF2YSBTZXJ2ZXIgUGFnZXNcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94LWpzcFwiLCBtb2RlOiBcImh0bWxlbWJlZGRlZFwiLCBleHQ6IFtcImpzcFwiXSwgYWxpYXM6IFtcImpzcFwiXX0sXG4gICAge25hbWU6IFwiSmF2YVNjcmlwdFwiLCBtaW1lczogW1widGV4dC9qYXZhc2NyaXB0XCIsIFwidGV4dC9lY21hc2NyaXB0XCIsIFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiLCBcImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdFwiLCBcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHRcIl0sXG4gICAgIG1vZGU6IFwiamF2YXNjcmlwdFwiLCBleHQ6IFtcImpzXCJdLCBhbGlhczogW1wiZWNtYXNjcmlwdFwiLCBcImpzXCIsIFwibm9kZVwiLCBcImRhdGF2aWV3anNcIl19LFxuICAgIHtuYW1lOiBcIkpTT05cIiwgbWltZXM6IFtcImFwcGxpY2F0aW9uL2pzb25cIiwgXCJhcHBsaWNhdGlvbi94LWpzb25cIl0sIG1vZGU6IFwiamF2YXNjcmlwdFwiLCBleHQ6IFtcImpzb25cIiwgXCJtYXBcIl0sIGFsaWFzOiBbXCJqc29uNVwiXX0sXG4gICAge25hbWU6IFwiSlNPTi1MRFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL2xkK2pzb25cIiwgbW9kZTogXCJqYXZhc2NyaXB0XCIsIGV4dDogW1wianNvbmxkXCJdLCBhbGlhczogW1wianNvbmxkXCJdfSxcbiAgICB7bmFtZTogXCJKU1hcIiwgbWltZTogXCJ0ZXh0L2pzeFwiLCBtb2RlOiBcImpzeFwiLCBleHQ6IFtcImpzeFwiXX0sXG4gICAge25hbWU6IFwiSmluamEyXCIsIG1pbWU6IFwidGV4dC9qaW5qYTJcIiwgbW9kZTogXCJqaW5qYTJcIiwgZXh0OiBbXCJqMlwiLCBcImppbmphXCIsIFwiamluamEyXCJdfSxcbiAgICB7bmFtZTogXCJKdWxpYVwiLCBtaW1lOiBcInRleHQveC1qdWxpYVwiLCBtb2RlOiBcImp1bGlhXCIsIGV4dDogW1wiamxcIl19LFxuICAgIHtuYW1lOiBcIktvdGxpblwiLCBtaW1lOiBcInRleHQveC1rb3RsaW5cIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcImt0XCJdfSxcbiAgICB7bmFtZTogXCJMRVNTXCIsIG1pbWU6IFwidGV4dC94LWxlc3NcIiwgbW9kZTogXCJjc3NcIiwgZXh0OiBbXCJsZXNzXCJdfSxcbiAgICB7bmFtZTogXCJMaXZlU2NyaXB0XCIsIG1pbWU6IFwidGV4dC94LWxpdmVzY3JpcHRcIiwgbW9kZTogXCJsaXZlc2NyaXB0XCIsIGV4dDogW1wibHNcIl0sIGFsaWFzOiBbXCJsc1wiXX0sXG4gICAge25hbWU6IFwiTHVhXCIsIG1pbWU6IFwidGV4dC94LWx1YVwiLCBtb2RlOiBcImx1YVwiLCBleHQ6IFtcImx1YVwiXX0sXG4gICAge25hbWU6IFwiTWFya2Rvd25cIiwgbWltZTogXCJ0ZXh0L3gtbWFya2Rvd25cIiwgbW9kZTogXCJtYXJrZG93blwiLCBleHQ6IFtcIm1hcmtkb3duXCIsIFwibWRcIiwgXCJta2RcIl19LFxuICAgIHtuYW1lOiBcIm1JUkNcIiwgbWltZTogXCJ0ZXh0L21pcmNcIiwgbW9kZTogXCJtaXJjXCJ9LFxuICAgIHtuYW1lOiBcIk1hcmlhREIgU1FMXCIsIG1pbWU6IFwidGV4dC94LW1hcmlhZGJcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwiTWF0aGVtYXRpY2FcIiwgbWltZTogXCJ0ZXh0L3gtbWF0aGVtYXRpY2FcIiwgbW9kZTogXCJtYXRoZW1hdGljYVwiLCBleHQ6IFtcIm1cIiwgXCJuYlwiLCBcIndsXCIsIFwid2xzXCJdfSxcbiAgICB7bmFtZTogXCJNb2RlbGljYVwiLCBtaW1lOiBcInRleHQveC1tb2RlbGljYVwiLCBtb2RlOiBcIm1vZGVsaWNhXCIsIGV4dDogW1wibW9cIl19LFxuICAgIHtuYW1lOiBcIk1VTVBTXCIsIG1pbWU6IFwidGV4dC94LW11bXBzXCIsIG1vZGU6IFwibXVtcHNcIiwgZXh0OiBbXCJtcHNcIl19LFxuICAgIHtuYW1lOiBcIk1TIFNRTFwiLCBtaW1lOiBcInRleHQveC1tc3NxbFwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJtYm94XCIsIG1pbWU6IFwiYXBwbGljYXRpb24vbWJveFwiLCBtb2RlOiBcIm1ib3hcIiwgZXh0OiBbXCJtYm94XCJdfSxcbiAgICB7bmFtZTogXCJNeVNRTFwiLCBtaW1lOiBcInRleHQveC1teXNxbFwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJOZ2lueFwiLCBtaW1lOiBcInRleHQveC1uZ2lueC1jb25mXCIsIG1vZGU6IFwibmdpbnhcIiwgZmlsZTogL25naW54LipcXC5jb25mJC9pfSxcbiAgICB7bmFtZTogXCJOU0lTXCIsIG1pbWU6IFwidGV4dC94LW5zaXNcIiwgbW9kZTogXCJuc2lzXCIsIGV4dDogW1wibnNoXCIsIFwibnNpXCJdfSxcbiAgICB7bmFtZTogXCJOVHJpcGxlc1wiLCBtaW1lczogW1wiYXBwbGljYXRpb24vbi10cmlwbGVzXCIsIFwiYXBwbGljYXRpb24vbi1xdWFkc1wiLCBcInRleHQvbi10cmlwbGVzXCJdLFxuICAgICBtb2RlOiBcIm50cmlwbGVzXCIsIGV4dDogW1wibnRcIiwgXCJucVwiXX0sXG4gICAge25hbWU6IFwiT2JqZWN0aXZlLUNcIiwgbWltZTogXCJ0ZXh0L3gtb2JqZWN0aXZlY1wiLCBtb2RlOiBcImNsaWtlXCIsIGV4dDogW1wibVwiXSwgYWxpYXM6IFtcIm9iamVjdGl2ZS1jXCIsIFwib2JqY1wiXX0sXG4gICAge25hbWU6IFwiT2JqZWN0aXZlLUMrK1wiLCBtaW1lOiBcInRleHQveC1vYmplY3RpdmVjKytcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcIm1tXCJdLCBhbGlhczogW1wib2JqZWN0aXZlLWMrK1wiLCBcIm9iamMrK1wiXX0sXG4gICAge25hbWU6IFwiT0NhbWxcIiwgbWltZTogXCJ0ZXh0L3gtb2NhbWxcIiwgbW9kZTogXCJtbGxpa2VcIiwgZXh0OiBbXCJtbFwiLCBcIm1saVwiLCBcIm1sbFwiLCBcIm1seVwiXX0sXG4gICAge25hbWU6IFwiT2N0YXZlXCIsIG1pbWU6IFwidGV4dC94LW9jdGF2ZVwiLCBtb2RlOiBcIm9jdGF2ZVwiLCBleHQ6IFtcIm1cIl19LFxuICAgIHtuYW1lOiBcIk96XCIsIG1pbWU6IFwidGV4dC94LW96XCIsIG1vZGU6IFwib3pcIiwgZXh0OiBbXCJvelwiXX0sXG4gICAge25hbWU6IFwiUGFzY2FsXCIsIG1pbWU6IFwidGV4dC94LXBhc2NhbFwiLCBtb2RlOiBcInBhc2NhbFwiLCBleHQ6IFtcInBcIiwgXCJwYXNcIl19LFxuICAgIHtuYW1lOiBcIlBFRy5qc1wiLCBtaW1lOiBcIm51bGxcIiwgbW9kZTogXCJwZWdqc1wiLCBleHQ6IFtcImpzb25sZFwiXX0sXG4gICAge25hbWU6IFwiUGVybFwiLCBtaW1lOiBcInRleHQveC1wZXJsXCIsIG1vZGU6IFwicGVybFwiLCBleHQ6IFtcInBsXCIsIFwicG1cIl19LFxuICAgIHtuYW1lOiBcIlBIUFwiLCBtaW1lczogW1widGV4dC94LXBocFwiLCBcImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwXCIsIFwiYXBwbGljYXRpb24veC1odHRwZC1waHAtb3BlblwiXSwgbW9kZTogXCJwaHBcIiwgZXh0OiBbXCJwaHBcIiwgXCJwaHAzXCIsIFwicGhwNFwiLCBcInBocDVcIiwgXCJwaHA3XCIsIFwicGh0bWxcIl19LFxuICAgIHtuYW1lOiBcIlBpZ1wiLCBtaW1lOiBcInRleHQveC1waWdcIiwgbW9kZTogXCJwaWdcIiwgZXh0OiBbXCJwaWdcIl19LFxuICAgIHtuYW1lOiBcIlBsYWluIFRleHRcIiwgbWltZTogXCJ0ZXh0L3BsYWluXCIsIG1vZGU6IFwibnVsbFwiLCBleHQ6IFtcInR4dFwiLCBcInRleHRcIiwgXCJjb25mXCIsIFwiZGVmXCIsIFwibGlzdFwiLCBcImxvZ1wiXX0sXG4gICAge25hbWU6IFwiUExTUUxcIiwgbWltZTogXCJ0ZXh0L3gtcGxzcWxcIiwgbW9kZTogXCJzcWxcIiwgZXh0OiBbXCJwbHNcIl19LFxuICAgIHtuYW1lOiBcIlBvc3RncmVTUUxcIiwgbWltZTogXCJ0ZXh0L3gtcGdzcWxcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwiUG93ZXJTaGVsbFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtcG93ZXJzaGVsbFwiLCBtb2RlOiBcInBvd2Vyc2hlbGxcIiwgZXh0OiBbXCJwczFcIiwgXCJwc2QxXCIsIFwicHNtMVwiXX0sXG4gICAge25hbWU6IFwiUHJvcGVydGllcyBmaWxlc1wiLCBtaW1lOiBcInRleHQveC1wcm9wZXJ0aWVzXCIsIG1vZGU6IFwicHJvcGVydGllc1wiLCBleHQ6IFtcInByb3BlcnRpZXNcIiwgXCJpbmlcIiwgXCJpblwiXSwgYWxpYXM6IFtcImluaVwiLCBcInByb3BlcnRpZXNcIl19LFxuICAgIHtuYW1lOiBcIlByb3RvQnVmXCIsIG1pbWU6IFwidGV4dC94LXByb3RvYnVmXCIsIG1vZGU6IFwicHJvdG9idWZcIiwgZXh0OiBbXCJwcm90b1wiXX0sXG4gICAge25hbWU6IFwiUHl0aG9uXCIsIG1pbWU6IFwidGV4dC94LXB5dGhvblwiLCBtb2RlOiBcInB5dGhvblwiLCBleHQ6IFtcIkJVSUxEXCIsIFwiYnpsXCIsIFwicHlcIiwgXCJweXdcIl0sIGZpbGU6IC9eKEJVQ0t8QlVJTEQpJC99LFxuICAgIHtuYW1lOiBcIlB1cHBldFwiLCBtaW1lOiBcInRleHQveC1wdXBwZXRcIiwgbW9kZTogXCJwdXBwZXRcIiwgZXh0OiBbXCJwcFwiXX0sXG4gICAge25hbWU6IFwiUVwiLCBtaW1lOiBcInRleHQveC1xXCIsIG1vZGU6IFwicVwiLCBleHQ6IFtcInFcIl19LFxuICAgIHtuYW1lOiBcIlJcIiwgbWltZTogXCJ0ZXh0L3gtcnNyY1wiLCBtb2RlOiBcInJcIiwgZXh0OiBbXCJyXCIsIFwiUlwiXSwgYWxpYXM6IFtcInJzY3JpcHRcIl19LFxuICAgIHtuYW1lOiBcInJlU3RydWN0dXJlZFRleHRcIiwgbWltZTogXCJ0ZXh0L3gtcnN0XCIsIG1vZGU6IFwicnN0XCIsIGV4dDogW1wicnN0XCJdLCBhbGlhczogW1wicnN0XCJdfSxcbiAgICB7bmFtZTogXCJSUE0gQ2hhbmdlc1wiLCBtaW1lOiBcInRleHQveC1ycG0tY2hhbmdlc1wiLCBtb2RlOiBcInJwbVwifSxcbiAgICB7bmFtZTogXCJSUE0gU3BlY1wiLCBtaW1lOiBcInRleHQveC1ycG0tc3BlY1wiLCBtb2RlOiBcInJwbVwiLCBleHQ6IFtcInNwZWNcIl19LFxuICAgIHtuYW1lOiBcIlJ1YnlcIiwgbWltZTogXCJ0ZXh0L3gtcnVieVwiLCBtb2RlOiBcInJ1YnlcIiwgZXh0OiBbXCJyYlwiXSwgYWxpYXM6IFtcImpydWJ5XCIsIFwibWFjcnVieVwiLCBcInJha2VcIiwgXCJyYlwiLCBcInJieFwiXX0sXG4gICAge25hbWU6IFwiUnVzdFwiLCBtaW1lOiBcInRleHQveC1ydXN0c3JjXCIsIG1vZGU6IFwicnVzdFwiLCBleHQ6IFtcInJzXCJdfSxcbiAgICB7bmFtZTogXCJTQVNcIiwgbWltZTogXCJ0ZXh0L3gtc2FzXCIsIG1vZGU6IFwic2FzXCIsIGV4dDogW1wic2FzXCJdfSxcbiAgICB7bmFtZTogXCJTYXNzXCIsIG1pbWU6IFwidGV4dC94LXNhc3NcIiwgbW9kZTogXCJzYXNzXCIsIGV4dDogW1wic2Fzc1wiXX0sXG4gICAge25hbWU6IFwiU2NhbGFcIiwgbWltZTogXCJ0ZXh0L3gtc2NhbGFcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcInNjYWxhXCJdfSxcbiAgICB7bmFtZTogXCJTY2hlbWVcIiwgbWltZTogXCJ0ZXh0L3gtc2NoZW1lXCIsIG1vZGU6IFwic2NoZW1lXCIsIGV4dDogW1wic2NtXCIsIFwic3NcIl19LFxuICAgIHtuYW1lOiBcIlNDU1NcIiwgbWltZTogXCJ0ZXh0L3gtc2Nzc1wiLCBtb2RlOiBcImNzc1wiLCBleHQ6IFtcInNjc3NcIl19LFxuICAgIHtuYW1lOiBcIlNoZWxsXCIsIG1pbWVzOiBbXCJ0ZXh0L3gtc2hcIiwgXCJhcHBsaWNhdGlvbi94LXNoXCJdLCBtb2RlOiBcInNoZWxsXCIsIGV4dDogW1wic2hcIiwgXCJrc2hcIiwgXCJiYXNoXCJdLCBhbGlhczogW1wiYmFzaFwiLCBcInNoXCIsIFwienNoXCJdLCBmaWxlOiAvXlBLR0JVSUxEJC99LFxuICAgIHtuYW1lOiBcIlNpZXZlXCIsIG1pbWU6IFwiYXBwbGljYXRpb24vc2lldmVcIiwgbW9kZTogXCJzaWV2ZVwiLCBleHQ6IFtcInNpdlwiLCBcInNpZXZlXCJdfSxcbiAgICB7bmFtZTogXCJTbGltXCIsIG1pbWVzOiBbXCJ0ZXh0L3gtc2xpbVwiLCBcImFwcGxpY2F0aW9uL3gtc2xpbVwiXSwgbW9kZTogXCJzbGltXCIsIGV4dDogW1wic2xpbVwiXX0sXG4gICAge25hbWU6IFwiU21hbGx0YWxrXCIsIG1pbWU6IFwidGV4dC94LXN0c3JjXCIsIG1vZGU6IFwic21hbGx0YWxrXCIsIGV4dDogW1wic3RcIl19LFxuICAgIHtuYW1lOiBcIlNtYXJ0eVwiLCBtaW1lOiBcInRleHQveC1zbWFydHlcIiwgbW9kZTogXCJzbWFydHlcIiwgZXh0OiBbXCJ0cGxcIl19LFxuICAgIHtuYW1lOiBcIlNvbHJcIiwgbWltZTogXCJ0ZXh0L3gtc29sclwiLCBtb2RlOiBcInNvbHJcIn0sXG4gICAge25hbWU6IFwiU01MXCIsIG1pbWU6IFwidGV4dC94LXNtbFwiLCBtb2RlOiBcIm1sbGlrZVwiLCBleHQ6IFtcInNtbFwiLCBcInNpZ1wiLCBcImZ1blwiLCBcInNtYWNrc3BlY1wiXX0sXG4gICAge25hbWU6IFwiU295XCIsIG1pbWU6IFwidGV4dC94LXNveVwiLCBtb2RlOiBcInNveVwiLCBleHQ6IFtcInNveVwiXSwgYWxpYXM6IFtcImNsb3N1cmUgdGVtcGxhdGVcIl19LFxuICAgIHtuYW1lOiBcIlNQQVJRTFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3NwYXJxbC1xdWVyeVwiLCBtb2RlOiBcInNwYXJxbFwiLCBleHQ6IFtcInJxXCIsIFwic3BhcnFsXCJdLCBhbGlhczogW1wic3BhcnVsXCJdfSxcbiAgICB7bmFtZTogXCJTcHJlYWRzaGVldFwiLCBtaW1lOiBcInRleHQveC1zcHJlYWRzaGVldFwiLCBtb2RlOiBcInNwcmVhZHNoZWV0XCIsIGFsaWFzOiBbXCJleGNlbFwiLCBcImZvcm11bGFcIl19LFxuICAgIHtuYW1lOiBcIlNRTFwiLCBtaW1lOiBcInRleHQveC1zcWxcIiwgbW9kZTogXCJzcWxcIiwgZXh0OiBbXCJzcWxcIl19LFxuICAgIHtuYW1lOiBcIlNRTGl0ZVwiLCBtaW1lOiBcInRleHQveC1zcWxpdGVcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwiU3F1aXJyZWxcIiwgbWltZTogXCJ0ZXh0L3gtc3F1aXJyZWxcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcIm51dFwiXX0sXG4gICAge25hbWU6IFwiU3R5bHVzXCIsIG1pbWU6IFwidGV4dC94LXN0eWxcIiwgbW9kZTogXCJzdHlsdXNcIiwgZXh0OiBbXCJzdHlsXCJdfSxcbiAgICB7bmFtZTogXCJTd2lmdFwiLCBtaW1lOiBcInRleHQveC1zd2lmdFwiLCBtb2RlOiBcInN3aWZ0XCIsIGV4dDogW1wic3dpZnRcIl19LFxuICAgIHtuYW1lOiBcInNUZVhcIiwgbWltZTogXCJ0ZXh0L3gtc3RleFwiLCBtb2RlOiBcInN0ZXhcIn0sXG4gICAge25hbWU6IFwiTGFUZVhcIiwgbWltZTogXCJ0ZXh0L3gtbGF0ZXhcIiwgbW9kZTogXCJzdGV4XCIsIGV4dDogW1widGV4dFwiLCBcImx0eFwiLCBcInRleFwiXSwgYWxpYXM6IFtcInRleFwiXX0sXG4gICAge25hbWU6IFwiU3lzdGVtVmVyaWxvZ1wiLCBtaW1lOiBcInRleHQveC1zeXN0ZW12ZXJpbG9nXCIsIG1vZGU6IFwidmVyaWxvZ1wiLCBleHQ6IFtcInZcIiwgXCJzdlwiLCBcInN2aFwiXX0sXG4gICAge25hbWU6IFwiVGNsXCIsIG1pbWU6IFwidGV4dC94LXRjbFwiLCBtb2RlOiBcInRjbFwiLCBleHQ6IFtcInRjbFwiXX0sXG4gICAge25hbWU6IFwiVGV4dGlsZVwiLCBtaW1lOiBcInRleHQveC10ZXh0aWxlXCIsIG1vZGU6IFwidGV4dGlsZVwiLCBleHQ6IFtcInRleHRpbGVcIl19LFxuICAgIHtuYW1lOiBcIlRpZGRseVdpa2lcIiwgbWltZTogXCJ0ZXh0L3gtdGlkZGx5d2lraVwiLCBtb2RlOiBcInRpZGRseXdpa2lcIn0sXG4gICAge25hbWU6IFwiVGlraSB3aWtpXCIsIG1pbWU6IFwidGV4dC90aWtpXCIsIG1vZGU6IFwidGlraVwifSxcbiAgICB7bmFtZTogXCJUT01MXCIsIG1pbWU6IFwidGV4dC94LXRvbWxcIiwgbW9kZTogXCJ0b21sXCIsIGV4dDogW1widG9tbFwiXX0sXG4gICAge25hbWU6IFwiVG9ybmFkb1wiLCBtaW1lOiBcInRleHQveC10b3JuYWRvXCIsIG1vZGU6IFwidG9ybmFkb1wifSxcbiAgICB7bmFtZTogXCJ0cm9mZlwiLCBtaW1lOiBcInRleHQvdHJvZmZcIiwgbW9kZTogXCJ0cm9mZlwiLCBleHQ6IFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCIsIFwiNlwiLCBcIjdcIiwgXCI4XCIsIFwiOVwiXX0sXG4gICAge25hbWU6IFwiVFRDTlwiLCBtaW1lOiBcInRleHQveC10dGNuXCIsIG1vZGU6IFwidHRjblwiLCBleHQ6IFtcInR0Y25cIiwgXCJ0dGNuM1wiLCBcInR0Y25wcFwiXX0sXG4gICAge25hbWU6IFwiVFRDTl9DRkdcIiwgbWltZTogXCJ0ZXh0L3gtdHRjbi1jZmdcIiwgbW9kZTogXCJ0dGNuLWNmZ1wiLCBleHQ6IFtcImNmZ1wiXX0sXG4gICAge25hbWU6IFwiVHVydGxlXCIsIG1pbWU6IFwidGV4dC90dXJ0bGVcIiwgbW9kZTogXCJ0dXJ0bGVcIiwgZXh0OiBbXCJ0dGxcIl19LFxuICAgIHtuYW1lOiBcIlR5cGVTY3JpcHRcIiwgbWltZTogXCJhcHBsaWNhdGlvbi90eXBlc2NyaXB0XCIsIG1vZGU6IFwiamF2YXNjcmlwdFwiLCBleHQ6IFtcInRzXCJdLCBhbGlhczogW1widHNcIl19LFxuICAgIHtuYW1lOiBcIlR5cGVTY3JpcHQtSlNYXCIsIG1pbWU6IFwidGV4dC90eXBlc2NyaXB0LWpzeFwiLCBtb2RlOiBcImpzeFwiLCBleHQ6IFtcInRzeFwiXSwgYWxpYXM6IFtcInRzeFwiXX0sXG4gICAge25hbWU6IFwiVHdpZ1wiLCBtaW1lOiBcInRleHQveC10d2lnXCIsIG1vZGU6IFwidHdpZ1wifSxcbiAgICB7bmFtZTogXCJXZWIgSURMXCIsIG1pbWU6IFwidGV4dC94LXdlYmlkbFwiLCBtb2RlOiBcIndlYmlkbFwiLCBleHQ6IFtcIndlYmlkbFwiXX0sXG4gICAge25hbWU6IFwiVkIuTkVUXCIsIG1pbWU6IFwidGV4dC94LXZiXCIsIG1vZGU6IFwidmJcIiwgZXh0OiBbXCJ2YlwiXX0sXG4gICAge25hbWU6IFwiVkJTY3JpcHRcIiwgbWltZTogXCJ0ZXh0L3Zic2NyaXB0XCIsIG1vZGU6IFwidmJzY3JpcHRcIiwgZXh0OiBbXCJ2YnNcIl19LFxuICAgIHtuYW1lOiBcIlZlbG9jaXR5XCIsIG1pbWU6IFwidGV4dC92ZWxvY2l0eVwiLCBtb2RlOiBcInZlbG9jaXR5XCIsIGV4dDogW1widnRsXCJdfSxcbiAgICB7bmFtZTogXCJWZXJpbG9nXCIsIG1pbWU6IFwidGV4dC94LXZlcmlsb2dcIiwgbW9kZTogXCJ2ZXJpbG9nXCIsIGV4dDogW1widlwiXX0sXG4gICAge25hbWU6IFwiVkhETFwiLCBtaW1lOiBcInRleHQveC12aGRsXCIsIG1vZGU6IFwidmhkbFwiLCBleHQ6IFtcInZoZFwiLCBcInZoZGxcIl19LFxuICAgIHtuYW1lOiBcIlZ1ZS5qcyBDb21wb25lbnRcIiwgbWltZXM6IFtcInNjcmlwdC94LXZ1ZVwiLCBcInRleHQveC12dWVcIl0sIG1vZGU6IFwidnVlXCIsIGV4dDogW1widnVlXCJdfSxcbiAgICB7bmFtZTogXCJYTUxcIiwgbWltZXM6IFtcImFwcGxpY2F0aW9uL3htbFwiLCBcInRleHQveG1sXCJdLCBtb2RlOiBcInhtbFwiLCBleHQ6IFtcInhtbFwiLCBcInhzbFwiLCBcInhzZFwiLCBcInN2Z1wiXSwgYWxpYXM6IFtcInJzc1wiLCBcIndzZGxcIiwgXCJ4c2RcIl19LFxuICAgIHtuYW1lOiBcIlhRdWVyeVwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3hxdWVyeVwiLCBtb2RlOiBcInhxdWVyeVwiLCBleHQ6IFtcInh5XCIsIFwieHF1ZXJ5XCJdfSxcbiAgICB7bmFtZTogXCJZYWNhc1wiLCBtaW1lOiBcInRleHQveC15YWNhc1wiLCBtb2RlOiBcInlhY2FzXCIsIGV4dDogW1wieXNcIl19LFxuICAgIHtuYW1lOiBcIllBTUxcIiwgbWltZXM6IFtcInRleHQveC15YW1sXCIsIFwidGV4dC95YW1sXCJdLCBtb2RlOiBcInlhbWxcIiwgZXh0OiBbXCJ5YW1sXCIsIFwieW1sXCJdLCBhbGlhczogW1wieW1sXCIsIFwidHJhY2tlclwiLCBcImRhdGF2aWV3XCJdfSxcbiAgICB7bmFtZTogXCJaODBcIiwgbWltZTogXCJ0ZXh0L3gtejgwXCIsIG1vZGU6IFwiejgwXCIsIGV4dDogW1wiejgwXCJdfSxcbiAgICB7bmFtZTogXCJtc2NnZW5cIiwgbWltZTogXCJ0ZXh0L3gtbXNjZ2VuXCIsIG1vZGU6IFwibXNjZ2VuXCIsIGV4dDogW1wibXNjZ2VuXCIsIFwibXNjaW5cIiwgXCJtc2NcIl19LFxuICAgIHtuYW1lOiBcInh1XCIsIG1pbWU6IFwidGV4dC94LXh1XCIsIG1vZGU6IFwibXNjZ2VuXCIsIGV4dDogW1wieHVcIl19LFxuICAgIHtuYW1lOiBcIm1zZ2VubnlcIiwgbWltZTogXCJ0ZXh0L3gtbXNnZW5ueVwiLCBtb2RlOiBcIm1zY2dlblwiLCBleHQ6IFtcIm1zZ2VubnlcIl19LFxuICAgIHtuYW1lOiBcIldlYkFzc2VtYmx5XCIsIG1pbWU6IFwidGV4dC93ZWJhc3NlbWJseVwiLCBtb2RlOiBcIndhc3RcIiwgZXh0OiBbXCJ3YXRcIiwgXCJ3YXN0XCJdfSxcbiAgXTtcbiAgLy8gRW5zdXJlIGFsbCBtb2RlcyBoYXZlIGEgbWltZSBwcm9wZXJ0eSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb2RlTWlycm9yLm1vZGVJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGluZm8gPSBDb2RlTWlycm9yLm1vZGVJbmZvW2ldO1xuICAgIGlmIChpbmZvLm1pbWVzKSBpbmZvLm1pbWUgPSBpbmZvLm1pbWVzWzBdO1xuICB9XG5cbiAgQ29kZU1pcnJvci5maW5kTW9kZUJ5TUlNRSA9IGZ1bmN0aW9uKG1pbWUpIHtcbiAgICBtaW1lID0gbWltZS50b0xvd2VyQ2FzZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQ29kZU1pcnJvci5tb2RlSW5mby5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGluZm8gPSBDb2RlTWlycm9yLm1vZGVJbmZvW2ldO1xuICAgICAgaWYgKGluZm8ubWltZSA9PSBtaW1lKSByZXR1cm4gaW5mbztcbiAgICAgIGlmIChpbmZvLm1pbWVzKSBmb3IgKHZhciBqID0gMDsgaiA8IGluZm8ubWltZXMubGVuZ3RoOyBqKyspXG4gICAgICAgIGlmIChpbmZvLm1pbWVzW2pdID09IG1pbWUpIHJldHVybiBpbmZvO1xuICAgIH1cbiAgICBpZiAoL1xcK3htbCQvLnRlc3QobWltZSkpIHJldHVybiBDb2RlTWlycm9yLmZpbmRNb2RlQnlNSU1FKFwiYXBwbGljYXRpb24veG1sXCIpXG4gICAgaWYgKC9cXCtqc29uJC8udGVzdChtaW1lKSkgcmV0dXJuIENvZGVNaXJyb3IuZmluZE1vZGVCeU1JTUUoXCJhcHBsaWNhdGlvbi9qc29uXCIpXG4gIH07XG5cbiAgQ29kZU1pcnJvci5maW5kTW9kZUJ5RXh0ZW5zaW9uID0gZnVuY3Rpb24oZXh0KSB7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb2RlTWlycm9yLm1vZGVJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IENvZGVNaXJyb3IubW9kZUluZm9baV07XG4gICAgICBpZiAoaW5mby5leHQpIGZvciAodmFyIGogPSAwOyBqIDwgaW5mby5leHQubGVuZ3RoOyBqKyspXG4gICAgICAgIGlmIChpbmZvLmV4dFtqXSA9PSBleHQpIHJldHVybiBpbmZvO1xuICAgIH1cbiAgfTtcblxuICBDb2RlTWlycm9yLmZpbmRNb2RlQnlGaWxlTmFtZSA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb2RlTWlycm9yLm1vZGVJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IENvZGVNaXJyb3IubW9kZUluZm9baV07XG4gICAgICBpZiAoaW5mby5maWxlICYmIGluZm8uZmlsZS50ZXN0KGZpbGVuYW1lKSkgcmV0dXJuIGluZm87XG4gICAgfVxuICAgIHZhciBkb3QgPSBmaWxlbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgdmFyIGV4dCA9IGRvdCA+IC0xICYmIGZpbGVuYW1lLnN1YnN0cmluZyhkb3QgKyAxLCBmaWxlbmFtZS5sZW5ndGgpO1xuICAgIGlmIChleHQpIHJldHVybiBDb2RlTWlycm9yLmZpbmRNb2RlQnlFeHRlbnNpb24oZXh0KTtcbiAgfTtcblxuICBDb2RlTWlycm9yLmZpbmRNb2RlQnlOYW1lID0gZnVuY3Rpb24obmFtZSkge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb2RlTWlycm9yLm1vZGVJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IENvZGVNaXJyb3IubW9kZUluZm9baV07XG4gICAgICBpZiAoaW5mby5uYW1lLnRvTG93ZXJDYXNlKCkgPT0gbmFtZSkgcmV0dXJuIGluZm87XG4gICAgICBpZiAoaW5mby5hbGlhcykgZm9yICh2YXIgaiA9IDA7IGogPCBpbmZvLmFsaWFzLmxlbmd0aDsgaisrKVxuICAgICAgICBpZiAoaW5mby5hbGlhc1tqXS50b0xvd2VyQ2FzZSgpID09IG5hbWUpIHJldHVybiBpbmZvO1xuICAgIH1cbiAgfTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiYXBsXCIsIGZ1bmN0aW9uKCkge1xuICB2YXIgYnVpbHRJbk9wcyA9IHtcbiAgICBcIi5cIjogXCJpbm5lclByb2R1Y3RcIixcbiAgICBcIlxcXFxcIjogXCJzY2FuXCIsXG4gICAgXCIvXCI6IFwicmVkdWNlXCIsXG4gICAgXCLijL9cIjogXCJyZWR1Y2UxQXhpc1wiLFxuICAgIFwi4o2AXCI6IFwic2NhbjFBeGlzXCIsXG4gICAgXCLCqFwiOiBcImVhY2hcIixcbiAgICBcIuKNo1wiOiBcInBvd2VyXCJcbiAgfTtcbiAgdmFyIGJ1aWx0SW5GdW5jcyA9IHtcbiAgICBcIitcIjogW1wiY29uanVnYXRlXCIsIFwiYWRkXCJdLFxuICAgIFwi4oiSXCI6IFtcIm5lZ2F0ZVwiLCBcInN1YnRyYWN0XCJdLFxuICAgIFwiw5dcIjogW1wic2lnbk9mXCIsIFwibXVsdGlwbHlcIl0sXG4gICAgXCLDt1wiOiBbXCJyZWNpcHJvY2FsXCIsIFwiZGl2aWRlXCJdLFxuICAgIFwi4oyIXCI6IFtcImNlaWxpbmdcIiwgXCJncmVhdGVyT2ZcIl0sXG4gICAgXCLijIpcIjogW1wiZmxvb3JcIiwgXCJsZXNzZXJPZlwiXSxcbiAgICBcIuKIo1wiOiBbXCJhYnNvbHV0ZVwiLCBcInJlc2lkdWVcIl0sXG4gICAgXCLijbNcIjogW1wiaW5kZXhHZW5lcmF0ZVwiLCBcImluZGV4T2ZcIl0sXG4gICAgXCI/XCI6IFtcInJvbGxcIiwgXCJkZWFsXCJdLFxuICAgIFwi4ouGXCI6IFtcImV4cG9uZW50aWF0ZVwiLCBcInRvVGhlUG93ZXJPZlwiXSxcbiAgICBcIuKNn1wiOiBbXCJuYXR1cmFsTG9nXCIsIFwibG9nVG9UaGVCYXNlXCJdLFxuICAgIFwi4peLXCI6IFtcInBpVGltZXNcIiwgXCJjaXJjdWxhckZ1bmNzXCJdLFxuICAgIFwiIVwiOiBbXCJmYWN0b3JpYWxcIiwgXCJiaW5vbWlhbFwiXSxcbiAgICBcIuKMuVwiOiBbXCJtYXRyaXhJbnZlcnNlXCIsIFwibWF0cml4RGl2aWRlXCJdLFxuICAgIFwiPFwiOiBbbnVsbCwgXCJsZXNzVGhhblwiXSxcbiAgICBcIuKJpFwiOiBbbnVsbCwgXCJsZXNzVGhhbk9yRXF1YWxcIl0sXG4gICAgXCI9XCI6IFtudWxsLCBcImVxdWFsc1wiXSxcbiAgICBcIj5cIjogW251bGwsIFwiZ3JlYXRlclRoYW5cIl0sXG4gICAgXCLiiaVcIjogW251bGwsIFwiZ3JlYXRlclRoYW5PckVxdWFsXCJdLFxuICAgIFwi4omgXCI6IFtudWxsLCBcIm5vdEVxdWFsXCJdLFxuICAgIFwi4omhXCI6IFtcImRlcHRoXCIsIFwibWF0Y2hcIl0sXG4gICAgXCLiiaJcIjogW251bGwsIFwibm90TWF0Y2hcIl0sXG4gICAgXCLiiIhcIjogW1wiZW5saXN0XCIsIFwibWVtYmVyc2hpcFwiXSxcbiAgICBcIuKNt1wiOiBbbnVsbCwgXCJmaW5kXCJdLFxuICAgIFwi4oiqXCI6IFtcInVuaXF1ZVwiLCBcInVuaW9uXCJdLFxuICAgIFwi4oipXCI6IFtudWxsLCBcImludGVyc2VjdGlvblwiXSxcbiAgICBcIuKIvFwiOiBbXCJub3RcIiwgXCJ3aXRob3V0XCJdLFxuICAgIFwi4oioXCI6IFtudWxsLCBcIm9yXCJdLFxuICAgIFwi4oinXCI6IFtudWxsLCBcImFuZFwiXSxcbiAgICBcIuKNsVwiOiBbbnVsbCwgXCJub3JcIl0sXG4gICAgXCLijbJcIjogW251bGwsIFwibmFuZFwiXSxcbiAgICBcIuKNtFwiOiBbXCJzaGFwZU9mXCIsIFwicmVzaGFwZVwiXSxcbiAgICBcIixcIjogW1wicmF2ZWxcIiwgXCJjYXRlbmF0ZVwiXSxcbiAgICBcIuKNqlwiOiBbbnVsbCwgXCJmaXJzdEF4aXNDYXRlbmF0ZVwiXSxcbiAgICBcIuKMvVwiOiBbXCJyZXZlcnNlXCIsIFwicm90YXRlXCJdLFxuICAgIFwi4oqWXCI6IFtcImF4aXMxUmV2ZXJzZVwiLCBcImF4aXMxUm90YXRlXCJdLFxuICAgIFwi4o2JXCI6IFtcInRyYW5zcG9zZVwiLCBudWxsXSxcbiAgICBcIuKGkVwiOiBbXCJmaXJzdFwiLCBcInRha2VcIl0sXG4gICAgXCLihpNcIjogW251bGwsIFwiZHJvcFwiXSxcbiAgICBcIuKKglwiOiBbXCJlbmNsb3NlXCIsIFwicGFydGl0aW9uV2l0aEF4aXNcIl0sXG4gICAgXCLiioNcIjogW1wiZGljbG9zZVwiLCBcInBpY2tcIl0sXG4gICAgXCLijLdcIjogW251bGwsIFwiaW5kZXhcIl0sXG4gICAgXCLijYtcIjogW1wiZ3JhZGVVcFwiLCBudWxsXSxcbiAgICBcIuKNklwiOiBbXCJncmFkZURvd25cIiwgbnVsbF0sXG4gICAgXCLiiqRcIjogW1wiZW5jb2RlXCIsIG51bGxdLFxuICAgIFwi4oqlXCI6IFtcImRlY29kZVwiLCBudWxsXSxcbiAgICBcIuKNlVwiOiBbXCJmb3JtYXRcIiwgXCJmb3JtYXRCeUV4YW1wbGVcIl0sXG4gICAgXCLijY5cIjogW1wiZXhlY3V0ZVwiLCBudWxsXSxcbiAgICBcIuKKo1wiOiBbXCJzdG9wXCIsIFwibGVmdFwiXSxcbiAgICBcIuKKolwiOiBbXCJwYXNzXCIsIFwicmlnaHRcIl1cbiAgfTtcblxuICB2YXIgaXNPcGVyYXRvciA9IC9bXFwuXFwv4oy/4o2AwqjijaNdLztcbiAgdmFyIGlzTmlsYWRpYyA9IC/ijawvO1xuICB2YXIgaXNGdW5jdGlvbiA9IC9bXFwr4oiSw5fDt+KMiOKMiuKIo+KNs1xcP+KLhuKNn+KXiyHijLk84omkPT7iiaXiiaDiiaHiiaLiiIjijbfiiKriiKniiLziiKjiiKfijbHijbLijbQs4o2q4oy94oqW4o2J4oaR4oaT4oqC4oqD4oy34o2L4o2S4oqk4oql4o2V4o2O4oqj4oqiXS87XG4gIHZhciBpc0Fycm93ID0gL+KGkC87XG4gIHZhciBpc0NvbW1lbnQgPSAvW+KNnSNdLiokLztcblxuICB2YXIgc3RyaW5nRWF0ZXIgPSBmdW5jdGlvbih0eXBlKSB7XG4gICAgdmFyIHByZXY7XG4gICAgcHJldiA9IGZhbHNlO1xuICAgIHJldHVybiBmdW5jdGlvbihjKSB7XG4gICAgICBwcmV2ID0gYztcbiAgICAgIGlmIChjID09PSB0eXBlKSB7XG4gICAgICAgIHJldHVybiBwcmV2ID09PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH07XG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmV2OiBmYWxzZSxcbiAgICAgICAgZnVuYzogZmFsc2UsXG4gICAgICAgIG9wOiBmYWxzZSxcbiAgICAgICAgc3RyaW5nOiBmYWxzZSxcbiAgICAgICAgZXNjYXBlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9LFxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY2gsIGZ1bmNOYW1lO1xuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgICAgaWYgKGNoID09PSAnXCInIHx8IGNoID09PSBcIidcIikge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoc3RyaW5nRWF0ZXIoY2gpKTtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgc3RhdGUucHJldiA9IHRydWU7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgaWYgKC9bXFxbe1xcKF0vLnRlc3QoY2gpKSB7XG4gICAgICAgIHN0YXRlLnByZXYgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoL1tcXF19XFwpXS8udGVzdChjaCkpIHtcbiAgICAgICAgc3RhdGUucHJldiA9IHRydWU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGlzTmlsYWRpYy50ZXN0KGNoKSkge1xuICAgICAgICBzdGF0ZS5wcmV2ID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBcIm5pbGFkaWNcIjtcbiAgICAgIH1cbiAgICAgIGlmICgvW8KvXFxkXS8udGVzdChjaCkpIHtcbiAgICAgICAgaWYgKHN0YXRlLmZ1bmMpIHtcbiAgICAgICAgICBzdGF0ZS5mdW5jID0gZmFsc2U7XG4gICAgICAgICAgc3RhdGUucHJldiA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnByZXYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcLl0vKTtcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgICBpZiAoaXNPcGVyYXRvci50ZXN0KGNoKSkge1xuICAgICAgICByZXR1cm4gXCJvcGVyYXRvciBhcGwtXCIgKyBidWlsdEluT3BzW2NoXTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Fycm93LnRlc3QoY2gpKSB7XG4gICAgICAgIHJldHVybiBcImFwbC1hcnJvd1wiO1xuICAgICAgfVxuICAgICAgaWYgKGlzRnVuY3Rpb24udGVzdChjaCkpIHtcbiAgICAgICAgZnVuY05hbWUgPSBcImFwbC1cIjtcbiAgICAgICAgaWYgKGJ1aWx0SW5GdW5jc1tjaF0gIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChzdGF0ZS5wcmV2KSB7XG4gICAgICAgICAgICBmdW5jTmFtZSArPSBidWlsdEluRnVuY3NbY2hdWzFdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmdW5jTmFtZSArPSBidWlsdEluRnVuY3NbY2hdWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5mdW5jID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucHJldiA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gXCJmdW5jdGlvbiBcIiArIGZ1bmNOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKGlzQ29tbWVudC50ZXN0KGNoKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PT0gXCLiiJhcIiAmJiBzdHJlYW0ucGVlaygpID09PSBcIi5cIikge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gXCJmdW5jdGlvbiBqb3QtZG90XCI7XG4gICAgICB9XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfXS8pO1xuICAgICAgc3RhdGUucHJldiA9IHRydWU7XG4gICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgfVxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvYXBsXCIsIFwiYXBsXCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIGZ1bmN0aW9uIGVycm9ySWZOb3RFbXB0eShzdHJlYW0pIHtcbiAgICB2YXIgbm9uV1MgPSBzdHJlYW0ubWF0Y2goL15cXHMqXFxTLyk7XG4gICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgIHJldHVybiBub25XUyA/IFwiZXJyb3JcIiA6IG51bGw7XG4gIH1cblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJhc2NpaWFybW9yXCIsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgbTtcbiAgICAgICAgaWYgKHN0YXRlLnN0YXRlID09IFwidG9wXCIpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLnNvbCgpICYmIChtID0gc3RyZWFtLm1hdGNoKC9eLS0tLS1CRUdJTiAoLiopPy0tLS0tXFxzKiQvKSkpIHtcbiAgICAgICAgICAgIHN0YXRlLnN0YXRlID0gXCJoZWFkZXJzXCI7XG4gICAgICAgICAgICBzdGF0ZS50eXBlID0gbVsxXTtcbiAgICAgICAgICAgIHJldHVybiBcInRhZ1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXJyb3JJZk5vdEVtcHR5KHN0cmVhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuc3RhdGUgPT0gXCJoZWFkZXJzXCIpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaCgvXlxcdys6LykpIHtcbiAgICAgICAgICAgIHN0YXRlLnN0YXRlID0gXCJoZWFkZXJcIjtcbiAgICAgICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGVycm9ySWZOb3RFbXB0eShzdHJlYW0pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkgc3RhdGUuc3RhdGUgPSBcImJvZHlcIjtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnN0YXRlID09IFwiaGVhZGVyXCIpIHtcbiAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgc3RhdGUuc3RhdGUgPSBcImhlYWRlcnNcIjtcbiAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5zdGF0ZSA9PSBcImJvZHlcIikge1xuICAgICAgICAgIGlmIChzdHJlYW0uc29sKCkgJiYgKG0gPSBzdHJlYW0ubWF0Y2goL14tLS0tLUVORCAoLiopPy0tLS0tXFxzKiQvKSkpIHtcbiAgICAgICAgICAgIGlmIChtWzFdICE9IHN0YXRlLnR5cGUpIHJldHVybiBcImVycm9yXCI7XG4gICAgICAgICAgICBzdGF0ZS5zdGF0ZSA9IFwiZW5kXCI7XG4gICAgICAgICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN0cmVhbS5lYXRXaGlsZSgvW0EtWmEtejAtOStcXC89XS8pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuc3RhdGUgPT0gXCJlbmRcIikge1xuICAgICAgICAgIHJldHVybiBlcnJvcklmTm90RW1wdHkoc3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGJsYW5rTGluZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLnN0YXRlID09IFwiaGVhZGVyc1wiKSBzdGF0ZS5zdGF0ZSA9IFwiYm9keVwiO1xuICAgICAgfSxcbiAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge3N0YXRlOiBcInRvcFwiLCB0eXBlOiBudWxsfTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi9wZ3BcIiwgXCJhc2NpaWFybW9yXCIpO1xuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi9wZ3AtZW5jcnlwdGVkXCIsIFwiYXNjaWlhcm1vclwiKTtcbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vcGdwLWtleXNcIiwgXCJhc2NpaWFybW9yXCIpO1xuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlXCIsIFwiYXNjaWlhcm1vclwiKTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiYXNuLjFcIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHtcbiAgICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LFxuICAgICAgICBrZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5rZXl3b3JkcyB8fCB7fSxcbiAgICAgICAgY21pcFZlcmJzID0gcGFyc2VyQ29uZmlnLmNtaXBWZXJicyB8fCB7fSxcbiAgICAgICAgY29tcGFyZVR5cGVzID0gcGFyc2VyQ29uZmlnLmNvbXBhcmVUeXBlcyB8fCB7fSxcbiAgICAgICAgc3RhdHVzID0gcGFyc2VyQ29uZmlnLnN0YXR1cyB8fCB7fSxcbiAgICAgICAgdGFncyA9IHBhcnNlckNvbmZpZy50YWdzIHx8IHt9LFxuICAgICAgICBzdG9yYWdlID0gcGFyc2VyQ29uZmlnLnN0b3JhZ2UgfHwge30sXG4gICAgICAgIG1vZGlmaWVyID0gcGFyc2VyQ29uZmlnLm1vZGlmaWVyIHx8IHt9LFxuICAgICAgICBhY2Nlc3NUeXBlcyA9IHBhcnNlckNvbmZpZy5hY2Nlc3NUeXBlc3x8IHt9LFxuICAgICAgICBtdWx0aUxpbmVTdHJpbmdzID0gcGFyc2VyQ29uZmlnLm11bHRpTGluZVN0cmluZ3MsXG4gICAgICAgIGluZGVudFN0YXRlbWVudHMgPSBwYXJzZXJDb25maWcuaW5kZW50U3RhdGVtZW50cyAhPT0gZmFsc2U7XG4gICAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1tcXHxcXF5dLztcbiAgICB2YXIgY3VyUHVuYztcblxuICAgIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgICAgaWYgKGNoID09ICdcIicgfHwgY2ggPT0gXCInXCIpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7XG4gICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGlmICgvW1xcW1xcXVxcKFxcKXt9Oj0sO10vLnRlc3QoY2gpKSB7XG4gICAgICAgIGN1clB1bmMgPSBjaDtcbiAgICAgICAgcmV0dXJuIFwicHVuY3R1YXRpb25cIjtcbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PSBcIi1cIil7XG4gICAgICAgIGlmIChzdHJlYW0uZWF0KFwiLVwiKSkge1xuICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICgvXFxkLy50ZXN0KGNoKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5dLyk7XG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgfVxuICAgICAgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7XG4gICAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgICB9XG5cbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcLV0vKTtcbiAgICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgIGlmIChjbWlwVmVyYnMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuIFwidmFyaWFibGUgY21pcFZlcmJzXCI7XG4gICAgICBpZiAoY29tcGFyZVR5cGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImF0b20gY29tcGFyZVR5cGVzXCI7XG4gICAgICBpZiAoc3RhdHVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImNvbW1lbnQgc3RhdHVzXCI7XG4gICAgICBpZiAodGFncy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gXCJ2YXJpYWJsZS0zIHRhZ3NcIjtcbiAgICAgIGlmIChzdG9yYWdlLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImJ1aWx0aW4gc3RvcmFnZVwiO1xuICAgICAgaWYgKG1vZGlmaWVyLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcInN0cmluZy0yIG1vZGlmaWVyXCI7XG4gICAgICBpZiAoYWNjZXNzVHlwZXMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuIFwiYXRvbSBhY2Nlc3NUeXBlc1wiO1xuXG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKXtcbiAgICAgICAgICAgIHZhciBhZnRlck5leHQgPSBzdHJlYW0ucGVlaygpO1xuICAgICAgICAgICAgLy9sb29rIGlmIHRoZSBjaGFyYWN0ZXIgaWYgdGhlIHF1b3RlIGlzIGxpa2UgdGhlIEIgaW4gJzEwMTAwMDEwJ0JcbiAgICAgICAgICAgIGlmIChhZnRlck5leHQpe1xuICAgICAgICAgICAgICBhZnRlck5leHQgPSBhZnRlck5leHQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgaWYoYWZ0ZXJOZXh0ID09IFwiYlwiIHx8IGFmdGVyTmV4dCA9PSBcImhcIiB8fCBhZnRlck5leHQgPT0gXCJvXCIpXG4gICAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVuZCA9IHRydWU7IGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kIHx8ICEoZXNjYXBlZCB8fCBtdWx0aUxpbmVTdHJpbmdzKSlcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2KSB7XG4gICAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7XG4gICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICB0aGlzLmFsaWduID0gYWxpZ247XG4gICAgICB0aGlzLnByZXYgPSBwcmV2O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7XG4gICAgICB2YXIgaW5kZW50ID0gc3RhdGUuaW5kZW50ZWQ7XG4gICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIilcbiAgICAgICAgaW5kZW50ID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDtcbiAgICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoaW5kZW50LCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7XG4gICAgICB2YXIgdCA9IHN0YXRlLmNvbnRleHQudHlwZTtcbiAgICAgIGlmICh0ID09IFwiKVwiIHx8IHQgPT0gXCJdXCIgfHwgdCA9PSBcIn1cIilcbiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkO1xuICAgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG4gICAgfVxuXG4gICAgLy9JbnRlcmZhY2VcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRva2VuaXplOiBudWxsLFxuICAgICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgXCJ0b3BcIiwgZmFsc2UpLFxuICAgICAgICAgIGluZGVudGVkOiAwLFxuICAgICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9LFxuXG4gICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDtcbiAgICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7XG4gICAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY3VyUHVuYyA9IG51bGw7XG4gICAgICAgIHZhciBzdHlsZSA9IChzdGF0ZS50b2tlbml6ZSB8fCB0b2tlbkJhc2UpKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICBpZiAoc3R5bGUgPT0gXCJjb21tZW50XCIpIHJldHVybiBzdHlsZTtcbiAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlO1xuXG4gICAgICAgIGlmICgoY3VyUHVuYyA9PSBcIjtcIiB8fCBjdXJQdW5jID09IFwiOlwiIHx8IGN1clB1bmMgPT0gXCIsXCIpXG4gICAgICAgICAgICAmJiBjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiKXtcbiAgICAgICAgICBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwie1wiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIn1cIik7XG4gICAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCJbXCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwiXVwiKTtcbiAgICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIihcIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCIpXCIpO1xuICAgICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwifVwiKSB7XG4gICAgICAgICAgd2hpbGUgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICAgIGlmIChjdHgudHlwZSA9PSBcIn1cIikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICAgICAgd2hpbGUgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gY3R4LnR5cGUpIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICBlbHNlIGlmIChpbmRlbnRTdGF0ZW1lbnRzICYmICgoKGN0eC50eXBlID09IFwifVwiIHx8IGN0eC50eXBlID09IFwidG9wXCIpXG4gICAgICAgICAgICAmJiBjdXJQdW5jICE9ICc7JykgfHwgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCJcbiAgICAgICAgICAgICYmIGN1clB1bmMgPT0gXCJuZXdzdGF0ZW1lbnRcIikpKVxuICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwic3RhdGVtZW50XCIpO1xuXG4gICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sXG5cbiAgICAgIGVsZWN0cmljQ2hhcnM6IFwie31cIixcbiAgICAgIGxpbmVDb21tZW50OiBcIi0tXCIsXG4gICAgICBmb2xkOiBcImJyYWNlXCJcbiAgICB9O1xuICB9KTtcblxuICBmdW5jdGlvbiB3b3JkcyhzdHIpIHtcbiAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KFwiIFwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKSBvYmpbd29yZHNbaV1dID0gdHJ1ZTtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXR0Y24tYXNuXCIsIHtcbiAgICBuYW1lOiBcImFzbi4xXCIsXG4gICAga2V5d29yZHM6IHdvcmRzKFwiREVGSU5JVElPTlMgT0JKRUNUUyBJRiBERVJJVkVEIElORk9STUFUSU9OIEFDVElPTlwiICtcbiAgICBcIiBSRVBMWSBBTlkgTkFNRUQgQ0hBUkFDVEVSSVpFRCBCRUhBVklPVVIgUkVHSVNURVJFRFwiICtcbiAgICBcIiBXSVRIIEFTIElERU5USUZJRUQgQ09OU1RSQUlORUQgQlkgUFJFU0VOVCBCRUdJTlwiICtcbiAgICBcIiBJTVBPUlRTIEZST00gVU5JVFMgU1lOVEFYIE1JTi1BQ0NFU1MgTUFYLUFDQ0VTU1wiICtcbiAgICBcIiBNSU5BQ0NFU1MgTUFYQUNDRVNTIFJFVklTSU9OIFNUQVRVUyBERVNDUklQVElPTlwiICtcbiAgICBcIiBTRVFVRU5DRSBTRVQgQ09NUE9ORU5UUyBPRiBDSE9JQ0UgRGlzdGluZ3Vpc2hlZE5hbWVcIiArXG4gICAgXCIgRU5VTUVSQVRFRCBTSVpFIE1PRFVMRSBFTkQgSU5ERVggQVVHTUVOVFMgRVhURU5TSUJJTElUWVwiICtcbiAgICBcIiBJTVBMSUVEIEVYUE9SVFNcIiksXG4gICAgY21pcFZlcmJzOiB3b3JkcyhcIkFDVElPTlMgQUREIEdFVCBOT1RJRklDQVRJT05TIFJFUExBQ0UgUkVNT1ZFXCIpLFxuICAgIGNvbXBhcmVUeXBlczogd29yZHMoXCJPUFRJT05BTCBERUZBVUxUIE1BTkFHRUQgTU9EVUxFLVRZUEUgTU9EVUxFX0lERU5USVRZXCIgK1xuICAgIFwiIE1PRFVMRS1DT01QTElBTkNFIE9CSkVDVC1UWVBFIE9CSkVDVC1JREVOVElUWVwiICtcbiAgICBcIiBPQkpFQ1QtQ09NUExJQU5DRSBNT0RFIENPTkZJUk1FRCBDT05ESVRJT05BTFwiICtcbiAgICBcIiBTVUJPUkRJTkFURSBTVVBFUklPUiBDTEFTUyBUUlVFIEZBTFNFIE5VTExcIiArXG4gICAgXCIgVEVYVFVBTC1DT05WRU5USU9OXCIpLFxuICAgIHN0YXR1czogd29yZHMoXCJjdXJyZW50IGRlcHJlY2F0ZWQgbWFuZGF0b3J5IG9ic29sZXRlXCIpLFxuICAgIHRhZ3M6IHdvcmRzKFwiQVBQTElDQVRJT04gQVVUT01BVElDIEVYUExJQ0lUIElNUExJQ0lUIFBSSVZBVEUgVEFHU1wiICtcbiAgICBcIiBVTklWRVJTQUxcIiksXG4gICAgc3RvcmFnZTogd29yZHMoXCJCT09MRUFOIElOVEVHRVIgT0JKRUNUIElERU5USUZJRVIgQklUIE9DVEVUIFNUUklOR1wiICtcbiAgICBcIiBVVENUaW1lIEludGVyZmFjZUluZGV4IElBTkFpZlR5cGUgQ01JUC1BdHRyaWJ1dGVcIiArXG4gICAgXCIgUkVBTCBQQUNLQUdFIFBBQ0tBR0VTIElwQWRkcmVzcyBQaHlzQWRkcmVzc1wiICtcbiAgICBcIiBOZXR3b3JrQWRkcmVzcyBCSVRTIEJNUFN0cmluZyBUaW1lU3RhbXAgVGltZVRpY2tzXCIgK1xuICAgIFwiIFRydXRoVmFsdWUgUm93U3RhdHVzIERpc3BsYXlTdHJpbmcgR2VuZXJhbFN0cmluZ1wiICtcbiAgICBcIiBHcmFwaGljU3RyaW5nIElBNVN0cmluZyBOdW1lcmljU3RyaW5nXCIgK1xuICAgIFwiIFByaW50YWJsZVN0cmluZyBTbm1wQWRtaW5BdHJpbmcgVGVsZXRleFN0cmluZ1wiICtcbiAgICBcIiBVVEY4U3RyaW5nIFZpZGVvdGV4U3RyaW5nIFZpc2libGVTdHJpbmcgU3RyaW5nU3RvcmVcIiArXG4gICAgXCIgSVNPNjQ2U3RyaW5nIFQ2MVN0cmluZyBVbml2ZXJzYWxTdHJpbmcgVW5zaWduZWQzMlwiICtcbiAgICBcIiBJbnRlZ2VyMzIgR2F1Z2UgR2F1Z2UzMiBDb3VudGVyIENvdW50ZXIzMiBDb3VudGVyNjRcIiksXG4gICAgbW9kaWZpZXI6IHdvcmRzKFwiQVRUUklCVVRFIEFUVFJJQlVURVMgTUFOREFUT1JZLUdST1VQIE1BTkRBVE9SWS1HUk9VUFNcIiArXG4gICAgXCIgR1JPVVAgR1JPVVBTIEVMRU1FTlRTIEVRVUFMSVRZIE9SREVSSU5HIFNVQlNUUklOR1NcIiArXG4gICAgXCIgREVGSU5FRFwiKSxcbiAgICBhY2Nlc3NUeXBlczogd29yZHMoXCJub3QtYWNjZXNzaWJsZSBhY2Nlc3NpYmxlLWZvci1ub3RpZnkgcmVhZC1vbmx5XCIgK1xuICAgIFwiIHJlYWQtY3JlYXRlIHJlYWQtd3JpdGVcIiksXG4gICAgbXVsdGlMaW5lU3RyaW5nczogdHJ1ZVxuICB9KTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLypcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqXG4gKiAgICAgICBGaWxlbmFtZTogIG1vZGUvYXN0ZXJpc2svYXN0ZXJpc2suanNcbiAqXG4gKiAgICBEZXNjcmlwdGlvbjogIENvZGVNaXJyb3IgbW9kZSBmb3IgQXN0ZXJpc2sgZGlhbHBsYW5cbiAqXG4gKiAgICAgICAgQ3JlYXRlZDogIDA1LzE3LzIwMTIgMDk6MjA6MjUgUE1cbiAqICAgICAgIFJldmlzaW9uOiAgMDgvMDUvMjAxOSBBc3RMaW51eCBQcm9qZWN0OiBTdXBwb3J0IGJsb2NrLWNvbW1lbnRzXG4gKlxuICogICAgICAgICBBdXRob3I6ICBTdGFzIEtvYnphciAoc3Rhc0Btb2R1bGlzLmNhKSxcbiAqICAgICAgICBDb21wYW55OiAgTW9kdWxpcy5jYSBJbmMuXG4gKlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiYXN0ZXJpc2tcIiwgZnVuY3Rpb24oKSB7XG4gIHZhciBhdG9tcyAgICA9IFtcImV4dGVuXCIsIFwic2FtZVwiLCBcImluY2x1ZGVcIixcImlnbm9yZXBhdFwiLFwic3dpdGNoXCJdLFxuICAgICAgZHBjbWQgICAgPSBbXCIjaW5jbHVkZVwiLFwiI2V4ZWNcIl0sXG4gICAgICBhcHBzICAgICA9IFtcbiAgICAgICAgICAgICAgICAgIFwiYWRkcXVldWVtZW1iZXJcIixcImFkc2lwcm9nXCIsXCJhZWxzdWJcIixcImFnZW50bG9naW5cIixcImFnZW50bW9uaXRvcm91dGdvaW5nXCIsXCJhZ2lcIixcbiAgICAgICAgICAgICAgICAgIFwiYWxhcm1yZWNlaXZlclwiLFwiYW1kXCIsXCJhbnN3ZXJcIixcImF1dGhlbnRpY2F0ZVwiLFwiYmFja2dyb3VuZFwiLFwiYmFja2dyb3VuZGRldGVjdFwiLFxuICAgICAgICAgICAgICAgICAgXCJicmlkZ2VcIixcImJ1c3lcIixcImNhbGxjb21wbGV0aW9uY2FuY2VsXCIsXCJjYWxsY29tcGxldGlvbnJlcXVlc3RcIixcImNlbGdlbnVzZXJldmVudFwiLFxuICAgICAgICAgICAgICAgICAgXCJjaGFuZ2Vtb25pdG9yXCIsXCJjaGFuaXNhdmFpbFwiLFwiY2hhbm5lbHJlZGlyZWN0XCIsXCJjaGFuc3B5XCIsXCJjbGVhcmhhc2hcIixcImNvbmZicmlkZ2VcIixcbiAgICAgICAgICAgICAgICAgIFwiY29uZ2VzdGlvblwiLFwiY29udGludWV3aGlsZVwiLFwiY29udHJvbHBsYXliYWNrXCIsXCJkYWhkaWFjY2VwdHIyY2FsbFwiLFwiZGFoZGliYXJnZVwiLFxuICAgICAgICAgICAgICAgICAgXCJkYWhkaXJhc1wiLFwiZGFoZGlzY2FuXCIsXCJkYWhkaXNlbmRjYWxscmVyb3V0aW5nZmFjaWxpdHlcIixcImRhaGRpc2VuZGtleXBhZGZhY2lsaXR5XCIsXG4gICAgICAgICAgICAgICAgICBcImRhdGV0aW1lXCIsXCJkYmRlbFwiLFwiZGJkZWx0cmVlXCIsXCJkZWFkYWdpXCIsXCJkaWFsXCIsXCJkaWN0YXRlXCIsXCJkaXJlY3RvcnlcIixcImRpc2FcIixcbiAgICAgICAgICAgICAgICAgIFwiZHVtcGNoYW5cIixcImVhZ2lcIixcImVjaG9cIixcImVuZHdoaWxlXCIsXCJleGVjXCIsXCJleGVjaWZcIixcImV4ZWNpZnRpbWVcIixcImV4aXR3aGlsZVwiLFwiZXh0ZW5zcHlcIixcbiAgICAgICAgICAgICAgICAgIFwiZXh0ZXJuYWxpdnJcIixcImZlc3RpdmFsXCIsXCJmbGFzaFwiLFwiZm9sbG93bWVcIixcImZvcmtjZHJcIixcImdldGNwZWlkXCIsXCJnb3N1YlwiLFwiZ29zdWJpZlwiLFxuICAgICAgICAgICAgICAgICAgXCJnb3RvXCIsXCJnb3RvaWZcIixcImdvdG9pZnRpbWVcIixcImhhbmd1cFwiLFwiaWF4MnByb3Zpc2lvblwiLFwiaWNlc1wiLFwiaW1wb3J0dmFyXCIsXCJpbmNvbXBsZXRlXCIsXG4gICAgICAgICAgICAgICAgICBcIml2cmRlbW9cIixcImphYmJlcmpvaW5cIixcImphYmJlcmxlYXZlXCIsXCJqYWJiZXJzZW5kXCIsXCJqYWJiZXJzZW5kZ3JvdXBcIixcImphYmJlcnN0YXR1c1wiLFxuICAgICAgICAgICAgICAgICAgXCJqYWNrXCIsXCJsb2dcIixcIm1hY3JvXCIsXCJtYWNyb2V4Y2x1c2l2ZVwiLFwibWFjcm9leGl0XCIsXCJtYWNyb2lmXCIsXCJtYWlsYm94ZXhpc3RzXCIsXCJtZWV0bWVcIixcbiAgICAgICAgICAgICAgICAgIFwibWVldG1lYWRtaW5cIixcIm1lZXRtZWNoYW5uZWxhZG1pblwiLFwibWVldG1lY291bnRcIixcIm1pbGxpd2F0dFwiLFwibWluaXZtYWNjbWVzc1wiLFwibWluaXZtZGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgICBcIm1pbml2bWdyZWV0XCIsXCJtaW5pdm1td2lcIixcIm1pbml2bW5vdGlmeVwiLFwibWluaXZtcmVjb3JkXCIsXCJtaXhtb25pdG9yXCIsXCJtb25pdG9yXCIsXCJtb3JzZWNvZGVcIixcbiAgICAgICAgICAgICAgICAgIFwibXAzcGxheWVyXCIsXCJtc2V0XCIsXCJtdXNpY29uaG9sZFwiLFwibmJzY2F0XCIsXCJub2NkclwiLFwibm9vcFwiLFwib2RiY1wiLFwib2RiY1wiLFwib2RiY2ZpbmlzaFwiLFxuICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hdGVcIixcIm9zcGF1dGhcIixcIm9zcGZpbmlzaFwiLFwib3NwbG9va3VwXCIsXCJvc3BuZXh0XCIsXCJwYWdlXCIsXCJwYXJrXCIsXCJwYXJrYW5kYW5ub3VuY2VcIixcbiAgICAgICAgICAgICAgICAgIFwicGFya2VkY2FsbFwiLFwicGF1c2Vtb25pdG9yXCIsXCJwYXVzZXF1ZXVlbWVtYmVyXCIsXCJwaWNrdXBcIixcInBpY2t1cGNoYW5cIixcInBsYXliYWNrXCIsXCJwbGF5dG9uZXNcIixcbiAgICAgICAgICAgICAgICAgIFwicHJpdmFjeW1hbmFnZXJcIixcInByb2NlZWRpbmdcIixcInByb2dyZXNzXCIsXCJxdWV1ZVwiLFwicXVldWVsb2dcIixcInJhaXNlZXhjZXB0aW9uXCIsXCJyZWFkXCIsXCJyZWFkZXh0ZW5cIixcbiAgICAgICAgICAgICAgICAgIFwicmVhZGZpbGVcIixcInJlY2VpdmVmYXhcIixcInJlY2VpdmVmYXhcIixcInJlY2VpdmVmYXhcIixcInJlY29yZFwiLFwicmVtb3ZlcXVldWVtZW1iZXJcIixcbiAgICAgICAgICAgICAgICAgIFwicmVzZXRjZHJcIixcInJldHJ5ZGlhbFwiLFwicmV0dXJuXCIsXCJyaW5naW5nXCIsXCJzYXlhbHBoYVwiLFwic2F5Y291bnRlZGFkalwiLFwic2F5Y291bnRlZG5vdW5cIixcbiAgICAgICAgICAgICAgICAgIFwic2F5Y291bnRwbFwiLFwic2F5ZGlnaXRzXCIsXCJzYXludW1iZXJcIixcInNheXBob25ldGljXCIsXCJzYXl1bml4dGltZVwiLFwic2VuZGR0bWZcIixcInNlbmRmYXhcIixcbiAgICAgICAgICAgICAgICAgIFwic2VuZGZheFwiLFwic2VuZGZheFwiLFwic2VuZGltYWdlXCIsXCJzZW5kdGV4dFwiLFwic2VuZHVybFwiLFwic2V0XCIsXCJzZXRhbWFmbGFnc1wiLFxuICAgICAgICAgICAgICAgICAgXCJzZXRjYWxsZXJwcmVzXCIsXCJzZXRtdXNpY29uaG9sZFwiLFwic2lwYWRkaGVhZGVyXCIsXCJzaXBkdG1mbW9kZVwiLFwic2lwcmVtb3ZlaGVhZGVyXCIsXCJza2VsXCIsXG4gICAgICAgICAgICAgICAgICBcInNsYXN0YXRpb25cIixcInNsYXRydW5rXCIsXCJzbXNcIixcInNvZnRoYW5ndXBcIixcInNwZWVjaGFjdGl2YXRlZ3JhbW1hclwiLFwic3BlZWNoYmFja2dyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgXCJzcGVlY2hjcmVhdGVcIixcInNwZWVjaGRlYWN0aXZhdGVncmFtbWFyXCIsXCJzcGVlY2hkZXN0cm95XCIsXCJzcGVlY2hsb2FkZ3JhbW1hclwiLFwic3BlZWNocHJvY2Vzc2luZ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICBcInNwZWVjaHN0YXJ0XCIsXCJzcGVlY2h1bmxvYWRncmFtbWFyXCIsXCJzdGFja3BvcFwiLFwic3RhcnRtdXNpY29uaG9sZFwiLFwic3RvcG1peG1vbml0b3JcIixcInN0b3Btb25pdG9yXCIsXG4gICAgICAgICAgICAgICAgICBcInN0b3BtdXNpY29uaG9sZFwiLFwic3RvcHBsYXl0b25lc1wiLFwic3lzdGVtXCIsXCJ0ZXN0Y2xpZW50XCIsXCJ0ZXN0c2VydmVyXCIsXCJ0cmFuc2ZlclwiLFwidHJ5ZXhlY1wiLFxuICAgICAgICAgICAgICAgICAgXCJ0cnlzeXN0ZW1cIixcInVucGF1c2Vtb25pdG9yXCIsXCJ1bnBhdXNlcXVldWVtZW1iZXJcIixcInVzZXJldmVudFwiLFwidmVyYm9zZVwiLFwidm1hdXRoZW50aWNhdGVcIixcbiAgICAgICAgICAgICAgICAgIFwidm1zYXluYW1lXCIsXCJ2b2ljZW1haWxcIixcInZvaWNlbWFpbG1haW5cIixcIndhaXRcIixcIndhaXRleHRlblwiLFwid2FpdGZvcm5vaXNlXCIsXCJ3YWl0Zm9ycmluZ1wiLFxuICAgICAgICAgICAgICAgICAgXCJ3YWl0Zm9yc2lsZW5jZVwiLFwid2FpdG11c2ljb25ob2xkXCIsXCJ3YWl0dW50aWxcIixcIndoaWxlXCIsXCJ6YXBhdGVsbGVyXCJcbiAgICAgICAgICAgICAgICAgXTtcblxuICBmdW5jdGlvbiBiYXNpY1Rva2VuKHN0cmVhbSxzdGF0ZSl7XG4gICAgdmFyIGN1ciA9ICcnO1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgLy8gY29tbWVudFxuICAgIGlmIChzdGF0ZS5ibG9ja0NvbW1lbnQpIHtcbiAgICAgIGlmIChjaCA9PSBcIi1cIiAmJiBzdHJlYW0ubWF0Y2goXCItO1wiLCB0cnVlKSkge1xuICAgICAgICBzdGF0ZS5ibG9ja0NvbW1lbnQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLnNraXBUbyhcIi0tO1wiKSkge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBzdGF0ZS5ibG9ja0NvbW1lbnQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICB9XG4gICAgaWYoY2ggPT0gXCI7XCIpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goXCItLVwiLCB0cnVlKSkge1xuICAgICAgICBpZiAoIXN0cmVhbS5tYXRjaChcIi1cIiwgZmFsc2UpKSB7ICAvLyBFeGNlcHQgOy0tLSBpcyBub3QgYSBibG9jayBjb21tZW50XG4gICAgICAgICAgc3RhdGUuYmxvY2tDb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICB9XG4gICAgLy8gY29udGV4dFxuICAgIGlmKGNoID09ICdbJykge1xuICAgICAgc3RyZWFtLnNraXBUbygnXScpO1xuICAgICAgc3RyZWFtLmVhdCgnXScpO1xuICAgICAgcmV0dXJuIFwiaGVhZGVyXCI7XG4gICAgfVxuICAgIC8vIHN0cmluZ1xuICAgIGlmKGNoID09ICdcIicpIHtcbiAgICAgIHN0cmVhbS5za2lwVG8oJ1wiJyk7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9XG4gICAgaWYoY2ggPT0gXCInXCIpIHtcbiAgICAgIHN0cmVhbS5za2lwVG8oXCInXCIpO1xuICAgICAgcmV0dXJuIFwic3RyaW5nLTJcIjtcbiAgICB9XG4gICAgLy8gZGlhbHBsYW4gY29tbWFuZHNcbiAgICBpZihjaCA9PSAnIycpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXFx3Lyk7XG4gICAgICBjdXIgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgICAgaWYoZHBjbWQuaW5kZXhPZihjdXIpICE9PSAtMSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcInN0cm9uZ1wiO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhcHBsaWNhdGlvbiBhcmdzXG4gICAgaWYoY2ggPT0gJyQnKXtcbiAgICAgIHZhciBjaDEgPSBzdHJlYW0ucGVlaygpO1xuICAgICAgaWYoY2gxID09ICd7Jyl7XG4gICAgICAgIHN0cmVhbS5za2lwVG8oJ30nKTtcbiAgICAgICAgc3RyZWFtLmVhdCgnfScpO1xuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0zXCI7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGV4dGVuc2lvblxuICAgIHN0cmVhbS5lYXRXaGlsZSgvXFx3Lyk7XG4gICAgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICBpZihhdG9tcy5pbmRleE9mKGN1cikgIT09IC0xKSB7XG4gICAgICBzdGF0ZS5leHRlblN0YXJ0ID0gdHJ1ZTtcbiAgICAgIHN3aXRjaChjdXIpIHtcbiAgICAgICAgY2FzZSAnc2FtZSc6IHN0YXRlLmV4dGVuU2FtZSA9IHRydWU7IGJyZWFrO1xuICAgICAgICBjYXNlICdpbmNsdWRlJzpcbiAgICAgICAgY2FzZSAnc3dpdGNoJzpcbiAgICAgICAgY2FzZSAnaWdub3JlcGF0JzpcbiAgICAgICAgICBzdGF0ZS5leHRlbkluY2x1ZGUgPSB0cnVlO2JyZWFrO1xuICAgICAgICBkZWZhdWx0OmJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBibG9ja0NvbW1lbnQ6IGZhbHNlLFxuICAgICAgICBleHRlblN0YXJ0OiBmYWxzZSxcbiAgICAgICAgZXh0ZW5TYW1lOiAgZmFsc2UsXG4gICAgICAgIGV4dGVuSW5jbHVkZTogZmFsc2UsXG4gICAgICAgIGV4dGVuRXh0ZW46IGZhbHNlLFxuICAgICAgICBleHRlblByaW9yaXR5OiBmYWxzZSxcbiAgICAgICAgZXh0ZW5BcHBsaWNhdGlvbjogZmFsc2VcbiAgICAgIH07XG4gICAgfSxcbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuXG4gICAgICB2YXIgY3VyID0gJyc7XG4gICAgICBpZihzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICAvLyBleHRlbnNpb24gc3RhcnRlZFxuICAgICAgaWYoc3RhdGUuZXh0ZW5TdGFydCl7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW15cXHNdLyk7XG4gICAgICAgIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgICAgIGlmKC9ePT4/JC8udGVzdChjdXIpKXtcbiAgICAgICAgICBzdGF0ZS5leHRlbkV4dGVuID0gdHJ1ZTtcbiAgICAgICAgICBzdGF0ZS5leHRlblN0YXJ0ID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIFwic3Ryb25nXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUuZXh0ZW5TdGFydCA9IGZhbHNlO1xuICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYoc3RhdGUuZXh0ZW5FeHRlbikge1xuICAgICAgICAvLyBzZXQgZXh0ZW4gYW5kIHByaW9yaXR5XG4gICAgICAgIHN0YXRlLmV4dGVuRXh0ZW4gPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZXh0ZW5Qcmlvcml0eSA9IHRydWU7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14sXS8pO1xuICAgICAgICBpZihzdGF0ZS5leHRlbkluY2x1ZGUpIHtcbiAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgc3RhdGUuZXh0ZW5Qcmlvcml0eSA9IGZhbHNlO1xuICAgICAgICAgIHN0YXRlLmV4dGVuSW5jbHVkZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmKHN0YXRlLmV4dGVuU2FtZSkge1xuICAgICAgICAgIHN0YXRlLmV4dGVuUHJpb3JpdHkgPSBmYWxzZTtcbiAgICAgICAgICBzdGF0ZS5leHRlblNhbWUgPSBmYWxzZTtcbiAgICAgICAgICBzdGF0ZS5leHRlbkFwcGxpY2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICAgIH0gZWxzZSBpZihzdGF0ZS5leHRlblByaW9yaXR5KSB7XG4gICAgICAgIHN0YXRlLmV4dGVuUHJpb3JpdHkgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZXh0ZW5BcHBsaWNhdGlvbiA9IHRydWU7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7IC8vIGdldCBjb21tYVxuICAgICAgICBpZihzdGF0ZS5leHRlblNhbWUpIHJldHVybiBudWxsO1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teLF0vKTtcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9IGVsc2UgaWYoc3RhdGUuZXh0ZW5BcHBsaWNhdGlvbikge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoLywvKTtcbiAgICAgICAgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgICAgaWYoY3VyID09PSAnLCcpIHJldHVybiBudWxsO1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1xcdy8pO1xuICAgICAgICBjdXIgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHN0YXRlLmV4dGVuQXBwbGljYXRpb24gPSBmYWxzZTtcbiAgICAgICAgaWYoYXBwcy5pbmRleE9mKGN1cikgIT09IC0xKXtcbiAgICAgICAgICByZXR1cm4gXCJkZWYgc3Ryb25nXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZXtcbiAgICAgICAgcmV0dXJuIGJhc2ljVG9rZW4oc3RyZWFtLHN0YXRlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIjstLVwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCItLTtcIixcbiAgICBsaW5lQ29tbWVudDogXCI7XCJcbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtYXN0ZXJpc2tcIiwgXCJhc3Rlcmlza1wiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vLyBCcmFpbmZ1Y2sgbW9kZSBjcmVhdGVkIGJ5IE1pY2hhZWwgS2FtaW5za3kgaHR0cHM6Ly9naXRodWIuY29tL21rYW1pbnNreTExXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKVxuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpXG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpXG4gIGVsc2VcbiAgICBtb2QoQ29kZU1pcnJvcilcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCJcbiAgdmFyIHJlc2VydmUgPSBcIj48Ky0uLFtdXCIuc3BsaXQoXCJcIik7XG4gIC8qXG4gIGNvbW1lbnRzIGNhbiBiZSBlaXRoZXI6XG4gIHBsYWNlZCBiZWhpbmQgbGluZXNcblxuICAgICAgICArKysgICAgdGhpcyBpcyBhIGNvbW1lbnRcblxuICB3aGVyZSByZXNlcnZlZCBjaGFyYWN0ZXJzIGNhbm5vdCBiZSB1c2VkXG4gIG9yIGluIGEgbG9vcFxuICBbXG4gICAgdGhpcyBpcyBvayB0byB1c2UgWyBdIGFuZCBzdHVmZlxuICBdXG4gIG9yIHByZWNlZGVkIGJ5ICNcbiAgKi9cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiYnJhaW5mdWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb21tZW50TGluZTogZmFsc2UsXG4gICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICBjb21tZW50TG9vcDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGxcbiAgICAgICAgaWYoc3RyZWFtLnNvbCgpKXtcbiAgICAgICAgICBzdGF0ZS5jb21tZW50TGluZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgaWYocmVzZXJ2ZS5pbmRleE9mKGNoKSAhPT0gLTEpe1xuICAgICAgICAgIGlmKHN0YXRlLmNvbW1lbnRMaW5lID09PSB0cnVlKXtcbiAgICAgICAgICAgIGlmKHN0cmVhbS5lb2woKSl7XG4gICAgICAgICAgICAgIHN0YXRlLmNvbW1lbnRMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGNoID09PSBcIl1cIiB8fCBjaCA9PT0gXCJbXCIpe1xuICAgICAgICAgICAgaWYoY2ggPT09IFwiW1wiKXtcbiAgICAgICAgICAgICAgc3RhdGUubGVmdCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgc3RhdGUucmlnaHQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcImJyYWNrZXRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZihjaCA9PT0gXCIrXCIgfHwgY2ggPT09IFwiLVwiKXtcbiAgICAgICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZihjaCA9PT0gXCI8XCIgfHwgY2ggPT09IFwiPlwiKXtcbiAgICAgICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZihjaCA9PT0gXCIuXCIgfHwgY2ggPT09IFwiLFwiKXtcbiAgICAgICAgICAgIHJldHVybiBcImRlZlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHN0YXRlLmNvbW1lbnRMaW5lID0gdHJ1ZTtcbiAgICAgICAgICBpZihzdHJlYW0uZW9sKCkpe1xuICAgICAgICAgICAgc3RhdGUuY29tbWVudExpbmUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmKHN0cmVhbS5lb2woKSl7XG4gICAgICAgICAgc3RhdGUuY29tbWVudExpbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0pO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWJyYWluZnVja1wiLFwiYnJhaW5mdWNrXCIpXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gQ29udGV4dChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBpbmZvLCBhbGlnbiwgcHJldikge1xuICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7XG4gIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLmluZm8gPSBpbmZvO1xuICB0aGlzLmFsaWduID0gYWxpZ247XG4gIHRoaXMucHJldiA9IHByZXY7XG59XG5mdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlLCBpbmZvKSB7XG4gIHZhciBpbmRlbnQgPSBzdGF0ZS5pbmRlbnRlZDtcbiAgaWYgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC50eXBlID09IFwic3RhdGVtZW50XCIgJiYgdHlwZSAhPSBcInN0YXRlbWVudFwiKVxuICAgIGluZGVudCA9IHN0YXRlLmNvbnRleHQuaW5kZW50ZWQ7XG4gIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoaW5kZW50LCBjb2wsIHR5cGUsIGluZm8sIG51bGwsIHN0YXRlLmNvbnRleHQpO1xufVxuZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkge1xuICB2YXIgdCA9IHN0YXRlLmNvbnRleHQudHlwZTtcbiAgaWYgKHQgPT0gXCIpXCIgfHwgdCA9PSBcIl1cIiB8fCB0ID09IFwifVwiKVxuICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDtcbiAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG59XG5cbmZ1bmN0aW9uIHR5cGVCZWZvcmUoc3RyZWFtLCBzdGF0ZSwgcG9zKSB7XG4gIGlmIChzdGF0ZS5wcmV2VG9rZW4gPT0gXCJ2YXJpYWJsZVwiIHx8IHN0YXRlLnByZXZUb2tlbiA9PSBcInR5cGVcIikgcmV0dXJuIHRydWU7XG4gIGlmICgvXFxTKD86W14tIF0+fFsqXFxdXSlcXHMqJHxcXCokLy50ZXN0KHN0cmVhbS5zdHJpbmcuc2xpY2UoMCwgcG9zKSkpIHJldHVybiB0cnVlO1xuICBpZiAoc3RhdGUudHlwZUF0RW5kT2ZMaW5lICYmIHN0cmVhbS5jb2x1bW4oKSA9PSBzdHJlYW0uaW5kZW50YXRpb24oKSkgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzVG9wU2NvcGUoY29udGV4dCkge1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQudHlwZSA9PSBcInRvcFwiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoY29udGV4dC50eXBlID09IFwifVwiICYmIGNvbnRleHQucHJldi5pbmZvICE9IFwibmFtZXNwYWNlXCIpIHJldHVybiBmYWxzZTtcbiAgICBjb250ZXh0ID0gY29udGV4dC5wcmV2O1xuICB9XG59XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImNsaWtlXCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7XG4gIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQsXG4gICAgICBzdGF0ZW1lbnRJbmRlbnRVbml0ID0gcGFyc2VyQ29uZmlnLnN0YXRlbWVudEluZGVudFVuaXQgfHwgaW5kZW50VW5pdCxcbiAgICAgIGRvbnRBbGlnbkNhbGxzID0gcGFyc2VyQ29uZmlnLmRvbnRBbGlnbkNhbGxzLFxuICAgICAga2V5d29yZHMgPSBwYXJzZXJDb25maWcua2V5d29yZHMgfHwge30sXG4gICAgICB0eXBlcyA9IHBhcnNlckNvbmZpZy50eXBlcyB8fCB7fSxcbiAgICAgIGJ1aWx0aW4gPSBwYXJzZXJDb25maWcuYnVpbHRpbiB8fCB7fSxcbiAgICAgIGJsb2NrS2V5d29yZHMgPSBwYXJzZXJDb25maWcuYmxvY2tLZXl3b3JkcyB8fCB7fSxcbiAgICAgIGRlZktleXdvcmRzID0gcGFyc2VyQ29uZmlnLmRlZktleXdvcmRzIHx8IHt9LFxuICAgICAgYXRvbXMgPSBwYXJzZXJDb25maWcuYXRvbXMgfHwge30sXG4gICAgICBob29rcyA9IHBhcnNlckNvbmZpZy5ob29rcyB8fCB7fSxcbiAgICAgIG11bHRpTGluZVN0cmluZ3MgPSBwYXJzZXJDb25maWcubXVsdGlMaW5lU3RyaW5ncyxcbiAgICAgIGluZGVudFN0YXRlbWVudHMgPSBwYXJzZXJDb25maWcuaW5kZW50U3RhdGVtZW50cyAhPT0gZmFsc2UsXG4gICAgICBpbmRlbnRTd2l0Y2ggPSBwYXJzZXJDb25maWcuaW5kZW50U3dpdGNoICE9PSBmYWxzZSxcbiAgICAgIG5hbWVzcGFjZVNlcGFyYXRvciA9IHBhcnNlckNvbmZpZy5uYW1lc3BhY2VTZXBhcmF0b3IsXG4gICAgICBpc1B1bmN0dWF0aW9uQ2hhciA9IHBhcnNlckNvbmZpZy5pc1B1bmN0dWF0aW9uQ2hhciB8fCAvW1xcW1xcXXt9XFwoXFwpLDtcXDpcXC5dLyxcbiAgICAgIG51bWJlclN0YXJ0ID0gcGFyc2VyQ29uZmlnLm51bWJlclN0YXJ0IHx8IC9bXFxkXFwuXS8sXG4gICAgICBudW1iZXIgPSBwYXJzZXJDb25maWcubnVtYmVyIHx8IC9eKD86MHhbYS1mXFxkXSt8MGJbMDFdK3woPzpcXGQrXFwuP1xcZCp8XFwuXFxkKykoPzplWy0rXT9cXGQrKT8pKHV8bGw/fGx8Zik/L2ksXG4gICAgICBpc09wZXJhdG9yQ2hhciA9IHBhcnNlckNvbmZpZy5pc09wZXJhdG9yQ2hhciB8fCAvWytcXC0qJiU9PD4hP3xcXC9dLyxcbiAgICAgIGlzSWRlbnRpZmllckNoYXIgPSBwYXJzZXJDb25maWcuaXNJZGVudGlmaWVyQ2hhciB8fCAvW1xcd1xcJF9cXHhhMS1cXHVmZmZmXS8sXG4gICAgICAvLyBBbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHRha2VzIGEge3N0cmluZ30gdG9rZW4gYW5kIHJldHVybnMgdHJ1ZSBpZiBpdFxuICAgICAgLy8gc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBidWlsdGluLlxuICAgICAgaXNSZXNlcnZlZElkZW50aWZpZXIgPSBwYXJzZXJDb25maWcuaXNSZXNlcnZlZElkZW50aWZpZXIgfHwgZmFsc2U7XG5cbiAgdmFyIGN1clB1bmMsIGlzRGVmS2V5d29yZDtcblxuICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKGhvb2tzW2NoXSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGhvb2tzW2NoXShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAoY2ggPT0gJ1wiJyB8fCBjaCA9PSBcIidcIikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChpc1B1bmN0dWF0aW9uQ2hhci50ZXN0KGNoKSkge1xuICAgICAgY3VyUHVuYyA9IGNoO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChudW1iZXJTdGFydC50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLmJhY2tVcCgxKVxuICAgICAgaWYgKHN0cmVhbS5tYXRjaChudW1iZXIpKSByZXR1cm4gXCJudW1iZXJcIlxuICAgICAgc3RyZWFtLm5leHQoKVxuICAgIH1cbiAgICBpZiAoY2ggPT0gXCIvXCIpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiKlwiKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDtcbiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiL1wiKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7XG4gICAgICB3aGlsZSAoIXN0cmVhbS5tYXRjaCgvXlxcL1tcXC8qXS8sIGZhbHNlKSAmJiBzdHJlYW0uZWF0KGlzT3BlcmF0b3JDaGFyKSkge31cbiAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgfVxuICAgIHN0cmVhbS5lYXRXaGlsZShpc0lkZW50aWZpZXJDaGFyKTtcbiAgICBpZiAobmFtZXNwYWNlU2VwYXJhdG9yKSB3aGlsZSAoc3RyZWFtLm1hdGNoKG5hbWVzcGFjZVNlcGFyYXRvcikpXG4gICAgICBzdHJlYW0uZWF0V2hpbGUoaXNJZGVudGlmaWVyQ2hhcik7XG5cbiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICBpZiAoY29udGFpbnMoa2V5d29yZHMsIGN1cikpIHtcbiAgICAgIGlmIChjb250YWlucyhibG9ja0tleXdvcmRzLCBjdXIpKSBjdXJQdW5jID0gXCJuZXdzdGF0ZW1lbnRcIjtcbiAgICAgIGlmIChjb250YWlucyhkZWZLZXl3b3JkcywgY3VyKSkgaXNEZWZLZXl3b3JkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICB9XG4gICAgaWYgKGNvbnRhaW5zKHR5cGVzLCBjdXIpKSByZXR1cm4gXCJ0eXBlXCI7XG4gICAgaWYgKGNvbnRhaW5zKGJ1aWx0aW4sIGN1cilcbiAgICAgICAgfHwgKGlzUmVzZXJ2ZWRJZGVudGlmaWVyICYmIGlzUmVzZXJ2ZWRJZGVudGlmaWVyKGN1cikpKSB7XG4gICAgICBpZiAoY29udGFpbnMoYmxvY2tLZXl3b3JkcywgY3VyKSkgY3VyUHVuYyA9IFwibmV3c3RhdGVtZW50XCI7XG4gICAgICByZXR1cm4gXCJidWlsdGluXCI7XG4gICAgfVxuICAgIGlmIChjb250YWlucyhhdG9tcywgY3VyKSkgcmV0dXJuIFwiYXRvbVwiO1xuICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTtcbiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtlbmQgPSB0cnVlOyBicmVhazt9XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpXG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDtcbiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICBpZiAoY2ggPT0gXCIvXCIgJiYgbWF5YmVFbmQpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG1heWJlRW5kID0gKGNoID09IFwiKlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF5YmVFT0woc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChwYXJzZXJDb25maWcudHlwZUZpcnN0RGVmaW5pdGlvbnMgJiYgc3RyZWFtLmVvbCgpICYmIGlzVG9wU2NvcGUoc3RhdGUuY29udGV4dCkpXG4gICAgICBzdGF0ZS50eXBlQXRFbmRPZkxpbmUgPSB0eXBlQmVmb3JlKHN0cmVhbSwgc3RhdGUsIHN0cmVhbS5wb3MpXG4gIH1cblxuICAvLyBJbnRlcmZhY2VcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRva2VuaXplOiBudWxsLFxuICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsIFwidG9wXCIsIG51bGwsIGZhbHNlKSxcbiAgICAgICAgaW5kZW50ZWQ6IDAsXG4gICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlLFxuICAgICAgICBwcmV2VG9rZW46IG51bGxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDtcbiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7IG1heWJlRU9MKHN0cmVhbSwgc3RhdGUpOyByZXR1cm4gbnVsbDsgfVxuICAgICAgY3VyUHVuYyA9IGlzRGVmS2V5d29yZCA9IG51bGw7XG4gICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChzdHlsZSA9PSBcImNvbW1lbnRcIiB8fCBzdHlsZSA9PSBcIm1ldGFcIikgcmV0dXJuIHN0eWxlO1xuICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlO1xuXG4gICAgICBpZiAoY3VyUHVuYyA9PSBcIjtcIiB8fCBjdXJQdW5jID09IFwiOlwiIHx8IChjdXJQdW5jID09IFwiLFwiICYmIHN0cmVhbS5tYXRjaCgvXlxccyooPzpcXC9cXC8uKik/JC8sIGZhbHNlKSkpXG4gICAgICAgIHdoaWxlIChzdGF0ZS5jb250ZXh0LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIikgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwie1wiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIn1cIik7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwiW1wiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIl1cIik7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwiKFwiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIilcIik7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwifVwiKSB7XG4gICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgaWYgKGN0eC50eXBlID09IFwifVwiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBjdHgudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICBlbHNlIGlmIChpbmRlbnRTdGF0ZW1lbnRzICYmXG4gICAgICAgICAgICAgICAoKChjdHgudHlwZSA9PSBcIn1cIiB8fCBjdHgudHlwZSA9PSBcInRvcFwiKSAmJiBjdXJQdW5jICE9IFwiO1wiKSB8fFxuICAgICAgICAgICAgICAgIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiICYmIGN1clB1bmMgPT0gXCJuZXdzdGF0ZW1lbnRcIikpKSB7XG4gICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwic3RhdGVtZW50XCIsIHN0cmVhbS5jdXJyZW50KCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3R5bGUgPT0gXCJ2YXJpYWJsZVwiICYmXG4gICAgICAgICAgKChzdGF0ZS5wcmV2VG9rZW4gPT0gXCJkZWZcIiB8fFxuICAgICAgICAgICAgKHBhcnNlckNvbmZpZy50eXBlRmlyc3REZWZpbml0aW9ucyAmJiB0eXBlQmVmb3JlKHN0cmVhbSwgc3RhdGUsIHN0cmVhbS5zdGFydCkgJiZcbiAgICAgICAgICAgICBpc1RvcFNjb3BlKHN0YXRlLmNvbnRleHQpICYmIHN0cmVhbS5tYXRjaCgvXlxccypcXCgvLCBmYWxzZSkpKSkpXG4gICAgICAgIHN0eWxlID0gXCJkZWZcIjtcblxuICAgICAgaWYgKGhvb2tzLnRva2VuKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBob29rcy50b2tlbihzdHJlYW0sIHN0YXRlLCBzdHlsZSk7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkgc3R5bGUgPSByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdHlsZSA9PSBcImRlZlwiICYmIHBhcnNlckNvbmZpZy5zdHlsZURlZnMgPT09IGZhbHNlKSBzdHlsZSA9IFwidmFyaWFibGVcIjtcblxuICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTtcbiAgICAgIHN0YXRlLnByZXZUb2tlbiA9IGlzRGVmS2V5d29yZCA/IFwiZGVmXCIgOiBzdHlsZSB8fCBjdXJQdW5jO1xuICAgICAgbWF5YmVFT0woc3RyZWFtLCBzdGF0ZSk7XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSxcblxuICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikge1xuICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IHRva2VuQmFzZSAmJiBzdGF0ZS50b2tlbml6ZSAhPSBudWxsIHx8IHN0YXRlLnR5cGVBdEVuZE9mTGluZSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0LCBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTtcbiAgICAgIHZhciBjbG9zaW5nID0gZmlyc3RDaGFyID09IGN0eC50eXBlO1xuICAgICAgaWYgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIgJiYgZmlyc3RDaGFyID09IFwifVwiKSBjdHggPSBjdHgucHJldjtcbiAgICAgIGlmIChwYXJzZXJDb25maWcuZG9udEluZGVudFN0YXRlbWVudHMpXG4gICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiICYmIHBhcnNlckNvbmZpZy5kb250SW5kZW50U3RhdGVtZW50cy50ZXN0KGN0eC5pbmZvKSlcbiAgICAgICAgICBjdHggPSBjdHgucHJldlxuICAgICAgaWYgKGhvb2tzLmluZGVudCkge1xuICAgICAgICB2YXIgaG9vayA9IGhvb2tzLmluZGVudChzdGF0ZSwgY3R4LCB0ZXh0QWZ0ZXIsIGluZGVudFVuaXQpO1xuICAgICAgICBpZiAodHlwZW9mIGhvb2sgPT0gXCJudW1iZXJcIikgcmV0dXJuIGhvb2tcbiAgICAgIH1cbiAgICAgIHZhciBzd2l0Y2hCbG9jayA9IGN0eC5wcmV2ICYmIGN0eC5wcmV2LmluZm8gPT0gXCJzd2l0Y2hcIjtcbiAgICAgIGlmIChwYXJzZXJDb25maWcuYWxsbWFuSW5kZW50YXRpb24gJiYgL1t7KF0vLnRlc3QoZmlyc3RDaGFyKSkge1xuICAgICAgICB3aGlsZSAoY3R4LnR5cGUgIT0gXCJ0b3BcIiAmJiBjdHgudHlwZSAhPSBcIn1cIikgY3R4ID0gY3R4LnByZXZcbiAgICAgICAgcmV0dXJuIGN0eC5pbmRlbnRlZFxuICAgICAgfVxuICAgICAgaWYgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpXG4gICAgICAgIHJldHVybiBjdHguaW5kZW50ZWQgKyAoZmlyc3RDaGFyID09IFwie1wiID8gMCA6IHN0YXRlbWVudEluZGVudFVuaXQpO1xuICAgICAgaWYgKGN0eC5hbGlnbiAmJiAoIWRvbnRBbGlnbkNhbGxzIHx8IGN0eC50eXBlICE9IFwiKVwiKSlcbiAgICAgICAgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTtcbiAgICAgIGlmIChjdHgudHlwZSA9PSBcIilcIiAmJiAhY2xvc2luZylcbiAgICAgICAgcmV0dXJuIGN0eC5pbmRlbnRlZCArIHN0YXRlbWVudEluZGVudFVuaXQ7XG5cbiAgICAgIHJldHVybiBjdHguaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KSArXG4gICAgICAgICghY2xvc2luZyAmJiBzd2l0Y2hCbG9jayAmJiAhL14oPzpjYXNlfGRlZmF1bHQpXFxiLy50ZXN0KHRleHRBZnRlcikgPyBpbmRlbnRVbml0IDogMCk7XG4gICAgfSxcblxuICAgIGVsZWN0cmljSW5wdXQ6IGluZGVudFN3aXRjaCA/IC9eXFxzKig/OmNhc2UgLio/OnxkZWZhdWx0OnxcXHtcXH0/fFxcfSkkLyA6IC9eXFxzKlt7fV0kLyxcbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCIvKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCIqL1wiLFxuICAgIGJsb2NrQ29tbWVudENvbnRpbnVlOiBcIiAqIFwiLFxuICAgIGxpbmVDb21tZW50OiBcIi8vXCIsXG4gICAgZm9sZDogXCJicmFjZVwiXG4gIH07XG59KTtcblxuICBmdW5jdGlvbiB3b3JkcyhzdHIpIHtcbiAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KFwiIFwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKSBvYmpbd29yZHNbaV1dID0gdHJ1ZTtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIGZ1bmN0aW9uIGNvbnRhaW5zKHdvcmRzLCB3b3JkKSB7XG4gICAgaWYgKHR5cGVvZiB3b3JkcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gd29yZHMod29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKTtcbiAgICB9XG4gIH1cbiAgdmFyIGNLZXl3b3JkcyA9IFwiYXV0byBpZiBicmVhayBjYXNlIHJlZ2lzdGVyIGNvbnRpbnVlIHJldHVybiBkZWZhdWx0IGRvIHNpemVvZiBcIiArXG4gICAgXCJzdGF0aWMgZWxzZSBzdHJ1Y3Qgc3dpdGNoIGV4dGVybiB0eXBlZGVmIHVuaW9uIGZvciBnb3RvIHdoaWxlIGVudW0gY29uc3QgXCIgK1xuICAgIFwidm9sYXRpbGUgaW5saW5lIHJlc3RyaWN0IGFzbSBmb3J0cmFuXCI7XG5cbiAgLy8gS2V5d29yZHMgZnJvbSBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAva2V5d29yZCBpbmNsdWRlcyBDKysyMC5cbiAgdmFyIGNwcEtleXdvcmRzID0gXCJhbGlnbmFzIGFsaWdub2YgYW5kIGFuZF9lcSBhdWRpdCBheGlvbSBiaXRhbmQgYml0b3IgY2F0Y2ggXCIgK1xuICBcImNsYXNzIGNvbXBsIGNvbmNlcHQgY29uc3RleHByIGNvbnN0X2Nhc3QgZGVjbHR5cGUgZGVsZXRlIGR5bmFtaWNfY2FzdCBcIiArXG4gIFwiZXhwbGljaXQgZXhwb3J0IGZpbmFsIGZyaWVuZCBpbXBvcnQgbW9kdWxlIG11dGFibGUgbmFtZXNwYWNlIG5ldyBub2V4Y2VwdCBcIiArXG4gIFwibm90IG5vdF9lcSBvcGVyYXRvciBvciBvcl9lcSBvdmVycmlkZSBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgXCIgK1xuICBcInJlaW50ZXJwcmV0X2Nhc3QgcmVxdWlyZXMgc3RhdGljX2Fzc2VydCBzdGF0aWNfY2FzdCB0ZW1wbGF0ZSB0aGlzIFwiICtcbiAgXCJ0aHJlYWRfbG9jYWwgdGhyb3cgdHJ5IHR5cGVpZCB0eXBlbmFtZSB1c2luZyB2aXJ0dWFsIHhvciB4b3JfZXFcIjtcblxuICB2YXIgb2JqQ0tleXdvcmRzID0gXCJieWNvcHkgYnlyZWYgaW4gaW5vdXQgb25ld2F5IG91dCBzZWxmIHN1cGVyIGF0b21pYyBub25hdG9taWMgcmV0YWluIGNvcHkgXCIgK1xuICBcInJlYWR3cml0ZSByZWFkb25seSBzdHJvbmcgd2VhayBhc3NpZ24gdHlwZW9mIG51bGxhYmxlIG5vbm51bGwgbnVsbF9yZXNldHRhYmxlIF9jbWQgXCIgK1xuICBcIkBpbnRlcmZhY2UgQGltcGxlbWVudGF0aW9uIEBlbmQgQHByb3RvY29sIEBlbmNvZGUgQHByb3BlcnR5IEBzeW50aGVzaXplIEBkeW5hbWljIEBjbGFzcyBcIiArXG4gIFwiQHB1YmxpYyBAcGFja2FnZSBAcHJpdmF0ZSBAcHJvdGVjdGVkIEByZXF1aXJlZCBAb3B0aW9uYWwgQHRyeSBAY2F0Y2ggQGZpbmFsbHkgQGltcG9ydCBcIiArXG4gIFwiQHNlbGVjdG9yIEBlbmNvZGUgQGRlZnMgQHN5bmNocm9uaXplZCBAYXV0b3JlbGVhc2Vwb29sIEBjb21wYXRpYmlsaXR5X2FsaWFzIEBhdmFpbGFibGVcIjtcblxuICB2YXIgb2JqQ0J1aWx0aW5zID0gXCJGT1VOREFUSU9OX0VYUE9SVCBGT1VOREFUSU9OX0VYVEVSTiBOU19JTkxJTkUgTlNfRk9STUFUX0ZVTkNUSU9OIFwiICtcbiAgXCIgTlNfUkVUVVJOU19SRVRBSU5FRE5TX0VSUk9SX0VOVU0gTlNfUkVUVVJOU19OT1RfUkVUQUlORUQgTlNfUkVUVVJOU19JTk5FUl9QT0lOVEVSIFwiICtcbiAgXCJOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSIE5TX0VOVU0gTlNfT1BUSU9OUyBOU19SRVFVSVJFU19OSUxfVEVSTUlOQVRJT04gXCIgK1xuICBcIk5TX0FTU1VNRV9OT05OVUxMX0JFR0lOIE5TX0FTU1VNRV9OT05OVUxMX0VORCBOU19TV0lGVF9OQU1FIE5TX1JFRklORURfRk9SX1NXSUZUXCJcblxuICAvLyBEbyBub3QgdXNlIHRoaXMuIFVzZSB0aGUgY1R5cGVzIGZ1bmN0aW9uIGJlbG93LiBUaGlzIGlzIGdsb2JhbCBqdXN0IHRvIGF2b2lkXG4gIC8vIGV4Y2Vzc2l2ZSBjYWxscyB3aGVuIGNUeXBlcyBpcyBiZWluZyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIGEgcGFyc2UuXG4gIHZhciBiYXNpY0NUeXBlcyA9IHdvcmRzKFwiaW50IGxvbmcgY2hhciBzaG9ydCBkb3VibGUgZmxvYXQgdW5zaWduZWQgc2lnbmVkIFwiICtcbiAgICBcInZvaWQgYm9vbFwiKTtcblxuICAvLyBEbyBub3QgdXNlIHRoaXMuIFVzZSB0aGUgb2JqQ1R5cGVzIGZ1bmN0aW9uIGJlbG93LiBUaGlzIGlzIGdsb2JhbCBqdXN0IHRvIGF2b2lkXG4gIC8vIGV4Y2Vzc2l2ZSBjYWxscyB3aGVuIG9iakNUeXBlcyBpcyBiZWluZyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIGEgcGFyc2UuXG4gIHZhciBiYXNpY09iakNUeXBlcyA9IHdvcmRzKFwiU0VMIGluc3RhbmNldHlwZSBpZCBDbGFzcyBQcm90b2NvbCBCT09MXCIpO1xuXG4gIC8vIFJldHVybnMgdHJ1ZSBpZiBpZGVudGlmaWVyIGlzIGEgXCJDXCIgdHlwZS5cbiAgLy8gQyB0eXBlIGlzIGRlZmluZWQgYXMgdGhvc2UgdGhhdCBhcmUgcmVzZXJ2ZWQgYnkgdGhlIGNvbXBpbGVyIChiYXNpY1R5cGVzKSxcbiAgLy8gYW5kIHRob3NlIHRoYXQgZW5kIGluIF90IChSZXNlcnZlZCBieSBQT1NJWCBmb3IgdHlwZXMpXG4gIC8vIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL21hbnVhbC9odG1sX25vZGUvUmVzZXJ2ZWQtTmFtZXMuaHRtbFxuICBmdW5jdGlvbiBjVHlwZXMoaWRlbnRpZmllcikge1xuICAgIHJldHVybiBjb250YWlucyhiYXNpY0NUeXBlcywgaWRlbnRpZmllcikgfHwgLy4rX3QkLy50ZXN0KGlkZW50aWZpZXIpO1xuICB9XG5cbiAgLy8gUmV0dXJucyB0cnVlIGlmIGlkZW50aWZpZXIgaXMgYSBcIk9iamVjdGl2ZSBDXCIgdHlwZS5cbiAgZnVuY3Rpb24gb2JqQ1R5cGVzKGlkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gY1R5cGVzKGlkZW50aWZpZXIpIHx8IGNvbnRhaW5zKGJhc2ljT2JqQ1R5cGVzLCBpZGVudGlmaWVyKTtcbiAgfVxuXG4gIHZhciBjQmxvY2tLZXl3b3JkcyA9IFwiY2FzZSBkbyBlbHNlIGZvciBpZiBzd2l0Y2ggd2hpbGUgc3RydWN0IGVudW0gdW5pb25cIjtcbiAgdmFyIGNEZWZLZXl3b3JkcyA9IFwic3RydWN0IGVudW0gdW5pb25cIjtcblxuICBmdW5jdGlvbiBjcHBIb29rKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoIXN0YXRlLnN0YXJ0T2ZMaW5lKSByZXR1cm4gZmFsc2VcbiAgICBmb3IgKHZhciBjaCwgbmV4dCA9IG51bGw7IGNoID0gc3RyZWFtLnBlZWsoKTspIHtcbiAgICAgIGlmIChjaCA9PSBcIlxcXFxcIiAmJiBzdHJlYW0ubWF0Y2goL14uJC8pKSB7XG4gICAgICAgIG5leHQgPSBjcHBIb29rXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKGNoID09IFwiL1wiICYmIHN0cmVhbS5tYXRjaCgvXlxcL1tcXC9cXCpdLywgZmFsc2UpKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBzdHJlYW0ubmV4dCgpXG4gICAgfVxuICAgIHN0YXRlLnRva2VuaXplID0gbmV4dFxuICAgIHJldHVybiBcIm1ldGFcIlxuICB9XG5cbiAgZnVuY3Rpb24gcG9pbnRlckhvb2soX3N0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUucHJldlRva2VuID09IFwidHlwZVwiKSByZXR1cm4gXCJ0eXBlXCI7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRm9yIEMgYW5kIEMrKyAoYW5kIE9iakMpOiBpZGVudGlmaWVycyBzdGFydGluZyB3aXRoIF9fXG4gIC8vIG9yIF8gZm9sbG93ZWQgYnkgYSBjYXBpdGFsIGxldHRlciBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSBjb21waWxlci5cbiAgZnVuY3Rpb24gY0lzUmVzZXJ2ZWRJZGVudGlmaWVyKHRva2VuKSB7XG4gICAgaWYgKCF0b2tlbiB8fCB0b2tlbi5sZW5ndGggPCAyKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRva2VuWzBdICE9ICdfJykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAodG9rZW5bMV0gPT0gJ18nKSB8fCAodG9rZW5bMV0gIT09IHRva2VuWzFdLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3BwMTRMaXRlcmFsKHN0cmVhbSkge1xuICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcLiddLyk7XG4gICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gIH1cblxuICBmdW5jdGlvbiBjcHAxMVN0cmluZ0hvb2soc3RyZWFtLCBzdGF0ZSkge1xuICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgLy8gUmF3IHN0cmluZ3MuXG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvKFJ8dThSfHVSfFVSfExSKS8pKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBzdHJlYW0ubWF0Y2goL1wiKFteXFxzXFxcXCgpXXswLDE2fSlcXCgvKTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgc3RhdGUuY3BwMTFSYXdTdHJpbmdEZWxpbSA9IG1hdGNoWzFdO1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblJhd1N0cmluZztcbiAgICAgIHJldHVybiB0b2tlblJhd1N0cmluZyhzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgLy8gVW5pY29kZSBzdHJpbmdzL2NoYXJzLlxuICAgIGlmIChzdHJlYW0ubWF0Y2goLyh1OHx1fFV8TCkvKSkge1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvW1wiJ10vLCAvKiBlYXQgKi8gZmFsc2UpKSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBJZ25vcmUgdGhpcyBob29rLlxuICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3BwTG9va3NMaWtlQ29uc3RydWN0b3Iod29yZCkge1xuICAgIHZhciBsYXN0VHdvID0gLyhcXHcrKTo6fj8oXFx3KykkLy5leGVjKHdvcmQpO1xuICAgIHJldHVybiBsYXN0VHdvICYmIGxhc3RUd29bMV0gPT0gbGFzdFR3b1syXTtcbiAgfVxuXG4gIC8vIEMjLXN0eWxlIHN0cmluZ3Mgd2hlcmUgXCJcIiBlc2NhcGVzIGEgcXVvdGUuXG4gIGZ1bmN0aW9uIHRva2VuQXRTdHJpbmcoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBuZXh0O1xuICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmIChuZXh0ID09ICdcIicgJiYgIXN0cmVhbS5lYXQoJ1wiJykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gIH1cblxuICAvLyBDKysxMSByYXcgc3RyaW5nIGxpdGVyYWwgaXMgPHByZWZpeD5cIjxkZWxpbT4oIGFueXRoaW5nICk8ZGVsaW0+XCIsIHdoZXJlXG4gIC8vIDxkZWxpbT4gY2FuIGJlIGEgc3RyaW5nIHVwIHRvIDE2IGNoYXJhY3RlcnMgbG9uZy5cbiAgZnVuY3Rpb24gdG9rZW5SYXdTdHJpbmcoc3RyZWFtLCBzdGF0ZSkge1xuICAgIC8vIEVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBzcGVjaWFsIHJlZ2V4IG1lYW5pbmdzLlxuICAgIHZhciBkZWxpbSA9IHN0YXRlLmNwcDExUmF3U3RyaW5nRGVsaW0ucmVwbGFjZSgvW15cXHdcXHNdL2csICdcXFxcJCYnKTtcbiAgICB2YXIgbWF0Y2ggPSBzdHJlYW0ubWF0Y2gobmV3IFJlZ0V4cChcIi4qP1xcXFwpXCIgKyBkZWxpbSArICdcIicpKTtcbiAgICBpZiAobWF0Y2gpXG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgZWxzZVxuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgIHJldHVybiBcInN0cmluZ1wiO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmKG1pbWVzLCBtb2RlKSB7XG4gICAgaWYgKHR5cGVvZiBtaW1lcyA9PSBcInN0cmluZ1wiKSBtaW1lcyA9IFttaW1lc107XG4gICAgdmFyIHdvcmRzID0gW107XG4gICAgZnVuY3Rpb24gYWRkKG9iaikge1xuICAgICAgaWYgKG9iaikgZm9yICh2YXIgcHJvcCBpbiBvYmopIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpXG4gICAgICAgIHdvcmRzLnB1c2gocHJvcCk7XG4gICAgfVxuICAgIGFkZChtb2RlLmtleXdvcmRzKTtcbiAgICBhZGQobW9kZS50eXBlcyk7XG4gICAgYWRkKG1vZGUuYnVpbHRpbik7XG4gICAgYWRkKG1vZGUuYXRvbXMpO1xuICAgIGlmICh3b3Jkcy5sZW5ndGgpIHtcbiAgICAgIG1vZGUuaGVscGVyVHlwZSA9IG1pbWVzWzBdO1xuICAgICAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImhpbnRXb3Jkc1wiLCBtaW1lc1swXSwgd29yZHMpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWltZXMubGVuZ3RoOyArK2kpXG4gICAgICBDb2RlTWlycm9yLmRlZmluZU1JTUUobWltZXNbaV0sIG1vZGUpO1xuICB9XG5cbiAgZGVmKFtcInRleHQveC1jc3JjXCIsIFwidGV4dC94LWNcIiwgXCJ0ZXh0L3gtY2hkclwiXSwge1xuICAgIG5hbWU6IFwiY2xpa2VcIixcbiAgICBrZXl3b3Jkczogd29yZHMoY0tleXdvcmRzKSxcbiAgICB0eXBlczogY1R5cGVzLFxuICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKGNCbG9ja0tleXdvcmRzKSxcbiAgICBkZWZLZXl3b3Jkczogd29yZHMoY0RlZktleXdvcmRzKSxcbiAgICB0eXBlRmlyc3REZWZpbml0aW9uczogdHJ1ZSxcbiAgICBhdG9tczogd29yZHMoXCJOVUxMIHRydWUgZmFsc2VcIiksXG4gICAgaXNSZXNlcnZlZElkZW50aWZpZXI6IGNJc1Jlc2VydmVkSWRlbnRpZmllcixcbiAgICBob29rczoge1xuICAgICAgXCIjXCI6IGNwcEhvb2ssXG4gICAgICBcIipcIjogcG9pbnRlckhvb2ssXG4gICAgfSxcbiAgICBtb2RlUHJvcHM6IHtmb2xkOiBbXCJicmFjZVwiLCBcImluY2x1ZGVcIl19XG4gIH0pO1xuXG4gIGRlZihbXCJ0ZXh0L3gtYysrc3JjXCIsIFwidGV4dC94LWMrK2hkclwiXSwge1xuICAgIG5hbWU6IFwiY2xpa2VcIixcbiAgICBrZXl3b3Jkczogd29yZHMoY0tleXdvcmRzICsgXCIgXCIgKyBjcHBLZXl3b3JkcyksXG4gICAgdHlwZXM6IGNUeXBlcyxcbiAgICBibG9ja0tleXdvcmRzOiB3b3JkcyhjQmxvY2tLZXl3b3JkcyArIFwiIGNsYXNzIHRyeSBjYXRjaFwiKSxcbiAgICBkZWZLZXl3b3Jkczogd29yZHMoY0RlZktleXdvcmRzICsgXCIgY2xhc3MgbmFtZXNwYWNlXCIpLFxuICAgIHR5cGVGaXJzdERlZmluaXRpb25zOiB0cnVlLFxuICAgIGF0b21zOiB3b3JkcyhcInRydWUgZmFsc2UgTlVMTCBudWxscHRyXCIpLFxuICAgIGRvbnRJbmRlbnRTdGF0ZW1lbnRzOiAvXnRlbXBsYXRlJC8sXG4gICAgaXNJZGVudGlmaWVyQ2hhcjogL1tcXHdcXCRfflxceGExLVxcdWZmZmZdLyxcbiAgICBpc1Jlc2VydmVkSWRlbnRpZmllcjogY0lzUmVzZXJ2ZWRJZGVudGlmaWVyLFxuICAgIGhvb2tzOiB7XG4gICAgICBcIiNcIjogY3BwSG9vayxcbiAgICAgIFwiKlwiOiBwb2ludGVySG9vayxcbiAgICAgIFwidVwiOiBjcHAxMVN0cmluZ0hvb2ssXG4gICAgICBcIlVcIjogY3BwMTFTdHJpbmdIb29rLFxuICAgICAgXCJMXCI6IGNwcDExU3RyaW5nSG9vayxcbiAgICAgIFwiUlwiOiBjcHAxMVN0cmluZ0hvb2ssXG4gICAgICBcIjBcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgXCIxXCI6IGNwcDE0TGl0ZXJhbCxcbiAgICAgIFwiMlwiOiBjcHAxNExpdGVyYWwsXG4gICAgICBcIjNcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgXCI0XCI6IGNwcDE0TGl0ZXJhbCxcbiAgICAgIFwiNVwiOiBjcHAxNExpdGVyYWwsXG4gICAgICBcIjZcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgXCI3XCI6IGNwcDE0TGl0ZXJhbCxcbiAgICAgIFwiOFwiOiBjcHAxNExpdGVyYWwsXG4gICAgICBcIjlcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUsIHN0eWxlKSB7XG4gICAgICAgIGlmIChzdHlsZSA9PSBcInZhcmlhYmxlXCIgJiYgc3RyZWFtLnBlZWsoKSA9PSBcIihcIiAmJlxuICAgICAgICAgICAgKHN0YXRlLnByZXZUb2tlbiA9PSBcIjtcIiB8fCBzdGF0ZS5wcmV2VG9rZW4gPT0gbnVsbCB8fFxuICAgICAgICAgICAgIHN0YXRlLnByZXZUb2tlbiA9PSBcIn1cIikgJiZcbiAgICAgICAgICAgIGNwcExvb2tzTGlrZUNvbnN0cnVjdG9yKHN0cmVhbS5jdXJyZW50KCkpKVxuICAgICAgICAgIHJldHVybiBcImRlZlwiO1xuICAgICAgfVxuICAgIH0sXG4gICAgbmFtZXNwYWNlU2VwYXJhdG9yOiBcIjo6XCIsXG4gICAgbW9kZVByb3BzOiB7Zm9sZDogW1wiYnJhY2VcIiwgXCJpbmNsdWRlXCJdfVxuICB9KTtcblxuICBkZWYoXCJ0ZXh0L3gtamF2YVwiLCB7XG4gICAgbmFtZTogXCJjbGlrZVwiLFxuICAgIGtleXdvcmRzOiB3b3JkcyhcImFic3RyYWN0IGFzc2VydCBicmVhayBjYXNlIGNhdGNoIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImRvIGVsc2UgZW51bSBleHRlbmRzIGZpbmFsIGZpbmFsbHkgZm9yIGdvdG8gaWYgaW1wbGVtZW50cyBpbXBvcnQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImluc3RhbmNlb2YgaW50ZXJmYWNlIG5hdGl2ZSBuZXcgcGFja2FnZSBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInJldHVybiBzdGF0aWMgc3RyaWN0ZnAgc3VwZXIgc3dpdGNoIHN5bmNocm9uaXplZCB0aGlzIHRocm93IHRocm93cyB0cmFuc2llbnQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInRyeSB2b2xhdGlsZSB3aGlsZSBAaW50ZXJmYWNlXCIpLFxuICAgIHR5cGVzOiB3b3JkcyhcImJ5dGUgc2hvcnQgaW50IGxvbmcgZmxvYXQgZG91YmxlIGJvb2xlYW4gY2hhciB2b2lkIEJvb2xlYW4gQnl0ZSBDaGFyYWN0ZXIgRG91YmxlIEZsb2F0IFwiICtcbiAgICAgICAgICAgICAgICAgXCJJbnRlZ2VyIExvbmcgTnVtYmVyIE9iamVjdCBTaG9ydCBTdHJpbmcgU3RyaW5nQnVmZmVyIFN0cmluZ0J1aWxkZXIgVm9pZFwiKSxcbiAgICBibG9ja0tleXdvcmRzOiB3b3JkcyhcImNhdGNoIGNsYXNzIGRvIGVsc2UgZmluYWxseSBmb3IgaWYgc3dpdGNoIHRyeSB3aGlsZVwiKSxcbiAgICBkZWZLZXl3b3Jkczogd29yZHMoXCJjbGFzcyBpbnRlcmZhY2UgZW51bSBAaW50ZXJmYWNlXCIpLFxuICAgIHR5cGVGaXJzdERlZmluaXRpb25zOiB0cnVlLFxuICAgIGF0b21zOiB3b3JkcyhcInRydWUgZmFsc2UgbnVsbFwiKSxcbiAgICBudW1iZXI6IC9eKD86MHhbYS1mXFxkX10rfDBiWzAxX10rfCg/OltcXGRfXStcXC4/XFxkKnxcXC5cXGQrKSg/OmVbLStdP1tcXGRfXSspPykodXxsbD98bHxmKT8vaSxcbiAgICBob29rczoge1xuICAgICAgXCJAXCI6IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICAvLyBEb24ndCBtYXRjaCB0aGUgQGludGVyZmFjZSBrZXl3b3JkLlxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKCdpbnRlcmZhY2UnLCBmYWxzZSkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfXS8pO1xuICAgICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgICB9XG4gICAgfSxcbiAgICBtb2RlUHJvcHM6IHtmb2xkOiBbXCJicmFjZVwiLCBcImltcG9ydFwiXX1cbiAgfSk7XG5cbiAgZGVmKFwidGV4dC94LWNzaGFycFwiLCB7XG4gICAgbmFtZTogXCJjbGlrZVwiLFxuICAgIGtleXdvcmRzOiB3b3JkcyhcImFic3RyYWN0IGFzIGFzeW5jIGF3YWl0IGJhc2UgYnJlYWsgY2FzZSBjYXRjaCBjaGVja2VkIGNsYXNzIGNvbnN0IGNvbnRpbnVlXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBkZWZhdWx0IGRlbGVnYXRlIGRvIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmluYWxseSBmaXhlZCBmb3JcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiIGZvcmVhY2ggZ290byBpZiBpbXBsaWNpdCBpbiBpbnRlcmZhY2UgaW50ZXJuYWwgaXMgbG9jayBuYW1lc3BhY2UgbmV3XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNlYWxlZFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cnVjdCBzd2l0Y2ggdGhpcyB0aHJvdyB0cnkgdHlwZW9mIHVuY2hlY2tlZFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgdW5zYWZlIHVzaW5nIHZpcnR1YWwgdm9pZCB2b2xhdGlsZSB3aGlsZSBhZGQgYWxpYXMgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZHluYW1pYyBmcm9tIGdldFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgZ2xvYmFsIGdyb3VwIGludG8gam9pbiBsZXQgb3JkZXJieSBwYXJ0aWFsIHJlbW92ZSBzZWxlY3Qgc2V0IHZhbHVlIHZhciB5aWVsZFwiKSxcbiAgICB0eXBlczogd29yZHMoXCJBY3Rpb24gQm9vbGVhbiBCeXRlIENoYXIgRGF0ZVRpbWUgRGF0ZVRpbWVPZmZzZXQgRGVjaW1hbCBEb3VibGUgRnVuY1wiICtcbiAgICAgICAgICAgICAgICAgXCIgR3VpZCBJbnQxNiBJbnQzMiBJbnQ2NCBPYmplY3QgU0J5dGUgU2luZ2xlIFN0cmluZyBUYXNrIFRpbWVTcGFuIFVJbnQxNiBVSW50MzJcIiArXG4gICAgICAgICAgICAgICAgIFwiIFVJbnQ2NCBib29sIGJ5dGUgY2hhciBkZWNpbWFsIGRvdWJsZSBzaG9ydCBpbnQgbG9uZyBvYmplY3RcIiAgK1xuICAgICAgICAgICAgICAgICBcIiBzYnl0ZSBmbG9hdCBzdHJpbmcgdXNob3J0IHVpbnQgdWxvbmdcIiksXG4gICAgYmxvY2tLZXl3b3Jkczogd29yZHMoXCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGZvcmVhY2ggaWYgc3RydWN0IHN3aXRjaCB0cnkgd2hpbGVcIiksXG4gICAgZGVmS2V5d29yZHM6IHdvcmRzKFwiY2xhc3MgaW50ZXJmYWNlIG5hbWVzcGFjZSBzdHJ1Y3QgdmFyXCIpLFxuICAgIHR5cGVGaXJzdERlZmluaXRpb25zOiB0cnVlLFxuICAgIGF0b21zOiB3b3JkcyhcInRydWUgZmFsc2UgbnVsbFwiKSxcbiAgICBob29rczoge1xuICAgICAgXCJAXCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoJ1wiJykpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQXRTdHJpbmc7XG4gICAgICAgICAgcmV0dXJuIHRva2VuQXRTdHJpbmcoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX10vKTtcbiAgICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gdG9rZW5UcmlwbGVTdHJpbmcoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBlc2NhcGVkID0gZmFsc2U7XG4gICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgIGlmICghZXNjYXBlZCAmJiBzdHJlYW0ubWF0Y2goJ1wiXCJcIicpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBlc2NhcGVkID0gc3RyZWFtLm5leHQoKSA9PSBcIlxcXFxcIiAmJiAhZXNjYXBlZDtcbiAgICB9XG4gICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbk5lc3RlZENvbW1lbnQoZGVwdGgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBjaFxuICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgICBpZiAoY2ggPT0gXCIqXCIgJiYgc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgICBpZiAoZGVwdGggPT0gMSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuTmVzdGVkQ29tbWVudChkZXB0aCAtIDEpXG4gICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIvXCIgJiYgc3RyZWFtLmVhdChcIipcIikpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuTmVzdGVkQ29tbWVudChkZXB0aCArIDEpXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBcImNvbW1lbnRcIlxuICAgIH1cbiAgfVxuXG4gIGRlZihcInRleHQveC1zY2FsYVwiLCB7XG4gICAgbmFtZTogXCJjbGlrZVwiLFxuICAgIGtleXdvcmRzOiB3b3JkcyhcbiAgICAgIC8qIHNjYWxhICovXG4gICAgICBcImFic3RyYWN0IGNhc2UgY2F0Y2ggY2xhc3MgZGVmIGRvIGVsc2UgZXh0ZW5kcyBmaW5hbCBmaW5hbGx5IGZvciBmb3JTb21lIGlmIFwiICtcbiAgICAgIFwiaW1wbGljaXQgaW1wb3J0IGxhenkgbWF0Y2ggbmV3IG51bGwgb2JqZWN0IG92ZXJyaWRlIHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcmV0dXJuIFwiICtcbiAgICAgIFwic2VhbGVkIHN1cGVyIHRoaXMgdGhyb3cgdHJhaXQgdHJ5IHR5cGUgdmFsIHZhciB3aGlsZSB3aXRoIHlpZWxkIF8gXCIgK1xuXG4gICAgICAvKiBwYWNrYWdlIHNjYWxhICovXG4gICAgICBcImFzc2VydCBhc3N1bWUgcmVxdWlyZSBwcmludCBwcmludGxuIHByaW50ZiByZWFkTGluZSByZWFkQm9vbGVhbiByZWFkQnl0ZSByZWFkU2hvcnQgXCIgK1xuICAgICAgXCJyZWFkQ2hhciByZWFkSW50IHJlYWRMb25nIHJlYWRGbG9hdCByZWFkRG91YmxlXCJcbiAgICApLFxuICAgIHR5cGVzOiB3b3JkcyhcbiAgICAgIFwiQW55VmFsIEFwcCBBcHBsaWNhdGlvbiBBcnJheSBCdWZmZXJlZEl0ZXJhdG9yIEJpZ0RlY2ltYWwgQmlnSW50IENoYXIgQ29uc29sZSBFaXRoZXIgXCIgK1xuICAgICAgXCJFbnVtZXJhdGlvbiBFcXVpdiBFcnJvciBFeGNlcHRpb24gRnJhY3Rpb25hbCBGdW5jdGlvbiBJbmRleGVkU2VxIEludCBJbnRlZ3JhbCBJdGVyYWJsZSBcIiArXG4gICAgICBcIkl0ZXJhdG9yIExpc3QgTWFwIE51bWVyaWMgTmlsIE5vdE51bGwgT3B0aW9uIE9yZGVyZWQgT3JkZXJpbmcgUGFydGlhbEZ1bmN0aW9uIFBhcnRpYWxPcmRlcmluZyBcIiArXG4gICAgICBcIlByb2R1Y3QgUHJveHkgUmFuZ2UgUmVzcG9uZGVyIFNlcSBTZXJpYWxpemFibGUgU2V0IFNwZWNpYWxpemFibGUgU3RyZWFtIFN0cmluZ0J1aWxkZXIgXCIgK1xuICAgICAgXCJTdHJpbmdDb250ZXh0IFN5bWJvbCBUaHJvd2FibGUgVHJhdmVyc2FibGUgVHJhdmVyc2FibGVPbmNlIFR1cGxlIFVuaXQgVmVjdG9yIFwiICtcblxuICAgICAgLyogcGFja2FnZSBqYXZhLmxhbmcgKi9cbiAgICAgIFwiQm9vbGVhbiBCeXRlIENoYXJhY3RlciBDaGFyU2VxdWVuY2UgQ2xhc3MgQ2xhc3NMb2FkZXIgQ2xvbmVhYmxlIENvbXBhcmFibGUgXCIgK1xuICAgICAgXCJDb21waWxlciBEb3VibGUgRXhjZXB0aW9uIEZsb2F0IEludGVnZXIgTG9uZyBNYXRoIE51bWJlciBPYmplY3QgUGFja2FnZSBQYWlyIFByb2Nlc3MgXCIgK1xuICAgICAgXCJSdW50aW1lIFJ1bm5hYmxlIFNlY3VyaXR5TWFuYWdlciBTaG9ydCBTdGFja1RyYWNlRWxlbWVudCBTdHJpY3RNYXRoIFN0cmluZyBcIiArXG4gICAgICBcIlN0cmluZ0J1ZmZlciBTeXN0ZW0gVGhyZWFkIFRocmVhZEdyb3VwIFRocmVhZExvY2FsIFRocm93YWJsZSBUcmlwbGUgVm9pZFwiXG4gICAgKSxcbiAgICBtdWx0aUxpbmVTdHJpbmdzOiB0cnVlLFxuICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKFwiY2F0Y2ggY2xhc3MgZW51bSBkbyBlbHNlIGZpbmFsbHkgZm9yIGZvclNvbWUgaWYgbWF0Y2ggc3dpdGNoIHRyeSB3aGlsZVwiKSxcbiAgICBkZWZLZXl3b3Jkczogd29yZHMoXCJjbGFzcyBlbnVtIGRlZiBvYmplY3QgcGFja2FnZSB0cmFpdCB0eXBlIHZhbCB2YXJcIiksXG4gICAgYXRvbXM6IHdvcmRzKFwidHJ1ZSBmYWxzZSBudWxsXCIpLFxuICAgIGluZGVudFN0YXRlbWVudHM6IGZhbHNlLFxuICAgIGluZGVudFN3aXRjaDogZmFsc2UsXG4gICAgaXNPcGVyYXRvckNoYXI6IC9bK1xcLSomJT08PiE/fFxcLyM6QF0vLFxuICAgIGhvb2tzOiB7XG4gICAgICBcIkBcIjogZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9dLyk7XG4gICAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICAgIH0sXG4gICAgICAnXCInOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RyZWFtLm1hdGNoKCdcIlwiJykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblRyaXBsZVN0cmluZztcbiAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfSxcbiAgICAgIFwiJ1wiOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX1xceGExLVxcdWZmZmZdLyk7XG4gICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgIH0sXG4gICAgICBcIj1cIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgY3ggPSBzdGF0ZS5jb250ZXh0XG4gICAgICAgIGlmIChjeC50eXBlID09IFwifVwiICYmIGN4LmFsaWduICYmIHN0cmVhbS5lYXQoXCI+XCIpKSB7XG4gICAgICAgICAgc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KGN4LmluZGVudGVkLCBjeC5jb2x1bW4sIGN4LnR5cGUsIGN4LmluZm8sIG51bGwsIGN4LnByZXYpXG4gICAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBcIi9cIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoIXN0cmVhbS5lYXQoXCIqXCIpKSByZXR1cm4gZmFsc2VcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbk5lc3RlZENvbW1lbnQoMSlcbiAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpXG4gICAgICB9XG4gICAgfSxcbiAgICBtb2RlUHJvcHM6IHtjbG9zZUJyYWNrZXRzOiB7cGFpcnM6ICcoKVtde31cIlwiJywgdHJpcGxlczogJ1wiJ319XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHRva2VuS290bGluU3RyaW5nKHRyaXBsZVN0cmluZyl7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTtcbiAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgIGlmICghdHJpcGxlU3RyaW5nICYmICFlc2NhcGVkICYmIHN0cmVhbS5tYXRjaCgnXCInKSApIHtlbmQgPSB0cnVlOyBicmVhazt9XG4gICAgICAgIGlmICh0cmlwbGVTdHJpbmcgJiYgc3RyZWFtLm1hdGNoKCdcIlwiXCInKSkge2VuZCA9IHRydWU7IGJyZWFrO31cbiAgICAgICAgbmV4dCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIGlmKCFlc2NhcGVkICYmIG5leHQgPT0gXCIkXCIgJiYgc3RyZWFtLm1hdGNoKCd7JykpXG4gICAgICAgICAgc3RyZWFtLnNraXBUbyhcIn1cIik7XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiICYmICF0cmlwbGVTdHJpbmc7XG4gICAgICB9XG4gICAgICBpZiAoZW5kIHx8ICF0cmlwbGVTdHJpbmcpXG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH1cbiAgfVxuXG4gIGRlZihcInRleHQveC1rb3RsaW5cIiwge1xuICAgIG5hbWU6IFwiY2xpa2VcIixcbiAgICBrZXl3b3Jkczogd29yZHMoXG4gICAgICAvKmtleXdvcmRzKi9cbiAgICAgIFwicGFja2FnZSBhcyB0eXBlYWxpYXMgY2xhc3MgaW50ZXJmYWNlIHRoaXMgc3VwZXIgdmFsIG9wZXJhdG9yIFwiICtcbiAgICAgIFwidmFyIGZ1biBmb3IgaXMgaW4gVGhpcyB0aHJvdyByZXR1cm4gYW5ub3RhdGlvbiBcIiArXG4gICAgICBcImJyZWFrIGNvbnRpbnVlIG9iamVjdCBpZiBlbHNlIHdoaWxlIGRvIHRyeSB3aGVuICFpbiAhaXMgYXM/IFwiICtcblxuICAgICAgLypzb2Z0IGtleXdvcmRzKi9cbiAgICAgIFwiZmlsZSBpbXBvcnQgd2hlcmUgYnkgZ2V0IHNldCBhYnN0cmFjdCBlbnVtIG9wZW4gaW5uZXIgb3ZlcnJpZGUgcHJpdmF0ZSBwdWJsaWMgaW50ZXJuYWwgXCIgK1xuICAgICAgXCJwcm90ZWN0ZWQgY2F0Y2ggZmluYWxseSBvdXQgZmluYWwgdmFyYXJnIHJlaWZpZWQgZHluYW1pYyBjb21wYW5pb24gY29uc3RydWN0b3IgaW5pdCBcIiArXG4gICAgICBcInNlYWxlZCBmaWVsZCBwcm9wZXJ0eSByZWNlaXZlciBwYXJhbSBzcGFyYW0gbGF0ZWluaXQgZGF0YSBpbmxpbmUgbm9pbmxpbmUgdGFpbHJlYyBcIiArXG4gICAgICBcImV4dGVybmFsIGFubm90YXRpb24gY3Jvc3NpbmxpbmUgY29uc3Qgb3BlcmF0b3IgaW5maXggc3VzcGVuZCBhY3R1YWwgZXhwZWN0IHNldHBhcmFtXCJcbiAgICApLFxuICAgIHR5cGVzOiB3b3JkcyhcbiAgICAgIC8qIHBhY2thZ2UgamF2YS5sYW5nICovXG4gICAgICBcIkJvb2xlYW4gQnl0ZSBDaGFyYWN0ZXIgQ2hhclNlcXVlbmNlIENsYXNzIENsYXNzTG9hZGVyIENsb25lYWJsZSBDb21wYXJhYmxlIFwiICtcbiAgICAgIFwiQ29tcGlsZXIgRG91YmxlIEV4Y2VwdGlvbiBGbG9hdCBJbnRlZ2VyIExvbmcgTWF0aCBOdW1iZXIgT2JqZWN0IFBhY2thZ2UgUGFpciBQcm9jZXNzIFwiICtcbiAgICAgIFwiUnVudGltZSBSdW5uYWJsZSBTZWN1cml0eU1hbmFnZXIgU2hvcnQgU3RhY2tUcmFjZUVsZW1lbnQgU3RyaWN0TWF0aCBTdHJpbmcgXCIgK1xuICAgICAgXCJTdHJpbmdCdWZmZXIgU3lzdGVtIFRocmVhZCBUaHJlYWRHcm91cCBUaHJlYWRMb2NhbCBUaHJvd2FibGUgVHJpcGxlIFZvaWQgQW5ub3RhdGlvbiBBbnkgQm9vbGVhbkFycmF5IFwiICtcbiAgICAgIFwiQnl0ZUFycmF5IENoYXIgQ2hhckFycmF5IERlcHJlY2F0aW9uTGV2ZWwgRG91YmxlQXJyYXkgRW51bSBGbG9hdEFycmF5IEZ1bmN0aW9uIEludCBJbnRBcnJheSBMYXp5IFwiICtcbiAgICAgIFwiTGF6eVRocmVhZFNhZmV0eU1vZGUgTG9uZ0FycmF5IE5vdGhpbmcgU2hvcnRBcnJheSBVbml0XCJcbiAgICApLFxuICAgIGludGVuZFN3aXRjaDogZmFsc2UsXG4gICAgaW5kZW50U3RhdGVtZW50czogZmFsc2UsXG4gICAgbXVsdGlMaW5lU3RyaW5nczogdHJ1ZSxcbiAgICBudW1iZXI6IC9eKD86MHhbYS1mXFxkX10rfDBiWzAxX10rfCg/OltcXGRfXSsoXFwuXFxkKyk/fFxcLlxcZCspKD86ZVstK10/W1xcZF9dKyk/KSh1fGxsP3xsfGYpPy9pLFxuICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKFwiY2F0Y2ggY2xhc3MgZG8gZWxzZSBmaW5hbGx5IGZvciBpZiB3aGVyZSB0cnkgd2hpbGUgZW51bVwiKSxcbiAgICBkZWZLZXl3b3Jkczogd29yZHMoXCJjbGFzcyB2YWwgdmFyIG9iamVjdCBpbnRlcmZhY2UgZnVuXCIpLFxuICAgIGF0b21zOiB3b3JkcyhcInRydWUgZmFsc2UgbnVsbCB0aGlzXCIpLFxuICAgIGhvb2tzOiB7XG4gICAgICBcIkBcIjogZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9dLyk7XG4gICAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICAgIH0sXG4gICAgICAnKic6IGZ1bmN0aW9uKF9zdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5wcmV2VG9rZW4gPT0gJy4nID8gJ3ZhcmlhYmxlJyA6ICdvcGVyYXRvcic7XG4gICAgICB9LFxuICAgICAgJ1wiJzogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuS290bGluU3RyaW5nKHN0cmVhbS5tYXRjaCgnXCJcIicpKTtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfSxcbiAgICAgIFwiL1wiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RyZWFtLmVhdChcIipcIikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbk5lc3RlZENvbW1lbnQoMSk7XG4gICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKVxuICAgICAgfSxcbiAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIGN0eCwgdGV4dEFmdGVyLCBpbmRlbnRVbml0KSB7XG4gICAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTtcbiAgICAgICAgaWYgKChzdGF0ZS5wcmV2VG9rZW4gPT0gXCJ9XCIgfHwgc3RhdGUucHJldlRva2VuID09IFwiKVwiKSAmJiB0ZXh0QWZ0ZXIgPT0gXCJcIilcbiAgICAgICAgICByZXR1cm4gc3RhdGUuaW5kZW50ZWQ7XG4gICAgICAgIGlmICgoc3RhdGUucHJldlRva2VuID09IFwib3BlcmF0b3JcIiAmJiB0ZXh0QWZ0ZXIgIT0gXCJ9XCIgJiYgc3RhdGUuY29udGV4dC50eXBlICE9IFwifVwiKSB8fFxuICAgICAgICAgIHN0YXRlLnByZXZUb2tlbiA9PSBcInZhcmlhYmxlXCIgJiYgZmlyc3RDaGFyID09IFwiLlwiIHx8XG4gICAgICAgICAgKHN0YXRlLnByZXZUb2tlbiA9PSBcIn1cIiB8fCBzdGF0ZS5wcmV2VG9rZW4gPT0gXCIpXCIpICYmIGZpcnN0Q2hhciA9PSBcIi5cIilcbiAgICAgICAgICByZXR1cm4gaW5kZW50VW5pdCAqIDIgKyBjdHguaW5kZW50ZWQ7XG4gICAgICAgIGlmIChjdHguYWxpZ24gJiYgY3R4LnR5cGUgPT0gXCJ9XCIpXG4gICAgICAgICAgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChzdGF0ZS5jb250ZXh0LnR5cGUgPT0gKHRleHRBZnRlciB8fCBcIlwiKS5jaGFyQXQoMCkgPyAwIDogaW5kZW50VW5pdCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtb2RlUHJvcHM6IHtjbG9zZUJyYWNrZXRzOiB7dHJpcGxlczogJ1wiJ319XG4gIH0pO1xuXG4gIGRlZihbXCJ4LXNoYWRlci94LXZlcnRleFwiLCBcIngtc2hhZGVyL3gtZnJhZ21lbnRcIl0sIHtcbiAgICBuYW1lOiBcImNsaWtlXCIsXG4gICAga2V5d29yZHM6IHdvcmRzKFwic2FtcGxlcjFEIHNhbXBsZXIyRCBzYW1wbGVyM0Qgc2FtcGxlckN1YmUgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInNhbXBsZXIxRFNoYWRvdyBzYW1wbGVyMkRTaGFkb3cgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImNvbnN0IGF0dHJpYnV0ZSB1bmlmb3JtIHZhcnlpbmcgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImJyZWFrIGNvbnRpbnVlIGRpc2NhcmQgcmV0dXJuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJmb3Igd2hpbGUgZG8gaWYgZWxzZSBzdHJ1Y3QgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImluIG91dCBpbm91dFwiKSxcbiAgICB0eXBlczogd29yZHMoXCJmbG9hdCBpbnQgYm9vbCB2b2lkIFwiICtcbiAgICAgICAgICAgICAgICAgXCJ2ZWMyIHZlYzMgdmVjNCBpdmVjMiBpdmVjMyBpdmVjNCBidmVjMiBidmVjMyBidmVjNCBcIiArXG4gICAgICAgICAgICAgICAgIFwibWF0MiBtYXQzIG1hdDRcIiksXG4gICAgYmxvY2tLZXl3b3Jkczogd29yZHMoXCJmb3Igd2hpbGUgZG8gaWYgZWxzZSBzdHJ1Y3RcIiksXG4gICAgYnVpbHRpbjogd29yZHMoXCJyYWRpYW5zIGRlZ3JlZXMgc2luIGNvcyB0YW4gYXNpbiBhY29zIGF0YW4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInBvdyBleHAgbG9nIGV4cDIgc3FydCBpbnZlcnNlc3FydCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiYWJzIHNpZ24gZmxvb3IgY2VpbCBmcmFjdCBtb2QgbWluIG1heCBjbGFtcCBtaXggc3RlcCBzbW9vdGhzdGVwIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJsZW5ndGggZGlzdGFuY2UgZG90IGNyb3NzIG5vcm1hbGl6ZSBmdHJhbnNmb3JtIGZhY2Vmb3J3YXJkIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJyZWZsZWN0IHJlZnJhY3QgbWF0cml4Q29tcE11bHQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImxlc3NUaGFuIGxlc3NUaGFuRXF1YWwgZ3JlYXRlclRoYW4gZ3JlYXRlclRoYW5FcXVhbCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiZXF1YWwgbm90RXF1YWwgYW55IGFsbCBub3QgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInRleHR1cmUxRCB0ZXh0dXJlMURQcm9qIHRleHR1cmUxRExvZCB0ZXh0dXJlMURQcm9qTG9kIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0dXJlMkQgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlMkRMb2QgdGV4dHVyZTJEUHJvakxvZCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwidGV4dHVyZTNEIHRleHR1cmUzRFByb2ogdGV4dHVyZTNETG9kIHRleHR1cmUzRFByb2pMb2QgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInRleHR1cmVDdWJlIHRleHR1cmVDdWJlTG9kIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJzaGFkb3cxRCBzaGFkb3cyRCBzaGFkb3cxRFByb2ogc2hhZG93MkRQcm9qIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJzaGFkb3cxRExvZCBzaGFkb3cyRExvZCBzaGFkb3cxRFByb2pMb2Qgc2hhZG93MkRQcm9qTG9kIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJkRmR4IGRGZHkgZndpZHRoIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJub2lzZTEgbm9pc2UyIG5vaXNlMyBub2lzZTRcIiksXG4gICAgYXRvbXM6IHdvcmRzKFwidHJ1ZSBmYWxzZSBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9GcmFnQ29sb3IgZ2xfU2Vjb25kYXJ5Q29sb3IgZ2xfTm9ybWFsIGdsX1ZlcnRleCBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9NdWx0aVRleENvb3JkMCBnbF9NdWx0aVRleENvb3JkMSBnbF9NdWx0aVRleENvb3JkMiBnbF9NdWx0aVRleENvb3JkMyBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9NdWx0aVRleENvb3JkNCBnbF9NdWx0aVRleENvb3JkNSBnbF9NdWx0aVRleENvb3JkNiBnbF9NdWx0aVRleENvb3JkNyBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9Gb2dDb29yZCBnbF9Qb2ludENvb3JkIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX1Bvc2l0aW9uIGdsX1BvaW50U2l6ZSBnbF9DbGlwVmVydGV4IFwiICtcbiAgICAgICAgICAgICAgICBcImdsX0Zyb250Q29sb3IgZ2xfQmFja0NvbG9yIGdsX0Zyb250U2Vjb25kYXJ5Q29sb3IgZ2xfQmFja1NlY29uZGFyeUNvbG9yIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX1RleENvb3JkIGdsX0ZvZ0ZyYWdDb29yZCBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9GcmFnQ29vcmQgZ2xfRnJvbnRGYWNpbmcgXCIgK1xuICAgICAgICAgICAgICAgIFwiZ2xfRnJhZ0RhdGEgZ2xfRnJhZ0RlcHRoIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX01vZGVsVmlld01hdHJpeCBnbF9Qcm9qZWN0aW9uTWF0cml4IGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXggXCIgK1xuICAgICAgICAgICAgICAgIFwiZ2xfVGV4dHVyZU1hdHJpeCBnbF9Ob3JtYWxNYXRyaXggZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZSBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZSBnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4SW52ZXJzZSBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9UZXh1cmVNYXRyaXhUcmFuc3Bvc2UgZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZVRyYW5zcG9zZSBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9UZXh0dXJlTWF0cml4SW52ZXJzZVRyYW5zcG9zZSBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9Ob3JtYWxTY2FsZSBnbF9EZXB0aFJhbmdlIGdsX0NsaXBQbGFuZSBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9Qb2ludCBnbF9Gcm9udE1hdGVyaWFsIGdsX0JhY2tNYXRlcmlhbCBnbF9MaWdodFNvdXJjZSBnbF9MaWdodE1vZGVsIFwiICtcbiAgICAgICAgICAgICAgICBcImdsX0Zyb250TGlnaHRNb2RlbFByb2R1Y3QgZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0IFwiICtcbiAgICAgICAgICAgICAgICBcImdsX1RleHR1cmVDb2xvciBnbF9FeWVQbGFuZVMgZ2xfRXllUGxhbmVUIGdsX0V5ZVBsYW5lUiBnbF9FeWVQbGFuZVEgXCIgK1xuICAgICAgICAgICAgICAgIFwiZ2xfRm9nUGFyYW1ldGVycyBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9NYXhMaWdodHMgZ2xfTWF4Q2xpcFBsYW5lcyBnbF9NYXhUZXh0dXJlVW5pdHMgZ2xfTWF4VGV4dHVyZUNvb3JkcyBcIiArXG4gICAgICAgICAgICAgICAgXCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIGdsX01heFZlcnRleFVuaWZvcm1Db21wb25lbnRzIGdsX01heFZhcnlpbmdGbG9hdHMgXCIgK1xuICAgICAgICAgICAgICAgIFwiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMgXCIgK1xuICAgICAgICAgICAgICAgIFwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtQ29tcG9uZW50cyBnbF9NYXhDb21iaW5lVGV4dHVyZUltYWdlVW5pdHMgXCIgK1xuICAgICAgICAgICAgICAgIFwiZ2xfTWF4RHJhd0J1ZmZlcnNcIiksXG4gICAgaW5kZW50U3dpdGNoOiBmYWxzZSxcbiAgICBob29rczoge1wiI1wiOiBjcHBIb29rfSxcbiAgICBtb2RlUHJvcHM6IHtmb2xkOiBbXCJicmFjZVwiLCBcImluY2x1ZGVcIl19XG4gIH0pO1xuXG4gIGRlZihcInRleHQveC1uZXNjXCIsIHtcbiAgICBuYW1lOiBcImNsaWtlXCIsXG4gICAga2V5d29yZHM6IHdvcmRzKGNLZXl3b3JkcyArIFwiIGFzIGF0b21pYyBhc3luYyBjYWxsIGNvbW1hbmQgY29tcG9uZW50IGNvbXBvbmVudHMgY29uZmlndXJhdGlvbiBldmVudCBnZW5lcmljIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJpbXBsZW1lbnRhdGlvbiBpbmNsdWRlcyBpbnRlcmZhY2UgbW9kdWxlIG5ldyBub3JhY2Ugbnhfc3RydWN0IG54X3VuaW9uIHBvc3QgcHJvdmlkZXMgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInNpZ25hbCB0YXNrIHVzZXMgYWJzdHJhY3QgZXh0ZW5kc1wiKSxcbiAgICB0eXBlczogY1R5cGVzLFxuICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKGNCbG9ja0tleXdvcmRzKSxcbiAgICBhdG9tczogd29yZHMoXCJudWxsIHRydWUgZmFsc2VcIiksXG4gICAgaG9va3M6IHtcIiNcIjogY3BwSG9va30sXG4gICAgbW9kZVByb3BzOiB7Zm9sZDogW1wiYnJhY2VcIiwgXCJpbmNsdWRlXCJdfVxuICB9KTtcblxuICBkZWYoXCJ0ZXh0L3gtb2JqZWN0aXZlY1wiLCB7XG4gICAgbmFtZTogXCJjbGlrZVwiLFxuICAgIGtleXdvcmRzOiB3b3JkcyhjS2V5d29yZHMgKyBcIiBcIiArIG9iakNLZXl3b3JkcyksXG4gICAgdHlwZXM6IG9iakNUeXBlcyxcbiAgICBidWlsdGluOiB3b3JkcyhvYmpDQnVpbHRpbnMpLFxuICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKGNCbG9ja0tleXdvcmRzICsgXCIgQHN5bnRoZXNpemUgQHRyeSBAY2F0Y2ggQGZpbmFsbHkgQGF1dG9yZWxlYXNlcG9vbCBAc3luY2hyb25pemVkXCIpLFxuICAgIGRlZktleXdvcmRzOiB3b3JkcyhjRGVmS2V5d29yZHMgKyBcIiBAaW50ZXJmYWNlIEBpbXBsZW1lbnRhdGlvbiBAcHJvdG9jb2wgQGNsYXNzXCIpLFxuICAgIGRvbnRJbmRlbnRTdGF0ZW1lbnRzOiAvXkAuKiQvLFxuICAgIHR5cGVGaXJzdERlZmluaXRpb25zOiB0cnVlLFxuICAgIGF0b21zOiB3b3JkcyhcIllFUyBOTyBOVUxMIE5pbCBuaWwgdHJ1ZSBmYWxzZSBudWxscHRyXCIpLFxuICAgIGlzUmVzZXJ2ZWRJZGVudGlmaWVyOiBjSXNSZXNlcnZlZElkZW50aWZpZXIsXG4gICAgaG9va3M6IHtcbiAgICAgIFwiI1wiOiBjcHBIb29rLFxuICAgICAgXCIqXCI6IHBvaW50ZXJIb29rLFxuICAgIH0sXG4gICAgbW9kZVByb3BzOiB7Zm9sZDogW1wiYnJhY2VcIiwgXCJpbmNsdWRlXCJdfVxuICB9KTtcblxuICBkZWYoXCJ0ZXh0L3gtb2JqZWN0aXZlYysrXCIsIHtcbiAgICBuYW1lOiBcImNsaWtlXCIsXG4gICAga2V5d29yZHM6IHdvcmRzKGNLZXl3b3JkcyArIFwiIFwiICsgb2JqQ0tleXdvcmRzICsgXCIgXCIgKyBjcHBLZXl3b3JkcyksXG4gICAgdHlwZXM6IG9iakNUeXBlcyxcbiAgICBidWlsdGluOiB3b3JkcyhvYmpDQnVpbHRpbnMpLFxuICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKGNCbG9ja0tleXdvcmRzICsgXCIgQHN5bnRoZXNpemUgQHRyeSBAY2F0Y2ggQGZpbmFsbHkgQGF1dG9yZWxlYXNlcG9vbCBAc3luY2hyb25pemVkIGNsYXNzIHRyeSBjYXRjaFwiKSxcbiAgICBkZWZLZXl3b3Jkczogd29yZHMoY0RlZktleXdvcmRzICsgXCIgQGludGVyZmFjZSBAaW1wbGVtZW50YXRpb24gQHByb3RvY29sIEBjbGFzcyBjbGFzcyBuYW1lc3BhY2VcIiksXG4gICAgZG9udEluZGVudFN0YXRlbWVudHM6IC9eQC4qJHxedGVtcGxhdGUkLyxcbiAgICB0eXBlRmlyc3REZWZpbml0aW9uczogdHJ1ZSxcbiAgICBhdG9tczogd29yZHMoXCJZRVMgTk8gTlVMTCBOaWwgbmlsIHRydWUgZmFsc2UgbnVsbHB0clwiKSxcbiAgICBpc1Jlc2VydmVkSWRlbnRpZmllcjogY0lzUmVzZXJ2ZWRJZGVudGlmaWVyLFxuICAgIGhvb2tzOiB7XG4gICAgICBcIiNcIjogY3BwSG9vayxcbiAgICAgIFwiKlwiOiBwb2ludGVySG9vayxcbiAgICAgIFwidVwiOiBjcHAxMVN0cmluZ0hvb2ssXG4gICAgICBcIlVcIjogY3BwMTFTdHJpbmdIb29rLFxuICAgICAgXCJMXCI6IGNwcDExU3RyaW5nSG9vayxcbiAgICAgIFwiUlwiOiBjcHAxMVN0cmluZ0hvb2ssXG4gICAgICBcIjBcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgXCIxXCI6IGNwcDE0TGl0ZXJhbCxcbiAgICAgIFwiMlwiOiBjcHAxNExpdGVyYWwsXG4gICAgICBcIjNcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgXCI0XCI6IGNwcDE0TGl0ZXJhbCxcbiAgICAgIFwiNVwiOiBjcHAxNExpdGVyYWwsXG4gICAgICBcIjZcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgXCI3XCI6IGNwcDE0TGl0ZXJhbCxcbiAgICAgIFwiOFwiOiBjcHAxNExpdGVyYWwsXG4gICAgICBcIjlcIjogY3BwMTRMaXRlcmFsLFxuICAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUsIHN0eWxlKSB7XG4gICAgICAgIGlmIChzdHlsZSA9PSBcInZhcmlhYmxlXCIgJiYgc3RyZWFtLnBlZWsoKSA9PSBcIihcIiAmJlxuICAgICAgICAgICAgKHN0YXRlLnByZXZUb2tlbiA9PSBcIjtcIiB8fCBzdGF0ZS5wcmV2VG9rZW4gPT0gbnVsbCB8fFxuICAgICAgICAgICAgIHN0YXRlLnByZXZUb2tlbiA9PSBcIn1cIikgJiZcbiAgICAgICAgICAgIGNwcExvb2tzTGlrZUNvbnN0cnVjdG9yKHN0cmVhbS5jdXJyZW50KCkpKVxuICAgICAgICAgIHJldHVybiBcImRlZlwiO1xuICAgICAgfVxuICAgIH0sXG4gICAgbmFtZXNwYWNlU2VwYXJhdG9yOiBcIjo6XCIsXG4gICAgbW9kZVByb3BzOiB7Zm9sZDogW1wiYnJhY2VcIiwgXCJpbmNsdWRlXCJdfVxuICB9KTtcblxuICBkZWYoXCJ0ZXh0L3gtc3F1aXJyZWxcIiwge1xuICAgIG5hbWU6IFwiY2xpa2VcIixcbiAgICBrZXl3b3Jkczogd29yZHMoXCJiYXNlIGJyZWFrIGNsb25lIGNvbnRpbnVlIGNvbnN0IGRlZmF1bHQgZGVsZXRlIGVudW0gZXh0ZW5kcyBmdW5jdGlvbiBpbiBjbGFzc1wiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgZm9yZWFjaCBsb2NhbCByZXN1bWUgcmV0dXJuIHRoaXMgdGhyb3cgdHlwZW9mIHlpZWxkIGNvbnN0cnVjdG9yIGluc3RhbmNlb2Ygc3RhdGljXCIpLFxuICAgIHR5cGVzOiBjVHlwZXMsXG4gICAgYmxvY2tLZXl3b3Jkczogd29yZHMoXCJjYXNlIGNhdGNoIGNsYXNzIGVsc2UgZm9yIGZvcmVhY2ggaWYgc3dpdGNoIHRyeSB3aGlsZVwiKSxcbiAgICBkZWZLZXl3b3Jkczogd29yZHMoXCJmdW5jdGlvbiBsb2NhbCBjbGFzc1wiKSxcbiAgICB0eXBlRmlyc3REZWZpbml0aW9uczogdHJ1ZSxcbiAgICBhdG9tczogd29yZHMoXCJ0cnVlIGZhbHNlIG51bGxcIiksXG4gICAgaG9va3M6IHtcIiNcIjogY3BwSG9va30sXG4gICAgbW9kZVByb3BzOiB7Zm9sZDogW1wiYnJhY2VcIiwgXCJpbmNsdWRlXCJdfVxuICB9KTtcblxuICAvLyBDZXlsb24gU3RyaW5ncyBuZWVkIHRvIGRlYWwgd2l0aCBpbnRlcnBvbGF0aW9uXG4gIHZhciBzdHJpbmdUb2tlbml6ZXIgPSBudWxsO1xuICBmdW5jdGlvbiB0b2tlbkNleWxvblN0cmluZyh0eXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgaWYgKCFlc2NhcGVkICYmIHN0cmVhbS5tYXRjaCgnXCInKSAmJlxuICAgICAgICAgICAgICAodHlwZSA9PSBcInNpbmdsZVwiIHx8IHN0cmVhbS5tYXRjaCgnXCJcIicpKSkge1xuICAgICAgICAgIGVuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlc2NhcGVkICYmIHN0cmVhbS5tYXRjaCgnYGAnKSkge1xuICAgICAgICAgIHN0cmluZ1Rva2VuaXplciA9IHRva2VuQ2V5bG9uU3RyaW5nKHR5cGUpO1xuICAgICAgICAgIGVuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIGVzY2FwZWQgPSB0eXBlID09IFwic2luZ2xlXCIgJiYgIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQpXG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfVxuICB9XG5cbiAgZGVmKFwidGV4dC94LWNleWxvblwiLCB7XG4gICAgbmFtZTogXCJjbGlrZVwiLFxuICAgIGtleXdvcmRzOiB3b3JkcyhcImFic3RyYWN0cyBhbGlhcyBhc3NlbWJseSBhc3NlcnQgYXNzaWduIGJyZWFrIGNhc2UgY2F0Y2ggY2xhc3MgY29udGludWUgZHluYW1pYyBlbHNlXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBleGlzdHMgZXh0ZW5kcyBmaW5hbGx5IGZvciBmdW5jdGlvbiBnaXZlbiBpZiBpbXBvcnQgaW4gaW50ZXJmYWNlIGlzIGxldCBtb2R1bGUgbmV3XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBub25lbXB0eSBvYmplY3Qgb2Ygb3V0IG91dGVyIHBhY2thZ2UgcmV0dXJuIHNhdGlzZmllcyBzdXBlciBzd2l0Y2ggdGhlbiB0aGlzIHRocm93XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiB0cnkgdmFsdWUgdm9pZCB3aGlsZVwiKSxcbiAgICB0eXBlczogZnVuY3Rpb24od29yZCkge1xuICAgICAgICAvLyBJbiBDZXlsb24gYWxsIGlkZW50aWZpZXJzIHRoYXQgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgYXJlIHR5cGVzXG4gICAgICAgIHZhciBmaXJzdCA9IHdvcmQuY2hhckF0KDApO1xuICAgICAgICByZXR1cm4gKGZpcnN0ID09PSBmaXJzdC50b1VwcGVyQ2FzZSgpICYmIGZpcnN0ICE9PSBmaXJzdC50b0xvd2VyQ2FzZSgpKTtcbiAgICB9LFxuICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKFwiY2FzZSBjYXRjaCBjbGFzcyBkeW5hbWljIGVsc2UgZmluYWxseSBmb3IgZnVuY3Rpb24gaWYgaW50ZXJmYWNlIG1vZHVsZSBuZXcgb2JqZWN0IHN3aXRjaCB0cnkgd2hpbGVcIiksXG4gICAgZGVmS2V5d29yZHM6IHdvcmRzKFwiY2xhc3MgZHluYW1pYyBmdW5jdGlvbiBpbnRlcmZhY2UgbW9kdWxlIG9iamVjdCBwYWNrYWdlIHZhbHVlXCIpLFxuICAgIGJ1aWx0aW46IHdvcmRzKFwiYWJzdHJhY3QgYWN0dWFsIGFsaWFzZWQgYW5ub3RhdGlvbiBieSBkZWZhdWx0IGRlcHJlY2F0ZWQgZG9jIGZpbmFsIGZvcm1hbCBsYXRlIGxpY2Vuc2VcIiArXG4gICAgICAgICAgICAgICAgICAgXCIgbmF0aXZlIG9wdGlvbmFsIHNlYWxlZCBzZWUgc2VyaWFsaXphYmxlIHNoYXJlZCBzdXBwcmVzc1dhcm5pbmdzIHRhZ2dlZCB0aHJvd3MgdmFyaWFibGVcIiksXG4gICAgaXNQdW5jdHVhdGlvbkNoYXI6IC9bXFxbXFxde31cXChcXCksO1xcOlxcLmBdLyxcbiAgICBpc09wZXJhdG9yQ2hhcjogL1srXFwtKiYlPTw+IT98Xn46XFwvXS8sXG4gICAgbnVtYmVyU3RhcnQ6IC9bXFxkIyRdLyxcbiAgICBudW1iZXI6IC9eKD86I1tcXGRhLWZBLUZfXSt8XFwkWzAxX10rfFtcXGRfXStba01HVFBtdW5wZl0/fFtcXGRfXStcXC5bXFxkX10rKD86W2VFXVstK10/XFxkK3xba01HVFBtdW5wZl18KXwpL2ksXG4gICAgbXVsdGlMaW5lU3RyaW5nczogdHJ1ZSxcbiAgICB0eXBlRmlyc3REZWZpbml0aW9uczogdHJ1ZSxcbiAgICBhdG9tczogd29yZHMoXCJ0cnVlIGZhbHNlIG51bGwgbGFyZ2VyIHNtYWxsZXIgZXF1YWwgZW1wdHkgZmluaXNoZWRcIiksXG4gICAgaW5kZW50U3dpdGNoOiBmYWxzZSxcbiAgICBzdHlsZURlZnM6IGZhbHNlLFxuICAgIGhvb2tzOiB7XG4gICAgICBcIkBcIjogZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9dLyk7XG4gICAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICAgIH0sXG4gICAgICAnXCInOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNleWxvblN0cmluZyhzdHJlYW0ubWF0Y2goJ1wiXCInKSA/IFwidHJpcGxlXCIgOiBcInNpbmdsZVwiKTtcbiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAnYCc6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgICBpZiAoIXN0cmluZ1Rva2VuaXplciB8fCAhc3RyZWFtLm1hdGNoKCdgJykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHN0cmluZ1Rva2VuaXplcjtcbiAgICAgICAgICBzdHJpbmdUb2tlbml6ZXIgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSxcbiAgICAgIFwiJ1wiOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX1xceGExLVxcdWZmZmZdLyk7XG4gICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgIH0sXG4gICAgICB0b2tlbjogZnVuY3Rpb24oX3N0cmVhbSwgc3RhdGUsIHN0eWxlKSB7XG4gICAgICAgICAgaWYgKChzdHlsZSA9PSBcInZhcmlhYmxlXCIgfHwgc3R5bGUgPT0gXCJ0eXBlXCIpICYmXG4gICAgICAgICAgICAgIHN0YXRlLnByZXZUb2tlbiA9PSBcIi5cIikge1xuICAgICAgICAgICAgcmV0dXJuIFwidmFyaWFibGUtMlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW9kZVByb3BzOiB7XG4gICAgICAgIGZvbGQ6IFtcImJyYWNlXCIsIFwiaW1wb3J0XCJdLFxuICAgICAgICBjbG9zZUJyYWNrZXRzOiB7dHJpcGxlczogJ1wiJ31cbiAgICB9XG4gIH0pO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiY2xvanVyZVwiLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgYXRvbXMgPSBbXCJmYWxzZVwiLCBcIm5pbFwiLCBcInRydWVcIl07XG4gIHZhciBzcGVjaWFsRm9ybXMgPSBbXCIuXCIsIFwiY2F0Y2hcIiwgXCJkZWZcIiwgXCJkb1wiLCBcImlmXCIsIFwibW9uaXRvci1lbnRlclwiLFxuICAgICAgXCJtb25pdG9yLWV4aXRcIiwgXCJuZXdcIiwgXCJxdW90ZVwiLCBcInJlY3VyXCIsIFwic2V0IVwiLCBcInRocm93XCIsIFwidHJ5XCIsIFwidmFyXCJdO1xuICB2YXIgY29yZVN5bWJvbHMgPSBbXCIqXCIsIFwiKidcIiwgXCIqMVwiLCBcIioyXCIsIFwiKjNcIiwgXCIqYWdlbnQqXCIsXG4gICAgICBcIiphbGxvdy11bnJlc29sdmVkLXZhcnMqXCIsIFwiKmFzc2VydCpcIiwgXCIqY2xvanVyZS12ZXJzaW9uKlwiLFxuICAgICAgXCIqY29tbWFuZC1saW5lLWFyZ3MqXCIsIFwiKmNvbXBpbGUtZmlsZXMqXCIsIFwiKmNvbXBpbGUtcGF0aCpcIixcbiAgICAgIFwiKmNvbXBpbGVyLW9wdGlvbnMqXCIsIFwiKmRhdGEtcmVhZGVycypcIiwgXCIqZGVmYXVsdC1kYXRhLXJlYWRlci1mbipcIiwgXCIqZVwiLFxuICAgICAgXCIqZXJyKlwiLCBcIipmaWxlKlwiLCBcIipmbHVzaC1vbi1uZXdsaW5lKlwiLCBcIipmbi1sb2FkZXIqXCIsIFwiKmluKlwiLFxuICAgICAgXCIqbWF0aC1jb250ZXh0KlwiLCBcIipucypcIiwgXCIqb3V0KlwiLCBcIipwcmludC1kdXAqXCIsIFwiKnByaW50LWxlbmd0aCpcIixcbiAgICAgIFwiKnByaW50LWxldmVsKlwiLCBcIipwcmludC1tZXRhKlwiLCBcIipwcmludC1uYW1lc3BhY2UtbWFwcypcIixcbiAgICAgIFwiKnByaW50LXJlYWRhYmx5KlwiLCBcIipyZWFkLWV2YWwqXCIsIFwiKnJlYWRlci1yZXNvbHZlcipcIiwgXCIqc291cmNlLXBhdGgqXCIsXG4gICAgICBcIipzdXBwcmVzcy1yZWFkKlwiLCBcIip1bmNoZWNrZWQtbWF0aCpcIiwgXCIqdXNlLWNvbnRleHQtY2xhc3Nsb2FkZXIqXCIsXG4gICAgICBcIip2ZXJib3NlLWRlZnJlY29yZHMqXCIsIFwiKndhcm4tb24tcmVmbGVjdGlvbipcIiwgXCIrXCIsIFwiKydcIiwgXCItXCIsIFwiLSdcIixcbiAgICAgIFwiLT5cIiwgXCItPj5cIiwgXCItPkFycmF5Q2h1bmtcIiwgXCItPkVkdWN0aW9uXCIsIFwiLT5WZWNcIiwgXCItPlZlY05vZGVcIixcbiAgICAgIFwiLT5WZWNTZXFcIiwgXCItY2FjaGUtcHJvdG9jb2wtZm5cIiwgXCItcmVzZXQtbWV0aG9kc1wiLCBcIi4uXCIsIFwiL1wiLCBcIjxcIiwgXCI8PVwiLFxuICAgICAgXCI9XCIsIFwiPT1cIiwgXCI+XCIsIFwiPj1cIiwgXCJFTVBUWS1OT0RFXCIsIFwiSW5zdFwiLCBcIlN0YWNrVHJhY2VFbGVtZW50LT52ZWNcIixcbiAgICAgIFwiVGhyb3dhYmxlLT5tYXBcIiwgXCJhY2Nlc3NvclwiLCBcImFjbG9uZVwiLCBcImFkZC1jbGFzc3BhdGhcIiwgXCJhZGQtd2F0Y2hcIixcbiAgICAgIFwiYWdlbnRcIiwgXCJhZ2VudC1lcnJvclwiLCBcImFnZW50LWVycm9yc1wiLCBcImFnZXRcIiwgXCJhbGVuZ3RoXCIsIFwiYWxpYXNcIixcbiAgICAgIFwiYWxsLW5zXCIsIFwiYWx0ZXJcIiwgXCJhbHRlci1tZXRhIVwiLCBcImFsdGVyLXZhci1yb290XCIsIFwiYW1hcFwiLCBcImFuY2VzdG9yc1wiLFxuICAgICAgXCJhbmRcIiwgXCJhbnk/XCIsIFwiYXBwbHlcIiwgXCJhcmVkdWNlXCIsIFwiYXJyYXktbWFwXCIsIFwiYXMtPlwiLCBcImFzZXRcIixcbiAgICAgIFwiYXNldC1ib29sZWFuXCIsIFwiYXNldC1ieXRlXCIsIFwiYXNldC1jaGFyXCIsIFwiYXNldC1kb3VibGVcIiwgXCJhc2V0LWZsb2F0XCIsXG4gICAgICBcImFzZXQtaW50XCIsIFwiYXNldC1sb25nXCIsIFwiYXNldC1zaG9ydFwiLCBcImFzc2VydFwiLCBcImFzc29jXCIsIFwiYXNzb2MhXCIsXG4gICAgICBcImFzc29jLWluXCIsIFwiYXNzb2NpYXRpdmU/XCIsIFwiYXRvbVwiLCBcImF3YWl0XCIsIFwiYXdhaXQtZm9yXCIsIFwiYXdhaXQxXCIsXG4gICAgICBcImJhc2VzXCIsIFwiYmVhblwiLCBcImJpZ2RlY1wiLCBcImJpZ2ludFwiLCBcImJpZ2ludGVnZXJcIiwgXCJiaW5kaW5nXCIsIFwiYml0LWFuZFwiLFxuICAgICAgXCJiaXQtYW5kLW5vdFwiLCBcImJpdC1jbGVhclwiLCBcImJpdC1mbGlwXCIsIFwiYml0LW5vdFwiLCBcImJpdC1vclwiLCBcImJpdC1zZXRcIixcbiAgICAgIFwiYml0LXNoaWZ0LWxlZnRcIiwgXCJiaXQtc2hpZnQtcmlnaHRcIiwgXCJiaXQtdGVzdFwiLCBcImJpdC14b3JcIiwgXCJib29sZWFuXCIsXG4gICAgICBcImJvb2xlYW4tYXJyYXlcIiwgXCJib29sZWFuP1wiLCBcImJvb2xlYW5zXCIsIFwiYm91bmQtZm5cIiwgXCJib3VuZC1mbipcIixcbiAgICAgIFwiYm91bmQ/XCIsIFwiYm91bmRlZC1jb3VudFwiLCBcImJ1dGxhc3RcIiwgXCJieXRlXCIsIFwiYnl0ZS1hcnJheVwiLCBcImJ5dGVzXCIsXG4gICAgICBcImJ5dGVzP1wiLCBcImNhc2VcIiwgXCJjYXN0XCIsIFwiY2F0XCIsIFwiY2hhclwiLCBcImNoYXItYXJyYXlcIixcbiAgICAgIFwiY2hhci1lc2NhcGUtc3RyaW5nXCIsIFwiY2hhci1uYW1lLXN0cmluZ1wiLCBcImNoYXI/XCIsIFwiY2hhcnNcIiwgXCJjaHVua1wiLFxuICAgICAgXCJjaHVuay1hcHBlbmRcIiwgXCJjaHVuay1idWZmZXJcIiwgXCJjaHVuay1jb25zXCIsIFwiY2h1bmstZmlyc3RcIiwgXCJjaHVuay1uZXh0XCIsXG4gICAgICBcImNodW5rLXJlc3RcIiwgXCJjaHVua2VkLXNlcT9cIiwgXCJjbGFzc1wiLCBcImNsYXNzP1wiLCBcImNsZWFyLWFnZW50LWVycm9yc1wiLFxuICAgICAgXCJjbG9qdXJlLXZlcnNpb25cIiwgXCJjb2xsP1wiLCBcImNvbW1lbnRcIiwgXCJjb21tdXRlXCIsIFwiY29tcFwiLCBcImNvbXBhcmF0b3JcIixcbiAgICAgIFwiY29tcGFyZVwiLCBcImNvbXBhcmUtYW5kLXNldCFcIiwgXCJjb21waWxlXCIsIFwiY29tcGxlbWVudFwiLCBcImNvbXBsZXRpbmdcIixcbiAgICAgIFwiY29uY2F0XCIsIFwiY29uZFwiLCBcImNvbmQtPlwiLCBcImNvbmQtPj5cIiwgXCJjb25kcFwiLCBcImNvbmpcIiwgXCJjb25qIVwiLCBcImNvbnNcIixcbiAgICAgIFwiY29uc3RhbnRseVwiLCBcImNvbnN0cnVjdC1wcm94eVwiLCBcImNvbnRhaW5zP1wiLCBcImNvdW50XCIsIFwiY291bnRlZD9cIixcbiAgICAgIFwiY3JlYXRlLW5zXCIsIFwiY3JlYXRlLXN0cnVjdFwiLCBcImN5Y2xlXCIsIFwiZGVjXCIsIFwiZGVjJ1wiLCBcImRlY2ltYWw/XCIsXG4gICAgICBcImRlY2xhcmVcIiwgXCJkZWR1cGVcIiwgXCJkZWZhdWx0LWRhdGEtcmVhZGVyc1wiLCBcImRlZmlubGluZVwiLCBcImRlZmludGVyZmFjZVwiLFxuICAgICAgXCJkZWZtYWNyb1wiLCBcImRlZm1ldGhvZFwiLCBcImRlZm11bHRpXCIsIFwiZGVmblwiLCBcImRlZm4tXCIsIFwiZGVmb25jZVwiLFxuICAgICAgXCJkZWZwcm90b2NvbFwiLCBcImRlZnJlY29yZFwiLCBcImRlZnN0cnVjdFwiLCBcImRlZnR5cGVcIiwgXCJkZWxheVwiLCBcImRlbGF5P1wiLFxuICAgICAgXCJkZWxpdmVyXCIsIFwiZGVub21pbmF0b3JcIiwgXCJkZXJlZlwiLCBcImRlcml2ZVwiLCBcImRlc2NlbmRhbnRzXCIsIFwiZGVzdHJ1Y3R1cmVcIixcbiAgICAgIFwiZGlzalwiLCBcImRpc2ohXCIsIFwiZGlzc29jXCIsIFwiZGlzc29jIVwiLCBcImRpc3RpbmN0XCIsIFwiZGlzdGluY3Q/XCIsIFwiZG9hbGxcIixcbiAgICAgIFwiZG9ydW5cIiwgXCJkb3NlcVwiLCBcImRvc3luY1wiLCBcImRvdGltZXNcIiwgXCJkb3RvXCIsIFwiZG91YmxlXCIsIFwiZG91YmxlLWFycmF5XCIsXG4gICAgICBcImRvdWJsZT9cIiwgXCJkb3VibGVzXCIsIFwiZHJvcFwiLCBcImRyb3AtbGFzdFwiLCBcImRyb3Atd2hpbGVcIiwgXCJlZHVjdGlvblwiLFxuICAgICAgXCJlbXB0eVwiLCBcImVtcHR5P1wiLCBcImVuc3VyZVwiLCBcImVuc3VyZS1yZWR1Y2VkXCIsIFwiZW51bWVyYXRpb24tc2VxXCIsXG4gICAgICBcImVycm9yLWhhbmRsZXJcIiwgXCJlcnJvci1tb2RlXCIsIFwiZXZhbFwiLCBcImV2ZW4/XCIsIFwiZXZlcnktcHJlZFwiLCBcImV2ZXJ5P1wiLFxuICAgICAgXCJleC1kYXRhXCIsIFwiZXgtaW5mb1wiLCBcImV4dGVuZFwiLCBcImV4dGVuZC1wcm90b2NvbFwiLCBcImV4dGVuZC10eXBlXCIsXG4gICAgICBcImV4dGVuZGVyc1wiLCBcImV4dGVuZHM/XCIsIFwiZmFsc2U/XCIsIFwiZmZpcnN0XCIsIFwiZmlsZS1zZXFcIiwgXCJmaWx0ZXJcIixcbiAgICAgIFwiZmlsdGVydlwiLCBcImZpbmRcIiwgXCJmaW5kLWtleXdvcmRcIiwgXCJmaW5kLW5zXCIsIFwiZmluZC1wcm90b2NvbC1pbXBsXCIsXG4gICAgICBcImZpbmQtcHJvdG9jb2wtbWV0aG9kXCIsIFwiZmluZC12YXJcIiwgXCJmaXJzdFwiLCBcImZsYXR0ZW5cIiwgXCJmbG9hdFwiLFxuICAgICAgXCJmbG9hdC1hcnJheVwiLCBcImZsb2F0P1wiLCBcImZsb2F0c1wiLCBcImZsdXNoXCIsIFwiZm5cIiwgXCJmbj9cIiwgXCJmbmV4dFwiLCBcImZuaWxcIixcbiAgICAgIFwiZm9yXCIsIFwiZm9yY2VcIiwgXCJmb3JtYXRcIiwgXCJmcmVxdWVuY2llc1wiLCBcImZ1dHVyZVwiLCBcImZ1dHVyZS1jYWxsXCIsXG4gICAgICBcImZ1dHVyZS1jYW5jZWxcIiwgXCJmdXR1cmUtY2FuY2VsbGVkP1wiLCBcImZ1dHVyZS1kb25lP1wiLCBcImZ1dHVyZT9cIixcbiAgICAgIFwiZ2VuLWNsYXNzXCIsIFwiZ2VuLWludGVyZmFjZVwiLCBcImdlbnN5bVwiLCBcImdldFwiLCBcImdldC1pblwiLCBcImdldC1tZXRob2RcIixcbiAgICAgIFwiZ2V0LXByb3h5LWNsYXNzXCIsIFwiZ2V0LXRocmVhZC1iaW5kaW5nc1wiLCBcImdldC12YWxpZGF0b3JcIiwgXCJncm91cC1ieVwiLFxuICAgICAgXCJoYWx0LXdoZW5cIiwgXCJoYXNoXCIsIFwiaGFzaC1jb21iaW5lXCIsIFwiaGFzaC1tYXBcIiwgXCJoYXNoLW9yZGVyZWQtY29sbFwiLFxuICAgICAgXCJoYXNoLXNldFwiLCBcImhhc2gtdW5vcmRlcmVkLWNvbGxcIiwgXCJpZGVudD9cIiwgXCJpZGVudGljYWw/XCIsIFwiaWRlbnRpdHlcIixcbiAgICAgIFwiaWYtbGV0XCIsIFwiaWYtbm90XCIsIFwiaWYtc29tZVwiLCBcImlmbj9cIiwgXCJpbXBvcnRcIiwgXCJpbi1uc1wiLCBcImluY1wiLCBcImluYydcIixcbiAgICAgIFwiaW5kZXhlZD9cIiwgXCJpbml0LXByb3h5XCIsIFwiaW5zdC1tc1wiLCBcImluc3QtbXMqXCIsIFwiaW5zdD9cIiwgXCJpbnN0YW5jZT9cIixcbiAgICAgIFwiaW50XCIsIFwiaW50LWFycmF5XCIsIFwiaW50P1wiLCBcImludGVnZXI/XCIsIFwiaW50ZXJsZWF2ZVwiLCBcImludGVyblwiLFxuICAgICAgXCJpbnRlcnBvc2VcIiwgXCJpbnRvXCIsIFwiaW50by1hcnJheVwiLCBcImludHNcIiwgXCJpbyFcIiwgXCJpc2E/XCIsIFwiaXRlcmF0ZVwiLFxuICAgICAgXCJpdGVyYXRvci1zZXFcIiwgXCJqdXh0XCIsIFwia2VlcFwiLCBcImtlZXAtaW5kZXhlZFwiLCBcImtleVwiLCBcImtleXNcIiwgXCJrZXl3b3JkXCIsXG4gICAgICBcImtleXdvcmQ/XCIsIFwibGFzdFwiLCBcImxhenktY2F0XCIsIFwibGF6eS1zZXFcIiwgXCJsZXRcIiwgXCJsZXRmblwiLCBcImxpbmUtc2VxXCIsXG4gICAgICBcImxpc3RcIiwgXCJsaXN0KlwiLCBcImxpc3Q/XCIsIFwibG9hZFwiLCBcImxvYWQtZmlsZVwiLCBcImxvYWQtcmVhZGVyXCIsXG4gICAgICBcImxvYWQtc3RyaW5nXCIsIFwibG9hZGVkLWxpYnNcIiwgXCJsb2NraW5nXCIsIFwibG9uZ1wiLCBcImxvbmctYXJyYXlcIiwgXCJsb25nc1wiLFxuICAgICAgXCJsb29wXCIsIFwibWFjcm9leHBhbmRcIiwgXCJtYWNyb2V4cGFuZC0xXCIsIFwibWFrZS1hcnJheVwiLCBcIm1ha2UtaGllcmFyY2h5XCIsXG4gICAgICBcIm1hcFwiLCBcIm1hcC1lbnRyeT9cIiwgXCJtYXAtaW5kZXhlZFwiLCBcIm1hcD9cIiwgXCJtYXBjYXRcIiwgXCJtYXB2XCIsIFwibWF4XCIsXG4gICAgICBcIm1heC1rZXlcIiwgXCJtZW1mblwiLCBcIm1lbW9pemVcIiwgXCJtZXJnZVwiLCBcIm1lcmdlLXdpdGhcIiwgXCJtZXRhXCIsXG4gICAgICBcIm1ldGhvZC1zaWdcIiwgXCJtZXRob2RzXCIsIFwibWluXCIsIFwibWluLWtleVwiLCBcIm1peC1jb2xsZWN0aW9uLWhhc2hcIiwgXCJtb2RcIixcbiAgICAgIFwibXVuZ2VcIiwgXCJuYW1lXCIsIFwibmFtZXNwYWNlXCIsIFwibmFtZXNwYWNlLW11bmdlXCIsIFwibmF0LWludD9cIiwgXCJuZWctaW50P1wiLFxuICAgICAgXCJuZWc/XCIsIFwibmV3bGluZVwiLCBcIm5leHRcIiwgXCJuZmlyc3RcIiwgXCJuaWw/XCIsIFwibm5leHRcIiwgXCJub3RcIiwgXCJub3QtYW55P1wiLFxuICAgICAgXCJub3QtZW1wdHlcIiwgXCJub3QtZXZlcnk/XCIsIFwibm90PVwiLCBcIm5zXCIsIFwibnMtYWxpYXNlc1wiLCBcIm5zLWltcG9ydHNcIixcbiAgICAgIFwibnMtaW50ZXJuc1wiLCBcIm5zLW1hcFwiLCBcIm5zLW5hbWVcIiwgXCJucy1wdWJsaWNzXCIsIFwibnMtcmVmZXJzXCIsXG4gICAgICBcIm5zLXJlc29sdmVcIiwgXCJucy11bmFsaWFzXCIsIFwibnMtdW5tYXBcIiwgXCJudGhcIiwgXCJudGhuZXh0XCIsIFwibnRocmVzdFwiLFxuICAgICAgXCJudW1cIiwgXCJudW1iZXI/XCIsIFwibnVtZXJhdG9yXCIsIFwib2JqZWN0LWFycmF5XCIsIFwib2RkP1wiLCBcIm9yXCIsIFwicGFyZW50c1wiLFxuICAgICAgXCJwYXJ0aWFsXCIsIFwicGFydGl0aW9uXCIsIFwicGFydGl0aW9uLWFsbFwiLCBcInBhcnRpdGlvbi1ieVwiLCBcInBjYWxsc1wiLCBcInBlZWtcIixcbiAgICAgIFwicGVyc2lzdGVudCFcIiwgXCJwbWFwXCIsIFwicG9wXCIsIFwicG9wIVwiLCBcInBvcC10aHJlYWQtYmluZGluZ3NcIiwgXCJwb3MtaW50P1wiLFxuICAgICAgXCJwb3M/XCIsIFwicHJcIiwgXCJwci1zdHJcIiwgXCJwcmVmZXItbWV0aG9kXCIsIFwicHJlZmVyc1wiLFxuICAgICAgXCJwcmltaXRpdmVzLWNsYXNzbmFtZXNcIiwgXCJwcmludFwiLCBcInByaW50LWN0b3JcIiwgXCJwcmludC1kdXBcIixcbiAgICAgIFwicHJpbnQtbWV0aG9kXCIsIFwicHJpbnQtc2ltcGxlXCIsIFwicHJpbnQtc3RyXCIsIFwicHJpbnRmXCIsIFwicHJpbnRsblwiLFxuICAgICAgXCJwcmludGxuLXN0clwiLCBcInByblwiLCBcInBybi1zdHJcIiwgXCJwcm9taXNlXCIsIFwicHJveHlcIixcbiAgICAgIFwicHJveHktY2FsbC13aXRoLXN1cGVyXCIsIFwicHJveHktbWFwcGluZ3NcIiwgXCJwcm94eS1uYW1lXCIsIFwicHJveHktc3VwZXJcIixcbiAgICAgIFwicHVzaC10aHJlYWQtYmluZGluZ3NcIiwgXCJwdmFsdWVzXCIsIFwicXVhbGlmaWVkLWlkZW50P1wiLFxuICAgICAgXCJxdWFsaWZpZWQta2V5d29yZD9cIiwgXCJxdWFsaWZpZWQtc3ltYm9sP1wiLCBcInF1b3RcIiwgXCJyYW5kXCIsIFwicmFuZC1pbnRcIixcbiAgICAgIFwicmFuZC1udGhcIiwgXCJyYW5kb20tc2FtcGxlXCIsIFwicmFuZ2VcIiwgXCJyYXRpbz9cIiwgXCJyYXRpb25hbD9cIixcbiAgICAgIFwicmF0aW9uYWxpemVcIiwgXCJyZS1maW5kXCIsIFwicmUtZ3JvdXBzXCIsIFwicmUtbWF0Y2hlclwiLCBcInJlLW1hdGNoZXNcIixcbiAgICAgIFwicmUtcGF0dGVyblwiLCBcInJlLXNlcVwiLCBcInJlYWRcIiwgXCJyZWFkLWxpbmVcIiwgXCJyZWFkLXN0cmluZ1wiLFxuICAgICAgXCJyZWFkZXItY29uZGl0aW9uYWxcIiwgXCJyZWFkZXItY29uZGl0aW9uYWw/XCIsIFwicmVhbGl6ZWQ/XCIsIFwicmVjb3JkP1wiLFxuICAgICAgXCJyZWR1Y2VcIiwgXCJyZWR1Y2Uta3ZcIiwgXCJyZWR1Y2VkXCIsIFwicmVkdWNlZD9cIiwgXCJyZWR1Y3Rpb25zXCIsIFwicmVmXCIsXG4gICAgICBcInJlZi1oaXN0b3J5LWNvdW50XCIsIFwicmVmLW1heC1oaXN0b3J5XCIsIFwicmVmLW1pbi1oaXN0b3J5XCIsIFwicmVmLXNldFwiLFxuICAgICAgXCJyZWZlclwiLCBcInJlZmVyLWNsb2p1cmVcIiwgXCJyZWlmeVwiLCBcInJlbGVhc2UtcGVuZGluZy1zZW5kc1wiLCBcInJlbVwiLFxuICAgICAgXCJyZW1vdmVcIiwgXCJyZW1vdmUtYWxsLW1ldGhvZHNcIiwgXCJyZW1vdmUtbWV0aG9kXCIsIFwicmVtb3ZlLW5zXCIsXG4gICAgICBcInJlbW92ZS13YXRjaFwiLCBcInJlcGVhdFwiLCBcInJlcGVhdGVkbHlcIiwgXCJyZXBsYWNlXCIsIFwicmVwbGljYXRlXCIsIFwicmVxdWlyZVwiLFxuICAgICAgXCJyZXNldCFcIiwgXCJyZXNldC1tZXRhIVwiLCBcInJlc2V0LXZhbHMhXCIsIFwicmVzb2x2ZVwiLCBcInJlc3RcIixcbiAgICAgIFwicmVzdGFydC1hZ2VudFwiLCBcInJlc3VsdHNldC1zZXFcIiwgXCJyZXZlcnNlXCIsIFwicmV2ZXJzaWJsZT9cIiwgXCJyc2VxXCIsXG4gICAgICBcInJzdWJzZXFcIiwgXCJydW4hXCIsIFwic2F0aXNmaWVzP1wiLCBcInNlY29uZFwiLCBcInNlbGVjdC1rZXlzXCIsIFwic2VuZFwiLFxuICAgICAgXCJzZW5kLW9mZlwiLCBcInNlbmQtdmlhXCIsIFwic2VxXCIsIFwic2VxP1wiLCBcInNlcWFibGU/XCIsIFwic2VxdWVcIiwgXCJzZXF1ZW5jZVwiLFxuICAgICAgXCJzZXF1ZW50aWFsP1wiLCBcInNldFwiLCBcInNldC1hZ2VudC1zZW5kLWV4ZWN1dG9yIVwiLFxuICAgICAgXCJzZXQtYWdlbnQtc2VuZC1vZmYtZXhlY3V0b3IhXCIsIFwic2V0LWVycm9yLWhhbmRsZXIhXCIsIFwic2V0LWVycm9yLW1vZGUhXCIsXG4gICAgICBcInNldC12YWxpZGF0b3IhXCIsIFwic2V0P1wiLCBcInNob3J0XCIsIFwic2hvcnQtYXJyYXlcIiwgXCJzaG9ydHNcIiwgXCJzaHVmZmxlXCIsXG4gICAgICBcInNodXRkb3duLWFnZW50c1wiLCBcInNpbXBsZS1pZGVudD9cIiwgXCJzaW1wbGUta2V5d29yZD9cIiwgXCJzaW1wbGUtc3ltYm9sP1wiLFxuICAgICAgXCJzbHVycFwiLCBcInNvbWVcIiwgXCJzb21lLT5cIiwgXCJzb21lLT4+XCIsIFwic29tZS1mblwiLCBcInNvbWU/XCIsIFwic29ydFwiLFxuICAgICAgXCJzb3J0LWJ5XCIsIFwic29ydGVkLW1hcFwiLCBcInNvcnRlZC1tYXAtYnlcIiwgXCJzb3J0ZWQtc2V0XCIsIFwic29ydGVkLXNldC1ieVwiLFxuICAgICAgXCJzb3J0ZWQ/XCIsIFwic3BlY2lhbC1zeW1ib2w/XCIsIFwic3BpdFwiLCBcInNwbGl0LWF0XCIsIFwic3BsaXQtd2l0aFwiLCBcInN0clwiLFxuICAgICAgXCJzdHJpbmc/XCIsIFwic3RydWN0XCIsIFwic3RydWN0LW1hcFwiLCBcInN1YnNcIiwgXCJzdWJzZXFcIiwgXCJzdWJ2ZWNcIiwgXCJzdXBlcnNcIixcbiAgICAgIFwic3dhcCFcIiwgXCJzd2FwLXZhbHMhXCIsIFwic3ltYm9sXCIsIFwic3ltYm9sP1wiLCBcInN5bmNcIiwgXCJ0YWdnZWQtbGl0ZXJhbFwiLFxuICAgICAgXCJ0YWdnZWQtbGl0ZXJhbD9cIiwgXCJ0YWtlXCIsIFwidGFrZS1sYXN0XCIsIFwidGFrZS1udGhcIiwgXCJ0YWtlLXdoaWxlXCIsIFwidGVzdFwiLFxuICAgICAgXCJ0aGUtbnNcIiwgXCJ0aHJlYWQtYm91bmQ/XCIsIFwidGltZVwiLCBcInRvLWFycmF5XCIsIFwidG8tYXJyYXktMmRcIixcbiAgICAgIFwidHJhbXBvbGluZVwiLCBcInRyYW5zZHVjZVwiLCBcInRyYW5zaWVudFwiLCBcInRyZWUtc2VxXCIsIFwidHJ1ZT9cIiwgXCJ0eXBlXCIsXG4gICAgICBcInVuY2hlY2tlZC1hZGRcIiwgXCJ1bmNoZWNrZWQtYWRkLWludFwiLCBcInVuY2hlY2tlZC1ieXRlXCIsIFwidW5jaGVja2VkLWNoYXJcIixcbiAgICAgIFwidW5jaGVja2VkLWRlY1wiLCBcInVuY2hlY2tlZC1kZWMtaW50XCIsIFwidW5jaGVja2VkLWRpdmlkZS1pbnRcIixcbiAgICAgIFwidW5jaGVja2VkLWRvdWJsZVwiLCBcInVuY2hlY2tlZC1mbG9hdFwiLCBcInVuY2hlY2tlZC1pbmNcIixcbiAgICAgIFwidW5jaGVja2VkLWluYy1pbnRcIiwgXCJ1bmNoZWNrZWQtaW50XCIsIFwidW5jaGVja2VkLWxvbmdcIixcbiAgICAgIFwidW5jaGVja2VkLW11bHRpcGx5XCIsIFwidW5jaGVja2VkLW11bHRpcGx5LWludFwiLCBcInVuY2hlY2tlZC1uZWdhdGVcIixcbiAgICAgIFwidW5jaGVja2VkLW5lZ2F0ZS1pbnRcIiwgXCJ1bmNoZWNrZWQtcmVtYWluZGVyLWludFwiLCBcInVuY2hlY2tlZC1zaG9ydFwiLFxuICAgICAgXCJ1bmNoZWNrZWQtc3VidHJhY3RcIiwgXCJ1bmNoZWNrZWQtc3VidHJhY3QtaW50XCIsIFwidW5kZXJpdmVcIiwgXCJ1bnF1b3RlXCIsXG4gICAgICBcInVucXVvdGUtc3BsaWNpbmdcIiwgXCJ1bnJlZHVjZWRcIiwgXCJ1bnNpZ25lZC1iaXQtc2hpZnQtcmlnaHRcIiwgXCJ1cGRhdGVcIixcbiAgICAgIFwidXBkYXRlLWluXCIsIFwidXBkYXRlLXByb3h5XCIsIFwidXJpP1wiLCBcInVzZVwiLCBcInV1aWQ/XCIsIFwidmFsXCIsIFwidmFsc1wiLFxuICAgICAgXCJ2YXItZ2V0XCIsIFwidmFyLXNldFwiLCBcInZhcj9cIiwgXCJ2YXJ5LW1ldGFcIiwgXCJ2ZWNcIiwgXCJ2ZWN0b3JcIiwgXCJ2ZWN0b3Itb2ZcIixcbiAgICAgIFwidmVjdG9yP1wiLCBcInZvbGF0aWxlIVwiLCBcInZvbGF0aWxlP1wiLCBcInZyZXNldCFcIiwgXCJ2c3dhcCFcIiwgXCJ3aGVuXCIsXG4gICAgICBcIndoZW4tZmlyc3RcIiwgXCJ3aGVuLWxldFwiLCBcIndoZW4tbm90XCIsIFwid2hlbi1zb21lXCIsIFwid2hpbGVcIixcbiAgICAgIFwid2l0aC1iaW5kaW5nc1wiLCBcIndpdGgtYmluZGluZ3MqXCIsIFwid2l0aC1pbi1zdHJcIiwgXCJ3aXRoLWxvYWRpbmctY29udGV4dFwiLFxuICAgICAgXCJ3aXRoLWxvY2FsLXZhcnNcIiwgXCJ3aXRoLW1ldGFcIiwgXCJ3aXRoLW9wZW5cIiwgXCJ3aXRoLW91dC1zdHJcIixcbiAgICAgIFwid2l0aC1wcmVjaXNpb25cIiwgXCJ3aXRoLXJlZGVmc1wiLCBcIndpdGgtcmVkZWZzLWZuXCIsIFwieG1sLXNlcVwiLCBcInplcm8/XCIsXG4gICAgICBcInppcG1hcFwiXTtcbiAgdmFyIGhhdmVCb2R5UGFyYW1ldGVyID0gW1xuICAgICAgXCItPlwiLCBcIi0+PlwiLCBcImFzLT5cIiwgXCJiaW5kaW5nXCIsIFwiYm91bmQtZm5cIiwgXCJjYXNlXCIsIFwiY2F0Y2hcIiwgXCJjb21tZW50XCIsXG4gICAgICBcImNvbmRcIiwgXCJjb25kLT5cIiwgXCJjb25kLT4+XCIsIFwiY29uZHBcIiwgXCJkZWZcIiwgXCJkZWZpbnRlcmZhY2VcIiwgXCJkZWZtZXRob2RcIixcbiAgICAgIFwiZGVmblwiLCBcImRlZm1hY3JvXCIsIFwiZGVmcHJvdG9jb2xcIiwgXCJkZWZyZWNvcmRcIiwgXCJkZWZzdHJ1Y3RcIiwgXCJkZWZ0eXBlXCIsXG4gICAgICBcImRvXCIsIFwiZG9zZXFcIiwgXCJkb3RpbWVzXCIsIFwiZG90b1wiLCBcImV4dGVuZFwiLCBcImV4dGVuZC1wcm90b2NvbFwiLFxuICAgICAgXCJleHRlbmQtdHlwZVwiLCBcImZuXCIsIFwiZm9yXCIsIFwiZnV0dXJlXCIsIFwiaWZcIiwgXCJpZi1sZXRcIiwgXCJpZi1ub3RcIiwgXCJpZi1zb21lXCIsXG4gICAgICBcImxldFwiLCBcImxldGZuXCIsIFwibG9ja2luZ1wiLCBcImxvb3BcIiwgXCJuc1wiLCBcInByb3h5XCIsIFwicmVpZnlcIiwgXCJzdHJ1Y3QtbWFwXCIsXG4gICAgICBcInNvbWUtPlwiLCBcInNvbWUtPj5cIiwgXCJ0cnlcIiwgXCJ3aGVuXCIsIFwid2hlbi1maXJzdFwiLCBcIndoZW4tbGV0XCIsIFwid2hlbi1ub3RcIixcbiAgICAgIFwid2hlbi1zb21lXCIsIFwid2hpbGVcIiwgXCJ3aXRoLWJpbmRpbmdzXCIsIFwid2l0aC1iaW5kaW5ncypcIiwgXCJ3aXRoLWluLXN0clwiLFxuICAgICAgXCJ3aXRoLWxvYWRpbmctY29udGV4dFwiLCBcIndpdGgtbG9jYWwtdmFyc1wiLCBcIndpdGgtbWV0YVwiLCBcIndpdGgtb3BlblwiLFxuICAgICAgXCJ3aXRoLW91dC1zdHJcIiwgXCJ3aXRoLXByZWNpc2lvblwiLCBcIndpdGgtcmVkZWZzXCIsIFwid2l0aC1yZWRlZnMtZm5cIl07XG5cbiAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImhpbnRXb3Jkc1wiLCBcImNsb2p1cmVcIixcbiAgICBbXS5jb25jYXQoYXRvbXMsIHNwZWNpYWxGb3JtcywgY29yZVN5bWJvbHMpKTtcblxuICB2YXIgYXRvbSA9IGNyZWF0ZUxvb2t1cE1hcChhdG9tcyk7XG4gIHZhciBzcGVjaWFsRm9ybSA9IGNyZWF0ZUxvb2t1cE1hcChzcGVjaWFsRm9ybXMpO1xuICB2YXIgY29yZVN5bWJvbCA9IGNyZWF0ZUxvb2t1cE1hcChjb3JlU3ltYm9scyk7XG4gIHZhciBoYXNCb2R5UGFyYW1ldGVyID0gY3JlYXRlTG9va3VwTWFwKGhhdmVCb2R5UGFyYW1ldGVyKTtcbiAgdmFyIGRlbGltaXRlciA9IC9eKD86W1xcXFxcXFtcXF1cXHNcIigpLDtAXmB7fX5dfCQpLztcbiAgdmFyIG51bWJlckxpdGVyYWwgPSAvXig/OlsrXFwtXT9cXGQrKD86KD86TnwoPzpbZUVdWytcXC1dP1xcZCspKXwoPzpcXC4/XFxkKig/Ok18KD86W2VFXVsrXFwtXT9cXGQrKSk/KXxcXC9cXGQrfFt4WF1bMC05YS1mQS1GXSt8clswLTlhLXpBLVpdKyk/KD89W1xcXFxcXFtcXF1cXHNcIiMnKCksO0BeYHt9fl18JCkpLztcbiAgdmFyIGNoYXJhY3RlckxpdGVyYWwgPSAvXig/OlxcXFwoPzpiYWNrc3BhY2V8Zm9ybWZlZWR8bmV3bGluZXxyZXR1cm58c3BhY2V8dGFifG9bMC03XXszfXx1WzAtOUEtRmEtZl17NH18eFswLTlBLUZhLWZdezR9fC4pPyg/PVtcXFxcXFxbXFxdXFxzXCIoKSw7QF5ge31+XXwkKSkvO1xuXG4gIC8vIHNpbXBsZS1uYW1lc3BhY2UgOj0gL15bXlxcXFxcXC9cXFtcXF1cXGRcXHNcIiMnKCksO0BeYHt9fl1bXlxcXFxcXFtcXF1cXHNcIigpLDtAXmB7fX5dKi9cbiAgLy8gc2ltcGxlLXN5bWJvbCAgICA6PSAvXig/OlxcL3xbXlxcXFxcXC9cXFtcXF1cXGRcXHNcIiMnKCksO0BeYHt9fl1bXlxcXFxcXFtcXF1cXHNcIigpLDtAXmB7fX5dKikvXG4gIC8vIHF1YWxpZmllZC1zeW1ib2wgOj0gKDxzaW1wbGUtbmFtZXNwYWNlPig8Lj48c2ltcGxlLW5hbWVzcGFjZT4pKjwvPik/PHNpbXBsZS1zeW1ib2w+XG4gIHZhciBxdWFsaWZpZWRTeW1ib2wgPSAvXig/Oig/OlteXFxcXFxcL1xcW1xcXVxcZFxcc1wiIycoKSw7QF5ge31+XVteXFxcXFxcW1xcXVxcc1wiKCksO0BeYHt9fl0qKD86XFwuW15cXFxcXFwvXFxbXFxdXFxkXFxzXCIjJygpLDtAXmB7fX5dW15cXFxcXFxbXFxdXFxzXCIoKSw7QF5ge31+XSopKlxcLyk/KD86XFwvfFteXFxcXFxcL1xcW1xcXVxcZFxcc1wiIycoKSw7QF5ge31+XVteXFxcXFxcW1xcXVxcc1wiKCksO0BeYHt9fl0qKSooPz1bXFxcXFxcW1xcXVxcc1wiKCksO0BeYHt9fl18JCkpLztcblxuICBmdW5jdGlvbiBiYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkgfHwgc3RyZWFtLmVhdChcIixcIikpIHJldHVybiBbXCJzcGFjZVwiLCBudWxsXTtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKG51bWJlckxpdGVyYWwpKSByZXR1cm4gW251bGwsIFwibnVtYmVyXCJdO1xuICAgIGlmIChzdHJlYW0ubWF0Y2goY2hhcmFjdGVyTGl0ZXJhbCkpIHJldHVybiBbbnVsbCwgXCJzdHJpbmctMlwiXTtcbiAgICBpZiAoc3RyZWFtLmVhdCgvXlwiLykpIHJldHVybiAoc3RhdGUudG9rZW5pemUgPSBpblN0cmluZykoc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHN0cmVhbS5lYXQoL15bKFxcW3tdLykpIHJldHVybiBbXCJvcGVuXCIsIFwiYnJhY2tldFwiXTtcbiAgICBpZiAoc3RyZWFtLmVhdCgvXlspXFxdfV0vKSkgcmV0dXJuIFtcImNsb3NlXCIsIFwiYnJhY2tldFwiXTtcbiAgICBpZiAoc3RyZWFtLmVhdCgvXjsvKSkge3N0cmVhbS5za2lwVG9FbmQoKTsgcmV0dXJuIFtcInNwYWNlXCIsIFwiY29tbWVudFwiXTt9XG4gICAgaWYgKHN0cmVhbS5lYXQoL15bIydAXmB+XS8pKSByZXR1cm4gW251bGwsIFwibWV0YVwiXTtcblxuICAgIHZhciBtYXRjaGVzID0gc3RyZWFtLm1hdGNoKHF1YWxpZmllZFN5bWJvbCk7XG4gICAgdmFyIHN5bWJvbCA9IG1hdGNoZXMgJiYgbWF0Y2hlc1swXTtcblxuICAgIGlmICghc3ltYm9sKSB7XG4gICAgICAvLyBhZHZhbmNlIHN0cmVhbSBieSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIHNvIHdlIGRvbid0IGdldCBzdHVjay5cbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoZnVuY3Rpb24gKGMpIHtyZXR1cm4gIWlzKGMsIGRlbGltaXRlcik7fSk7XG4gICAgICByZXR1cm4gW251bGwsIFwiZXJyb3JcIl07XG4gICAgfVxuXG4gICAgaWYgKHN5bWJvbCA9PT0gXCJjb21tZW50XCIgJiYgc3RhdGUubGFzdFRva2VuID09PSBcIihcIilcbiAgICAgIHJldHVybiAoc3RhdGUudG9rZW5pemUgPSBpbkNvbW1lbnQpKHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmIChpcyhzeW1ib2wsIGF0b20pIHx8IHN5bWJvbC5jaGFyQXQoMCkgPT09IFwiOlwiKSByZXR1cm4gW1wic3ltYm9sXCIsIFwiYXRvbVwiXTtcbiAgICBpZiAoaXMoc3ltYm9sLCBzcGVjaWFsRm9ybSkgfHwgaXMoc3ltYm9sLCBjb3JlU3ltYm9sKSkgcmV0dXJuIFtcInN5bWJvbFwiLCBcImtleXdvcmRcIl07XG4gICAgaWYgKHN0YXRlLmxhc3RUb2tlbiA9PT0gXCIoXCIpIHJldHVybiBbXCJzeW1ib2xcIiwgXCJidWlsdGluXCJdOyAvLyBvdGhlciBvcGVyYXRvclxuXG4gICAgcmV0dXJuIFtcInN5bWJvbFwiLCBcInZhcmlhYmxlXCJdO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQ7XG5cbiAgICB3aGlsZSAobmV4dCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChuZXh0ID09PSBcIlxcXCJcIiAmJiAhZXNjYXBlZCkge3N0YXRlLnRva2VuaXplID0gYmFzZTsgYnJlYWs7fVxuICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT09IFwiXFxcXFwiO1xuICAgIH1cblxuICAgIHJldHVybiBbbnVsbCwgXCJzdHJpbmdcIl07XG4gIH1cblxuICBmdW5jdGlvbiBpbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBwYXJlbnRoZXNpc0NvdW50ID0gMTtcbiAgICB2YXIgbmV4dDtcblxuICAgIHdoaWxlIChuZXh0ID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYgKG5leHQgPT09IFwiKVwiKSBwYXJlbnRoZXNpc0NvdW50LS07XG4gICAgICBpZiAobmV4dCA9PT0gXCIoXCIpIHBhcmVudGhlc2lzQ291bnQrKztcbiAgICAgIGlmIChwYXJlbnRoZXNpc0NvdW50ID09PSAwKSB7XG4gICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gYmFzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcInNwYWNlXCIsIFwiY29tbWVudFwiXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUxvb2t1cE1hcCh3b3Jkcykge1xuICAgIHZhciBvYmogPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzKHZhbHVlLCB0ZXN0KSB7XG4gICAgaWYgKHRlc3QgaW5zdGFuY2VvZiBSZWdFeHApIHJldHVybiB0ZXN0LnRlc3QodmFsdWUpO1xuICAgIGlmICh0ZXN0IGluc3RhbmNlb2YgT2JqZWN0KSByZXR1cm4gdGVzdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN0eDoge3ByZXY6IG51bGwsIHN0YXJ0OiAwLCBpbmRlbnRUbzogMH0sXG4gICAgICAgIGxhc3RUb2tlbjogbnVsbCxcbiAgICAgICAgdG9rZW5pemU6IGJhc2VcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5zb2woKSAmJiAodHlwZW9mIHN0YXRlLmN0eC5pbmRlbnRUbyAhPT0gXCJudW1iZXJcIikpXG4gICAgICAgIHN0YXRlLmN0eC5pbmRlbnRUbyA9IHN0YXRlLmN0eC5zdGFydCArIDE7XG5cbiAgICAgIHZhciB0eXBlU3R5bGVQYWlyID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVTdHlsZVBhaXJbMF07XG4gICAgICB2YXIgc3R5bGUgPSB0eXBlU3R5bGVQYWlyWzFdO1xuICAgICAgdmFyIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpO1xuXG4gICAgICBpZiAodHlwZSAhPT0gXCJzcGFjZVwiKSB7XG4gICAgICAgIGlmIChzdGF0ZS5sYXN0VG9rZW4gPT09IFwiKFwiICYmIHN0YXRlLmN0eC5pbmRlbnRUbyA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0eXBlID09PSBcInN5bWJvbFwiICYmIGlzKGN1cnJlbnQsIGhhc0JvZHlQYXJhbWV0ZXIpKVxuICAgICAgICAgICAgc3RhdGUuY3R4LmluZGVudFRvID0gc3RhdGUuY3R4LnN0YXJ0ICsgb3B0aW9ucy5pbmRlbnRVbml0O1xuICAgICAgICAgIGVsc2Ugc3RhdGUuY3R4LmluZGVudFRvID0gXCJuZXh0XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuY3R4LmluZGVudFRvID09PSBcIm5leHRcIikge1xuICAgICAgICAgIHN0YXRlLmN0eC5pbmRlbnRUbyA9IHN0cmVhbS5jb2x1bW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLmxhc3RUb2tlbiA9IGN1cnJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcIm9wZW5cIilcbiAgICAgICAgc3RhdGUuY3R4ID0ge3ByZXY6IHN0YXRlLmN0eCwgc3RhcnQ6IHN0cmVhbS5jb2x1bW4oKSwgaW5kZW50VG86IG51bGx9O1xuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gXCJjbG9zZVwiKSBzdGF0ZS5jdHggPSBzdGF0ZS5jdHgucHJldiB8fCBzdGF0ZS5jdHg7XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIHZhciBpID0gc3RhdGUuY3R4LmluZGVudFRvO1xuXG4gICAgICByZXR1cm4gKHR5cGVvZiBpID09PSBcIm51bWJlclwiKSA/XG4gICAgICAgIGkgOlxuICAgICAgICBzdGF0ZS5jdHguc3RhcnQgKyAxO1xuICAgIH0sXG5cbiAgICBjbG9zZUJyYWNrZXRzOiB7cGFpcnM6IFwiKClbXXt9XFxcIlxcXCJcIn0sXG4gICAgbGluZUNvbW1lbnQ6IFwiOztcIlxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1jbG9qdXJlXCIsIFwiY2xvanVyZVwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1jbG9qdXJlc2NyaXB0XCIsIFwiY2xvanVyZVwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2VkblwiLCBcImNsb2p1cmVcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlXG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImNtYWtlXCIsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZhcmlhYmxlX3JlZ2V4ID0gLyh7KT9bYS16QS1aMC05X10rKH0pPy87XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjdXJyZW50LCBwcmV2LCBmb3VuZF92YXIgPSBmYWxzZTtcbiAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJiAoY3VycmVudCA9IHN0cmVhbS5uZXh0KCkpICE9IHN0YXRlLnBlbmRpbmcpIHtcbiAgICAgIGlmIChjdXJyZW50ID09PSAnJCcgJiYgcHJldiAhPSAnXFxcXCcgJiYgc3RhdGUucGVuZGluZyA9PSAnXCInKSB7XG4gICAgICAgIGZvdW5kX3ZhciA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJldiA9IGN1cnJlbnQ7XG4gICAgfVxuICAgIGlmIChmb3VuZF92YXIpIHtcbiAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgfVxuICAgIGlmIChjdXJyZW50ID09IHN0YXRlLnBlbmRpbmcpIHtcbiAgICAgIHN0YXRlLmNvbnRpbnVlU3RyaW5nID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmNvbnRpbnVlU3RyaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbml6ZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgIC8vIEhhdmUgd2UgZm91bmQgYSB2YXJpYWJsZT9cbiAgICBpZiAoY2ggPT09ICckJykge1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCh2YXJpYWJsZV9yZWdleCkpIHtcbiAgICAgICAgcmV0dXJuICd2YXJpYWJsZS0yJztcbiAgICAgIH1cbiAgICAgIHJldHVybiAndmFyaWFibGUnO1xuICAgIH1cbiAgICAvLyBTaG91bGQgd2Ugc3RpbGwgYmUgbG9va2luZyBmb3IgdGhlIGVuZCBvZiBhIHN0cmluZz9cbiAgICBpZiAoc3RhdGUuY29udGludWVTdHJpbmcpIHtcbiAgICAgIC8vIElmIHNvLCBnbyB0aHJvdWdoIHRoZSBsb29wIGFnYWluXG4gICAgICBzdHJlYW0uYmFja1VwKDEpO1xuICAgICAgcmV0dXJuIHRva2VuU3RyaW5nKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICAvLyBEbyB3ZSBqdXN0IGhhdmUgYSBmdW5jdGlvbiBvbiBvdXIgaGFuZHM/XG4gICAgLy8gSW4gJ2NtYWtlX21pbmltdW1fcmVxdWlyZWQgKFZFUlNJT04gMi44LjgpJywgJ2NtYWtlX21pbmltdW1fcmVxdWlyZWQnIGlzIG1hdGNoZWRcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC8oXFxzKyk/XFx3K1xcKC8pIHx8IHN0cmVhbS5tYXRjaCgvKFxccyspP1xcdytcXCBcXCgvKSkge1xuICAgICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICAgIHJldHVybiAnZGVmJztcbiAgICB9XG4gICAgaWYgKGNoID09IFwiI1wiKSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgfVxuICAgIC8vIEhhdmUgd2UgZm91bmQgYSBzdHJpbmc/XG4gICAgaWYgKGNoID09IFwiJ1wiIHx8IGNoID09ICdcIicpIHtcbiAgICAgIC8vIFN0b3JlIHRoZSB0eXBlIChzaW5nbGUgb3IgZG91YmxlKVxuICAgICAgc3RhdGUucGVuZGluZyA9IGNoO1xuICAgICAgLy8gUGVyZm9ybSB0aGUgbG9vcGluZyBmdW5jdGlvbiB0byBmaW5kIHRoZSBlbmRcbiAgICAgIHJldHVybiB0b2tlblN0cmluZyhzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgaWYgKGNoID09ICcoJyB8fCBjaCA9PSAnKScpIHtcbiAgICAgIHJldHVybiAnYnJhY2tldCc7XG4gICAgfVxuICAgIGlmIChjaC5tYXRjaCgvWzAtOV0vKSkge1xuICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgIH1cbiAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHctXS8pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0ge307XG4gICAgICBzdGF0ZS5pbkRlZmluaXRpb24gPSBmYWxzZTtcbiAgICAgIHN0YXRlLmluSW5jbHVkZSA9IGZhbHNlO1xuICAgICAgc3RhdGUuY29udGludWVTdHJpbmcgPSBmYWxzZTtcbiAgICAgIHN0YXRlLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9LFxuICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiB0b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWNtYWtlXCIsIFwiY21ha2VcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLyoqXG4gKiBBdXRob3I6IEdhdXRhbSBNZWh0YVxuICogQnJhbmNoZWQgZnJvbSBDb2RlTWlycm9yJ3MgU2NoZW1lIG1vZGVcbiAqL1xuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJjb2JvbFwiLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBCVUlMVElOID0gXCJidWlsdGluXCIsIENPTU1FTlQgPSBcImNvbW1lbnRcIiwgU1RSSU5HID0gXCJzdHJpbmdcIixcbiAgICAgIEFUT00gPSBcImF0b21cIiwgTlVNQkVSID0gXCJudW1iZXJcIiwgS0VZV09SRCA9IFwia2V5d29yZFwiLCBNT0RUQUcgPSBcImhlYWRlclwiLFxuICAgICAgQ09CT0xMSU5FTlVNID0gXCJkZWZcIiwgUEVSSU9EID0gXCJsaW5rXCI7XG4gIGZ1bmN0aW9uIG1ha2VLZXl3b3JkcyhzdHIpIHtcbiAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KFwiIFwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKSBvYmpbd29yZHNbaV1dID0gdHJ1ZTtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIHZhciBhdG9tcyA9IG1ha2VLZXl3b3JkcyhcIlRSVUUgRkFMU0UgWkVST0VTIFpFUk9TIFpFUk8gU1BBQ0VTIFNQQUNFIExPVy1WQUxVRSBMT1ctVkFMVUVTIFwiKTtcbiAgdmFyIGtleXdvcmRzID0gbWFrZUtleXdvcmRzKFxuICAgICAgXCJBQ0NFUFQgQUNDRVNTIEFDUVVJUkUgQUREIEFERFJFU1MgXCIgK1xuICAgICAgXCJBRFZBTkNJTkcgQUZURVIgQUxJQVMgQUxMIEFMUEhBQkVUIFwiICtcbiAgICAgIFwiQUxQSEFCRVRJQyBBTFBIQUJFVElDLUxPV0VSIEFMUEhBQkVUSUMtVVBQRVIgQUxQSEFOVU1FUklDIEFMUEhBTlVNRVJJQy1FRElURUQgXCIgK1xuICAgICAgXCJBTFNPIEFMVEVSIEFMVEVSTkFURSBBTkQgQU5ZIFwiICtcbiAgICAgIFwiQVJFIEFSRUEgQVJFQVMgQVJJVEhNRVRJQyBBU0NFTkRJTkcgXCIgK1xuICAgICAgXCJBU1NJR04gQVQgQVRUUklCVVRFIEFVVEhPUiBBVVRPIFwiICtcbiAgICAgIFwiQVVUTy1TS0lQIEFVVE9NQVRJQyBCLUFORCBCLUVYT1IgQi1MRVNTIFwiICtcbiAgICAgIFwiQi1OT1QgQi1PUiBCQUNLR1JPVU5ELUNPTE9SIEJBQ0tHUk9VTkQtQ09MT1VSIEJFRVAgXCIgK1xuICAgICAgXCJCRUZPUkUgQkVMTCBCSU5BUlkgQklUIEJJVFMgXCIgK1xuICAgICAgXCJCTEFOSyBCTElOSyBCTE9DSyBCT09MRUFOIEJPVFRPTSBcIiArXG4gICAgICBcIkJZIENBTEwgQ0FOQ0VMIENEIENGIFwiICtcbiAgICAgIFwiQ0ggQ0hBUkFDVEVSIENIQVJBQ1RFUlMgQ0xBU1MgQ0xPQ0stVU5JVFMgXCIgK1xuICAgICAgXCJDTE9TRSBDT0JPTCBDT0RFIENPREUtU0VUIENPTCBcIiArXG4gICAgICBcIkNPTExBVElORyBDT0xVTU4gQ09NTUEgQ09NTUlUIENPTU1JVE1FTlQgXCIgK1xuICAgICAgXCJDT01NT04gQ09NTVVOSUNBVElPTiBDT01QIENPTVAtMCBDT01QLTEgXCIgK1xuICAgICAgXCJDT01QLTIgQ09NUC0zIENPTVAtNCBDT01QLTUgQ09NUC02IFwiICtcbiAgICAgIFwiQ09NUC03IENPTVAtOCBDT01QLTkgQ09NUFVUQVRJT05BTCBDT01QVVRBVElPTkFMLTAgXCIgK1xuICAgICAgXCJDT01QVVRBVElPTkFMLTEgQ09NUFVUQVRJT05BTC0yIENPTVBVVEFUSU9OQUwtMyBDT01QVVRBVElPTkFMLTQgQ09NUFVUQVRJT05BTC01IFwiICtcbiAgICAgIFwiQ09NUFVUQVRJT05BTC02IENPTVBVVEFUSU9OQUwtNyBDT01QVVRBVElPTkFMLTggQ09NUFVUQVRJT05BTC05IENPTVBVVEUgXCIgK1xuICAgICAgXCJDT05GSUdVUkFUSU9OIENPTk5FQ1QgQ09OU09MRSBDT05UQUlORUQgQ09OVEFJTlMgXCIgK1xuICAgICAgXCJDT05URU5UIENPTlRJTlVFIENPTlRST0wgQ09OVFJPTC1BUkVBIENPTlRST0xTIFwiICtcbiAgICAgIFwiQ09OVkVSVElORyBDT1BZIENPUlIgQ09SUkVTUE9ORElORyBDT1VOVCBcIiArXG4gICAgICBcIkNSVCBDUlQtVU5ERVIgQ1VSUkVOQ1kgQ1VSUkVOVCBDVVJTT1IgXCIgK1xuICAgICAgXCJEQVRBIERBVEUgREFURS1DT01QSUxFRCBEQVRFLVdSSVRURU4gREFZIFwiICtcbiAgICAgIFwiREFZLU9GLVdFRUsgREIgREItQUNDRVNTLUNPTlRST0wtS0VZIERCLURBVEEtTkFNRSBEQi1FWENFUFRJT04gXCIgK1xuICAgICAgXCJEQi1GT1JNQVQtTkFNRSBEQi1SRUNPUkQtTkFNRSBEQi1TRVQtTkFNRSBEQi1TVEFUVVMgREJDUyBcIiArXG4gICAgICBcIkRCQ1MtRURJVEVEIERFIERFQlVHLUNPTlRFTlRTIERFQlVHLUlURU0gREVCVUctTElORSBcIiArXG4gICAgICBcIkRFQlVHLU5BTUUgREVCVUctU1VCLTEgREVCVUctU1VCLTIgREVCVUctU1VCLTMgREVCVUdHSU5HIFwiICtcbiAgICAgIFwiREVDSU1BTC1QT0lOVCBERUNMQVJBVElWRVMgREVGQVVMVCBERUxFVEUgREVMSU1JVEVEIFwiICtcbiAgICAgIFwiREVMSU1JVEVSIERFUEVORElORyBERVNDRU5ESU5HIERFU0NSSUJFRCBERVNUSU5BVElPTiBcIiArXG4gICAgICBcIkRFVEFJTCBESVNBQkxFIERJU0NPTk5FQ1QgRElTUExBWSBESVNQTEFZLTEgXCIgK1xuICAgICAgXCJESVNQTEFZLTIgRElTUExBWS0zIERJU1BMQVktNCBESVNQTEFZLTUgRElTUExBWS02IFwiICtcbiAgICAgIFwiRElTUExBWS03IERJU1BMQVktOCBESVNQTEFZLTkgRElWSURFIERJVklTSU9OIFwiICtcbiAgICAgIFwiRE9XTiBEUk9QIERVUExJQ0FURSBEVVBMSUNBVEVTIERZTkFNSUMgXCIgK1xuICAgICAgXCJFQkNESUMgRUdJIEVKRUNUIEVMU0UgRU1JIFwiICtcbiAgICAgIFwiRU1QVFkgRU1QVFktQ0hFQ0sgRU5BQkxFIEVORCBFTkQuIEVORC1BQ0NFUFQgRU5ELUFDQ0VQVC4gXCIgK1xuICAgICAgXCJFTkQtQUREIEVORC1DQUxMIEVORC1DT01QVVRFIEVORC1ERUxFVEUgRU5ELURJU1BMQVkgXCIgK1xuICAgICAgXCJFTkQtRElWSURFIEVORC1FVkFMVUFURSBFTkQtSUYgRU5ELUlOVk9LRSBFTkQtTVVMVElQTFkgXCIgK1xuICAgICAgXCJFTkQtT0YtUEFHRSBFTkQtUEVSRk9STSBFTkQtUkVBRCBFTkQtUkVDRUlWRSBFTkQtUkVUVVJOIFwiICtcbiAgICAgIFwiRU5ELVJFV1JJVEUgRU5ELVNFQVJDSCBFTkQtU1RBUlQgRU5ELVNUUklORyBFTkQtU1VCVFJBQ1QgXCIgK1xuICAgICAgXCJFTkQtVU5TVFJJTkcgRU5ELVdSSVRFIEVORC1YTUwgRU5URVIgRU5UUlkgXCIgK1xuICAgICAgXCJFTlZJUk9OTUVOVCBFT1AgRVFVQUwgRVFVQUxTIEVSQVNFIFwiICtcbiAgICAgIFwiRVJST1IgRVNJIEVWQUxVQVRFIEVWRVJZIEVYQ0VFRFMgXCIgK1xuICAgICAgXCJFWENFUFRJT04gRVhDTFVTSVZFIEVYSVQgRVhURU5EIEVYVEVSTkFMIFwiICtcbiAgICAgIFwiRVhURVJOQUxMWS1ERVNDUklCRUQtS0VZIEZEIEZFVENIIEZJTEUgRklMRS1DT05UUk9MIFwiICtcbiAgICAgIFwiRklMRS1TVFJFQU0gRklMRVMgRklMTEVSIEZJTkFMIEZJTkQgXCIgK1xuICAgICAgXCJGSU5JU0ggRklSU1QgRk9PVElORyBGT1IgRk9SRUdST1VORC1DT0xPUiBcIiArXG4gICAgICBcIkZPUkVHUk9VTkQtQ09MT1VSIEZPUk1BVCBGUkVFIEZST00gRlVMTCBcIiArXG4gICAgICBcIkZVTkNUSU9OIEdFTkVSQVRFIEdFVCBHSVZJTkcgR0xPQkFMIFwiICtcbiAgICAgIFwiR08gR09CQUNLIEdSRUFURVIgR1JPVVAgSEVBRElORyBcIiArXG4gICAgICBcIkhJR0gtVkFMVUUgSElHSC1WQUxVRVMgSElHSExJR0hUIEktTyBJLU8tQ09OVFJPTCBcIiArXG4gICAgICBcIklEIElERU5USUZJQ0FUSU9OIElGIElOIElOREVYIFwiICtcbiAgICAgIFwiSU5ERVgtMSBJTkRFWC0yIElOREVYLTMgSU5ERVgtNCBJTkRFWC01IFwiICtcbiAgICAgIFwiSU5ERVgtNiBJTkRFWC03IElOREVYLTggSU5ERVgtOSBJTkRFWEVEIFwiICtcbiAgICAgIFwiSU5ESUMgSU5ESUNBVEUgSU5ESUNBVE9SIElORElDQVRPUlMgSU5JVElBTCBcIiArXG4gICAgICBcIklOSVRJQUxJWkUgSU5JVElBVEUgSU5QVVQgSU5QVVQtT1VUUFVUIElOU1BFQ1QgXCIgK1xuICAgICAgXCJJTlNUQUxMQVRJT04gSU5UTyBJTlZBTElEIElOVk9LRSBJUyBcIiArXG4gICAgICBcIkpVU1QgSlVTVElGSUVEIEtBTkpJIEtFRVAgS0VZIFwiICtcbiAgICAgIFwiTEFCRUwgTEFTVCBMRCBMRUFESU5HIExFRlQgXCIgK1xuICAgICAgXCJMRUZULUpVU1RJRlkgTEVOR1RIIExFTkdUSC1DSEVDSyBMRVNTIExJQlJBUlkgXCIgK1xuICAgICAgXCJMSUtFIExJTUlUIExJTUlUUyBMSU5BR0UgTElOQUdFLUNPVU5URVIgXCIgK1xuICAgICAgXCJMSU5FIExJTkUtQ09VTlRFUiBMSU5FUyBMSU5LQUdFIExPQ0FMLVNUT1JBR0UgXCIgK1xuICAgICAgXCJMT0NBTEUgTE9DQUxMWSBMT0NLIFwiICtcbiAgICAgIFwiTUVNQkVSIE1FTU9SWSBNRVJHRSBNRVNTQUdFIE1FVEFDTEFTUyBcIiArXG4gICAgICBcIk1PREUgTU9ESUZJRUQgTU9ESUZZIE1PRFVMRVMgTU9WRSBcIiArXG4gICAgICBcIk1VTFRJUExFIE1VTFRJUExZIE5BVElPTkFMIE5BVElWRSBORUdBVElWRSBcIiArXG4gICAgICBcIk5FWFQgTk8gTk8tRUNITyBOT05FIE5PVCBcIiArXG4gICAgICBcIk5VTEwgTlVMTC1LRVktTUFQIE5VTEwtTUFQIE5VTExTIE5VTUJFUiBcIiArXG4gICAgICBcIk5VTUVSSUMgTlVNRVJJQy1FRElURUQgT0JKRUNUIE9CSkVDVC1DT01QVVRFUiBPQ0NVUlMgXCIgK1xuICAgICAgXCJPRiBPRkYgT01JVFRFRCBPTiBPTkxZIFwiICtcbiAgICAgIFwiT1BFTiBPUFRJT05BTCBPUiBPUkRFUiBPUkdBTklaQVRJT04gXCIgK1xuICAgICAgXCJPVEhFUiBPVVRQVVQgT1ZFUkZMT1cgT1dORVIgUEFDS0VELURFQ0lNQUwgXCIgK1xuICAgICAgXCJQQURESU5HIFBBR0UgUEFHRS1DT1VOVEVSIFBBUlNFIFBFUkZPUk0gXCIgK1xuICAgICAgXCJQRiBQSCBQSUMgUElDVFVSRSBQTFVTIFwiICtcbiAgICAgIFwiUE9JTlRFUiBQT1NJVElPTiBQT1NJVElWRSBQUkVGSVggUFJFU0VOVCBcIiArXG4gICAgICBcIlBSSU5USU5HIFBSSU9SIFBST0NFRFVSRSBQUk9DRURVUkUtUE9JTlRFUiBQUk9DRURVUkVTIFwiICtcbiAgICAgIFwiUFJPQ0VFRCBQUk9DRVNTIFBST0NFU1NJTkcgUFJPR1JBTSBQUk9HUkFNLUlEIFwiICtcbiAgICAgIFwiUFJPTVBUIFBST1RFQ1RFRCBQVVJHRSBRVUVVRSBRVU9URSBcIiArXG4gICAgICBcIlFVT1RFUyBSQU5ET00gUkQgUkVBRCBSRUFEWSBcIiArXG4gICAgICBcIlJFQUxNIFJFQ0VJVkUgUkVDT05ORUNUIFJFQ09SRCBSRUNPUkQtTkFNRSBcIiArXG4gICAgICBcIlJFQ09SRFMgUkVDVVJTSVZFIFJFREVGSU5FUyBSRUVMIFJFRkVSRU5DRSBcIiArXG4gICAgICBcIlJFRkVSRU5DRS1NT05JVE9SIFJFRkVSRU5DRVMgUkVMQVRJT04gUkVMQVRJVkUgUkVMRUFTRSBcIiArXG4gICAgICBcIlJFTUFJTkRFUiBSRU1PVkFMIFJFTkFNRVMgUkVQRUFURUQgUkVQTEFDRSBcIiArXG4gICAgICBcIlJFUExBQ0lORyBSRVBPUlQgUkVQT1JUSU5HIFJFUE9SVFMgUkVQT1NJVE9SWSBcIiArXG4gICAgICBcIlJFUVVJUkVEIFJFUlVOIFJFU0VSVkUgUkVTRVQgUkVUQUlOSU5HIFwiICtcbiAgICAgIFwiUkVUUklFVkFMIFJFVFVSTiBSRVRVUk4tQ09ERSBSRVRVUk5JTkcgUkVWRVJTRS1WSURFTyBcIiArXG4gICAgICBcIlJFVkVSU0VEIFJFV0lORCBSRVdSSVRFIFJGIFJIIFwiICtcbiAgICAgIFwiUklHSFQgUklHSFQtSlVTVElGWSBST0xMQkFDSyBST0xMSU5HIFJPVU5ERUQgXCIgK1xuICAgICAgXCJSVU4gU0FNRSBTQ1JFRU4gU0QgU0VBUkNIIFwiICtcbiAgICAgIFwiU0VDVElPTiBTRUNVUkUgU0VDVVJJVFkgU0VHTUVOVCBTRUdNRU5ULUxJTUlUIFwiICtcbiAgICAgIFwiU0VMRUNUIFNFTkQgU0VOVEVOQ0UgU0VQQVJBVEUgU0VRVUVOQ0UgXCIgK1xuICAgICAgXCJTRVFVRU5USUFMIFNFVCBTSEFSRUQgU0lHTiBTSVpFIFwiICtcbiAgICAgIFwiU0tJUDEgU0tJUDIgU0tJUDMgU09SVCBTT1JULU1FUkdFIFwiICtcbiAgICAgIFwiU09SVC1SRVRVUk4gU09VUkNFIFNPVVJDRS1DT01QVVRFUiBTUEFDRS1GSUxMIFwiICtcbiAgICAgIFwiU1BFQ0lBTC1OQU1FUyBTVEFOREFSRCBTVEFOREFSRC0xIFNUQU5EQVJELTIgXCIgK1xuICAgICAgXCJTVEFSVCBTVEFSVElORyBTVEFUVVMgU1RPUCBTVE9SRSBcIiArXG4gICAgICBcIlNUUklORyBTVUItUVVFVUUtMSBTVUItUVVFVUUtMiBTVUItUVVFVUUtMyBTVUItU0NIRU1BIFwiICtcbiAgICAgIFwiU1VCRklMRSBTVUJTVElUVVRFIFNVQlRSQUNUIFNVTSBTVVBQUkVTUyBcIiArXG4gICAgICBcIlNZTUJPTElDIFNZTkMgU1lOQ0hST05JWkVEIFNZU0lOIFNZU09VVCBcIiArXG4gICAgICBcIlRBQkxFIFRBTExZSU5HIFRBUEUgVEVOQU5UIFRFUk1JTkFMIFwiICtcbiAgICAgIFwiVEVSTUlOQVRFIFRFU1QgVEVYVCBUSEFOIFRIRU4gXCIgK1xuICAgICAgXCJUSFJPVUdIIFRIUlUgVElNRSBUSU1FUyBUSVRMRSBcIiArXG4gICAgICBcIlRPIFRPUCBUUkFJTElORyBUUkFJTElORy1TSUdOIFRSQU5TQUNUSU9OIFwiICtcbiAgICAgIFwiVFlQRSBUWVBFREVGIFVOREVSTElORSBVTkVRVUFMIFVOSVQgXCIgK1xuICAgICAgXCJVTlNUUklORyBVTlRJTCBVUCBVUERBVEUgVVBPTiBcIiArXG4gICAgICBcIlVTQUdFIFVTQUdFLU1PREUgVVNFIFVTSU5HIFZBTElEIFwiICtcbiAgICAgIFwiVkFMSURBVEUgVkFMVUUgVkFMVUVTIFZBUllJTkcgVkxSIFwiICtcbiAgICAgIFwiV0FJVCBXSEVOIFdIRU4tQ09NUElMRUQgV0lUSCBXSVRISU4gXCIgK1xuICAgICAgXCJXT1JEUyBXT1JLSU5HLVNUT1JBR0UgV1JJVEUgWE1MIFhNTC1DT0RFIFwiICtcbiAgICAgIFwiWE1MLUVWRU5UIFhNTC1OVEVYVCBYTUwtVEVYVCBaRVJPIFpFUk8tRklMTCBcIiApO1xuXG4gIHZhciBidWlsdGlucyA9IG1ha2VLZXl3b3JkcyhcIi0gKiAqKiAvICsgPCA8PSA9ID4gPj0gXCIpO1xuICB2YXIgdGVzdHMgPSB7XG4gICAgZGlnaXQ6IC9cXGQvLFxuICAgIGRpZ2l0X29yX2NvbG9uOiAvW1xcZDpdLyxcbiAgICBoZXg6IC9bMC05YS1mXS9pLFxuICAgIHNpZ246IC9bKy1dLyxcbiAgICBleHBvbmVudDogL2UvaSxcbiAgICBrZXl3b3JkX2NoYXI6IC9bXlxcc1xcKFxcW1xcO1xcKVxcXV0vLFxuICAgIHN5bWJvbDogL1tcXHcqK1xcLV0vXG4gIH07XG4gIGZ1bmN0aW9uIGlzTnVtYmVyKGNoLCBzdHJlYW0pe1xuICAgIC8vIGhleFxuICAgIGlmICggY2ggPT09ICcwJyAmJiBzdHJlYW0uZWF0KC94L2kpICkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKHRlc3RzLmhleCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gbGVhZGluZyBzaWduXG4gICAgaWYgKCAoIGNoID09ICcrJyB8fCBjaCA9PSAnLScgKSAmJiAoIHRlc3RzLmRpZ2l0LnRlc3Qoc3RyZWFtLnBlZWsoKSkgKSApIHtcbiAgICAgIHN0cmVhbS5lYXQodGVzdHMuc2lnbik7XG4gICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgfVxuICAgIGlmICggdGVzdHMuZGlnaXQudGVzdChjaCkgKSB7XG4gICAgICBzdHJlYW0uZWF0KGNoKTtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSh0ZXN0cy5kaWdpdCk7XG4gICAgICBpZiAoICcuJyA9PSBzdHJlYW0ucGVlaygpKSB7XG4gICAgICAgIHN0cmVhbS5lYXQoJy4nKTtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKHRlc3RzLmRpZ2l0KTtcbiAgICAgIH1cbiAgICAgIGlmICggc3RyZWFtLmVhdCh0ZXN0cy5leHBvbmVudCkgKSB7XG4gICAgICAgIHN0cmVhbS5lYXQodGVzdHMuc2lnbik7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSh0ZXN0cy5kaWdpdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5kZW50U3RhY2s6IG51bGwsXG4gICAgICAgIGluZGVudGF0aW9uOiAwLFxuICAgICAgICBtb2RlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9LFxuICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrID09IG51bGwgJiYgc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBpbmRlbnRhdGlvbiwgYnV0IG9ubHkgaWYgaW5kZW50U3RhY2sgaXMgZW1wdHlcbiAgICAgICAgc3RhdGUuaW5kZW50YXRpb24gPSA2IDsgLy9zdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgIH1cbiAgICAgIC8vIHNraXAgc3BhY2VzXG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgcmV0dXJuVHlwZSA9IG51bGw7XG4gICAgICBzd2l0Y2goc3RhdGUubW9kZSl7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6IC8vIG11bHRpLWxpbmUgc3RyaW5nIHBhcnNpbmcgbW9kZVxuICAgICAgICB2YXIgbmV4dCA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKG5leHQgPT0gXCJcXFwiXCIgfHwgbmV4dCA9PSBcIlxcJ1wiKSB7XG4gICAgICAgICAgICBzdGF0ZS5tb2RlID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuVHlwZSA9IFNUUklORzsgLy8gY29udGludWUgb24gaW4gc3RyaW5nIG1vZGVcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiAvLyBkZWZhdWx0IHBhcnNpbmcgbW9kZVxuICAgICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgICAgICB2YXIgY29sID0gc3RyZWFtLmNvbHVtbigpO1xuICAgICAgICBpZiAoY29sID49IDAgJiYgY29sIDw9IDUpIHtcbiAgICAgICAgICByZXR1cm5UeXBlID0gQ09CT0xMSU5FTlVNO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbCA+PSA3MiAmJiBjb2wgPD0gNzkpIHtcbiAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgcmV0dXJuVHlwZSA9IE1PRFRBRztcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PSBcIipcIiAmJiBjb2wgPT0gNikgeyAvLyBjb21tZW50XG4gICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOyAvLyByZXN0IG9mIHRoZSBsaW5lIGlzIGEgY29tbWVudFxuICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09IFwiXFxcIlwiIHx8IGNoID09IFwiXFwnXCIpIHtcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gXCJzdHJpbmdcIjtcbiAgICAgICAgICByZXR1cm5UeXBlID0gU1RSSU5HO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09IFwiJ1wiICYmICEoIHRlc3RzLmRpZ2l0X29yX2NvbG9uLnRlc3Qoc3RyZWFtLnBlZWsoKSkgKSkge1xuICAgICAgICAgIHJldHVyblR5cGUgPSBBVE9NO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09IFwiLlwiKSB7XG4gICAgICAgICAgcmV0dXJuVHlwZSA9IFBFUklPRDtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihjaCxzdHJlYW0pKXtcbiAgICAgICAgICByZXR1cm5UeXBlID0gTlVNQkVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzdHJlYW0uY3VycmVudCgpLm1hdGNoKHRlc3RzLnN5bWJvbCkpIHtcbiAgICAgICAgICAgIHdoaWxlIChjb2wgPCA3MSkge1xuICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVhdCh0ZXN0cy5zeW1ib2wpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2wrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoa2V5d29yZHMgJiYga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKS50b1VwcGVyQ2FzZSgpKSkge1xuICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEtFWVdPUkQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChidWlsdGlucyAmJiBidWlsdGlucy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvVXBwZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByZXR1cm5UeXBlID0gQlVJTFRJTjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGF0b21zICYmIGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHJldHVyblR5cGUgPSBBVE9NO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm5UeXBlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldHVyblR5cGU7XG4gICAgfSxcbiAgICBpbmRlbnQ6IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrID09IG51bGwpIHJldHVybiBzdGF0ZS5pbmRlbnRhdGlvbjtcbiAgICAgIHJldHVybiBzdGF0ZS5pbmRlbnRTdGFjay5pbmRlbnQ7XG4gICAgfVxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1jb2JvbFwiLCBcImNvYm9sXCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8qKlxuICogTGluayB0byB0aGUgcHJvamVjdCdzIEdpdEh1YiBwYWdlOlxuICogaHR0cHM6Ly9naXRodWIuY29tL3BpY2toYXJkdC9jb2ZmZWVzY3JpcHQtY29kZW1pcnJvci1tb2RlXG4gKi9cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiY29mZmVlc2NyaXB0XCIsIGZ1bmN0aW9uKGNvbmYsIHBhcnNlckNvbmYpIHtcbiAgdmFyIEVSUk9SQ0xBU1MgPSBcImVycm9yXCI7XG5cbiAgZnVuY3Rpb24gd29yZFJlZ2V4cCh3b3Jkcykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXigoXCIgKyB3b3Jkcy5qb2luKFwiKXwoXCIpICsgXCIpKVxcXFxiXCIpO1xuICB9XG5cbiAgdmFyIG9wZXJhdG9ycyA9IC9eKD86LT58PT58XFwrWys9XT98LVtcXC09XT98XFwqW1xcKj1dP3xcXC9bXFwvPV0/fFs9IV09fDxbPjxdPz0/fD4+Pz0/fCU9P3wmPT98XFx8PT98XFxePT98XFx+fCF8XFw/fChvcnxhbmR8XFx8XFx8fCYmfFxcPyk9KS87XG4gIHZhciBkZWxpbWl0ZXJzID0gL14oPzpbKClcXFtcXF17fSw6YD07XXxcXC5cXC4/XFwuPykvO1xuICB2YXIgaWRlbnRpZmllcnMgPSAvXltfQS1aYS16JF1bX0EtWmEteiQwLTldKi87XG4gIHZhciBhdFByb3AgPSAvXkBbX0EtWmEteiRdW19BLVphLXokMC05XSovO1xuXG4gIHZhciB3b3JkT3BlcmF0b3JzID0gd29yZFJlZ2V4cChbXCJhbmRcIiwgXCJvclwiLCBcIm5vdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNcIiwgXCJpc250XCIsIFwiaW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImluc3RhbmNlb2ZcIiwgXCJ0eXBlb2ZcIl0pO1xuICB2YXIgaW5kZW50S2V5d29yZHMgPSBbXCJmb3JcIiwgXCJ3aGlsZVwiLCBcImxvb3BcIiwgXCJpZlwiLCBcInVubGVzc1wiLCBcImVsc2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3dpdGNoXCIsIFwidHJ5XCIsIFwiY2F0Y2hcIiwgXCJmaW5hbGx5XCIsIFwiY2xhc3NcIl07XG4gIHZhciBjb21tb25LZXl3b3JkcyA9IFtcImJyZWFrXCIsIFwiYnlcIiwgXCJjb250aW51ZVwiLCBcImRlYnVnZ2VyXCIsIFwiZGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRvXCIsIFwiaW5cIiwgXCJvZlwiLCBcIm5ld1wiLCBcInJldHVyblwiLCBcInRoZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGhpc1wiLCBcIkBcIiwgXCJ0aHJvd1wiLCBcIndoZW5cIiwgXCJ1bnRpbFwiLCBcImV4dGVuZHNcIl07XG5cbiAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChpbmRlbnRLZXl3b3Jkcy5jb25jYXQoY29tbW9uS2V5d29yZHMpKTtcblxuICBpbmRlbnRLZXl3b3JkcyA9IHdvcmRSZWdleHAoaW5kZW50S2V5d29yZHMpO1xuXG5cbiAgdmFyIHN0cmluZ1ByZWZpeGVzID0gL14oJ3szfXxcXFwiezN9fFsnXFxcIl0pLztcbiAgdmFyIHJlZ2V4UHJlZml4ZXMgPSAvXihcXC97M318XFwvKS87XG4gIHZhciBjb21tb25Db25zdGFudHMgPSBbXCJJbmZpbml0eVwiLCBcIk5hTlwiLCBcInVuZGVmaW5lZFwiLCBcIm51bGxcIiwgXCJ0cnVlXCIsIFwiZmFsc2VcIiwgXCJvblwiLCBcIm9mZlwiLCBcInllc1wiLCBcIm5vXCJdO1xuICB2YXIgY29uc3RhbnRzID0gd29yZFJlZ2V4cChjb21tb25Db25zdGFudHMpO1xuXG4gIC8vIFRva2VuaXplcnNcbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAvLyBIYW5kbGUgc2NvcGUgY2hhbmdlc1xuICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgIGlmIChzdGF0ZS5zY29wZS5hbGlnbiA9PT0gbnVsbCkgc3RhdGUuc2NvcGUuYWxpZ24gPSBmYWxzZTtcbiAgICAgIHZhciBzY29wZU9mZnNldCA9IHN0YXRlLnNjb3BlLm9mZnNldDtcbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgICB2YXIgbGluZU9mZnNldCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgICBpZiAobGluZU9mZnNldCA+IHNjb3BlT2Zmc2V0ICYmIHN0YXRlLnNjb3BlLnR5cGUgPT0gXCJjb2ZmZWVcIikge1xuICAgICAgICAgIHJldHVybiBcImluZGVudFwiO1xuICAgICAgICB9IGVsc2UgaWYgKGxpbmVPZmZzZXQgPCBzY29wZU9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBcImRlZGVudFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNjb3BlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgIGRlZGVudChzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7XG5cbiAgICAvLyBIYW5kbGUgZG9jY28gdGl0bGUgY29tbWVudCAoc2luZ2xlIGxpbmUpXG4gICAgaWYgKHN0cmVhbS5tYXRjaChcIiMjIyNcIikpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgbXVsdGkgbGluZSBjb21tZW50c1xuICAgIGlmIChzdHJlYW0ubWF0Y2goXCIjIyNcIikpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gbG9uZ0NvbW1lbnQ7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgLy8gU2luZ2xlIGxpbmUgY29tbWVudFxuICAgIGlmIChjaCA9PT0gXCIjXCIpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgbnVtYmVyIGxpdGVyYWxzXG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/WzAtOVxcLl0vLCBmYWxzZSkpIHtcbiAgICAgIHZhciBmbG9hdExpdGVyYWwgPSBmYWxzZTtcbiAgICAgIC8vIEZsb2F0c1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/XFxkKlxcLlxcZCsoZVtcXCtcXC1dP1xcZCspPy9pKSkge1xuICAgICAgICBmbG9hdExpdGVyYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/XFxkK1xcLlxcZCovKSkge1xuICAgICAgICBmbG9hdExpdGVyYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/XFwuXFxkKy8pKSB7XG4gICAgICAgIGZsb2F0TGl0ZXJhbCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChmbG9hdExpdGVyYWwpIHtcbiAgICAgICAgLy8gcHJldmVudCBmcm9tIGdldHRpbmcgZXh0cmEgLiBvbiAxLi5cbiAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gXCIuXCIpe1xuICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgICAvLyBJbnRlZ2Vyc1xuICAgICAgdmFyIGludExpdGVyYWwgPSBmYWxzZTtcbiAgICAgIC8vIEhleFxuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/MHhbMC05YS1mXSsvaSkpIHtcbiAgICAgICAgaW50TGl0ZXJhbCA9IHRydWU7XG4gICAgICB9XG4gICAgICAvLyBEZWNpbWFsXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLT9bMS05XVxcZCooZVtcXCtcXC1dP1xcZCspPy8pKSB7XG4gICAgICAgIGludExpdGVyYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gWmVybyBieSBpdHNlbGYgd2l0aCBubyBvdGhlciBwaWVjZSBvZiBudW1iZXIuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLT8wKD8hW1xcZHhdKS9pKSkge1xuICAgICAgICBpbnRMaXRlcmFsID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnRMaXRlcmFsKSB7XG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzdHJpbmdzXG4gICAgaWYgKHN0cmVhbS5tYXRjaChzdHJpbmdQcmVmaXhlcykpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5GYWN0b3J5KHN0cmVhbS5jdXJyZW50KCksIGZhbHNlLCBcInN0cmluZ1wiKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgLy8gSGFuZGxlIHJlZ2V4IGxpdGVyYWxzXG4gICAgaWYgKHN0cmVhbS5tYXRjaChyZWdleFByZWZpeGVzKSkge1xuICAgICAgaWYgKHN0cmVhbS5jdXJyZW50KCkgIT0gXCIvXCIgfHwgc3RyZWFtLm1hdGNoKC9eLipcXC8vLCBmYWxzZSkpIHsgLy8gcHJldmVudCBoaWdobGlnaHQgb2YgZGl2aXNpb25cbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkZhY3Rvcnkoc3RyZWFtLmN1cnJlbnQoKSwgdHJ1ZSwgXCJzdHJpbmctMlwiKTtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgLy8gSGFuZGxlIG9wZXJhdG9ycyBhbmQgZGVsaW1pdGVyc1xuICAgIGlmIChzdHJlYW0ubWF0Y2gob3BlcmF0b3JzKSB8fCBzdHJlYW0ubWF0Y2god29yZE9wZXJhdG9ycykpIHtcbiAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgfVxuICAgIGlmIChzdHJlYW0ubWF0Y2goZGVsaW1pdGVycykpIHtcbiAgICAgIHJldHVybiBcInB1bmN0dWF0aW9uXCI7XG4gICAgfVxuXG4gICAgaWYgKHN0cmVhbS5tYXRjaChjb25zdGFudHMpKSB7XG4gICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgfVxuXG4gICAgaWYgKHN0cmVhbS5tYXRjaChhdFByb3ApIHx8IHN0YXRlLnByb3AgJiYgc3RyZWFtLm1hdGNoKGlkZW50aWZpZXJzKSkge1xuICAgICAgcmV0dXJuIFwicHJvcGVydHlcIjtcbiAgICB9XG5cbiAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzKSkge1xuICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgIH1cblxuICAgIGlmIChzdHJlYW0ubWF0Y2goaWRlbnRpZmllcnMpKSB7XG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBub24tZGV0ZWN0ZWQgaXRlbXNcbiAgICBzdHJlYW0ubmV4dCgpO1xuICAgIHJldHVybiBFUlJPUkNMQVNTO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5GYWN0b3J5KGRlbGltaXRlciwgc2luZ2xlbGluZSwgb3V0Y2xhc3MpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXidcIlxcL1xcXFxdLyk7XG4gICAgICAgIGlmIChzdHJlYW0uZWF0KFwiXFxcXFwiKSkge1xuICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgaWYgKHNpbmdsZWxpbmUgJiYgc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0Y2xhc3M7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChkZWxpbWl0ZXIpKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgICAgcmV0dXJuIG91dGNsYXNzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbS5lYXQoL1snXCJcXC9dLyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzaW5nbGVsaW5lKSB7XG4gICAgICAgIGlmIChwYXJzZXJDb25mLnNpbmdsZUxpbmVTdHJpbmdFcnJvcnMpIHtcbiAgICAgICAgICBvdXRjbGFzcyA9IEVSUk9SQ0xBU1M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXRjbGFzcztcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9uZ0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1teI10vKTtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goXCIjIyNcIikpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3RyZWFtLmVhdFdoaWxlKFwiI1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5kZW50KHN0cmVhbSwgc3RhdGUsIHR5cGUpIHtcbiAgICB0eXBlID0gdHlwZSB8fCBcImNvZmZlZVwiO1xuICAgIHZhciBvZmZzZXQgPSAwLCBhbGlnbiA9IGZhbHNlLCBhbGlnbk9mZnNldCA9IG51bGw7XG4gICAgZm9yICh2YXIgc2NvcGUgPSBzdGF0ZS5zY29wZTsgc2NvcGU7IHNjb3BlID0gc2NvcGUucHJldikge1xuICAgICAgaWYgKHNjb3BlLnR5cGUgPT09IFwiY29mZmVlXCIgfHwgc2NvcGUudHlwZSA9PSBcIn1cIikge1xuICAgICAgICBvZmZzZXQgPSBzY29wZS5vZmZzZXQgKyBjb25mLmluZGVudFVuaXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZSAhPT0gXCJjb2ZmZWVcIikge1xuICAgICAgYWxpZ24gPSBudWxsO1xuICAgICAgYWxpZ25PZmZzZXQgPSBzdHJlYW0uY29sdW1uKCkgKyBzdHJlYW0uY3VycmVudCgpLmxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLnNjb3BlLmFsaWduKSB7XG4gICAgICBzdGF0ZS5zY29wZS5hbGlnbiA9IGZhbHNlO1xuICAgIH1cbiAgICBzdGF0ZS5zY29wZSA9IHtcbiAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIHByZXY6IHN0YXRlLnNjb3BlLFxuICAgICAgYWxpZ246IGFsaWduLFxuICAgICAgYWxpZ25PZmZzZXQ6IGFsaWduT2Zmc2V0XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZGVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKCFzdGF0ZS5zY29wZS5wcmV2KSByZXR1cm47XG4gICAgaWYgKHN0YXRlLnNjb3BlLnR5cGUgPT09IFwiY29mZmVlXCIpIHtcbiAgICAgIHZhciBfaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgICB2YXIgbWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgc2NvcGUgPSBzdGF0ZS5zY29wZTsgc2NvcGU7IHNjb3BlID0gc2NvcGUucHJldikge1xuICAgICAgICBpZiAoX2luZGVudCA9PT0gc2NvcGUub2Zmc2V0KSB7XG4gICAgICAgICAgbWF0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghbWF0Y2hlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChzdGF0ZS5zY29wZS5wcmV2ICYmIHN0YXRlLnNjb3BlLm9mZnNldCAhPT0gX2luZGVudCkge1xuICAgICAgICBzdGF0ZS5zY29wZSA9IHN0YXRlLnNjb3BlLnByZXY7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnNjb3BlID0gc3RhdGUuc2NvcGUucHJldjtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkxleGVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB2YXIgY3VycmVudCA9IHN0cmVhbS5jdXJyZW50KCk7XG5cbiAgICAvLyBIYW5kbGUgc2NvcGUgY2hhbmdlcy5cbiAgICBpZiAoY3VycmVudCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgc3RhdGUuZGVkZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCgoY3VycmVudCA9PT0gXCItPlwiIHx8IGN1cnJlbnQgPT09IFwiPT5cIikgJiYgc3RyZWFtLmVvbCgpKVxuICAgICAgICB8fCBzdHlsZSA9PT0gXCJpbmRlbnRcIikge1xuICAgICAgaW5kZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICB2YXIgZGVsaW1pdGVyX2luZGV4ID0gXCJbKHtcIi5pbmRleE9mKGN1cnJlbnQpO1xuICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT09IC0xKSB7XG4gICAgICBpbmRlbnQoc3RyZWFtLCBzdGF0ZSwgXCJdKX1cIi5zbGljZShkZWxpbWl0ZXJfaW5kZXgsIGRlbGltaXRlcl9pbmRleCsxKSk7XG4gICAgfVxuICAgIGlmIChpbmRlbnRLZXl3b3Jkcy5leGVjKGN1cnJlbnQpKXtcbiAgICAgIGluZGVudChzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnQgPT0gXCJ0aGVuXCIpe1xuICAgICAgZGVkZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuXG4gICAgaWYgKHN0eWxlID09PSBcImRlZGVudFwiKSB7XG4gICAgICBpZiAoZGVkZW50KHN0cmVhbSwgc3RhdGUpKSB7XG4gICAgICAgIHJldHVybiBFUlJPUkNMQVNTO1xuICAgICAgfVxuICAgIH1cbiAgICBkZWxpbWl0ZXJfaW5kZXggPSBcIl0pfVwiLmluZGV4T2YoY3VycmVudCk7XG4gICAgaWYgKGRlbGltaXRlcl9pbmRleCAhPT0gLTEpIHtcbiAgICAgIHdoaWxlIChzdGF0ZS5zY29wZS50eXBlID09IFwiY29mZmVlXCIgJiYgc3RhdGUuc2NvcGUucHJldilcbiAgICAgICAgc3RhdGUuc2NvcGUgPSBzdGF0ZS5zY29wZS5wcmV2O1xuICAgICAgaWYgKHN0YXRlLnNjb3BlLnR5cGUgPT0gY3VycmVudClcbiAgICAgICAgc3RhdGUuc2NvcGUgPSBzdGF0ZS5zY29wZS5wcmV2O1xuICAgIH1cbiAgICBpZiAoc3RhdGUuZGVkZW50ICYmIHN0cmVhbS5lb2woKSkge1xuICAgICAgaWYgKHN0YXRlLnNjb3BlLnR5cGUgPT0gXCJjb2ZmZWVcIiAmJiBzdGF0ZS5zY29wZS5wcmV2KVxuICAgICAgICBzdGF0ZS5zY29wZSA9IHN0YXRlLnNjb3BlLnByZXY7XG4gICAgICBzdGF0ZS5kZWRlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxuICB2YXIgZXh0ZXJuYWwgPSB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSxcbiAgICAgICAgc2NvcGU6IHtvZmZzZXQ6YmFzZWNvbHVtbiB8fCAwLCB0eXBlOlwiY29mZmVlXCIsIHByZXY6IG51bGwsIGFsaWduOiBmYWxzZX0sXG4gICAgICAgIHByb3A6IGZhbHNlLFxuICAgICAgICBkZWRlbnQ6IDBcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgZmlsbEFsaWduID0gc3RhdGUuc2NvcGUuYWxpZ24gPT09IG51bGwgJiYgc3RhdGUuc2NvcGU7XG4gICAgICBpZiAoZmlsbEFsaWduICYmIHN0cmVhbS5zb2woKSkgZmlsbEFsaWduLmFsaWduID0gZmFsc2U7XG5cbiAgICAgIHZhciBzdHlsZSA9IHRva2VuTGV4ZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBpZiAoc3R5bGUgJiYgc3R5bGUgIT0gXCJjb21tZW50XCIpIHtcbiAgICAgICAgaWYgKGZpbGxBbGlnbikgZmlsbEFsaWduLmFsaWduID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucHJvcCA9IHN0eWxlID09IFwicHVuY3R1YXRpb25cIiAmJiBzdHJlYW0uY3VycmVudCgpID09IFwiLlwiXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dCkge1xuICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IHRva2VuQmFzZSkgcmV0dXJuIDA7XG4gICAgICB2YXIgc2NvcGUgPSBzdGF0ZS5zY29wZTtcbiAgICAgIHZhciBjbG9zZXIgPSB0ZXh0ICYmIFwiXSl9XCIuaW5kZXhPZih0ZXh0LmNoYXJBdCgwKSkgPiAtMTtcbiAgICAgIGlmIChjbG9zZXIpIHdoaWxlIChzY29wZS50eXBlID09IFwiY29mZmVlXCIgJiYgc2NvcGUucHJldikgc2NvcGUgPSBzY29wZS5wcmV2O1xuICAgICAgdmFyIGNsb3NlcyA9IGNsb3NlciAmJiBzY29wZS50eXBlID09PSB0ZXh0LmNoYXJBdCgwKTtcbiAgICAgIGlmIChzY29wZS5hbGlnbilcbiAgICAgICAgcmV0dXJuIHNjb3BlLmFsaWduT2Zmc2V0IC0gKGNsb3NlcyA/IDEgOiAwKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIChjbG9zZXMgPyBzY29wZS5wcmV2IDogc2NvcGUpLm9mZnNldDtcbiAgICB9LFxuXG4gICAgbGluZUNvbW1lbnQ6IFwiI1wiLFxuICAgIGZvbGQ6IFwiaW5kZW50XCJcbiAgfTtcbiAgcmV0dXJuIGV4dGVybmFsO1xufSk7XG5cbi8vIElBTkEgcmVnaXN0ZXJlZCBtZWRpYSB0eXBlXG4vLyBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy9cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3ZuZC5jb2ZmZWVzY3JpcHRcIiwgXCJjb2ZmZWVzY3JpcHRcIik7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1jb2ZmZWVzY3JpcHRcIiwgXCJjb2ZmZWVzY3JpcHRcIik7XG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L2NvZmZlZXNjcmlwdFwiLCBcImNvZmZlZXNjcmlwdFwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImNvbW1vbmxpc3BcIiwgZnVuY3Rpb24gKGNvbmZpZykge1xuICB2YXIgc3BlY2lhbEZvcm0gPSAvXihibG9ja3xsZXQqfHJldHVybi1mcm9tfGNhdGNofGxvYWQtdGltZS12YWx1ZXxzZXRxfGV2YWwtd2hlbnxsb2NhbGx5fHN5bWJvbC1tYWNyb2xldHxmbGV0fG1hY3JvbGV0fHRhZ2JvZHl8ZnVuY3Rpb258bXVsdGlwbGUtdmFsdWUtY2FsbHx0aGV8Z298bXVsdGlwbGUtdmFsdWUtcHJvZzF8dGhyb3d8aWZ8cHJvZ258dW53aW5kLXByb3RlY3R8bGFiZWxzfHByb2d2fGxldHxxdW90ZSkkLztcbiAgdmFyIGFzc3VtZUJvZHkgPSAvXndpdGh8XmRlZnxeZG98XnByb2d8Y2FzZSR8XmNvbmQkfGJpbmQkfHdoZW4kfHVubGVzcyQvO1xuICB2YXIgbnVtTGl0ZXJhbCA9IC9eKD86WytcXC1dPyg/OlxcZCt8XFxkKlxcLlxcZCspKD86W2VmZF1bK1xcLV0/XFxkKyk/fFsrXFwtXT9cXGQrKD86XFwvWytcXC1dP1xcZCspP3wjYlsrXFwtXT9bMDFdK3wjb1srXFwtXT9bMC03XSt8I3hbK1xcLV0/W1xcZGEtZl0rKS87XG4gIHZhciBzeW1ib2wgPSAvW15cXHMnYCxAKClcXFtcXF1cIjtdLztcbiAgdmFyIHR5cGU7XG5cbiAgZnVuY3Rpb24gcmVhZFN5bShzdHJlYW0pIHtcbiAgICB2YXIgY2g7XG4gICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYgKGNoID09IFwiXFxcXFwiKSBzdHJlYW0ubmV4dCgpO1xuICAgICAgZWxzZSBpZiAoIXN5bWJvbC50ZXN0KGNoKSkgeyBzdHJlYW0uYmFja1VwKDEpOyBicmVhazsgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyZWFtLmN1cnJlbnQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge3R5cGUgPSBcIndzXCI7IHJldHVybiBudWxsO31cbiAgICBpZiAoc3RyZWFtLm1hdGNoKG51bUxpdGVyYWwpKSByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgIGlmIChjaCA9PSBcIlxcXFxcIikgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgaWYgKGNoID09ICdcIicpIHJldHVybiAoc3RhdGUudG9rZW5pemUgPSBpblN0cmluZykoc3RyZWFtLCBzdGF0ZSk7XG4gICAgZWxzZSBpZiAoY2ggPT0gXCIoXCIpIHsgdHlwZSA9IFwib3BlblwiOyByZXR1cm4gXCJicmFja2V0XCI7IH1cbiAgICBlbHNlIGlmIChjaCA9PSBcIilcIiB8fCBjaCA9PSBcIl1cIikgeyB0eXBlID0gXCJjbG9zZVwiOyByZXR1cm4gXCJicmFja2V0XCI7IH1cbiAgICBlbHNlIGlmIChjaCA9PSBcIjtcIikgeyBzdHJlYW0uc2tpcFRvRW5kKCk7IHR5cGUgPSBcIndzXCI7IHJldHVybiBcImNvbW1lbnRcIjsgfVxuICAgIGVsc2UgaWYgKC9bJ2AsQF0vLnRlc3QoY2gpKSByZXR1cm4gbnVsbDtcbiAgICBlbHNlIGlmIChjaCA9PSBcInxcIikge1xuICAgICAgaWYgKHN0cmVhbS5za2lwVG8oXCJ8XCIpKSB7IHN0cmVhbS5uZXh0KCk7IHJldHVybiBcInN5bWJvbFwiOyB9XG4gICAgICBlbHNlIHsgc3RyZWFtLnNraXBUb0VuZCgpOyByZXR1cm4gXCJlcnJvclwiOyB9XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIiNcIikge1xuICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICAgIGlmIChjaCA9PSBcIihcIikgeyB0eXBlID0gXCJvcGVuXCI7IHJldHVybiBcImJyYWNrZXRcIjsgfVxuICAgICAgZWxzZSBpZiAoL1srXFwtPVxcLiddLy50ZXN0KGNoKSkgcmV0dXJuIG51bGw7XG4gICAgICBlbHNlIGlmICgvXFxkLy50ZXN0KGNoKSAmJiBzdHJlYW0ubWF0Y2goL15cXGQqIy8pKSByZXR1cm4gbnVsbDtcbiAgICAgIGVsc2UgaWYgKGNoID09IFwifFwiKSByZXR1cm4gKHN0YXRlLnRva2VuaXplID0gaW5Db21tZW50KShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGVsc2UgaWYgKGNoID09IFwiOlwiKSB7IHJlYWRTeW0oc3RyZWFtKTsgcmV0dXJuIFwibWV0YVwiOyB9XG4gICAgICBlbHNlIGlmIChjaCA9PSBcIlxcXFxcIikgeyBzdHJlYW0ubmV4dCgpOyByZWFkU3ltKHN0cmVhbSk7IHJldHVybiBcInN0cmluZy0yXCIgfVxuICAgICAgZWxzZSByZXR1cm4gXCJlcnJvclwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbmFtZSA9IHJlYWRTeW0oc3RyZWFtKTtcbiAgICAgIGlmIChuYW1lID09IFwiLlwiKSByZXR1cm4gbnVsbDtcbiAgICAgIHR5cGUgPSBcInN5bWJvbFwiO1xuICAgICAgaWYgKG5hbWUgPT0gXCJuaWxcIiB8fCBuYW1lID09IFwidFwiIHx8IG5hbWUuY2hhckF0KDApID09IFwiOlwiKSByZXR1cm4gXCJhdG9tXCI7XG4gICAgICBpZiAoc3RhdGUubGFzdFR5cGUgPT0gXCJvcGVuXCIgJiYgKHNwZWNpYWxGb3JtLnRlc3QobmFtZSkgfHwgYXNzdW1lQm9keS50ZXN0KG5hbWUpKSkgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09IFwiJlwiKSByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluU3RyaW5nKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0O1xuICAgIHdoaWxlIChuZXh0ID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYgKG5leHQgPT0gJ1wiJyAmJiAhZXNjYXBlZCkgeyBzdGF0ZS50b2tlbml6ZSA9IGJhc2U7IGJyZWFrOyB9XG4gICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gIH1cblxuICBmdW5jdGlvbiBpbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBuZXh0LCBsYXN0O1xuICAgIHdoaWxlIChuZXh0ID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYgKG5leHQgPT0gXCIjXCIgJiYgbGFzdCA9PSBcInxcIikgeyBzdGF0ZS50b2tlbml6ZSA9IGJhc2U7IGJyZWFrOyB9XG4gICAgICBsYXN0ID0gbmV4dDtcbiAgICB9XG4gICAgdHlwZSA9IFwid3NcIjtcbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7Y3R4OiB7cHJldjogbnVsbCwgc3RhcnQ6IDAsIGluZGVudFRvOiAwfSwgbGFzdFR5cGU6IG51bGwsIHRva2VuaXplOiBiYXNlfTtcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHR5cGVvZiBzdGF0ZS5jdHguaW5kZW50VG8gIT0gXCJudW1iZXJcIilcbiAgICAgICAgc3RhdGUuY3R4LmluZGVudFRvID0gc3RhdGUuY3R4LnN0YXJ0ICsgMTtcblxuICAgICAgdHlwZSA9IG51bGw7XG4gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmICh0eXBlICE9IFwid3NcIikge1xuICAgICAgICBpZiAoc3RhdGUuY3R4LmluZGVudFRvID09IG51bGwpIHtcbiAgICAgICAgICBpZiAodHlwZSA9PSBcInN5bWJvbFwiICYmIGFzc3VtZUJvZHkudGVzdChzdHJlYW0uY3VycmVudCgpKSlcbiAgICAgICAgICAgIHN0YXRlLmN0eC5pbmRlbnRUbyA9IHN0YXRlLmN0eC5zdGFydCArIGNvbmZpZy5pbmRlbnRVbml0O1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN0YXRlLmN0eC5pbmRlbnRUbyA9IFwibmV4dFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmN0eC5pbmRlbnRUbyA9PSBcIm5leHRcIikge1xuICAgICAgICAgIHN0YXRlLmN0eC5pbmRlbnRUbyA9IHN0cmVhbS5jb2x1bW4oKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5sYXN0VHlwZSA9IHR5cGU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBcIm9wZW5cIikgc3RhdGUuY3R4ID0ge3ByZXY6IHN0YXRlLmN0eCwgc3RhcnQ6IHN0cmVhbS5jb2x1bW4oKSwgaW5kZW50VG86IG51bGx9O1xuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcImNsb3NlXCIpIHN0YXRlLmN0eCA9IHN0YXRlLmN0eC5wcmV2IHx8IHN0YXRlLmN0eDtcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbiAoc3RhdGUsIF90ZXh0QWZ0ZXIpIHtcbiAgICAgIHZhciBpID0gc3RhdGUuY3R4LmluZGVudFRvO1xuICAgICAgcmV0dXJuIHR5cGVvZiBpID09IFwibnVtYmVyXCIgPyBpIDogc3RhdGUuY3R4LnN0YXJ0ICsgMTtcbiAgICB9LFxuXG4gICAgY2xvc2VCcmFja2V0czoge3BhaXJzOiBcIigpW117fVxcXCJcXFwiXCJ9LFxuICAgIGxpbmVDb21tZW50OiBcIjs7XCIsXG4gICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiI3xcIixcbiAgICBibG9ja0NvbW1lbnRFbmQ6IFwifCNcIlxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1jb21tb24tbGlzcFwiLCBcImNvbW1vbmxpc3BcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiY3J5c3RhbFwiLCBmdW5jdGlvbihjb25maWcpIHtcbiAgICBmdW5jdGlvbiB3b3JkUmVnRXhwKHdvcmRzLCBlbmQpIHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKChlbmQgPyBcIlwiIDogXCJeXCIpICsgXCIoPzpcIiArIHdvcmRzLmpvaW4oXCJ8XCIpICsgXCIpXCIgKyAoZW5kID8gXCIkXCIgOiBcIlxcXFxiXCIpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGFpbih0b2tlbml6ZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbml6ZSk7XG4gICAgICByZXR1cm4gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgdmFyIG9wZXJhdG9ycyA9IC9eKD86Wy0rLyV8Jl5dfFxcKlxcKj98Wzw+XXsyfSkvO1xuICAgIHZhciBjb25kaXRpb25hbE9wZXJhdG9ycyA9IC9eKD86Wz0hXX58PT09fDw9PnxbPD49IV09P3xbfCZdezJ9fH4pLztcbiAgICB2YXIgaW5kZXhpbmdPcGVyYXRvcnMgPSAvXig/OlxcW1xcXVs/PV0/KS87XG4gICAgdmFyIGFub3RoZXJPcGVyYXRvcnMgPSAvXig/OlxcLig/OlxcLnsyfSk/fC0+fFs/Ol0pLztcbiAgICB2YXIgaWRlbnRzID0gL15bYS16X1xcdTAwOUYtXFx1RkZGRl1bYS16QS1aMC05X1xcdTAwOUYtXFx1RkZGRl0qLztcbiAgICB2YXIgdHlwZXMgPSAvXltBLVpfXFx1MDA5Ri1cXHVGRkZGXVthLXpBLVowLTlfXFx1MDA5Ri1cXHVGRkZGXSovO1xuICAgIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdFeHAoW1xuICAgICAgXCJhYnN0cmFjdFwiLCBcImFsaWFzXCIsIFwiYXNcIiwgXCJhc21cIiwgXCJiZWdpblwiLCBcImJyZWFrXCIsIFwiY2FzZVwiLCBcImNsYXNzXCIsIFwiZGVmXCIsIFwiZG9cIixcbiAgICAgIFwiZWxzZVwiLCBcImVsc2lmXCIsIFwiZW5kXCIsIFwiZW5zdXJlXCIsIFwiZW51bVwiLCBcImV4dGVuZFwiLCBcImZvclwiLCBcImZ1blwiLCBcImlmXCIsXG4gICAgICBcImluY2x1ZGVcIiwgXCJpbnN0YW5jZV9zaXplb2ZcIiwgXCJsaWJcIiwgXCJtYWNyb1wiLCBcIm1vZHVsZVwiLCBcIm5leHRcIiwgXCJvZlwiLCBcIm91dFwiLCBcInBvaW50ZXJvZlwiLFxuICAgICAgXCJwcml2YXRlXCIsIFwicHJvdGVjdGVkXCIsIFwicmVzY3VlXCIsIFwicmV0dXJuXCIsIFwicmVxdWlyZVwiLCBcInNlbGVjdFwiLCBcInNpemVvZlwiLCBcInN0cnVjdFwiLFxuICAgICAgXCJzdXBlclwiLCBcInRoZW5cIiwgXCJ0eXBlXCIsIFwidHlwZW9mXCIsIFwidW5pbml0aWFsaXplZFwiLCBcInVuaW9uXCIsIFwidW5sZXNzXCIsIFwidW50aWxcIiwgXCJ3aGVuXCIsIFwid2hpbGVcIiwgXCJ3aXRoXCIsXG4gICAgICBcInlpZWxkXCIsIFwiX19ESVJfX1wiLCBcIl9fRU5EX0xJTkVfX1wiLCBcIl9fRklMRV9fXCIsIFwiX19MSU5FX19cIlxuICAgIF0pO1xuICAgIHZhciBhdG9tV29yZHMgPSB3b3JkUmVnRXhwKFtcInRydWVcIiwgXCJmYWxzZVwiLCBcIm5pbFwiLCBcInNlbGZcIl0pO1xuICAgIHZhciBpbmRlbnRLZXl3b3Jkc0FycmF5ID0gW1xuICAgICAgXCJkZWZcIiwgXCJmdW5cIiwgXCJtYWNyb1wiLFxuICAgICAgXCJjbGFzc1wiLCBcIm1vZHVsZVwiLCBcInN0cnVjdFwiLCBcImxpYlwiLCBcImVudW1cIiwgXCJ1bmlvblwiLFxuICAgICAgXCJkb1wiLCBcImZvclwiXG4gICAgXTtcbiAgICB2YXIgaW5kZW50S2V5d29yZHMgPSB3b3JkUmVnRXhwKGluZGVudEtleXdvcmRzQXJyYXkpO1xuICAgIHZhciBpbmRlbnRFeHByZXNzaW9uS2V5d29yZHNBcnJheSA9IFtcImlmXCIsIFwidW5sZXNzXCIsIFwiY2FzZVwiLCBcIndoaWxlXCIsIFwidW50aWxcIiwgXCJiZWdpblwiLCBcInRoZW5cIl07XG4gICAgdmFyIGluZGVudEV4cHJlc3Npb25LZXl3b3JkcyA9IHdvcmRSZWdFeHAoaW5kZW50RXhwcmVzc2lvbktleXdvcmRzQXJyYXkpO1xuICAgIHZhciBkZWRlbnRLZXl3b3Jkc0FycmF5ID0gW1wiZW5kXCIsIFwiZWxzZVwiLCBcImVsc2lmXCIsIFwicmVzY3VlXCIsIFwiZW5zdXJlXCJdO1xuICAgIHZhciBkZWRlbnRLZXl3b3JkcyA9IHdvcmRSZWdFeHAoZGVkZW50S2V5d29yZHNBcnJheSk7XG4gICAgdmFyIGRlZGVudFB1bmN0dWFsc0FycmF5ID0gW1wiXFxcXClcIiwgXCJcXFxcfVwiLCBcIlxcXFxdXCJdO1xuICAgIHZhciBkZWRlbnRQdW5jdHVhbHMgPSBuZXcgUmVnRXhwKFwiXig/OlwiICsgZGVkZW50UHVuY3R1YWxzQXJyYXkuam9pbihcInxcIikgKyBcIikkXCIpO1xuICAgIHZhciBuZXh0VG9rZW5pemVyID0ge1xuICAgICAgXCJkZWZcIjogdG9rZW5Gb2xsb3dJZGVudCwgXCJmdW5cIjogdG9rZW5Gb2xsb3dJZGVudCwgXCJtYWNyb1wiOiB0b2tlbk1hY3JvRGVmLFxuICAgICAgXCJjbGFzc1wiOiB0b2tlbkZvbGxvd1R5cGUsIFwibW9kdWxlXCI6IHRva2VuRm9sbG93VHlwZSwgXCJzdHJ1Y3RcIjogdG9rZW5Gb2xsb3dUeXBlLFxuICAgICAgXCJsaWJcIjogdG9rZW5Gb2xsb3dUeXBlLCBcImVudW1cIjogdG9rZW5Gb2xsb3dUeXBlLCBcInVuaW9uXCI6IHRva2VuRm9sbG93VHlwZVxuICAgIH07XG4gICAgdmFyIG1hdGNoaW5nID0ge1wiW1wiOiBcIl1cIiwgXCJ7XCI6IFwifVwiLCBcIihcIjogXCIpXCIsIFwiPFwiOiBcIj5cIn07XG5cbiAgICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWNyb3NcbiAgICAgIGlmIChzdGF0ZS5sYXN0VG9rZW4gIT0gXCJcXFxcXCIgJiYgc3RyZWFtLm1hdGNoKFwieyVcIiwgZmFsc2UpKSB7XG4gICAgICAgIHJldHVybiBjaGFpbih0b2tlbk1hY3JvKFwiJVwiLCBcIiVcIiksIHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUubGFzdFRva2VuICE9IFwiXFxcXFwiICYmIHN0cmVhbS5tYXRjaChcInt7XCIsIGZhbHNlKSkge1xuICAgICAgICByZXR1cm4gY2hhaW4odG9rZW5NYWNybyhcIntcIiwgXCJ9XCIpLCBzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29tbWVudHNcbiAgICAgIGlmIChzdHJlYW0ucGVlaygpID09IFwiI1wiKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfVxuXG4gICAgICAvLyBWYXJpYWJsZXMgYW5kIGtleXdvcmRzXG4gICAgICB2YXIgbWF0Y2hlZDtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goaWRlbnRzKSkge1xuICAgICAgICBzdHJlYW0uZWF0KC9bPyFdLyk7XG5cbiAgICAgICAgbWF0Y2hlZCA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgICAgIGlmIChzdHJlYW0uZWF0KFwiOlwiKSkge1xuICAgICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sYXN0VG9rZW4gPT0gXCIuXCIpIHtcbiAgICAgICAgICByZXR1cm4gXCJwcm9wZXJ0eVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGtleXdvcmRzLnRlc3QobWF0Y2hlZCkpIHtcbiAgICAgICAgICBpZiAoaW5kZW50S2V5d29yZHMudGVzdChtYXRjaGVkKSkge1xuICAgICAgICAgICAgaWYgKCEobWF0Y2hlZCA9PSBcImZ1blwiICYmIHN0YXRlLmJsb2Nrcy5pbmRleE9mKFwibGliXCIpID49IDApICYmICEobWF0Y2hlZCA9PSBcImRlZlwiICYmIHN0YXRlLmxhc3RUb2tlbiA9PSBcImFic3RyYWN0XCIpKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5wdXNoKG1hdGNoZWQpO1xuICAgICAgICAgICAgICBzdGF0ZS5jdXJyZW50SW5kZW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICgoc3RhdGUubGFzdFN0eWxlID09IFwib3BlcmF0b3JcIiB8fCAhc3RhdGUubGFzdFN0eWxlKSAmJiBpbmRlbnRFeHByZXNzaW9uS2V5d29yZHMudGVzdChtYXRjaGVkKSkge1xuICAgICAgICAgICAgc3RhdGUuYmxvY2tzLnB1c2gobWF0Y2hlZCk7XG4gICAgICAgICAgICBzdGF0ZS5jdXJyZW50SW5kZW50ICs9IDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChtYXRjaGVkID09IFwiZW5kXCIpIHtcbiAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5wb3AoKTtcbiAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRJbmRlbnQgLT0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV4dFRva2VuaXplci5oYXNPd25Qcm9wZXJ0eShtYXRjaGVkKSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaChuZXh0VG9rZW5pemVyW21hdGNoZWRdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoYXRvbVdvcmRzLnRlc3QobWF0Y2hlZCkpIHtcbiAgICAgICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGFzcyB2YXJpYWJsZXMgYW5kIGluc3RhbmNlIHZhcmlhYmxlc1xuICAgICAgLy8gb3IgYXR0cmlidXRlc1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCJAXCIpKSB7XG4gICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09IFwiW1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGNoYWluKHRva2VuTmVzdChcIltcIiwgXCJdXCIsIFwibWV0YVwiKSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW0uZWF0KFwiQFwiKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKGlkZW50cykgfHwgc3RyZWFtLm1hdGNoKHR5cGVzKTtcbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGUtMlwiO1xuICAgICAgfVxuXG4gICAgICAvLyBDb25zdGFudHMgYW5kIHR5cGVzXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHR5cGVzKSkge1xuICAgICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICAgIH1cblxuICAgICAgLy8gU3ltYm9scyBvciAnOicgb3BlcmF0b3JcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiOlwiKSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIlxcXCJcIikpIHtcbiAgICAgICAgICByZXR1cm4gY2hhaW4odG9rZW5RdW90ZShcIlxcXCJcIiwgXCJhdG9tXCIsIGZhbHNlKSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKGlkZW50cykgfHwgc3RyZWFtLm1hdGNoKHR5cGVzKSB8fFxuICAgICAgICAgICAgICAgICAgIHN0cmVhbS5tYXRjaChvcGVyYXRvcnMpIHx8IHN0cmVhbS5tYXRjaChjb25kaXRpb25hbE9wZXJhdG9ycykgfHwgc3RyZWFtLm1hdGNoKGluZGV4aW5nT3BlcmF0b3JzKSkge1xuICAgICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0uZWF0KFwiOlwiKTtcbiAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgIH1cblxuICAgICAgLy8gU3RyaW5nc1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCJcXFwiXCIpKSB7XG4gICAgICAgIHJldHVybiBjaGFpbih0b2tlblF1b3RlKFwiXFxcIlwiLCBcInN0cmluZ1wiLCB0cnVlKSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0cmluZ3Mgb3IgcmVnZXhwcyBvciBtYWNybyB2YXJpYWJsZXMgb3IgJyUnIG9wZXJhdG9yXG4gICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSBcIiVcIikge1xuICAgICAgICB2YXIgc3R5bGUgPSBcInN0cmluZ1wiO1xuICAgICAgICB2YXIgZW1iZWQgPSB0cnVlO1xuICAgICAgICB2YXIgZGVsaW07XG5cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChcIiVyXCIpKSB7XG4gICAgICAgICAgLy8gUmVnZXhwc1xuICAgICAgICAgIHN0eWxlID0gXCJzdHJpbmctMlwiO1xuICAgICAgICAgIGRlbGltID0gc3RyZWFtLm5leHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goXCIld1wiKSkge1xuICAgICAgICAgIGVtYmVkID0gZmFsc2U7XG4gICAgICAgICAgZGVsaW0gPSBzdHJlYW0ubmV4dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChcIiVxXCIpKSB7XG4gICAgICAgICAgZW1iZWQgPSBmYWxzZTtcbiAgICAgICAgICBkZWxpbSA9IHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYoZGVsaW0gPSBzdHJlYW0ubWF0Y2goL14lKFteXFx3XFxzPV0pLykpIHtcbiAgICAgICAgICAgIGRlbGltID0gZGVsaW1bMV07XG4gICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL14lW2EtekEtWjAtOV9cXHUwMDlGLVxcdUZGRkZdKi8pKSB7XG4gICAgICAgICAgICAvLyBNYWNybyB2YXJpYWJsZXNcbiAgICAgICAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gJyUnIG9wZXJhdG9yXG4gICAgICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaGluZy5oYXNPd25Qcm9wZXJ0eShkZWxpbSkpIHtcbiAgICAgICAgICBkZWxpbSA9IG1hdGNoaW5nW2RlbGltXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hhaW4odG9rZW5RdW90ZShkZWxpbSwgc3R5bGUsIGVtYmVkKSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhlcmUgRG9jc1xuICAgICAgaWYgKG1hdGNoZWQgPSBzdHJlYW0ubWF0Y2goL148PC0oJz8pKFtBLVpdXFx3KilcXDEvKSkge1xuICAgICAgICByZXR1cm4gY2hhaW4odG9rZW5IZXJlRG9jKG1hdGNoZWRbMl0sICFtYXRjaGVkWzFdKSwgc3RyZWFtLCBzdGF0ZSlcbiAgICAgIH1cblxuICAgICAgLy8gQ2hhcmFjdGVyc1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCInXCIpKSB7XG4gICAgICAgIHN0cmVhbS5tYXRjaCgvXig/OlteJ118XFxcXCg/OltiZWZucnR2MCdcIl18WzAtN117M318dSg/OlswLTlhLWZBLUZdezR9fFxce1swLTlhLWZBLUZdezEsNn1cXH0pKSkvKTtcbiAgICAgICAgc3RyZWFtLmVhdChcIidcIik7XG4gICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgIH1cblxuICAgICAgLy8gTnVtYmVyc1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIwXCIpKSB7XG4gICAgICAgIGlmIChzdHJlYW0uZWF0KFwieFwiKSkge1xuICAgICAgICAgIHN0cmVhbS5tYXRjaCgvXlswLTlhLWZBLUZdKy8pO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoXCJvXCIpKSB7XG4gICAgICAgICAgc3RyZWFtLm1hdGNoKC9eWzAtN10rLyk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcImJcIikpIHtcbiAgICAgICAgICBzdHJlYW0ubWF0Y2goL15bMDFdKy8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLmVhdCgvXlxcZC8pKSB7XG4gICAgICAgIHN0cmVhbS5tYXRjaCgvXlxcZCooPzpcXC5cXGQrKT8oPzpbZUVdWystXT9cXGQrKT8vKTtcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIE9wZXJhdG9yc1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaChvcGVyYXRvcnMpKSB7XG4gICAgICAgIHN0cmVhbS5lYXQoXCI9XCIpOyAvLyBPcGVyYXRvcnMgY2FuIGZvbGxvdyBhc3NpZ24gc3ltYm9sLlxuICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKGNvbmRpdGlvbmFsT3BlcmF0b3JzKSB8fCBzdHJlYW0ubWF0Y2goYW5vdGhlck9wZXJhdG9ycykpIHtcbiAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgIH1cblxuICAgICAgLy8gUGFyZW5zIGFuZCBicmFjZXNcbiAgICAgIGlmIChtYXRjaGVkID0gc3RyZWFtLm1hdGNoKC9bKHtbXS8sIGZhbHNlKSkge1xuICAgICAgICBtYXRjaGVkID0gbWF0Y2hlZFswXTtcbiAgICAgICAgcmV0dXJuIGNoYWluKHRva2VuTmVzdChtYXRjaGVkLCBtYXRjaGluZ1ttYXRjaGVkXSwgbnVsbCksIHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBFc2NhcGVzXG4gICAgICBpZiAoc3RyZWFtLmVhdChcIlxcXFxcIikpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgICAgfVxuXG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5OZXN0KGJlZ2luLCBlbmQsIHN0eWxlLCBzdGFydGVkKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKCFzdGFydGVkICYmIHN0cmVhbS5tYXRjaChiZWdpbikpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGggLSAxXSA9IHRva2VuTmVzdChiZWdpbiwgZW5kLCBzdHlsZSwgdHJ1ZSk7XG4gICAgICAgICAgc3RhdGUuY3VycmVudEluZGVudCArPSAxO1xuICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZXh0U3R5bGUgPSB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIGlmIChzdHJlYW0uY3VycmVudCgpID09PSBlbmQpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTtcbiAgICAgICAgICBzdGF0ZS5jdXJyZW50SW5kZW50IC09IDE7XG4gICAgICAgICAgbmV4dFN0eWxlID0gc3R5bGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dFN0eWxlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlbk1hY3JvKGJlZ2luLCBlbmQsIHN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoIXN0YXJ0ZWQgJiYgc3RyZWFtLm1hdGNoKFwie1wiICsgYmVnaW4pKSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudEluZGVudCArPSAxO1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplW3N0YXRlLnRva2VuaXplLmxlbmd0aCAtIDFdID0gdG9rZW5NYWNybyhiZWdpbiwgZW5kLCB0cnVlKTtcbiAgICAgICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGVuZCArIFwifVwiKSkge1xuICAgICAgICAgIHN0YXRlLmN1cnJlbnRJbmRlbnQgLT0gMTtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTtcbiAgICAgICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlbk1hY3JvRGVmKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIG1hdGNoZWQ7XG4gICAgICBpZiAobWF0Y2hlZCA9IHN0cmVhbS5tYXRjaChpZGVudHMpKSB7XG4gICAgICAgIGlmIChtYXRjaGVkID09IFwiZGVmXCIpIHtcbiAgICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtLmVhdCgvWz8hXS8pO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTtcbiAgICAgIHJldHVybiBcImRlZlwiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRva2VuRm9sbG93SWRlbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKGlkZW50cykpIHtcbiAgICAgICAgc3RyZWFtLmVhdCgvWyE/XS8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLm1hdGNoKG9wZXJhdG9ycykgfHwgc3RyZWFtLm1hdGNoKGNvbmRpdGlvbmFsT3BlcmF0b3JzKSB8fCBzdHJlYW0ubWF0Y2goaW5kZXhpbmdPcGVyYXRvcnMpO1xuICAgICAgfVxuICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7XG4gICAgICByZXR1cm4gXCJkZWZcIjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlbkZvbGxvd1R5cGUoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBzdHJlYW0ubWF0Y2godHlwZXMpO1xuICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7XG4gICAgICByZXR1cm4gXCJkZWZcIjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlblF1b3RlKGVuZCwgc3R5bGUsIGVtYmVkKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAoc3RyZWFtLnBlZWsoKSkge1xuICAgICAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChcInslXCIsIGZhbHNlKSkge1xuICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHRva2VuTWFjcm8oXCIlXCIsIFwiJVwiKSk7XG4gICAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChcInt7XCIsIGZhbHNlKSkge1xuICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHRva2VuTWFjcm8oXCJ7XCIsIFwifVwiKSk7XG4gICAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtYmVkICYmIHN0cmVhbS5tYXRjaChcIiN7XCIsIGZhbHNlKSkge1xuICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHRva2VuTmVzdChcIiN7XCIsIFwifVwiLCBcIm1ldGFcIikpO1xuICAgICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG5cbiAgICAgICAgICAgIGlmIChjaCA9PSBlbmQpIHtcbiAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7XG4gICAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXNjYXBlZCA9IGVtYmVkICYmIGNoID09IFwiXFxcXFwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5IZXJlRG9jKHBocmFzZSwgZW1iZWQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdFNwYWNlKClcbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHBocmFzZSkpIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKHN0cmVhbS5wZWVrKCkpIHtcbiAgICAgICAgICBpZiAoIWVzY2FwZWQpIHtcbiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goXCJ7JVwiLCBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbk1hY3JvKFwiJVwiLCBcIiVcIikpO1xuICAgICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChcInt7XCIsIGZhbHNlKSkge1xuICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHRva2VuTWFjcm8oXCJ7XCIsIFwifVwiKSk7XG4gICAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZW1iZWQgJiYgc3RyZWFtLm1hdGNoKFwiI3tcIiwgZmFsc2UpKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplLnB1c2godG9rZW5OZXN0KFwiI3tcIiwgXCJ9XCIsIFwibWV0YVwiKSk7XG4gICAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlc2NhcGVkID0gZW1iZWQgJiYgc3RyZWFtLm5leHQoKSA9PSBcIlxcXFxcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIGVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRva2VuaXplOiBbdG9rZW5CYXNlXSxcbiAgICAgICAgICBjdXJyZW50SW5kZW50OiAwLFxuICAgICAgICAgIGxhc3RUb2tlbjogbnVsbCxcbiAgICAgICAgICBsYXN0U3R5bGU6IG51bGwsXG4gICAgICAgICAgYmxvY2tzOiBbXVxuICAgICAgICB9O1xuICAgICAgfSxcblxuICAgICAgdG9rZW46IGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplW3N0YXRlLnRva2VuaXplLmxlbmd0aCAtIDFdKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB2YXIgdG9rZW4gPSBzdHJlYW0uY3VycmVudCgpO1xuXG4gICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZSAhPSBcImNvbW1lbnRcIikge1xuICAgICAgICAgIHN0YXRlLmxhc3RUb2tlbiA9IHRva2VuO1xuICAgICAgICAgIHN0YXRlLmxhc3RTdHlsZSA9IHN0eWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSxcblxuICAgICAgaW5kZW50OiBmdW5jdGlvbiAoc3RhdGUsIHRleHRBZnRlcikge1xuICAgICAgICB0ZXh0QWZ0ZXIgPSB0ZXh0QWZ0ZXIucmVwbGFjZSgvXlxccyooPzpcXHslKT9cXHMqfFxccyooPzolXFx9KT9cXHMqJC9nLCBcIlwiKTtcblxuICAgICAgICBpZiAoZGVkZW50S2V5d29yZHMudGVzdCh0ZXh0QWZ0ZXIpIHx8IGRlZGVudFB1bmN0dWFscy50ZXN0KHRleHRBZnRlcikpIHtcbiAgICAgICAgICByZXR1cm4gY29uZmlnLmluZGVudFVuaXQgKiAoc3RhdGUuY3VycmVudEluZGVudCAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZy5pbmRlbnRVbml0ICogc3RhdGUuY3VycmVudEluZGVudDtcbiAgICAgIH0sXG5cbiAgICAgIGZvbGQ6IFwiaW5kZW50XCIsXG4gICAgICBlbGVjdHJpY0lucHV0OiB3b3JkUmVnRXhwKGRlZGVudFB1bmN0dWFsc0FycmF5LmNvbmNhdChkZWRlbnRLZXl3b3Jkc0FycmF5KSwgdHJ1ZSksXG4gICAgICBsaW5lQ29tbWVudDogJyMnXG4gICAgfTtcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWNyeXN0YWxcIiwgXCJjcnlzdGFsXCIpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImNzc1wiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykge1xuICB2YXIgaW5saW5lID0gcGFyc2VyQ29uZmlnLmlubGluZVxuICBpZiAoIXBhcnNlckNvbmZpZy5wcm9wZXJ0eUtleXdvcmRzKSBwYXJzZXJDb25maWcgPSBDb2RlTWlycm9yLnJlc29sdmVNb2RlKFwidGV4dC9jc3NcIik7XG5cbiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCxcbiAgICAgIHRva2VuSG9va3MgPSBwYXJzZXJDb25maWcudG9rZW5Ib29rcyxcbiAgICAgIGRvY3VtZW50VHlwZXMgPSBwYXJzZXJDb25maWcuZG9jdW1lbnRUeXBlcyB8fCB7fSxcbiAgICAgIG1lZGlhVHlwZXMgPSBwYXJzZXJDb25maWcubWVkaWFUeXBlcyB8fCB7fSxcbiAgICAgIG1lZGlhRmVhdHVyZXMgPSBwYXJzZXJDb25maWcubWVkaWFGZWF0dXJlcyB8fCB7fSxcbiAgICAgIG1lZGlhVmFsdWVLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5tZWRpYVZhbHVlS2V5d29yZHMgfHwge30sXG4gICAgICBwcm9wZXJ0eUtleXdvcmRzID0gcGFyc2VyQ29uZmlnLnByb3BlcnR5S2V5d29yZHMgfHwge30sXG4gICAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgPSBwYXJzZXJDb25maWcubm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzIHx8IHt9LFxuICAgICAgZm9udFByb3BlcnRpZXMgPSBwYXJzZXJDb25maWcuZm9udFByb3BlcnRpZXMgfHwge30sXG4gICAgICBjb3VudGVyRGVzY3JpcHRvcnMgPSBwYXJzZXJDb25maWcuY291bnRlckRlc2NyaXB0b3JzIHx8IHt9LFxuICAgICAgY29sb3JLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5jb2xvcktleXdvcmRzIHx8IHt9LFxuICAgICAgdmFsdWVLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy52YWx1ZUtleXdvcmRzIHx8IHt9LFxuICAgICAgYWxsb3dOZXN0ZWQgPSBwYXJzZXJDb25maWcuYWxsb3dOZXN0ZWQsXG4gICAgICBsaW5lQ29tbWVudCA9IHBhcnNlckNvbmZpZy5saW5lQ29tbWVudCxcbiAgICAgIHN1cHBvcnRzQXRDb21wb25lbnQgPSBwYXJzZXJDb25maWcuc3VwcG9ydHNBdENvbXBvbmVudCA9PT0gdHJ1ZSxcbiAgICAgIGhpZ2hsaWdodE5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyA9IGNvbmZpZy5oaWdobGlnaHROb25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgIT09IGZhbHNlO1xuXG4gIHZhciB0eXBlLCBvdmVycmlkZTtcbiAgZnVuY3Rpb24gcmV0KHN0eWxlLCB0cCkgeyB0eXBlID0gdHA7IHJldHVybiBzdHlsZTsgfVxuXG4gIC8vIFRva2VuaXplcnNcblxuICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKHRva2VuSG9va3NbY2hdKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdG9rZW5Ib29rc1tjaF0oc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBpZiAocmVzdWx0ICE9PSBmYWxzZSkgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKGNoID09IFwiQFwiKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXFxcXFwtXS8pO1xuICAgICAgcmV0dXJuIHJldChcImRlZlwiLCBzdHJlYW0uY3VycmVudCgpKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiPVwiIHx8IChjaCA9PSBcIn5cIiB8fCBjaCA9PSBcInxcIikgJiYgc3RyZWFtLmVhdChcIj1cIikpIHtcbiAgICAgIHJldHVybiByZXQobnVsbCwgXCJjb21wYXJlXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCJcXFwiXCIgfHwgY2ggPT0gXCInXCIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIjXCIpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcXFxcXC1dLyk7XG4gICAgICByZXR1cm4gcmV0KFwiYXRvbVwiLCBcImhhc2hcIik7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIiFcIikge1xuICAgICAgc3RyZWFtLm1hdGNoKC9eXFxzKlxcdyovKTtcbiAgICAgIHJldHVybiByZXQoXCJrZXl3b3JkXCIsIFwiaW1wb3J0YW50XCIpO1xuICAgIH0gZWxzZSBpZiAoL1xcZC8udGVzdChjaCkgfHwgY2ggPT0gXCIuXCIgJiYgc3RyZWFtLmVhdCgvXFxkLykpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcdy4lXS8pO1xuICAgICAgcmV0dXJuIHJldChcIm51bWJlclwiLCBcInVuaXRcIik7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCItXCIpIHtcbiAgICAgIGlmICgvW1xcZC5dLy50ZXN0KHN0cmVhbS5wZWVrKCkpKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcdy4lXS8pO1xuICAgICAgICByZXR1cm4gcmV0KFwibnVtYmVyXCIsIFwidW5pdFwiKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eLVtcXHdcXFxcXFwtXSovKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXFxcXFwtXS8pO1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFxzKjovLCBmYWxzZSkpXG4gICAgICAgICAgcmV0dXJuIHJldChcInZhcmlhYmxlLTJcIiwgXCJ2YXJpYWJsZS1kZWZpbml0aW9uXCIpO1xuICAgICAgICByZXR1cm4gcmV0KFwidmFyaWFibGUtMlwiLCBcInZhcmlhYmxlXCIpO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15cXHcrLS8pKSB7XG4gICAgICAgIHJldHVybiByZXQoXCJtZXRhXCIsIFwibWV0YVwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKC9bLCs+KlxcL10vLnRlc3QoY2gpKSB7XG4gICAgICByZXR1cm4gcmV0KG51bGwsIFwic2VsZWN0LW9wXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIuXCIgJiYgc3RyZWFtLm1hdGNoKC9eLT9bX2Etel1bX2EtejAtOS1dKi9pKSkge1xuICAgICAgcmV0dXJuIHJldChcInF1YWxpZmllclwiLCBcInF1YWxpZmllclwiKTtcbiAgICB9IGVsc2UgaWYgKC9bOjt7fVxcW1xcXVxcKFxcKV0vLnRlc3QoY2gpKSB7XG4gICAgICByZXR1cm4gcmV0KG51bGwsIGNoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvW1xcdy0uXSsoPz1cXCgpLykpIHtcbiAgICAgIGlmICgvXih1cmwoLXByZWZpeCk/fGRvbWFpbnxyZWdleHApJC8udGVzdChzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5QYXJlbnRoZXNpemVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldChcInZhcmlhYmxlIGNhbGxlZVwiLCBcInZhcmlhYmxlXCIpO1xuICAgIH0gZWxzZSBpZiAoL1tcXHdcXFxcXFwtXS8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcXFxcXC1dLyk7XG4gICAgICByZXR1cm4gcmV0KFwicHJvcGVydHlcIiwgXCJ3b3JkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmV0KG51bGwsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIGNoO1xuICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgaWYgKHF1b3RlID09IFwiKVwiKSBzdHJlYW0uYmFja1VwKDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PSBxdW90ZSB8fCAhZXNjYXBlZCAmJiBxdW90ZSAhPSBcIilcIikgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgcmV0dXJuIHJldChcInN0cmluZ1wiLCBcInN0cmluZ1wiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5QYXJlbnRoZXNpemVkKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBzdHJlYW0ubmV4dCgpOyAvLyBNdXN0IGJlICcoJ1xuICAgIGlmICghc3RyZWFtLm1hdGNoKC9cXHMqW1xcXCJcXCcpXS8sIGZhbHNlKSlcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoXCIpXCIpO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICByZXR1cm4gcmV0KG51bGwsIFwiKFwiKTtcbiAgfVxuXG4gIC8vIENvbnRleHQgbWFuYWdlbWVudFxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHlwZSwgaW5kZW50LCBwcmV2KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmluZGVudCA9IGluZGVudDtcbiAgICB0aGlzLnByZXYgPSBwcmV2O1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgdHlwZSwgaW5kZW50KSB7XG4gICAgc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHR5cGUsIHN0cmVhbS5pbmRlbnRhdGlvbigpICsgKGluZGVudCA9PT0gZmFsc2UgPyAwIDogaW5kZW50VW5pdCksIHN0YXRlLmNvbnRleHQpO1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5jb250ZXh0LnByZXYpXG4gICAgICBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGVzW3N0YXRlLmNvbnRleHQudHlwZV0odHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlLCBuKSB7XG4gICAgZm9yICh2YXIgaSA9IG4gfHwgMTsgaSA+IDA7IGktLSlcbiAgICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG4gICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cblxuICAvLyBQYXJzZXJcblxuICBmdW5jdGlvbiB3b3JkQXNWYWx1ZShzdHJlYW0pIHtcbiAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodmFsdWVLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSlcbiAgICAgIG92ZXJyaWRlID0gXCJhdG9tXCI7XG4gICAgZWxzZSBpZiAoY29sb3JLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSlcbiAgICAgIG92ZXJyaWRlID0gXCJrZXl3b3JkXCI7XG4gICAgZWxzZVxuICAgICAgb3ZlcnJpZGUgPSBcInZhcmlhYmxlXCI7XG4gIH1cblxuICB2YXIgc3RhdGVzID0ge307XG5cbiAgc3RhdGVzLnRvcCA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIntcIikge1xuICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIik7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwifVwiICYmIHN0YXRlLmNvbnRleHQucHJldikge1xuICAgICAgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoc3VwcG9ydHNBdENvbXBvbmVudCAmJiAvQGNvbXBvbmVudC9pLnRlc3QodHlwZSkpIHtcbiAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImF0Q29tcG9uZW50QmxvY2tcIik7XG4gICAgfSBlbHNlIGlmICgvXkAoLW1vei0pP2RvY3VtZW50JC9pLnRlc3QodHlwZSkpIHtcbiAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImRvY3VtZW50VHlwZXNcIik7XG4gICAgfSBlbHNlIGlmICgvXkAobWVkaWF8c3VwcG9ydHN8KC1tb3otKT9kb2N1bWVudHxpbXBvcnQpJC9pLnRlc3QodHlwZSkpIHtcbiAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImF0QmxvY2tcIik7XG4gICAgfSBlbHNlIGlmICgvXkAoZm9udC1mYWNlfGNvdW50ZXItc3R5bGUpL2kudGVzdCh0eXBlKSkge1xuICAgICAgc3RhdGUuc3RhdGVBcmcgPSB0eXBlO1xuICAgICAgcmV0dXJuIFwicmVzdHJpY3RlZF9hdEJsb2NrX2JlZm9yZVwiO1xuICAgIH0gZWxzZSBpZiAoL15AKC0obW96fG1zfG98d2Via2l0KS0pP2tleWZyYW1lcyQvaS50ZXN0KHR5cGUpKSB7XG4gICAgICByZXR1cm4gXCJrZXlmcmFtZXNcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgJiYgdHlwZS5jaGFyQXQoMCkgPT0gXCJAXCIpIHtcbiAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImF0XCIpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImhhc2hcIikge1xuICAgICAgb3ZlcnJpZGUgPSBcImJ1aWx0aW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgIG92ZXJyaWRlID0gXCJ0YWdcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZS1kZWZpbml0aW9uXCIpIHtcbiAgICAgIHJldHVybiBcIm1heWJlcHJvcFwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImludGVycG9sYXRpb25cIikge1xuICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiaW50ZXJwb2xhdGlvblwiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCI6XCIpIHtcbiAgICAgIHJldHVybiBcInBzZXVkb1wiO1xuICAgIH0gZWxzZSBpZiAoYWxsb3dOZXN0ZWQgJiYgdHlwZSA9PSBcIihcIikge1xuICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwicGFyZW5zXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlO1xuICB9O1xuXG4gIHN0YXRlcy5ibG9jayA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIikge1xuICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAocHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkge1xuICAgICAgICBvdmVycmlkZSA9IFwicHJvcGVydHlcIjtcbiAgICAgICAgcmV0dXJuIFwibWF5YmVwcm9wXCI7XG4gICAgICB9IGVsc2UgaWYgKG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkge1xuICAgICAgICBvdmVycmlkZSA9IGhpZ2hsaWdodE5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyA/IFwic3RyaW5nLTJcIiA6IFwicHJvcGVydHlcIjtcbiAgICAgICAgcmV0dXJuIFwibWF5YmVwcm9wXCI7XG4gICAgICB9IGVsc2UgaWYgKGFsbG93TmVzdGVkKSB7XG4gICAgICAgIG92ZXJyaWRlID0gc3RyZWFtLm1hdGNoKC9eXFxzKjooPzpcXHN8JCkvLCBmYWxzZSkgPyBcInByb3BlcnR5XCIgOiBcInRhZ1wiO1xuICAgICAgICByZXR1cm4gXCJibG9ja1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3ZlcnJpZGUgKz0gXCIgZXJyb3JcIjtcbiAgICAgICAgcmV0dXJuIFwibWF5YmVwcm9wXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwibWV0YVwiKSB7XG4gICAgICByZXR1cm4gXCJibG9ja1wiO1xuICAgIH0gZWxzZSBpZiAoIWFsbG93TmVzdGVkICYmICh0eXBlID09IFwiaGFzaFwiIHx8IHR5cGUgPT0gXCJxdWFsaWZpZXJcIikpIHtcbiAgICAgIG92ZXJyaWRlID0gXCJlcnJvclwiO1xuICAgICAgcmV0dXJuIFwiYmxvY2tcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0YXRlcy50b3AodHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIHN0YXRlcy5tYXliZXByb3AgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCI6XCIpIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcInByb3BcIik7XG4gICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gIH07XG5cbiAgc3RhdGVzLnByb3AgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCI7XCIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIiAmJiBhbGxvd05lc3RlZCkgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwicHJvcEJsb2NrXCIpO1xuICAgIGlmICh0eXBlID09IFwifVwiIHx8IHR5cGUgPT0gXCJ7XCIpIHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJwYXJlbnNcIik7XG5cbiAgICBpZiAodHlwZSA9PSBcImhhc2hcIiAmJiAhL14jKFswLTlhLWZBLWZdezMsNH18WzAtOWEtZkEtZl17Nn18WzAtOWEtZkEtZl17OH0pJC8udGVzdChzdHJlYW0uY3VycmVudCgpKSkge1xuICAgICAgb3ZlcnJpZGUgKz0gXCIgZXJyb3JcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgIHdvcmRBc1ZhbHVlKHN0cmVhbSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiaW50ZXJwb2xhdGlvblwiKSB7XG4gICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJpbnRlcnBvbGF0aW9uXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJwcm9wXCI7XG4gIH07XG5cbiAgc3RhdGVzLnByb3BCbG9jayA9IGZ1bmN0aW9uKHR5cGUsIF9zdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ9XCIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIikgeyBvdmVycmlkZSA9IFwicHJvcGVydHlcIjsgcmV0dXJuIFwibWF5YmVwcm9wXCI7IH1cbiAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlO1xuICB9O1xuXG4gIHN0YXRlcy5wYXJlbnMgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIgfHwgdHlwZSA9PSBcIn1cIikgcmV0dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHR5cGUgPT0gXCIpXCIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwicGFyZW5zXCIpO1xuICAgIGlmICh0eXBlID09IFwiaW50ZXJwb2xhdGlvblwiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJpbnRlcnBvbGF0aW9uXCIpO1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB3b3JkQXNWYWx1ZShzdHJlYW0pO1xuICAgIHJldHVybiBcInBhcmVuc1wiO1xuICB9O1xuXG4gIHN0YXRlcy5wc2V1ZG8gPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJtZXRhXCIpIHJldHVybiBcInBzZXVkb1wiO1xuXG4gICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgIG92ZXJyaWRlID0gXCJ2YXJpYWJsZS0zXCI7XG4gICAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlO1xuICAgIH1cbiAgICByZXR1cm4gcGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfTtcblxuICBzdGF0ZXMuZG9jdW1lbnRUeXBlcyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIiAmJiBkb2N1bWVudFR5cGVzLmhhc093blByb3BlcnR5KHN0cmVhbS5jdXJyZW50KCkpKSB7XG4gICAgICBvdmVycmlkZSA9IFwidGFnXCI7XG4gICAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RhdGVzLmF0QmxvY2sodHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIHN0YXRlcy5hdEJsb2NrID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJhdEJsb2NrX3BhcmVuc1wiKTtcbiAgICBpZiAodHlwZSA9PSBcIn1cIiB8fCB0eXBlID09IFwiO1wiKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpICYmIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIGFsbG93TmVzdGVkID8gXCJibG9ja1wiIDogXCJ0b3BcIik7XG5cbiAgICBpZiAodHlwZSA9PSBcImludGVycG9sYXRpb25cIikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiaW50ZXJwb2xhdGlvblwiKTtcblxuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7XG4gICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh3b3JkID09IFwib25seVwiIHx8IHdvcmQgPT0gXCJub3RcIiB8fCB3b3JkID09IFwiYW5kXCIgfHwgd29yZCA9PSBcIm9yXCIpXG4gICAgICAgIG92ZXJyaWRlID0gXCJrZXl3b3JkXCI7XG4gICAgICBlbHNlIGlmIChtZWRpYVR5cGVzLmhhc093blByb3BlcnR5KHdvcmQpKVxuICAgICAgICBvdmVycmlkZSA9IFwiYXR0cmlidXRlXCI7XG4gICAgICBlbHNlIGlmIChtZWRpYUZlYXR1cmVzLmhhc093blByb3BlcnR5KHdvcmQpKVxuICAgICAgICBvdmVycmlkZSA9IFwicHJvcGVydHlcIjtcbiAgICAgIGVsc2UgaWYgKG1lZGlhVmFsdWVLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSlcbiAgICAgICAgb3ZlcnJpZGUgPSBcImtleXdvcmRcIjtcbiAgICAgIGVsc2UgaWYgKHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpXG4gICAgICAgIG92ZXJyaWRlID0gXCJwcm9wZXJ0eVwiO1xuICAgICAgZWxzZSBpZiAobm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKVxuICAgICAgICBvdmVycmlkZSA9IGhpZ2hsaWdodE5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyA/IFwic3RyaW5nLTJcIiA6IFwicHJvcGVydHlcIjtcbiAgICAgIGVsc2UgaWYgKHZhbHVlS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpXG4gICAgICAgIG92ZXJyaWRlID0gXCJhdG9tXCI7XG4gICAgICBlbHNlIGlmIChjb2xvcktleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKVxuICAgICAgICBvdmVycmlkZSA9IFwia2V5d29yZFwiO1xuICAgICAgZWxzZVxuICAgICAgICBvdmVycmlkZSA9IFwiZXJyb3JcIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlLmNvbnRleHQudHlwZTtcbiAgfTtcblxuICBzdGF0ZXMuYXRDb21wb25lbnRCbG9jayA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIn1cIilcbiAgICAgIHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmICh0eXBlID09IFwie1wiKVxuICAgICAgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpICYmIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIGFsbG93TmVzdGVkID8gXCJibG9ja1wiIDogXCJ0b3BcIiwgZmFsc2UpO1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKVxuICAgICAgb3ZlcnJpZGUgPSBcImVycm9yXCI7XG4gICAgcmV0dXJuIHN0YXRlLmNvbnRleHQudHlwZTtcbiAgfTtcblxuICBzdGF0ZXMuYXRCbG9ja19wYXJlbnMgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCIpXCIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIiB8fCB0eXBlID09IFwifVwiKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlLCAyKTtcbiAgICByZXR1cm4gc3RhdGVzLmF0QmxvY2sodHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gIH07XG5cbiAgc3RhdGVzLnJlc3RyaWN0ZWRfYXRCbG9ja19iZWZvcmUgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpXG4gICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJyZXN0cmljdGVkX2F0QmxvY2tcIik7XG4gICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIgJiYgc3RhdGUuc3RhdGVBcmcgPT0gXCJAY291bnRlci1zdHlsZVwiKSB7XG4gICAgICBvdmVycmlkZSA9IFwidmFyaWFibGVcIjtcbiAgICAgIHJldHVybiBcInJlc3RyaWN0ZWRfYXRCbG9ja19iZWZvcmVcIjtcbiAgICB9XG4gICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gIH07XG5cbiAgc3RhdGVzLnJlc3RyaWN0ZWRfYXRCbG9jayA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIn1cIikge1xuICAgICAgc3RhdGUuc3RhdGVBcmcgPSBudWxsO1xuICAgICAgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIikge1xuICAgICAgaWYgKChzdGF0ZS5zdGF0ZUFyZyA9PSBcIkBmb250LWZhY2VcIiAmJiAhZm9udFByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpKSkgfHxcbiAgICAgICAgICAoc3RhdGUuc3RhdGVBcmcgPT0gXCJAY291bnRlci1zdHlsZVwiICYmICFjb3VudGVyRGVzY3JpcHRvcnMuaGFzT3duUHJvcGVydHkoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpKSkpXG4gICAgICAgIG92ZXJyaWRlID0gXCJlcnJvclwiO1xuICAgICAgZWxzZVxuICAgICAgICBvdmVycmlkZSA9IFwicHJvcGVydHlcIjtcbiAgICAgIHJldHVybiBcIm1heWJlcHJvcFwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJyZXN0cmljdGVkX2F0QmxvY2tcIjtcbiAgfTtcblxuICBzdGF0ZXMua2V5ZnJhbWVzID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7IG92ZXJyaWRlID0gXCJ2YXJpYWJsZVwiOyByZXR1cm4gXCJrZXlmcmFtZXNcIjsgfVxuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJ0b3BcIik7XG4gICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gIH07XG5cbiAgc3RhdGVzLmF0ID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwiO1wiKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIgfHwgdHlwZSA9PSBcIn1cIikgcmV0dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIG92ZXJyaWRlID0gXCJ0YWdcIjtcbiAgICBlbHNlIGlmICh0eXBlID09IFwiaGFzaFwiKSBvdmVycmlkZSA9IFwiYnVpbHRpblwiO1xuICAgIHJldHVybiBcImF0XCI7XG4gIH07XG5cbiAgc3RhdGVzLmludGVycG9sYXRpb24gPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ9XCIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIiB8fCB0eXBlID09IFwiO1wiKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIikgb3ZlcnJpZGUgPSBcInZhcmlhYmxlXCI7XG4gICAgZWxzZSBpZiAodHlwZSAhPSBcInZhcmlhYmxlXCIgJiYgdHlwZSAhPSBcIihcIiAmJiB0eXBlICE9IFwiKVwiKSBvdmVycmlkZSA9IFwiZXJyb3JcIjtcbiAgICByZXR1cm4gXCJpbnRlcnBvbGF0aW9uXCI7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7XG4gICAgICByZXR1cm4ge3Rva2VuaXplOiBudWxsLFxuICAgICAgICAgICAgICBzdGF0ZTogaW5saW5lID8gXCJibG9ja1wiIDogXCJ0b3BcIixcbiAgICAgICAgICAgICAgc3RhdGVBcmc6IG51bGwsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KGlubGluZSA/IFwiYmxvY2tcIiA6IFwidG9wXCIsIGJhc2UgfHwgMCwgbnVsbCl9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKCFzdGF0ZS50b2tlbml6ZSAmJiBzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChzdHlsZSAmJiB0eXBlb2Ygc3R5bGUgPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0eXBlID0gc3R5bGVbMV07XG4gICAgICAgIHN0eWxlID0gc3R5bGVbMF07XG4gICAgICB9XG4gICAgICBvdmVycmlkZSA9IHN0eWxlO1xuICAgICAgaWYgKHR5cGUgIT0gXCJjb21tZW50XCIpXG4gICAgICAgIHN0YXRlLnN0YXRlID0gc3RhdGVzW3N0YXRlLnN0YXRlXSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICAgIHJldHVybiBvdmVycmlkZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgICB2YXIgY3ggPSBzdGF0ZS5jb250ZXh0LCBjaCA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApO1xuICAgICAgdmFyIGluZGVudCA9IGN4LmluZGVudDtcbiAgICAgIGlmIChjeC50eXBlID09IFwicHJvcFwiICYmIChjaCA9PSBcIn1cIiB8fCBjaCA9PSBcIilcIikpIGN4ID0gY3gucHJldjtcbiAgICAgIGlmIChjeC5wcmV2KSB7XG4gICAgICAgIGlmIChjaCA9PSBcIn1cIiAmJiAoY3gudHlwZSA9PSBcImJsb2NrXCIgfHwgY3gudHlwZSA9PSBcInRvcFwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN4LnR5cGUgPT0gXCJpbnRlcnBvbGF0aW9uXCIgfHwgY3gudHlwZSA9PSBcInJlc3RyaWN0ZWRfYXRCbG9ja1wiKSkge1xuICAgICAgICAgIC8vIFJlc3VtZSBpbmRlbnRhdGlvbiBmcm9tIHBhcmVudCBjb250ZXh0LlxuICAgICAgICAgIGN4ID0gY3gucHJldjtcbiAgICAgICAgICBpbmRlbnQgPSBjeC5pbmRlbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIpXCIgJiYgKGN4LnR5cGUgPT0gXCJwYXJlbnNcIiB8fCBjeC50eXBlID09IFwiYXRCbG9ja19wYXJlbnNcIikgfHxcbiAgICAgICAgICAgIGNoID09IFwie1wiICYmIChjeC50eXBlID09IFwiYXRcIiB8fCBjeC50eXBlID09IFwiYXRCbG9ja1wiKSkge1xuICAgICAgICAgIC8vIERlZGVudCByZWxhdGl2ZSB0byBjdXJyZW50IGNvbnRleHQuXG4gICAgICAgICAgaW5kZW50ID0gTWF0aC5tYXgoMCwgY3guaW5kZW50IC0gaW5kZW50VW5pdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpbmRlbnQ7XG4gICAgfSxcblxuICAgIGVsZWN0cmljQ2hhcnM6IFwifVwiLFxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIi8qXCIsXG4gICAgYmxvY2tDb21tZW50RW5kOiBcIiovXCIsXG4gICAgYmxvY2tDb21tZW50Q29udGludWU6IFwiICogXCIsXG4gICAgbGluZUNvbW1lbnQ6IGxpbmVDb21tZW50LFxuICAgIGZvbGQ6IFwiYnJhY2VcIlxuICB9O1xufSk7XG5cbiAgZnVuY3Rpb24ga2V5U2V0KGFycmF5KSB7XG4gICAgdmFyIGtleXMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICBrZXlzW2FycmF5W2ldLnRvTG93ZXJDYXNlKCldID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cblxuICB2YXIgZG9jdW1lbnRUeXBlc18gPSBbXG4gICAgXCJkb21haW5cIiwgXCJyZWdleHBcIiwgXCJ1cmxcIiwgXCJ1cmwtcHJlZml4XCJcbiAgXSwgZG9jdW1lbnRUeXBlcyA9IGtleVNldChkb2N1bWVudFR5cGVzXyk7XG5cbiAgdmFyIG1lZGlhVHlwZXNfID0gW1xuICAgIFwiYWxsXCIsIFwiYXVyYWxcIiwgXCJicmFpbGxlXCIsIFwiaGFuZGhlbGRcIiwgXCJwcmludFwiLCBcInByb2plY3Rpb25cIiwgXCJzY3JlZW5cIixcbiAgICBcInR0eVwiLCBcInR2XCIsIFwiZW1ib3NzZWRcIlxuICBdLCBtZWRpYVR5cGVzID0ga2V5U2V0KG1lZGlhVHlwZXNfKTtcblxuICB2YXIgbWVkaWFGZWF0dXJlc18gPSBbXG4gICAgXCJ3aWR0aFwiLCBcIm1pbi13aWR0aFwiLCBcIm1heC13aWR0aFwiLCBcImhlaWdodFwiLCBcIm1pbi1oZWlnaHRcIiwgXCJtYXgtaGVpZ2h0XCIsXG4gICAgXCJkZXZpY2Utd2lkdGhcIiwgXCJtaW4tZGV2aWNlLXdpZHRoXCIsIFwibWF4LWRldmljZS13aWR0aFwiLCBcImRldmljZS1oZWlnaHRcIixcbiAgICBcIm1pbi1kZXZpY2UtaGVpZ2h0XCIsIFwibWF4LWRldmljZS1oZWlnaHRcIiwgXCJhc3BlY3QtcmF0aW9cIixcbiAgICBcIm1pbi1hc3BlY3QtcmF0aW9cIiwgXCJtYXgtYXNwZWN0LXJhdGlvXCIsIFwiZGV2aWNlLWFzcGVjdC1yYXRpb1wiLFxuICAgIFwibWluLWRldmljZS1hc3BlY3QtcmF0aW9cIiwgXCJtYXgtZGV2aWNlLWFzcGVjdC1yYXRpb1wiLCBcImNvbG9yXCIsIFwibWluLWNvbG9yXCIsXG4gICAgXCJtYXgtY29sb3JcIiwgXCJjb2xvci1pbmRleFwiLCBcIm1pbi1jb2xvci1pbmRleFwiLCBcIm1heC1jb2xvci1pbmRleFwiLFxuICAgIFwibW9ub2Nocm9tZVwiLCBcIm1pbi1tb25vY2hyb21lXCIsIFwibWF4LW1vbm9jaHJvbWVcIiwgXCJyZXNvbHV0aW9uXCIsXG4gICAgXCJtaW4tcmVzb2x1dGlvblwiLCBcIm1heC1yZXNvbHV0aW9uXCIsIFwic2NhblwiLCBcImdyaWRcIiwgXCJvcmllbnRhdGlvblwiLFxuICAgIFwiZGV2aWNlLXBpeGVsLXJhdGlvXCIsIFwibWluLWRldmljZS1waXhlbC1yYXRpb1wiLCBcIm1heC1kZXZpY2UtcGl4ZWwtcmF0aW9cIixcbiAgICBcInBvaW50ZXJcIiwgXCJhbnktcG9pbnRlclwiLCBcImhvdmVyXCIsIFwiYW55LWhvdmVyXCIsIFwicHJlZmVycy1jb2xvci1zY2hlbWVcIlxuICBdLCBtZWRpYUZlYXR1cmVzID0ga2V5U2V0KG1lZGlhRmVhdHVyZXNfKTtcblxuICB2YXIgbWVkaWFWYWx1ZUtleXdvcmRzXyA9IFtcbiAgICBcImxhbmRzY2FwZVwiLCBcInBvcnRyYWl0XCIsIFwibm9uZVwiLCBcImNvYXJzZVwiLCBcImZpbmVcIiwgXCJvbi1kZW1hbmRcIiwgXCJob3ZlclwiLFxuICAgIFwiaW50ZXJsYWNlXCIsIFwicHJvZ3Jlc3NpdmVcIixcbiAgICBcImRhcmtcIiwgXCJsaWdodFwiXG4gIF0sIG1lZGlhVmFsdWVLZXl3b3JkcyA9IGtleVNldChtZWRpYVZhbHVlS2V5d29yZHNfKTtcblxuICB2YXIgcHJvcGVydHlLZXl3b3Jkc18gPSBbXG4gICAgXCJhbGlnbi1jb250ZW50XCIsIFwiYWxpZ24taXRlbXNcIiwgXCJhbGlnbi1zZWxmXCIsIFwiYWxpZ25tZW50LWFkanVzdFwiLFxuICAgIFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiYWxsXCIsIFwiYW5jaG9yLXBvaW50XCIsIFwiYW5pbWF0aW9uXCIsIFwiYW5pbWF0aW9uLWRlbGF5XCIsXG4gICAgXCJhbmltYXRpb24tZGlyZWN0aW9uXCIsIFwiYW5pbWF0aW9uLWR1cmF0aW9uXCIsIFwiYW5pbWF0aW9uLWZpbGwtbW9kZVwiLFxuICAgIFwiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudFwiLCBcImFuaW1hdGlvbi1uYW1lXCIsIFwiYW5pbWF0aW9uLXBsYXktc3RhdGVcIixcbiAgICBcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIiwgXCJhcHBlYXJhbmNlXCIsIFwiYXppbXV0aFwiLCBcImJhY2tkcm9wLWZpbHRlclwiLFxuICAgIFwiYmFja2ZhY2UtdmlzaWJpbGl0eVwiLCBcImJhY2tncm91bmRcIiwgXCJiYWNrZ3JvdW5kLWF0dGFjaG1lbnRcIixcbiAgICBcImJhY2tncm91bmQtYmxlbmQtbW9kZVwiLCBcImJhY2tncm91bmQtY2xpcFwiLCBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcImJhY2tncm91bmQtaW1hZ2VcIiwgXCJiYWNrZ3JvdW5kLW9yaWdpblwiLCBcImJhY2tncm91bmQtcG9zaXRpb25cIixcbiAgICBcImJhY2tncm91bmQtcG9zaXRpb24teFwiLCBcImJhY2tncm91bmQtcG9zaXRpb24teVwiLCBcImJhY2tncm91bmQtcmVwZWF0XCIsXG4gICAgXCJiYWNrZ3JvdW5kLXNpemVcIiwgXCJiYXNlbGluZS1zaGlmdFwiLCBcImJpbmRpbmdcIiwgXCJibGVlZFwiLCBcImJsb2NrLXNpemVcIixcbiAgICBcImJvb2ttYXJrLWxhYmVsXCIsIFwiYm9va21hcmstbGV2ZWxcIiwgXCJib29rbWFyay1zdGF0ZVwiLCBcImJvb2ttYXJrLXRhcmdldFwiLFxuICAgIFwiYm9yZGVyXCIsIFwiYm9yZGVyLWJvdHRvbVwiLCBcImJvcmRlci1ib3R0b20tY29sb3JcIiwgXCJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzXCIsXG4gICAgXCJib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1c1wiLCBcImJvcmRlci1ib3R0b20tc3R5bGVcIiwgXCJib3JkZXItYm90dG9tLXdpZHRoXCIsXG4gICAgXCJib3JkZXItY29sbGFwc2VcIiwgXCJib3JkZXItY29sb3JcIiwgXCJib3JkZXItaW1hZ2VcIiwgXCJib3JkZXItaW1hZ2Utb3V0c2V0XCIsXG4gICAgXCJib3JkZXItaW1hZ2UtcmVwZWF0XCIsIFwiYm9yZGVyLWltYWdlLXNsaWNlXCIsIFwiYm9yZGVyLWltYWdlLXNvdXJjZVwiLFxuICAgIFwiYm9yZGVyLWltYWdlLXdpZHRoXCIsIFwiYm9yZGVyLWxlZnRcIiwgXCJib3JkZXItbGVmdC1jb2xvclwiLCBcImJvcmRlci1sZWZ0LXN0eWxlXCIsXG4gICAgXCJib3JkZXItbGVmdC13aWR0aFwiLCBcImJvcmRlci1yYWRpdXNcIiwgXCJib3JkZXItcmlnaHRcIiwgXCJib3JkZXItcmlnaHQtY29sb3JcIixcbiAgICBcImJvcmRlci1yaWdodC1zdHlsZVwiLCBcImJvcmRlci1yaWdodC13aWR0aFwiLCBcImJvcmRlci1zcGFjaW5nXCIsIFwiYm9yZGVyLXN0eWxlXCIsXG4gICAgXCJib3JkZXItdG9wXCIsIFwiYm9yZGVyLXRvcC1jb2xvclwiLCBcImJvcmRlci10b3AtbGVmdC1yYWRpdXNcIixcbiAgICBcImJvcmRlci10b3AtcmlnaHQtcmFkaXVzXCIsIFwiYm9yZGVyLXRvcC1zdHlsZVwiLCBcImJvcmRlci10b3Atd2lkdGhcIixcbiAgICBcImJvcmRlci13aWR0aFwiLCBcImJvdHRvbVwiLCBcImJveC1kZWNvcmF0aW9uLWJyZWFrXCIsIFwiYm94LXNoYWRvd1wiLCBcImJveC1zaXppbmdcIixcbiAgICBcImJyZWFrLWFmdGVyXCIsIFwiYnJlYWstYmVmb3JlXCIsIFwiYnJlYWstaW5zaWRlXCIsIFwiY2FwdGlvbi1zaWRlXCIsIFwiY2FyZXQtY29sb3JcIixcbiAgICBcImNsZWFyXCIsIFwiY2xpcFwiLCBcImNvbG9yXCIsIFwiY29sb3ItcHJvZmlsZVwiLCBcImNvbHVtbi1jb3VudFwiLCBcImNvbHVtbi1maWxsXCIsXG4gICAgXCJjb2x1bW4tZ2FwXCIsIFwiY29sdW1uLXJ1bGVcIiwgXCJjb2x1bW4tcnVsZS1jb2xvclwiLCBcImNvbHVtbi1ydWxlLXN0eWxlXCIsXG4gICAgXCJjb2x1bW4tcnVsZS13aWR0aFwiLCBcImNvbHVtbi1zcGFuXCIsIFwiY29sdW1uLXdpZHRoXCIsIFwiY29sdW1uc1wiLCBcImNvbnRhaW5cIixcbiAgICBcImNvbnRlbnRcIiwgXCJjb3VudGVyLWluY3JlbWVudFwiLCBcImNvdW50ZXItcmVzZXRcIiwgXCJjcm9wXCIsIFwiY3VlXCIsIFwiY3VlLWFmdGVyXCIsXG4gICAgXCJjdWUtYmVmb3JlXCIsIFwiY3Vyc29yXCIsIFwiZGlyZWN0aW9uXCIsIFwiZGlzcGxheVwiLCBcImRvbWluYW50LWJhc2VsaW5lXCIsXG4gICAgXCJkcm9wLWluaXRpYWwtYWZ0ZXItYWRqdXN0XCIsIFwiZHJvcC1pbml0aWFsLWFmdGVyLWFsaWduXCIsXG4gICAgXCJkcm9wLWluaXRpYWwtYmVmb3JlLWFkanVzdFwiLCBcImRyb3AtaW5pdGlhbC1iZWZvcmUtYWxpZ25cIiwgXCJkcm9wLWluaXRpYWwtc2l6ZVwiLFxuICAgIFwiZHJvcC1pbml0aWFsLXZhbHVlXCIsIFwiZWxldmF0aW9uXCIsIFwiZW1wdHktY2VsbHNcIiwgXCJmaXRcIiwgXCJmaXQtcG9zaXRpb25cIixcbiAgICBcImZsZXhcIiwgXCJmbGV4LWJhc2lzXCIsIFwiZmxleC1kaXJlY3Rpb25cIiwgXCJmbGV4LWZsb3dcIiwgXCJmbGV4LWdyb3dcIixcbiAgICBcImZsZXgtc2hyaW5rXCIsIFwiZmxleC13cmFwXCIsIFwiZmxvYXRcIiwgXCJmbG9hdC1vZmZzZXRcIiwgXCJmbG93LWZyb21cIiwgXCJmbG93LWludG9cIixcbiAgICBcImZvbnRcIiwgXCJmb250LWZhbWlseVwiLCBcImZvbnQtZmVhdHVyZS1zZXR0aW5nc1wiLCBcImZvbnQta2VybmluZ1wiLFxuICAgIFwiZm9udC1sYW5ndWFnZS1vdmVycmlkZVwiLCBcImZvbnQtb3B0aWNhbC1zaXppbmdcIiwgXCJmb250LXNpemVcIixcbiAgICBcImZvbnQtc2l6ZS1hZGp1c3RcIiwgXCJmb250LXN0cmV0Y2hcIiwgXCJmb250LXN0eWxlXCIsIFwiZm9udC1zeW50aGVzaXNcIixcbiAgICBcImZvbnQtdmFyaWFudFwiLCBcImZvbnQtdmFyaWFudC1hbHRlcm5hdGVzXCIsIFwiZm9udC12YXJpYW50LWNhcHNcIixcbiAgICBcImZvbnQtdmFyaWFudC1lYXN0LWFzaWFuXCIsIFwiZm9udC12YXJpYW50LWxpZ2F0dXJlc1wiLCBcImZvbnQtdmFyaWFudC1udW1lcmljXCIsXG4gICAgXCJmb250LXZhcmlhbnQtcG9zaXRpb25cIiwgXCJmb250LXZhcmlhdGlvbi1zZXR0aW5nc1wiLCBcImZvbnQtd2VpZ2h0XCIsIFwiZ2FwXCIsXG4gICAgXCJncmlkXCIsIFwiZ3JpZC1hcmVhXCIsIFwiZ3JpZC1hdXRvLWNvbHVtbnNcIiwgXCJncmlkLWF1dG8tZmxvd1wiLCBcImdyaWQtYXV0by1yb3dzXCIsXG4gICAgXCJncmlkLWNvbHVtblwiLCBcImdyaWQtY29sdW1uLWVuZFwiLCBcImdyaWQtY29sdW1uLWdhcFwiLCBcImdyaWQtY29sdW1uLXN0YXJ0XCIsXG4gICAgXCJncmlkLWdhcFwiLCBcImdyaWQtcm93XCIsIFwiZ3JpZC1yb3ctZW5kXCIsIFwiZ3JpZC1yb3ctZ2FwXCIsIFwiZ3JpZC1yb3ctc3RhcnRcIixcbiAgICBcImdyaWQtdGVtcGxhdGVcIiwgXCJncmlkLXRlbXBsYXRlLWFyZWFzXCIsIFwiZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXCIsXG4gICAgXCJncmlkLXRlbXBsYXRlLXJvd3NcIiwgXCJoYW5naW5nLXB1bmN0dWF0aW9uXCIsIFwiaGVpZ2h0XCIsIFwiaHlwaGVuc1wiLCBcImljb25cIixcbiAgICBcImltYWdlLW9yaWVudGF0aW9uXCIsIFwiaW1hZ2UtcmVuZGVyaW5nXCIsIFwiaW1hZ2UtcmVzb2x1dGlvblwiLCBcImlubGluZS1ib3gtYWxpZ25cIixcbiAgICBcImluc2V0XCIsIFwiaW5zZXQtYmxvY2tcIiwgXCJpbnNldC1ibG9jay1lbmRcIiwgXCJpbnNldC1ibG9jay1zdGFydFwiLCBcImluc2V0LWlubGluZVwiLFxuICAgIFwiaW5zZXQtaW5saW5lLWVuZFwiLCBcImluc2V0LWlubGluZS1zdGFydFwiLCBcImlzb2xhdGlvblwiLCBcImp1c3RpZnktY29udGVudFwiLFxuICAgIFwianVzdGlmeS1pdGVtc1wiLCBcImp1c3RpZnktc2VsZlwiLCBcImxlZnRcIiwgXCJsZXR0ZXItc3BhY2luZ1wiLCBcImxpbmUtYnJlYWtcIixcbiAgICBcImxpbmUtaGVpZ2h0XCIsIFwibGluZS1oZWlnaHQtc3RlcFwiLCBcImxpbmUtc3RhY2tpbmdcIiwgXCJsaW5lLXN0YWNraW5nLXJ1YnlcIixcbiAgICBcImxpbmUtc3RhY2tpbmctc2hpZnRcIiwgXCJsaW5lLXN0YWNraW5nLXN0cmF0ZWd5XCIsIFwibGlzdC1zdHlsZVwiLFxuICAgIFwibGlzdC1zdHlsZS1pbWFnZVwiLCBcImxpc3Qtc3R5bGUtcG9zaXRpb25cIiwgXCJsaXN0LXN0eWxlLXR5cGVcIiwgXCJtYXJnaW5cIixcbiAgICBcIm1hcmdpbi1ib3R0b21cIiwgXCJtYXJnaW4tbGVmdFwiLCBcIm1hcmdpbi1yaWdodFwiLCBcIm1hcmdpbi10b3BcIiwgXCJtYXJrc1wiLFxuICAgIFwibWFycXVlZS1kaXJlY3Rpb25cIiwgXCJtYXJxdWVlLWxvb3BcIiwgXCJtYXJxdWVlLXBsYXktY291bnRcIiwgXCJtYXJxdWVlLXNwZWVkXCIsXG4gICAgXCJtYXJxdWVlLXN0eWxlXCIsIFwibWFzay1jbGlwXCIsIFwibWFzay1jb21wb3NpdGVcIiwgXCJtYXNrLWltYWdlXCIsIFwibWFzay1tb2RlXCIsXG4gICAgXCJtYXNrLW9yaWdpblwiLCBcIm1hc2stcG9zaXRpb25cIiwgXCJtYXNrLXJlcGVhdFwiLCBcIm1hc2stc2l6ZVwiLFwibWFzay10eXBlXCIsXG4gICAgXCJtYXgtYmxvY2stc2l6ZVwiLCBcIm1heC1oZWlnaHRcIiwgXCJtYXgtaW5saW5lLXNpemVcIixcbiAgICBcIm1heC13aWR0aFwiLCBcIm1pbi1ibG9jay1zaXplXCIsIFwibWluLWhlaWdodFwiLCBcIm1pbi1pbmxpbmUtc2l6ZVwiLCBcIm1pbi13aWR0aFwiLFxuICAgIFwibWl4LWJsZW5kLW1vZGVcIiwgXCJtb3ZlLXRvXCIsIFwibmF2LWRvd25cIiwgXCJuYXYtaW5kZXhcIiwgXCJuYXYtbGVmdFwiLCBcIm5hdi1yaWdodFwiLFxuICAgIFwibmF2LXVwXCIsIFwib2JqZWN0LWZpdFwiLCBcIm9iamVjdC1wb3NpdGlvblwiLCBcIm9mZnNldFwiLCBcIm9mZnNldC1hbmNob3JcIixcbiAgICBcIm9mZnNldC1kaXN0YW5jZVwiLCBcIm9mZnNldC1wYXRoXCIsIFwib2Zmc2V0LXBvc2l0aW9uXCIsIFwib2Zmc2V0LXJvdGF0ZVwiLFxuICAgIFwib3BhY2l0eVwiLCBcIm9yZGVyXCIsIFwib3JwaGFuc1wiLCBcIm91dGxpbmVcIiwgXCJvdXRsaW5lLWNvbG9yXCIsIFwib3V0bGluZS1vZmZzZXRcIixcbiAgICBcIm91dGxpbmUtc3R5bGVcIiwgXCJvdXRsaW5lLXdpZHRoXCIsIFwib3ZlcmZsb3dcIiwgXCJvdmVyZmxvdy1zdHlsZVwiLFxuICAgIFwib3ZlcmZsb3ctd3JhcFwiLCBcIm92ZXJmbG93LXhcIiwgXCJvdmVyZmxvdy15XCIsIFwicGFkZGluZ1wiLCBcInBhZGRpbmctYm90dG9tXCIsXG4gICAgXCJwYWRkaW5nLWxlZnRcIiwgXCJwYWRkaW5nLXJpZ2h0XCIsIFwicGFkZGluZy10b3BcIiwgXCJwYWdlXCIsIFwicGFnZS1icmVhay1hZnRlclwiLFxuICAgIFwicGFnZS1icmVhay1iZWZvcmVcIiwgXCJwYWdlLWJyZWFrLWluc2lkZVwiLCBcInBhZ2UtcG9saWN5XCIsIFwicGF1c2VcIixcbiAgICBcInBhdXNlLWFmdGVyXCIsIFwicGF1c2UtYmVmb3JlXCIsIFwicGVyc3BlY3RpdmVcIiwgXCJwZXJzcGVjdGl2ZS1vcmlnaW5cIiwgXCJwaXRjaFwiLFxuICAgIFwicGl0Y2gtcmFuZ2VcIiwgXCJwbGFjZS1jb250ZW50XCIsIFwicGxhY2UtaXRlbXNcIiwgXCJwbGFjZS1zZWxmXCIsIFwicGxheS1kdXJpbmdcIixcbiAgICBcInBvc2l0aW9uXCIsIFwicHJlc2VudGF0aW9uLWxldmVsXCIsIFwicHVuY3R1YXRpb24tdHJpbVwiLCBcInF1b3Rlc1wiLFxuICAgIFwicmVnaW9uLWJyZWFrLWFmdGVyXCIsIFwicmVnaW9uLWJyZWFrLWJlZm9yZVwiLCBcInJlZ2lvbi1icmVhay1pbnNpZGVcIixcbiAgICBcInJlZ2lvbi1mcmFnbWVudFwiLCBcInJlbmRlcmluZy1pbnRlbnRcIiwgXCJyZXNpemVcIiwgXCJyZXN0XCIsIFwicmVzdC1hZnRlclwiLFxuICAgIFwicmVzdC1iZWZvcmVcIiwgXCJyaWNobmVzc1wiLCBcInJpZ2h0XCIsIFwicm90YXRlXCIsIFwicm90YXRpb25cIiwgXCJyb3RhdGlvbi1wb2ludFwiLFxuICAgIFwicm93LWdhcFwiLCBcInJ1YnktYWxpZ25cIiwgXCJydWJ5LW92ZXJoYW5nXCIsIFwicnVieS1wb3NpdGlvblwiLCBcInJ1Ynktc3BhblwiLFxuICAgIFwic2NhbGVcIiwgXCJzY3JvbGwtYmVoYXZpb3JcIiwgXCJzY3JvbGwtbWFyZ2luXCIsIFwic2Nyb2xsLW1hcmdpbi1ibG9ja1wiLFxuICAgIFwic2Nyb2xsLW1hcmdpbi1ibG9jay1lbmRcIiwgXCJzY3JvbGwtbWFyZ2luLWJsb2NrLXN0YXJ0XCIsIFwic2Nyb2xsLW1hcmdpbi1ib3R0b21cIixcbiAgICBcInNjcm9sbC1tYXJnaW4taW5saW5lXCIsIFwic2Nyb2xsLW1hcmdpbi1pbmxpbmUtZW5kXCIsXG4gICAgXCJzY3JvbGwtbWFyZ2luLWlubGluZS1zdGFydFwiLCBcInNjcm9sbC1tYXJnaW4tbGVmdFwiLCBcInNjcm9sbC1tYXJnaW4tcmlnaHRcIixcbiAgICBcInNjcm9sbC1tYXJnaW4tdG9wXCIsIFwic2Nyb2xsLXBhZGRpbmdcIiwgXCJzY3JvbGwtcGFkZGluZy1ibG9ja1wiLFxuICAgIFwic2Nyb2xsLXBhZGRpbmctYmxvY2stZW5kXCIsIFwic2Nyb2xsLXBhZGRpbmctYmxvY2stc3RhcnRcIixcbiAgICBcInNjcm9sbC1wYWRkaW5nLWJvdHRvbVwiLCBcInNjcm9sbC1wYWRkaW5nLWlubGluZVwiLCBcInNjcm9sbC1wYWRkaW5nLWlubGluZS1lbmRcIixcbiAgICBcInNjcm9sbC1wYWRkaW5nLWlubGluZS1zdGFydFwiLCBcInNjcm9sbC1wYWRkaW5nLWxlZnRcIiwgXCJzY3JvbGwtcGFkZGluZy1yaWdodFwiLFxuICAgIFwic2Nyb2xsLXBhZGRpbmctdG9wXCIsIFwic2Nyb2xsLXNuYXAtYWxpZ25cIiwgXCJzY3JvbGwtc25hcC10eXBlXCIsXG4gICAgXCJzaGFwZS1pbWFnZS10aHJlc2hvbGRcIiwgXCJzaGFwZS1pbnNpZGVcIiwgXCJzaGFwZS1tYXJnaW5cIiwgXCJzaGFwZS1vdXRzaWRlXCIsXG4gICAgXCJzaXplXCIsIFwic3BlYWtcIiwgXCJzcGVhay1hc1wiLCBcInNwZWFrLWhlYWRlclwiLCBcInNwZWFrLW51bWVyYWxcIixcbiAgICBcInNwZWFrLXB1bmN0dWF0aW9uXCIsIFwic3BlZWNoLXJhdGVcIiwgXCJzdHJlc3NcIiwgXCJzdHJpbmctc2V0XCIsIFwidGFiLXNpemVcIixcbiAgICBcInRhYmxlLWxheW91dFwiLCBcInRhcmdldFwiLCBcInRhcmdldC1uYW1lXCIsIFwidGFyZ2V0LW5ld1wiLCBcInRhcmdldC1wb3NpdGlvblwiLFxuICAgIFwidGV4dC1hbGlnblwiLCBcInRleHQtYWxpZ24tbGFzdFwiLCBcInRleHQtY29tYmluZS11cHJpZ2h0XCIsIFwidGV4dC1kZWNvcmF0aW9uXCIsXG4gICAgXCJ0ZXh0LWRlY29yYXRpb24tY29sb3JcIiwgXCJ0ZXh0LWRlY29yYXRpb24tbGluZVwiLCBcInRleHQtZGVjb3JhdGlvbi1za2lwXCIsXG4gICAgXCJ0ZXh0LWRlY29yYXRpb24tc2tpcC1pbmtcIiwgXCJ0ZXh0LWRlY29yYXRpb24tc3R5bGVcIiwgXCJ0ZXh0LWVtcGhhc2lzXCIsXG4gICAgXCJ0ZXh0LWVtcGhhc2lzLWNvbG9yXCIsIFwidGV4dC1lbXBoYXNpcy1wb3NpdGlvblwiLCBcInRleHQtZW1waGFzaXMtc3R5bGVcIixcbiAgICBcInRleHQtaGVpZ2h0XCIsIFwidGV4dC1pbmRlbnRcIiwgXCJ0ZXh0LWp1c3RpZnlcIiwgXCJ0ZXh0LW9yaWVudGF0aW9uXCIsXG4gICAgXCJ0ZXh0LW91dGxpbmVcIiwgXCJ0ZXh0LW92ZXJmbG93XCIsIFwidGV4dC1yZW5kZXJpbmdcIiwgXCJ0ZXh0LXNoYWRvd1wiLFxuICAgIFwidGV4dC1zaXplLWFkanVzdFwiLCBcInRleHQtc3BhY2UtY29sbGFwc2VcIiwgXCJ0ZXh0LXRyYW5zZm9ybVwiLFxuICAgIFwidGV4dC11bmRlcmxpbmUtcG9zaXRpb25cIiwgXCJ0ZXh0LXdyYXBcIiwgXCJ0b3BcIiwgXCJ0b3VjaC1hY3Rpb25cIiwgXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2Zvcm0tb3JpZ2luXCIsXG4gICAgXCJ0cmFuc2Zvcm0tc3R5bGVcIiwgXCJ0cmFuc2l0aW9uXCIsIFwidHJhbnNpdGlvbi1kZWxheVwiLCBcInRyYW5zaXRpb24tZHVyYXRpb25cIixcbiAgICBcInRyYW5zaXRpb24tcHJvcGVydHlcIiwgXCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvblwiLCBcInRyYW5zbGF0ZVwiLFxuICAgIFwidW5pY29kZS1iaWRpXCIsIFwidXNlci1zZWxlY3RcIiwgXCJ2ZXJ0aWNhbC1hbGlnblwiLCBcInZpc2liaWxpdHlcIiwgXCJ2b2ljZS1iYWxhbmNlXCIsXG4gICAgXCJ2b2ljZS1kdXJhdGlvblwiLCBcInZvaWNlLWZhbWlseVwiLCBcInZvaWNlLXBpdGNoXCIsIFwidm9pY2UtcmFuZ2VcIiwgXCJ2b2ljZS1yYXRlXCIsXG4gICAgXCJ2b2ljZS1zdHJlc3NcIiwgXCJ2b2ljZS12b2x1bWVcIiwgXCJ2b2x1bWVcIiwgXCJ3aGl0ZS1zcGFjZVwiLCBcIndpZG93c1wiLCBcIndpZHRoXCIsXG4gICAgXCJ3aWxsLWNoYW5nZVwiLCBcIndvcmQtYnJlYWtcIiwgXCJ3b3JkLXNwYWNpbmdcIiwgXCJ3b3JkLXdyYXBcIiwgXCJ3cml0aW5nLW1vZGVcIiwgXCJ6LWluZGV4XCIsXG4gICAgLy8gU1ZHLXNwZWNpZmljXG4gICAgXCJjbGlwLXBhdGhcIiwgXCJjbGlwLXJ1bGVcIiwgXCJtYXNrXCIsIFwiZW5hYmxlLWJhY2tncm91bmRcIiwgXCJmaWx0ZXJcIiwgXCJmbG9vZC1jb2xvclwiLFxuICAgIFwiZmxvb2Qtb3BhY2l0eVwiLCBcImxpZ2h0aW5nLWNvbG9yXCIsIFwic3RvcC1jb2xvclwiLCBcInN0b3Atb3BhY2l0eVwiLCBcInBvaW50ZXItZXZlbnRzXCIsXG4gICAgXCJjb2xvci1pbnRlcnBvbGF0aW9uXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCIsXG4gICAgXCJjb2xvci1yZW5kZXJpbmdcIiwgXCJmaWxsXCIsIFwiZmlsbC1vcGFjaXR5XCIsIFwiZmlsbC1ydWxlXCIsIFwiaW1hZ2UtcmVuZGVyaW5nXCIsXG4gICAgXCJtYXJrZXJcIiwgXCJtYXJrZXItZW5kXCIsIFwibWFya2VyLW1pZFwiLCBcIm1hcmtlci1zdGFydFwiLCBcInBhaW50LW9yZGVyXCIsIFwic2hhcGUtcmVuZGVyaW5nXCIsIFwic3Ryb2tlXCIsXG4gICAgXCJzdHJva2UtZGFzaGFycmF5XCIsIFwic3Ryb2tlLWRhc2hvZmZzZXRcIiwgXCJzdHJva2UtbGluZWNhcFwiLCBcInN0cm9rZS1saW5lam9pblwiLFxuICAgIFwic3Ryb2tlLW1pdGVybGltaXRcIiwgXCJzdHJva2Utb3BhY2l0eVwiLCBcInN0cm9rZS13aWR0aFwiLCBcInRleHQtcmVuZGVyaW5nXCIsXG4gICAgXCJiYXNlbGluZS1zaGlmdFwiLCBcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiLFxuICAgIFwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWxcIiwgXCJ0ZXh0LWFuY2hvclwiLCBcIndyaXRpbmctbW9kZVwiLFxuICBdLCBwcm9wZXJ0eUtleXdvcmRzID0ga2V5U2V0KHByb3BlcnR5S2V5d29yZHNfKTtcblxuICB2YXIgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzXyA9IFtcbiAgICBcImJvcmRlci1ibG9ja1wiLCBcImJvcmRlci1ibG9jay1jb2xvclwiLCBcImJvcmRlci1ibG9jay1lbmRcIixcbiAgICBcImJvcmRlci1ibG9jay1lbmQtY29sb3JcIiwgXCJib3JkZXItYmxvY2stZW5kLXN0eWxlXCIsIFwiYm9yZGVyLWJsb2NrLWVuZC13aWR0aFwiLFxuICAgIFwiYm9yZGVyLWJsb2NrLXN0YXJ0XCIsIFwiYm9yZGVyLWJsb2NrLXN0YXJ0LWNvbG9yXCIsIFwiYm9yZGVyLWJsb2NrLXN0YXJ0LXN0eWxlXCIsXG4gICAgXCJib3JkZXItYmxvY2stc3RhcnQtd2lkdGhcIiwgXCJib3JkZXItYmxvY2stc3R5bGVcIiwgXCJib3JkZXItYmxvY2std2lkdGhcIixcbiAgICBcImJvcmRlci1pbmxpbmVcIiwgXCJib3JkZXItaW5saW5lLWNvbG9yXCIsIFwiYm9yZGVyLWlubGluZS1lbmRcIixcbiAgICBcImJvcmRlci1pbmxpbmUtZW5kLWNvbG9yXCIsIFwiYm9yZGVyLWlubGluZS1lbmQtc3R5bGVcIixcbiAgICBcImJvcmRlci1pbmxpbmUtZW5kLXdpZHRoXCIsIFwiYm9yZGVyLWlubGluZS1zdGFydFwiLCBcImJvcmRlci1pbmxpbmUtc3RhcnQtY29sb3JcIixcbiAgICBcImJvcmRlci1pbmxpbmUtc3RhcnQtc3R5bGVcIiwgXCJib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoXCIsXG4gICAgXCJib3JkZXItaW5saW5lLXN0eWxlXCIsIFwiYm9yZGVyLWlubGluZS13aWR0aFwiLCBcIm1hcmdpbi1ibG9ja1wiLFxuICAgIFwibWFyZ2luLWJsb2NrLWVuZFwiLCBcIm1hcmdpbi1ibG9jay1zdGFydFwiLCBcIm1hcmdpbi1pbmxpbmVcIiwgXCJtYXJnaW4taW5saW5lLWVuZFwiLFxuICAgIFwibWFyZ2luLWlubGluZS1zdGFydFwiLCBcInBhZGRpbmctYmxvY2tcIiwgXCJwYWRkaW5nLWJsb2NrLWVuZFwiLFxuICAgIFwicGFkZGluZy1ibG9jay1zdGFydFwiLCBcInBhZGRpbmctaW5saW5lXCIsIFwicGFkZGluZy1pbmxpbmUtZW5kXCIsXG4gICAgXCJwYWRkaW5nLWlubGluZS1zdGFydFwiLCBcInNjcm9sbC1zbmFwLXN0b3BcIiwgXCJzY3JvbGxiYXItM2QtbGlnaHQtY29sb3JcIixcbiAgICBcInNjcm9sbGJhci1hcnJvdy1jb2xvclwiLCBcInNjcm9sbGJhci1iYXNlLWNvbG9yXCIsIFwic2Nyb2xsYmFyLWRhcmstc2hhZG93LWNvbG9yXCIsXG4gICAgXCJzY3JvbGxiYXItZmFjZS1jb2xvclwiLCBcInNjcm9sbGJhci1oaWdobGlnaHQtY29sb3JcIiwgXCJzY3JvbGxiYXItc2hhZG93LWNvbG9yXCIsXG4gICAgXCJzY3JvbGxiYXItdHJhY2stY29sb3JcIiwgXCJzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uXCIsIFwic2VhcmNoZmllbGQtZGVjb3JhdGlvblwiLFxuICAgIFwic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b25cIiwgXCJzZWFyY2hmaWVsZC1yZXN1bHRzLWRlY29yYXRpb25cIiwgXCJzaGFwZS1pbnNpZGVcIiwgXCJ6b29tXCJcbiAgXSwgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzID0ga2V5U2V0KG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkc18pO1xuXG4gIHZhciBmb250UHJvcGVydGllc18gPSBbXG4gICAgXCJmb250LWRpc3BsYXlcIiwgXCJmb250LWZhbWlseVwiLCBcInNyY1wiLCBcInVuaWNvZGUtcmFuZ2VcIiwgXCJmb250LXZhcmlhbnRcIixcbiAgICAgXCJmb250LWZlYXR1cmUtc2V0dGluZ3NcIiwgXCJmb250LXN0cmV0Y2hcIiwgXCJmb250LXdlaWdodFwiLCBcImZvbnQtc3R5bGVcIlxuICBdLCBmb250UHJvcGVydGllcyA9IGtleVNldChmb250UHJvcGVydGllc18pO1xuXG4gIHZhciBjb3VudGVyRGVzY3JpcHRvcnNfID0gW1xuICAgIFwiYWRkaXRpdmUtc3ltYm9sc1wiLCBcImZhbGxiYWNrXCIsIFwibmVnYXRpdmVcIiwgXCJwYWRcIiwgXCJwcmVmaXhcIiwgXCJyYW5nZVwiLFxuICAgIFwic3BlYWstYXNcIiwgXCJzdWZmaXhcIiwgXCJzeW1ib2xzXCIsIFwic3lzdGVtXCJcbiAgXSwgY291bnRlckRlc2NyaXB0b3JzID0ga2V5U2V0KGNvdW50ZXJEZXNjcmlwdG9yc18pO1xuXG4gIHZhciBjb2xvcktleXdvcmRzXyA9IFtcbiAgICBcImFsaWNlYmx1ZVwiLCBcImFudGlxdWV3aGl0ZVwiLCBcImFxdWFcIiwgXCJhcXVhbWFyaW5lXCIsIFwiYXp1cmVcIiwgXCJiZWlnZVwiLFxuICAgIFwiYmlzcXVlXCIsIFwiYmxhY2tcIiwgXCJibGFuY2hlZGFsbW9uZFwiLCBcImJsdWVcIiwgXCJibHVldmlvbGV0XCIsIFwiYnJvd25cIixcbiAgICBcImJ1cmx5d29vZFwiLCBcImNhZGV0Ymx1ZVwiLCBcImNoYXJ0cmV1c2VcIiwgXCJjaG9jb2xhdGVcIiwgXCJjb3JhbFwiLCBcImNvcm5mbG93ZXJibHVlXCIsXG4gICAgXCJjb3Juc2lsa1wiLCBcImNyaW1zb25cIiwgXCJjeWFuXCIsIFwiZGFya2JsdWVcIiwgXCJkYXJrY3lhblwiLCBcImRhcmtnb2xkZW5yb2RcIixcbiAgICBcImRhcmtncmF5XCIsIFwiZGFya2dyZWVuXCIsIFwiZGFya2toYWtpXCIsIFwiZGFya21hZ2VudGFcIiwgXCJkYXJrb2xpdmVncmVlblwiLFxuICAgIFwiZGFya29yYW5nZVwiLCBcImRhcmtvcmNoaWRcIiwgXCJkYXJrcmVkXCIsIFwiZGFya3NhbG1vblwiLCBcImRhcmtzZWFncmVlblwiLFxuICAgIFwiZGFya3NsYXRlYmx1ZVwiLCBcImRhcmtzbGF0ZWdyYXlcIiwgXCJkYXJrdHVycXVvaXNlXCIsIFwiZGFya3Zpb2xldFwiLFxuICAgIFwiZGVlcHBpbmtcIiwgXCJkZWVwc2t5Ymx1ZVwiLCBcImRpbWdyYXlcIiwgXCJkb2RnZXJibHVlXCIsIFwiZmlyZWJyaWNrXCIsXG4gICAgXCJmbG9yYWx3aGl0ZVwiLCBcImZvcmVzdGdyZWVuXCIsIFwiZnVjaHNpYVwiLCBcImdhaW5zYm9yb1wiLCBcImdob3N0d2hpdGVcIixcbiAgICBcImdvbGRcIiwgXCJnb2xkZW5yb2RcIiwgXCJncmF5XCIsIFwiZ3JleVwiLCBcImdyZWVuXCIsIFwiZ3JlZW55ZWxsb3dcIiwgXCJob25leWRld1wiLFxuICAgIFwiaG90cGlua1wiLCBcImluZGlhbnJlZFwiLCBcImluZGlnb1wiLCBcIml2b3J5XCIsIFwia2hha2lcIiwgXCJsYXZlbmRlclwiLFxuICAgIFwibGF2ZW5kZXJibHVzaFwiLCBcImxhd25ncmVlblwiLCBcImxlbW9uY2hpZmZvblwiLCBcImxpZ2h0Ymx1ZVwiLCBcImxpZ2h0Y29yYWxcIixcbiAgICBcImxpZ2h0Y3lhblwiLCBcImxpZ2h0Z29sZGVucm9keWVsbG93XCIsIFwibGlnaHRncmF5XCIsIFwibGlnaHRncmVlblwiLCBcImxpZ2h0cGlua1wiLFxuICAgIFwibGlnaHRzYWxtb25cIiwgXCJsaWdodHNlYWdyZWVuXCIsIFwibGlnaHRza3libHVlXCIsIFwibGlnaHRzbGF0ZWdyYXlcIixcbiAgICBcImxpZ2h0c3RlZWxibHVlXCIsIFwibGlnaHR5ZWxsb3dcIiwgXCJsaW1lXCIsIFwibGltZWdyZWVuXCIsIFwibGluZW5cIiwgXCJtYWdlbnRhXCIsXG4gICAgXCJtYXJvb25cIiwgXCJtZWRpdW1hcXVhbWFyaW5lXCIsIFwibWVkaXVtYmx1ZVwiLCBcIm1lZGl1bW9yY2hpZFwiLCBcIm1lZGl1bXB1cnBsZVwiLFxuICAgIFwibWVkaXVtc2VhZ3JlZW5cIiwgXCJtZWRpdW1zbGF0ZWJsdWVcIiwgXCJtZWRpdW1zcHJpbmdncmVlblwiLCBcIm1lZGl1bXR1cnF1b2lzZVwiLFxuICAgIFwibWVkaXVtdmlvbGV0cmVkXCIsIFwibWlkbmlnaHRibHVlXCIsIFwibWludGNyZWFtXCIsIFwibWlzdHlyb3NlXCIsIFwibW9jY2FzaW5cIixcbiAgICBcIm5hdmFqb3doaXRlXCIsIFwibmF2eVwiLCBcIm9sZGxhY2VcIiwgXCJvbGl2ZVwiLCBcIm9saXZlZHJhYlwiLCBcIm9yYW5nZVwiLCBcIm9yYW5nZXJlZFwiLFxuICAgIFwib3JjaGlkXCIsIFwicGFsZWdvbGRlbnJvZFwiLCBcInBhbGVncmVlblwiLCBcInBhbGV0dXJxdW9pc2VcIiwgXCJwYWxldmlvbGV0cmVkXCIsXG4gICAgXCJwYXBheWF3aGlwXCIsIFwicGVhY2hwdWZmXCIsIFwicGVydVwiLCBcInBpbmtcIiwgXCJwbHVtXCIsIFwicG93ZGVyYmx1ZVwiLFxuICAgIFwicHVycGxlXCIsIFwicmViZWNjYXB1cnBsZVwiLCBcInJlZFwiLCBcInJvc3licm93blwiLCBcInJveWFsYmx1ZVwiLCBcInNhZGRsZWJyb3duXCIsXG4gICAgXCJzYWxtb25cIiwgXCJzYW5keWJyb3duXCIsIFwic2VhZ3JlZW5cIiwgXCJzZWFzaGVsbFwiLCBcInNpZW5uYVwiLCBcInNpbHZlclwiLCBcInNreWJsdWVcIixcbiAgICBcInNsYXRlYmx1ZVwiLCBcInNsYXRlZ3JheVwiLCBcInNub3dcIiwgXCJzcHJpbmdncmVlblwiLCBcInN0ZWVsYmx1ZVwiLCBcInRhblwiLFxuICAgIFwidGVhbFwiLCBcInRoaXN0bGVcIiwgXCJ0b21hdG9cIiwgXCJ0dXJxdW9pc2VcIiwgXCJ2aW9sZXRcIiwgXCJ3aGVhdFwiLCBcIndoaXRlXCIsXG4gICAgXCJ3aGl0ZXNtb2tlXCIsIFwieWVsbG93XCIsIFwieWVsbG93Z3JlZW5cIlxuICBdLCBjb2xvcktleXdvcmRzID0ga2V5U2V0KGNvbG9yS2V5d29yZHNfKTtcblxuICB2YXIgdmFsdWVLZXl3b3Jkc18gPSBbXG4gICAgXCJhYm92ZVwiLCBcImFic29sdXRlXCIsIFwiYWN0aXZlYm9yZGVyXCIsIFwiYWRkaXRpdmVcIiwgXCJhY3RpdmVjYXB0aW9uXCIsIFwiYWZhclwiLFxuICAgIFwiYWZ0ZXItd2hpdGUtc3BhY2VcIiwgXCJhaGVhZFwiLCBcImFsaWFzXCIsIFwiYWxsXCIsIFwiYWxsLXNjcm9sbFwiLCBcImFscGhhYmV0aWNcIiwgXCJhbHRlcm5hdGVcIixcbiAgICBcImFsd2F5c1wiLCBcImFtaGFyaWNcIiwgXCJhbWhhcmljLWFiZWdlZGVcIiwgXCJhbnRpYWxpYXNlZFwiLCBcImFwcHdvcmtzcGFjZVwiLFxuICAgIFwiYXJhYmljLWluZGljXCIsIFwiYXJtZW5pYW5cIiwgXCJhc3Rlcmlza3NcIiwgXCJhdHRyXCIsIFwiYXV0b1wiLCBcImF1dG8tZmxvd1wiLCBcImF2b2lkXCIsIFwiYXZvaWQtY29sdW1uXCIsIFwiYXZvaWQtcGFnZVwiLFxuICAgIFwiYXZvaWQtcmVnaW9uXCIsIFwiYXhpcy1wYW5cIiwgXCJiYWNrZ3JvdW5kXCIsIFwiYmFja3dhcmRzXCIsIFwiYmFzZWxpbmVcIiwgXCJiZWxvd1wiLCBcImJpZGktb3ZlcnJpZGVcIiwgXCJiaW5hcnlcIixcbiAgICBcImJlbmdhbGlcIiwgXCJibGlua1wiLCBcImJsb2NrXCIsIFwiYmxvY2stYXhpc1wiLCBcImJvbGRcIiwgXCJib2xkZXJcIiwgXCJib3JkZXJcIiwgXCJib3JkZXItYm94XCIsXG4gICAgXCJib3RoXCIsIFwiYm90dG9tXCIsIFwiYnJlYWtcIiwgXCJicmVhay1hbGxcIiwgXCJicmVhay13b3JkXCIsIFwiYnVsbGV0c1wiLCBcImJ1dHRvblwiLCBcImJ1dHRvbi1iZXZlbFwiLFxuICAgIFwiYnV0dG9uZmFjZVwiLCBcImJ1dHRvbmhpZ2hsaWdodFwiLCBcImJ1dHRvbnNoYWRvd1wiLCBcImJ1dHRvbnRleHRcIiwgXCJjYWxjXCIsIFwiY2FtYm9kaWFuXCIsXG4gICAgXCJjYXBpdGFsaXplXCIsIFwiY2Fwcy1sb2NrLWluZGljYXRvclwiLCBcImNhcHRpb25cIiwgXCJjYXB0aW9udGV4dFwiLCBcImNhcmV0XCIsXG4gICAgXCJjZWxsXCIsIFwiY2VudGVyXCIsIFwiY2hlY2tib3hcIiwgXCJjaXJjbGVcIiwgXCJjamstZGVjaW1hbFwiLCBcImNqay1lYXJ0aGx5LWJyYW5jaFwiLFxuICAgIFwiY2prLWhlYXZlbmx5LXN0ZW1cIiwgXCJjamstaWRlb2dyYXBoaWNcIiwgXCJjbGVhclwiLCBcImNsaXBcIiwgXCJjbG9zZS1xdW90ZVwiLFxuICAgIFwiY29sLXJlc2l6ZVwiLCBcImNvbGxhcHNlXCIsIFwiY29sb3JcIiwgXCJjb2xvci1idXJuXCIsIFwiY29sb3ItZG9kZ2VcIiwgXCJjb2x1bW5cIiwgXCJjb2x1bW4tcmV2ZXJzZVwiLFxuICAgIFwiY29tcGFjdFwiLCBcImNvbmRlbnNlZFwiLCBcImNvbnRhaW5cIiwgXCJjb250ZW50XCIsIFwiY29udGVudHNcIixcbiAgICBcImNvbnRlbnQtYm94XCIsIFwiY29udGV4dC1tZW51XCIsIFwiY29udGludW91c1wiLCBcImNvcHlcIiwgXCJjb3VudGVyXCIsIFwiY291bnRlcnNcIiwgXCJjb3ZlclwiLCBcImNyb3BcIixcbiAgICBcImNyb3NzXCIsIFwiY3Jvc3NoYWlyXCIsIFwiY3VycmVudGNvbG9yXCIsIFwiY3Vyc2l2ZVwiLCBcImN5Y2xpY1wiLCBcImRhcmtlblwiLCBcImRhc2hlZFwiLCBcImRlY2ltYWxcIixcbiAgICBcImRlY2ltYWwtbGVhZGluZy16ZXJvXCIsIFwiZGVmYXVsdFwiLCBcImRlZmF1bHQtYnV0dG9uXCIsIFwiZGVuc2VcIiwgXCJkZXN0aW5hdGlvbi1hdG9wXCIsXG4gICAgXCJkZXN0aW5hdGlvbi1pblwiLCBcImRlc3RpbmF0aW9uLW91dFwiLCBcImRlc3RpbmF0aW9uLW92ZXJcIiwgXCJkZXZhbmFnYXJpXCIsIFwiZGlmZmVyZW5jZVwiLFxuICAgIFwiZGlzY1wiLCBcImRpc2NhcmRcIiwgXCJkaXNjbG9zdXJlLWNsb3NlZFwiLCBcImRpc2Nsb3N1cmUtb3BlblwiLCBcImRvY3VtZW50XCIsXG4gICAgXCJkb3QtZGFzaFwiLCBcImRvdC1kb3QtZGFzaFwiLFxuICAgIFwiZG90dGVkXCIsIFwiZG91YmxlXCIsIFwiZG93blwiLCBcImUtcmVzaXplXCIsIFwiZWFzZVwiLCBcImVhc2UtaW5cIiwgXCJlYXNlLWluLW91dFwiLCBcImVhc2Utb3V0XCIsXG4gICAgXCJlbGVtZW50XCIsIFwiZWxsaXBzZVwiLCBcImVsbGlwc2lzXCIsIFwiZW1iZWRcIiwgXCJlbmRcIiwgXCJldGhpb3BpY1wiLCBcImV0aGlvcGljLWFiZWdlZGVcIixcbiAgICBcImV0aGlvcGljLWFiZWdlZGUtYW0tZXRcIiwgXCJldGhpb3BpYy1hYmVnZWRlLWdlelwiLCBcImV0aGlvcGljLWFiZWdlZGUtdGktZXJcIixcbiAgICBcImV0aGlvcGljLWFiZWdlZGUtdGktZXRcIiwgXCJldGhpb3BpYy1oYWxlaGFtZS1hYS1lclwiLFxuICAgIFwiZXRoaW9waWMtaGFsZWhhbWUtYWEtZXRcIiwgXCJldGhpb3BpYy1oYWxlaGFtZS1hbS1ldFwiLFxuICAgIFwiZXRoaW9waWMtaGFsZWhhbWUtZ2V6XCIsIFwiZXRoaW9waWMtaGFsZWhhbWUtb20tZXRcIixcbiAgICBcImV0aGlvcGljLWhhbGVoYW1lLXNpZC1ldFwiLCBcImV0aGlvcGljLWhhbGVoYW1lLXNvLWV0XCIsXG4gICAgXCJldGhpb3BpYy1oYWxlaGFtZS10aS1lclwiLCBcImV0aGlvcGljLWhhbGVoYW1lLXRpLWV0XCIsIFwiZXRoaW9waWMtaGFsZWhhbWUtdGlnXCIsXG4gICAgXCJldGhpb3BpYy1udW1lcmljXCIsIFwiZXctcmVzaXplXCIsIFwiZXhjbHVzaW9uXCIsIFwiZXhwYW5kZWRcIiwgXCJleHRlbmRzXCIsIFwiZXh0cmEtY29uZGVuc2VkXCIsXG4gICAgXCJleHRyYS1leHBhbmRlZFwiLCBcImZhbnRhc3lcIiwgXCJmYXN0XCIsIFwiZmlsbFwiLCBcImZpbGwtYm94XCIsIFwiZml4ZWRcIiwgXCJmbGF0XCIsIFwiZmxleFwiLCBcImZsZXgtZW5kXCIsIFwiZmxleC1zdGFydFwiLCBcImZvb3Rub3Rlc1wiLFxuICAgIFwiZm9yd2FyZHNcIiwgXCJmcm9tXCIsIFwiZ2VvbWV0cmljUHJlY2lzaW9uXCIsIFwiZ2VvcmdpYW5cIiwgXCJncmF5dGV4dFwiLCBcImdyaWRcIiwgXCJncm9vdmVcIixcbiAgICBcImd1amFyYXRpXCIsIFwiZ3VybXVraGlcIiwgXCJoYW5kXCIsIFwiaGFuZ3VsXCIsIFwiaGFuZ3VsLWNvbnNvbmFudFwiLCBcImhhcmQtbGlnaHRcIiwgXCJoZWJyZXdcIixcbiAgICBcImhlbHBcIiwgXCJoaWRkZW5cIiwgXCJoaWRlXCIsIFwiaGlnaGVyXCIsIFwiaGlnaGxpZ2h0XCIsIFwiaGlnaGxpZ2h0dGV4dFwiLFxuICAgIFwiaGlyYWdhbmFcIiwgXCJoaXJhZ2FuYS1pcm9oYVwiLCBcImhvcml6b250YWxcIiwgXCJoc2xcIiwgXCJoc2xhXCIsIFwiaHVlXCIsIFwiaWNvblwiLCBcImlnbm9yZVwiLFxuICAgIFwiaW5hY3RpdmVib3JkZXJcIiwgXCJpbmFjdGl2ZWNhcHRpb25cIiwgXCJpbmFjdGl2ZWNhcHRpb250ZXh0XCIsIFwiaW5maW5pdGVcIixcbiAgICBcImluZm9iYWNrZ3JvdW5kXCIsIFwiaW5mb3RleHRcIiwgXCJpbmhlcml0XCIsIFwiaW5pdGlhbFwiLCBcImlubGluZVwiLCBcImlubGluZS1heGlzXCIsXG4gICAgXCJpbmxpbmUtYmxvY2tcIiwgXCJpbmxpbmUtZmxleFwiLCBcImlubGluZS1ncmlkXCIsIFwiaW5saW5lLXRhYmxlXCIsIFwiaW5zZXRcIiwgXCJpbnNpZGVcIiwgXCJpbnRyaW5zaWNcIiwgXCJpbnZlcnRcIixcbiAgICBcIml0YWxpY1wiLCBcImphcGFuZXNlLWZvcm1hbFwiLCBcImphcGFuZXNlLWluZm9ybWFsXCIsIFwianVzdGlmeVwiLCBcImthbm5hZGFcIixcbiAgICBcImthdGFrYW5hXCIsIFwia2F0YWthbmEtaXJvaGFcIiwgXCJrZWVwLWFsbFwiLCBcImtobWVyXCIsXG4gICAgXCJrb3JlYW4taGFuZ3VsLWZvcm1hbFwiLCBcImtvcmVhbi1oYW5qYS1mb3JtYWxcIiwgXCJrb3JlYW4taGFuamEtaW5mb3JtYWxcIixcbiAgICBcImxhbmRzY2FwZVwiLCBcImxhb1wiLCBcImxhcmdlXCIsIFwibGFyZ2VyXCIsIFwibGVmdFwiLCBcImxldmVsXCIsIFwibGlnaHRlclwiLCBcImxpZ2h0ZW5cIixcbiAgICBcImxpbmUtdGhyb3VnaFwiLCBcImxpbmVhclwiLCBcImxpbmVhci1ncmFkaWVudFwiLCBcImxpbmVzXCIsIFwibGlzdC1pdGVtXCIsIFwibGlzdGJveFwiLCBcImxpc3RpdGVtXCIsXG4gICAgXCJsb2NhbFwiLCBcImxvZ2ljYWxcIiwgXCJsb3VkXCIsIFwibG93ZXJcIiwgXCJsb3dlci1hbHBoYVwiLCBcImxvd2VyLWFybWVuaWFuXCIsXG4gICAgXCJsb3dlci1ncmVla1wiLCBcImxvd2VyLWhleGFkZWNpbWFsXCIsIFwibG93ZXItbGF0aW5cIiwgXCJsb3dlci1ub3J3ZWdpYW5cIixcbiAgICBcImxvd2VyLXJvbWFuXCIsIFwibG93ZXJjYXNlXCIsIFwibHRyXCIsIFwibHVtaW5vc2l0eVwiLCBcIm1hbGF5YWxhbVwiLCBcIm1hbmlwdWxhdGlvblwiLCBcIm1hdGNoXCIsIFwibWF0cml4XCIsIFwibWF0cml4M2RcIixcbiAgICBcIm1lZGlhLWNvbnRyb2xzLWJhY2tncm91bmRcIiwgXCJtZWRpYS1jdXJyZW50LXRpbWUtZGlzcGxheVwiLFxuICAgIFwibWVkaWEtZnVsbHNjcmVlbi1idXR0b25cIiwgXCJtZWRpYS1tdXRlLWJ1dHRvblwiLCBcIm1lZGlhLXBsYXktYnV0dG9uXCIsXG4gICAgXCJtZWRpYS1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uXCIsIFwibWVkaWEtcmV3aW5kLWJ1dHRvblwiLFxuICAgIFwibWVkaWEtc2Vlay1iYWNrLWJ1dHRvblwiLCBcIm1lZGlhLXNlZWstZm9yd2FyZC1idXR0b25cIiwgXCJtZWRpYS1zbGlkZXJcIixcbiAgICBcIm1lZGlhLXNsaWRlcnRodW1iXCIsIFwibWVkaWEtdGltZS1yZW1haW5pbmctZGlzcGxheVwiLCBcIm1lZGlhLXZvbHVtZS1zbGlkZXJcIixcbiAgICBcIm1lZGlhLXZvbHVtZS1zbGlkZXItY29udGFpbmVyXCIsIFwibWVkaWEtdm9sdW1lLXNsaWRlcnRodW1iXCIsIFwibWVkaXVtXCIsXG4gICAgXCJtZW51XCIsIFwibWVudWxpc3RcIiwgXCJtZW51bGlzdC1idXR0b25cIiwgXCJtZW51bGlzdC10ZXh0XCIsXG4gICAgXCJtZW51bGlzdC10ZXh0ZmllbGRcIiwgXCJtZW51dGV4dFwiLCBcIm1lc3NhZ2UtYm94XCIsIFwibWlkZGxlXCIsIFwibWluLWludHJpbnNpY1wiLFxuICAgIFwibWl4XCIsIFwibW9uZ29saWFuXCIsIFwibW9ub3NwYWNlXCIsIFwibW92ZVwiLCBcIm11bHRpcGxlXCIsIFwibXVsdGlwbGVfbWFza19pbWFnZXNcIiwgXCJtdWx0aXBseVwiLCBcIm15YW5tYXJcIiwgXCJuLXJlc2l6ZVwiLFxuICAgIFwibmFycm93ZXJcIiwgXCJuZS1yZXNpemVcIiwgXCJuZXN3LXJlc2l6ZVwiLCBcIm5vLWNsb3NlLXF1b3RlXCIsIFwibm8tZHJvcFwiLFxuICAgIFwibm8tb3Blbi1xdW90ZVwiLCBcIm5vLXJlcGVhdFwiLCBcIm5vbmVcIiwgXCJub3JtYWxcIiwgXCJub3QtYWxsb3dlZFwiLCBcIm5vd3JhcFwiLFxuICAgIFwibnMtcmVzaXplXCIsIFwibnVtYmVyc1wiLCBcIm51bWVyaWNcIiwgXCJudy1yZXNpemVcIiwgXCJud3NlLXJlc2l6ZVwiLCBcIm9ibGlxdWVcIiwgXCJvY3RhbFwiLCBcIm9wYWNpdHlcIiwgXCJvcGVuLXF1b3RlXCIsXG4gICAgXCJvcHRpbWl6ZUxlZ2liaWxpdHlcIiwgXCJvcHRpbWl6ZVNwZWVkXCIsIFwib3JpeWFcIiwgXCJvcm9tb1wiLCBcIm91dHNldFwiLFxuICAgIFwib3V0c2lkZVwiLCBcIm91dHNpZGUtc2hhcGVcIiwgXCJvdmVybGF5XCIsIFwib3ZlcmxpbmVcIiwgXCJwYWRkaW5nXCIsIFwicGFkZGluZy1ib3hcIixcbiAgICBcInBhaW50ZWRcIiwgXCJwYWdlXCIsIFwicGF1c2VkXCIsIFwicGVyc2lhblwiLCBcInBlcnNwZWN0aXZlXCIsIFwicGluY2gtem9vbVwiLCBcInBsdXMtZGFya2VyXCIsIFwicGx1cy1saWdodGVyXCIsXG4gICAgXCJwb2ludGVyXCIsIFwicG9seWdvblwiLCBcInBvcnRyYWl0XCIsIFwicHJlXCIsIFwicHJlLWxpbmVcIiwgXCJwcmUtd3JhcFwiLCBcInByZXNlcnZlLTNkXCIsXG4gICAgXCJwcm9ncmVzc1wiLCBcInB1c2gtYnV0dG9uXCIsIFwicmFkaWFsLWdyYWRpZW50XCIsIFwicmFkaW9cIiwgXCJyZWFkLW9ubHlcIixcbiAgICBcInJlYWQtd3JpdGVcIiwgXCJyZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5XCIsIFwicmVjdGFuZ2xlXCIsIFwicmVnaW9uXCIsXG4gICAgXCJyZWxhdGl2ZVwiLCBcInJlcGVhdFwiLCBcInJlcGVhdGluZy1saW5lYXItZ3JhZGllbnRcIixcbiAgICBcInJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnRcIiwgXCJyZXBlYXQteFwiLCBcInJlcGVhdC15XCIsIFwicmVzZXRcIiwgXCJyZXZlcnNlXCIsXG4gICAgXCJyZ2JcIiwgXCJyZ2JhXCIsIFwicmlkZ2VcIiwgXCJyaWdodFwiLCBcInJvdGF0ZVwiLCBcInJvdGF0ZTNkXCIsIFwicm90YXRlWFwiLCBcInJvdGF0ZVlcIixcbiAgICBcInJvdGF0ZVpcIiwgXCJyb3VuZFwiLCBcInJvd1wiLCBcInJvdy1yZXNpemVcIiwgXCJyb3ctcmV2ZXJzZVwiLCBcInJ0bFwiLCBcInJ1bi1pblwiLCBcInJ1bm5pbmdcIixcbiAgICBcInMtcmVzaXplXCIsIFwic2Fucy1zZXJpZlwiLCBcInNhdHVyYXRpb25cIiwgXCJzY2FsZVwiLCBcInNjYWxlM2RcIiwgXCJzY2FsZVhcIiwgXCJzY2FsZVlcIiwgXCJzY2FsZVpcIiwgXCJzY3JlZW5cIixcbiAgICBcInNjcm9sbFwiLCBcInNjcm9sbGJhclwiLCBcInNjcm9sbC1wb3NpdGlvblwiLCBcInNlLXJlc2l6ZVwiLCBcInNlYXJjaGZpZWxkXCIsXG4gICAgXCJzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uXCIsIFwic2VhcmNoZmllbGQtZGVjb3JhdGlvblwiLFxuICAgIFwic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b25cIiwgXCJzZWFyY2hmaWVsZC1yZXN1bHRzLWRlY29yYXRpb25cIiwgXCJzZWxmLXN0YXJ0XCIsIFwic2VsZi1lbmRcIixcbiAgICBcInNlbWktY29uZGVuc2VkXCIsIFwic2VtaS1leHBhbmRlZFwiLCBcInNlcGFyYXRlXCIsIFwic2VyaWZcIiwgXCJzaG93XCIsIFwic2lkYW1hXCIsXG4gICAgXCJzaW1wLWNoaW5lc2UtZm9ybWFsXCIsIFwic2ltcC1jaGluZXNlLWluZm9ybWFsXCIsIFwic2luZ2xlXCIsXG4gICAgXCJza2V3XCIsIFwic2tld1hcIiwgXCJza2V3WVwiLCBcInNraXAtd2hpdGUtc3BhY2VcIiwgXCJzbGlkZVwiLCBcInNsaWRlci1ob3Jpem9udGFsXCIsXG4gICAgXCJzbGlkZXItdmVydGljYWxcIiwgXCJzbGlkZXJ0aHVtYi1ob3Jpem9udGFsXCIsIFwic2xpZGVydGh1bWItdmVydGljYWxcIiwgXCJzbG93XCIsXG4gICAgXCJzbWFsbFwiLCBcInNtYWxsLWNhcHNcIiwgXCJzbWFsbC1jYXB0aW9uXCIsIFwic21hbGxlclwiLCBcInNvZnQtbGlnaHRcIiwgXCJzb2xpZFwiLCBcInNvbWFsaVwiLFxuICAgIFwic291cmNlLWF0b3BcIiwgXCJzb3VyY2UtaW5cIiwgXCJzb3VyY2Utb3V0XCIsIFwic291cmNlLW92ZXJcIiwgXCJzcGFjZVwiLCBcInNwYWNlLWFyb3VuZFwiLCBcInNwYWNlLWJldHdlZW5cIiwgXCJzcGFjZS1ldmVubHlcIiwgXCJzcGVsbC1vdXRcIiwgXCJzcXVhcmVcIixcbiAgICBcInNxdWFyZS1idXR0b25cIiwgXCJzdGFydFwiLCBcInN0YXRpY1wiLCBcInN0YXR1cy1iYXJcIiwgXCJzdHJldGNoXCIsIFwic3Ryb2tlXCIsIFwic3Ryb2tlLWJveFwiLCBcInN1YlwiLFxuICAgIFwic3VicGl4ZWwtYW50aWFsaWFzZWRcIiwgXCJzdmdfbWFza3NcIiwgXCJzdXBlclwiLCBcInN3LXJlc2l6ZVwiLCBcInN5bWJvbGljXCIsIFwic3ltYm9sc1wiLCBcInN5c3RlbS11aVwiLCBcInRhYmxlXCIsXG4gICAgXCJ0YWJsZS1jYXB0aW9uXCIsIFwidGFibGUtY2VsbFwiLCBcInRhYmxlLWNvbHVtblwiLCBcInRhYmxlLWNvbHVtbi1ncm91cFwiLFxuICAgIFwidGFibGUtZm9vdGVyLWdyb3VwXCIsIFwidGFibGUtaGVhZGVyLWdyb3VwXCIsIFwidGFibGUtcm93XCIsIFwidGFibGUtcm93LWdyb3VwXCIsXG4gICAgXCJ0YW1pbFwiLFxuICAgIFwidGVsdWd1XCIsIFwidGV4dFwiLCBcInRleHQtYm90dG9tXCIsIFwidGV4dC10b3BcIiwgXCJ0ZXh0YXJlYVwiLCBcInRleHRmaWVsZFwiLCBcInRoYWlcIixcbiAgICBcInRoaWNrXCIsIFwidGhpblwiLCBcInRocmVlZGRhcmtzaGFkb3dcIiwgXCJ0aHJlZWRmYWNlXCIsIFwidGhyZWVkaGlnaGxpZ2h0XCIsXG4gICAgXCJ0aHJlZWRsaWdodHNoYWRvd1wiLCBcInRocmVlZHNoYWRvd1wiLCBcInRpYmV0YW5cIiwgXCJ0aWdyZVwiLCBcInRpZ3JpbnlhLWVyXCIsXG4gICAgXCJ0aWdyaW55YS1lci1hYmVnZWRlXCIsIFwidGlncmlueWEtZXRcIiwgXCJ0aWdyaW55YS1ldC1hYmVnZWRlXCIsIFwidG9cIiwgXCJ0b3BcIixcbiAgICBcInRyYWQtY2hpbmVzZS1mb3JtYWxcIiwgXCJ0cmFkLWNoaW5lc2UtaW5mb3JtYWxcIiwgXCJ0cmFuc2Zvcm1cIixcbiAgICBcInRyYW5zbGF0ZVwiLCBcInRyYW5zbGF0ZTNkXCIsIFwidHJhbnNsYXRlWFwiLCBcInRyYW5zbGF0ZVlcIiwgXCJ0cmFuc2xhdGVaXCIsXG4gICAgXCJ0cmFuc3BhcmVudFwiLCBcInVsdHJhLWNvbmRlbnNlZFwiLCBcInVsdHJhLWV4cGFuZGVkXCIsIFwidW5kZXJsaW5lXCIsIFwidW5pZGlyZWN0aW9uYWwtcGFuXCIsIFwidW5zZXRcIiwgXCJ1cFwiLFxuICAgIFwidXBwZXItYWxwaGFcIiwgXCJ1cHBlci1hcm1lbmlhblwiLCBcInVwcGVyLWdyZWVrXCIsIFwidXBwZXItaGV4YWRlY2ltYWxcIixcbiAgICBcInVwcGVyLWxhdGluXCIsIFwidXBwZXItbm9yd2VnaWFuXCIsIFwidXBwZXItcm9tYW5cIiwgXCJ1cHBlcmNhc2VcIiwgXCJ1cmR1XCIsIFwidXJsXCIsXG4gICAgXCJ2YXJcIiwgXCJ2ZXJ0aWNhbFwiLCBcInZlcnRpY2FsLXRleHRcIiwgXCJ2aWV3LWJveFwiLCBcInZpc2libGVcIiwgXCJ2aXNpYmxlRmlsbFwiLCBcInZpc2libGVQYWludGVkXCIsXG4gICAgXCJ2aXNpYmxlU3Ryb2tlXCIsIFwidmlzdWFsXCIsIFwidy1yZXNpemVcIiwgXCJ3YWl0XCIsIFwid2F2ZVwiLCBcIndpZGVyXCIsXG4gICAgXCJ3aW5kb3dcIiwgXCJ3aW5kb3dmcmFtZVwiLCBcIndpbmRvd3RleHRcIiwgXCJ3b3Jkc1wiLCBcIndyYXBcIiwgXCJ3cmFwLXJldmVyc2VcIiwgXCJ4LWxhcmdlXCIsIFwieC1zbWFsbFwiLCBcInhvclwiLFxuICAgIFwieHgtbGFyZ2VcIiwgXCJ4eC1zbWFsbFwiXG4gIF0sIHZhbHVlS2V5d29yZHMgPSBrZXlTZXQodmFsdWVLZXl3b3Jkc18pO1xuXG4gIHZhciBhbGxXb3JkcyA9IGRvY3VtZW50VHlwZXNfLmNvbmNhdChtZWRpYVR5cGVzXykuY29uY2F0KG1lZGlhRmVhdHVyZXNfKS5jb25jYXQobWVkaWFWYWx1ZUtleXdvcmRzXylcbiAgICAuY29uY2F0KHByb3BlcnR5S2V5d29yZHNfKS5jb25jYXQobm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzXykuY29uY2F0KGNvbG9yS2V5d29yZHNfKVxuICAgIC5jb25jYXQodmFsdWVLZXl3b3Jkc18pO1xuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiaGludFdvcmRzXCIsIFwiY3NzXCIsIGFsbFdvcmRzKTtcblxuICBmdW5jdGlvbiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7XG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmIChtYXliZUVuZCAmJiBjaCA9PSBcIi9cIikge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIqXCIpO1xuICAgIH1cbiAgICByZXR1cm4gW1wiY29tbWVudFwiLCBcImNvbW1lbnRcIl07XG4gIH1cblxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L2Nzc1wiLCB7XG4gICAgZG9jdW1lbnRUeXBlczogZG9jdW1lbnRUeXBlcyxcbiAgICBtZWRpYVR5cGVzOiBtZWRpYVR5cGVzLFxuICAgIG1lZGlhRmVhdHVyZXM6IG1lZGlhRmVhdHVyZXMsXG4gICAgbWVkaWFWYWx1ZUtleXdvcmRzOiBtZWRpYVZhbHVlS2V5d29yZHMsXG4gICAgcHJvcGVydHlLZXl3b3JkczogcHJvcGVydHlLZXl3b3JkcyxcbiAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHM6IG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyxcbiAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsXG4gICAgY291bnRlckRlc2NyaXB0b3JzOiBjb3VudGVyRGVzY3JpcHRvcnMsXG4gICAgY29sb3JLZXl3b3JkczogY29sb3JLZXl3b3JkcyxcbiAgICB2YWx1ZUtleXdvcmRzOiB2YWx1ZUtleXdvcmRzLFxuICAgIHRva2VuSG9va3M6IHtcbiAgICAgIFwiL1wiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RyZWFtLmVhdChcIipcIikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50O1xuICAgICAgICByZXR1cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG5hbWU6IFwiY3NzXCJcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXNjc3NcIiwge1xuICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsXG4gICAgbWVkaWFGZWF0dXJlczogbWVkaWFGZWF0dXJlcyxcbiAgICBtZWRpYVZhbHVlS2V5d29yZHM6IG1lZGlhVmFsdWVLZXl3b3JkcyxcbiAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0eUtleXdvcmRzLFxuICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzLFxuICAgIGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsXG4gICAgdmFsdWVLZXl3b3JkczogdmFsdWVLZXl3b3JkcyxcbiAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsXG4gICAgYWxsb3dOZXN0ZWQ6IHRydWUsXG4gICAgbGluZUNvbW1lbnQ6IFwiLy9cIixcbiAgICB0b2tlbkhvb2tzOiB7XG4gICAgICBcIi9cIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgcmV0dXJuIFtcImNvbW1lbnRcIiwgXCJjb21tZW50XCJdO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50O1xuICAgICAgICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbXCJvcGVyYXRvclwiLCBcIm9wZXJhdG9yXCJdO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCI6XCI6IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXHMqXFx7LywgZmFsc2UpKVxuICAgICAgICAgIHJldHVybiBbbnVsbCwgbnVsbF1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIFwiJFwiOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eW1xcdy1dKy8pO1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFxzKjovLCBmYWxzZSkpXG4gICAgICAgICAgcmV0dXJuIFtcInZhcmlhYmxlLTJcIiwgXCJ2YXJpYWJsZS1kZWZpbml0aW9uXCJdO1xuICAgICAgICByZXR1cm4gW1widmFyaWFibGUtMlwiLCBcInZhcmlhYmxlXCJdO1xuICAgICAgfSxcbiAgICAgIFwiI1wiOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgaWYgKCFzdHJlYW0uZWF0KFwie1wiKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gW251bGwsIFwiaW50ZXJwb2xhdGlvblwiXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG5hbWU6IFwiY3NzXCIsXG4gICAgaGVscGVyVHlwZTogXCJzY3NzXCJcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWxlc3NcIiwge1xuICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsXG4gICAgbWVkaWFGZWF0dXJlczogbWVkaWFGZWF0dXJlcyxcbiAgICBtZWRpYVZhbHVlS2V5d29yZHM6IG1lZGlhVmFsdWVLZXl3b3JkcyxcbiAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0eUtleXdvcmRzLFxuICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzLFxuICAgIGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsXG4gICAgdmFsdWVLZXl3b3JkczogdmFsdWVLZXl3b3JkcyxcbiAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsXG4gICAgYWxsb3dOZXN0ZWQ6IHRydWUsXG4gICAgbGluZUNvbW1lbnQ6IFwiLy9cIixcbiAgICB0b2tlbkhvb2tzOiB7XG4gICAgICBcIi9cIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgcmV0dXJuIFtcImNvbW1lbnRcIiwgXCJjb21tZW50XCJdO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50O1xuICAgICAgICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbXCJvcGVyYXRvclwiLCBcIm9wZXJhdG9yXCJdO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJAXCI6IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIntcIikpIHJldHVybiBbbnVsbCwgXCJpbnRlcnBvbGF0aW9uXCJdO1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKGNoYXJzZXR8ZG9jdW1lbnR8Zm9udC1mYWNlfGltcG9ydHwoLShtb3p8bXN8b3x3ZWJraXQpLSk/a2V5ZnJhbWVzfG1lZGlhfG5hbWVzcGFjZXxwYWdlfHN1cHBvcnRzKVxcYi9pLCBmYWxzZSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFxcXFxcLV0vKTtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxccyo6LywgZmFsc2UpKVxuICAgICAgICAgIHJldHVybiBbXCJ2YXJpYWJsZS0yXCIsIFwidmFyaWFibGUtZGVmaW5pdGlvblwiXTtcbiAgICAgICAgcmV0dXJuIFtcInZhcmlhYmxlLTJcIiwgXCJ2YXJpYWJsZVwiXTtcbiAgICAgIH0sXG4gICAgICBcIiZcIjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbXCJhdG9tXCIsIFwiYXRvbVwiXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG5hbWU6IFwiY3NzXCIsXG4gICAgaGVscGVyVHlwZTogXCJsZXNzXCJcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWdzc1wiLCB7XG4gICAgZG9jdW1lbnRUeXBlczogZG9jdW1lbnRUeXBlcyxcbiAgICBtZWRpYVR5cGVzOiBtZWRpYVR5cGVzLFxuICAgIG1lZGlhRmVhdHVyZXM6IG1lZGlhRmVhdHVyZXMsXG4gICAgcHJvcGVydHlLZXl3b3JkczogcHJvcGVydHlLZXl3b3JkcyxcbiAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHM6IG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyxcbiAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsXG4gICAgY291bnRlckRlc2NyaXB0b3JzOiBjb3VudGVyRGVzY3JpcHRvcnMsXG4gICAgY29sb3JLZXl3b3JkczogY29sb3JLZXl3b3JkcyxcbiAgICB2YWx1ZUtleXdvcmRzOiB2YWx1ZUtleXdvcmRzLFxuICAgIHN1cHBvcnRzQXRDb21wb25lbnQ6IHRydWUsXG4gICAgdG9rZW5Ib29rczoge1xuICAgICAgXCIvXCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKCFzdHJlYW0uZWF0KFwiKlwiKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ0NvbW1lbnQ7XG4gICAgICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbmFtZTogXCJjc3NcIixcbiAgICBoZWxwZXJUeXBlOiBcImdzc1wiXG4gIH0pO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8vIEJ5IHRoZSBOZW80aiBUZWFtIGFuZCBjb250cmlidXRvcnMuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbmVvNGotY29udHJpYi9Db2RlTWlycm9yXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuICB2YXIgd29yZFJlZ2V4cCA9IGZ1bmN0aW9uKHdvcmRzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyB3b3Jkcy5qb2luKFwifFwiKSArIFwiKSRcIiwgXCJpXCIpO1xuICB9O1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcImN5cGhlclwiLCBmdW5jdGlvbihjb25maWcpIHtcbiAgICB2YXIgdG9rZW5CYXNlID0gZnVuY3Rpb24oc3RyZWFtLyosIHN0YXRlKi8pIHtcbiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgICBpZiAoY2ggPT09J1wiJykge1xuICAgICAgICBzdHJlYW0ubWF0Y2goLy4qP1wiLyk7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgaWYgKGNoID09PSBcIidcIikge1xuICAgICAgICBzdHJlYW0ubWF0Y2goLy4qPycvKTtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoL1t7fVxcKFxcKSxcXC47XFxbXFxdXS8udGVzdChjaCkpIHtcbiAgICAgICAgY3VyUHVuYyA9IGNoO1xuICAgICAgICByZXR1cm4gXCJub2RlXCI7XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSBcIi9cIiAmJiBzdHJlYW0uZWF0KFwiL1wiKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3JDaGFycy50ZXN0KGNoKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUob3BlcmF0b3JDaGFycyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bX1xcd1xcZF0vKTtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCI6XCIpKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFxkX1xcLV0vKTtcbiAgICAgICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgICAgICBpZiAoZnVuY3MudGVzdCh3b3JkKSkgcmV0dXJuIFwiYnVpbHRpblwiO1xuICAgICAgICBpZiAocHJlZHMudGVzdCh3b3JkKSkgcmV0dXJuIFwiZGVmXCI7XG4gICAgICAgIGlmIChrZXl3b3Jkcy50ZXN0KHdvcmQpIHx8IHN5c3RlbUtleXdvcmRzLnRlc3Qod29yZCkpIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBwdXNoQ29udGV4dCA9IGZ1bmN0aW9uKHN0YXRlLCB0eXBlLCBjb2wpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0ge1xuICAgICAgICBwcmV2OiBzdGF0ZS5jb250ZXh0LFxuICAgICAgICBpbmRlbnQ6IHN0YXRlLmluZGVudCxcbiAgICAgICAgY29sOiBjb2wsXG4gICAgICAgIHR5cGU6IHR5cGVcbiAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgcG9wQ29udGV4dCA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICBzdGF0ZS5pbmRlbnQgPSBzdGF0ZS5jb250ZXh0LmluZGVudDtcbiAgICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICAgIH07XG4gICAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDtcbiAgICB2YXIgY3VyUHVuYztcbiAgICB2YXIgZnVuY3MgPSB3b3JkUmVnZXhwKFtcImFic1wiLCBcImFjb3NcIiwgXCJhbGxTaG9ydGVzdFBhdGhzXCIsIFwiYXNpblwiLCBcImF0YW5cIiwgXCJhdGFuMlwiLCBcImF2Z1wiLCBcImNlaWxcIiwgXCJjb2FsZXNjZVwiLCBcImNvbGxlY3RcIiwgXCJjb3NcIiwgXCJjb3RcIiwgXCJjb3VudFwiLCBcImRlZ3JlZXNcIiwgXCJlXCIsIFwiZW5kbm9kZVwiLCBcImV4cFwiLCBcImV4dHJhY3RcIiwgXCJmaWx0ZXJcIiwgXCJmbG9vclwiLCBcImhhdmVyc2luXCIsIFwiaGVhZFwiLCBcImlkXCIsIFwia2V5c1wiLCBcImxhYmVsc1wiLCBcImxhc3RcIiwgXCJsZWZ0XCIsIFwibGVuZ3RoXCIsIFwibG9nXCIsIFwibG9nMTBcIiwgXCJsb3dlclwiLCBcImx0cmltXCIsIFwibWF4XCIsIFwibWluXCIsIFwibm9kZVwiLCBcIm5vZGVzXCIsIFwicGVyY2VudGlsZUNvbnRcIiwgXCJwZXJjZW50aWxlRGlzY1wiLCBcInBpXCIsIFwicmFkaWFuc1wiLCBcInJhbmRcIiwgXCJyYW5nZVwiLCBcInJlZHVjZVwiLCBcInJlbFwiLCBcInJlbGF0aW9uc2hpcFwiLCBcInJlbGF0aW9uc2hpcHNcIiwgXCJyZXBsYWNlXCIsIFwicmV2ZXJzZVwiLCBcInJpZ2h0XCIsIFwicm91bmRcIiwgXCJydHJpbVwiLCBcInNob3J0ZXN0UGF0aFwiLCBcInNpZ25cIiwgXCJzaW5cIiwgXCJzaXplXCIsIFwic3BsaXRcIiwgXCJzcXJ0XCIsIFwic3RhcnRub2RlXCIsIFwic3RkZXZcIiwgXCJzdGRldnBcIiwgXCJzdHJcIiwgXCJzdWJzdHJpbmdcIiwgXCJzdW1cIiwgXCJ0YWlsXCIsIFwidGFuXCIsIFwidGltZXN0YW1wXCIsIFwidG9GbG9hdFwiLCBcInRvSW50XCIsIFwidG9TdHJpbmdcIiwgXCJ0cmltXCIsIFwidHlwZVwiLCBcInVwcGVyXCJdKTtcbiAgICB2YXIgcHJlZHMgPSB3b3JkUmVnZXhwKFtcImFsbFwiLCBcImFuZFwiLCBcImFueVwiLCBcImNvbnRhaW5zXCIsIFwiZXhpc3RzXCIsIFwiaGFzXCIsIFwiaW5cIiwgXCJub25lXCIsIFwibm90XCIsIFwib3JcIiwgXCJzaW5nbGVcIiwgXCJ4b3JcIl0pO1xuICAgIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoW1wiYXNcIiwgXCJhc2NcIiwgXCJhc2NlbmRpbmdcIiwgXCJhc3NlcnRcIiwgXCJieVwiLCBcImNhc2VcIiwgXCJjb21taXRcIiwgXCJjb25zdHJhaW50XCIsIFwiY3JlYXRlXCIsIFwiY3N2XCIsIFwiY3lwaGVyXCIsIFwiZGVsZXRlXCIsIFwiZGVzY1wiLCBcImRlc2NlbmRpbmdcIiwgXCJkZXRhY2hcIiwgXCJkaXN0aW5jdFwiLCBcImRyb3BcIiwgXCJlbHNlXCIsIFwiZW5kXCIsIFwiZW5kc1wiLCBcImV4cGxhaW5cIiwgXCJmYWxzZVwiLCBcImZpZWxkdGVybWluYXRvclwiLCBcImZvcmVhY2hcIiwgXCJmcm9tXCIsIFwiaGVhZGVyc1wiLCBcImluXCIsIFwiaW5kZXhcIiwgXCJpc1wiLCBcImpvaW5cIiwgXCJsaW1pdFwiLCBcImxvYWRcIiwgXCJtYXRjaFwiLCBcIm1lcmdlXCIsIFwibnVsbFwiLCBcIm9uXCIsIFwib3B0aW9uYWxcIiwgXCJvcmRlclwiLCBcInBlcmlvZGljXCIsIFwicHJvZmlsZVwiLCBcInJlbW92ZVwiLCBcInJldHVyblwiLCBcInNjYW5cIiwgXCJzZXRcIiwgXCJza2lwXCIsIFwic3RhcnRcIiwgXCJzdGFydHNcIiwgXCJ0aGVuXCIsIFwidHJ1ZVwiLCBcInVuaW9uXCIsIFwidW5pcXVlXCIsIFwidW53aW5kXCIsIFwidXNpbmdcIiwgXCJ3aGVuXCIsIFwid2hlcmVcIiwgXCJ3aXRoXCIsIFwiY2FsbFwiLCBcInlpZWxkXCJdKTtcbiAgICB2YXIgc3lzdGVtS2V5d29yZHMgPSB3b3JkUmVnZXhwKFtcImFjY2Vzc1wiLCBcImFjdGl2ZVwiLCBcImFzc2lnblwiLCBcImFsbFwiLCBcImFsdGVyXCIsIFwiYXNcIiwgXCJjYXRhbG9nXCIsIFwiY2hhbmdlXCIsIFwiY29weVwiLCBcImNyZWF0ZVwiLCBcImNvbnN0cmFpbnRcIiwgXCJjb25zdHJhaW50c1wiLCBcImN1cnJlbnRcIiwgXCJkYXRhYmFzZVwiLCBcImRhdGFiYXNlc1wiLCBcImRibXNcIiwgXCJkZWZhdWx0XCIsIFwiZGVueVwiLCBcImRyb3BcIiwgXCJlbGVtZW50XCIsIFwiZWxlbWVudHNcIiwgXCJleGlzdHNcIiwgXCJmcm9tXCIsIFwiZ3JhbnRcIiwgXCJncmFwaFwiLCBcImdyYXBoc1wiLCBcImlmXCIsIFwiaW5kZXhcIiwgXCJpbmRleGVzXCIsIFwibGFiZWxcIiwgXCJsYWJlbHNcIiwgXCJtYW5hZ2VtZW50XCIsIFwibWF0Y2hcIiwgXCJuYW1lXCIsIFwibmFtZXNcIiwgXCJuZXdcIiwgXCJub2RlXCIsIFwibm9kZXNcIiwgXCJub3RcIiwgXCJvZlwiLCBcIm9uXCIsIFwib3JcIiwgXCJwYXNzd29yZFwiLCBcInBvcHVsYXRlZFwiLCBcInByaXZpbGVnZXNcIiwgXCJwcm9wZXJ0eVwiLCBcInJlYWRcIiwgXCJyZWxhdGlvbnNoaXBcIiwgXCJyZWxhdGlvbnNoaXBzXCIsIFwicmVtb3ZlXCIsIFwicmVwbGFjZVwiLCBcInJlcXVpcmVkXCIsIFwicmV2b2tlXCIsIFwicm9sZVwiLCBcInJvbGVzXCIsIFwic2V0XCIsIFwic2hvd1wiLCBcInN0YXJ0XCIsIFwic3RhdHVzXCIsIFwic3RvcFwiLCBcInN1c3BlbmRlZFwiLCBcInRvXCIsIFwidHJhdmVyc2VcIiwgXCJ0eXBlXCIsIFwidHlwZXNcIiwgXCJ1c2VyXCIsIFwidXNlcnNcIiwgXCJ3aXRoXCIsIFwid3JpdGVcIl0pO1xuICAgIHZhciBvcGVyYXRvckNoYXJzID0gL1sqK1xcLTw+PSZ8fiVeXS87XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oLypiYXNlKi8pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLFxuICAgICAgICAgIGNvbnRleHQ6IG51bGwsXG4gICAgICAgICAgaW5kZW50OiAwLFxuICAgICAgICAgIGNvbDogMFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiAoc3RhdGUuY29udGV4dC5hbGlnbiA9PSBudWxsKSkge1xuICAgICAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGF0ZS5pbmRlbnQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgaWYgKHN0eWxlICE9PSBcImNvbW1lbnRcIiAmJiBzdGF0ZS5jb250ZXh0ICYmIChzdGF0ZS5jb250ZXh0LmFsaWduID09IG51bGwpICYmIHN0YXRlLmNvbnRleHQudHlwZSAhPT0gXCJwYXR0ZXJuXCIpIHtcbiAgICAgICAgICBzdGF0ZS5jb250ZXh0LmFsaWduID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VyUHVuYyA9PT0gXCIoXCIpIHtcbiAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgXCIpXCIsIHN0cmVhbS5jb2x1bW4oKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VyUHVuYyA9PT0gXCJbXCIpIHtcbiAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgXCJdXCIsIHN0cmVhbS5jb2x1bW4oKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VyUHVuYyA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgXCJ9XCIsIHN0cmVhbS5jb2x1bW4oKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoL1tcXF1cXH1cXCldLy50ZXN0KGN1clB1bmMpKSB7XG4gICAgICAgICAgd2hpbGUgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC50eXBlID09PSBcInBhdHRlcm5cIikge1xuICAgICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIGN1clB1bmMgPT09IHN0YXRlLmNvbnRleHQudHlwZSkge1xuICAgICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGN1clB1bmMgPT09IFwiLlwiICYmIHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC50eXBlID09PSBcInBhdHRlcm5cIikge1xuICAgICAgICAgIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICB9IGVsc2UgaWYgKC9hdG9tfHN0cmluZ3x2YXJpYWJsZS8udGVzdChzdHlsZSkgJiYgc3RhdGUuY29udGV4dCkge1xuICAgICAgICAgIGlmICgvW1xcfVxcXV0vLnRlc3Qoc3RhdGUuY29udGV4dC50eXBlKSkge1xuICAgICAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIFwicGF0dGVyblwiLCBzdHJlYW0uY29sdW1uKCkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuY29udGV4dC50eXBlID09PSBcInBhdHRlcm5cIiAmJiAhc3RhdGUuY29udGV4dC5hbGlnbikge1xuICAgICAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7XG4gICAgICAgICAgICBzdGF0ZS5jb250ZXh0LmNvbCA9IHN0cmVhbS5jb2x1bW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSxcbiAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikge1xuICAgICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCk7XG4gICAgICAgIHZhciBjb250ZXh0ID0gc3RhdGUuY29udGV4dDtcbiAgICAgICAgaWYgKC9bXFxdXFx9XS8udGVzdChmaXJzdENoYXIpKSB7XG4gICAgICAgICAgd2hpbGUgKGNvbnRleHQgJiYgY29udGV4dC50eXBlID09PSBcInBhdHRlcm5cIikge1xuICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNsb3NpbmcgPSBjb250ZXh0ICYmIGZpcnN0Q2hhciA9PT0gY29udGV4dC50eXBlO1xuICAgICAgICBpZiAoIWNvbnRleHQpIHJldHVybiAwO1xuICAgICAgICBpZiAoY29udGV4dC50eXBlID09PSBcImtleXdvcmRzXCIpIHJldHVybiBDb2RlTWlycm9yLmNvbW1hbmRzLm5ld2xpbmVBbmRJbmRlbnQ7XG4gICAgICAgIGlmIChjb250ZXh0LmFsaWduKSByZXR1cm4gY29udGV4dC5jb2wgKyAoY2xvc2luZyA/IDAgOiAxKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuaW5kZW50ICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1tcImN5cGhlclwiXSA9IHtcbiAgICBhdXRvRm9ybWF0TGluZUJyZWFrczogZnVuY3Rpb24odGV4dCkge1xuICAgICAgdmFyIGksIGxpbmVzLCByZVByb2Nlc3NlZFBvcnRpb247XG4gICAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KFwiXFxuXCIpO1xuICAgICAgdmFyIHJlUHJvY2Vzc2VkUG9ydGlvbiA9IC9cXHMrXFxiKHJldHVybnx3aGVyZXxvcmRlciBieXxtYXRjaHx3aXRofHNraXB8bGltaXR8Y3JlYXRlfGRlbGV0ZXxzZXQpXFxiXFxzL2c7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICBsaW5lc1tpXSA9IGxpbmVzW2ldLnJlcGxhY2UocmVQcm9jZXNzZWRQb3J0aW9uLCBcIiBcXG4kMSBcIikudHJpbSgpO1xuICAgICAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICB9O1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3gtY3lwaGVyLXF1ZXJ5XCIsIFwiY3lwaGVyXCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZFwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykge1xuICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LFxuICAgICAgc3RhdGVtZW50SW5kZW50VW5pdCA9IHBhcnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRlbnRVbml0IHx8IGluZGVudFVuaXQsXG4gICAgICBrZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5rZXl3b3JkcyB8fCB7fSxcbiAgICAgIGJ1aWx0aW4gPSBwYXJzZXJDb25maWcuYnVpbHRpbiB8fCB7fSxcbiAgICAgIGJsb2NrS2V5d29yZHMgPSBwYXJzZXJDb25maWcuYmxvY2tLZXl3b3JkcyB8fCB7fSxcbiAgICAgIGF0b21zID0gcGFyc2VyQ29uZmlnLmF0b21zIHx8IHt9LFxuICAgICAgaG9va3MgPSBwYXJzZXJDb25maWcuaG9va3MgfHwge30sXG4gICAgICBtdWx0aUxpbmVTdHJpbmdzID0gcGFyc2VyQ29uZmlnLm11bHRpTGluZVN0cmluZ3M7XG4gIHZhciBpc09wZXJhdG9yQ2hhciA9IC9bK1xcLSomJT08PiE/fFxcL10vO1xuXG4gIHZhciBjdXJQdW5jO1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoaG9va3NbY2hdKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gaG9va3NbY2hdKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmIChjaCA9PSAnXCInIHx8IGNoID09IFwiJ1wiIHx8IGNoID09IFwiYFwiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgaWYgKC9bXFxbXFxde31cXChcXCksO1xcOlxcLl0vLnRlc3QoY2gpKSB7XG4gICAgICBjdXJQdW5jID0gY2g7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKC9cXGQvLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5dLyk7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9XG4gICAgaWYgKGNoID09IFwiL1wiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIitcIikpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbk5lc3RlZENvbW1lbnQ7XG4gICAgICAgIHJldHVybiB0b2tlbk5lc3RlZENvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIipcIikpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQ7XG4gICAgICAgIHJldHVybiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTtcbiAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgfVxuICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9cXHhhMS1cXHVmZmZmXS8pO1xuICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgIGlmIChrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7XG4gICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gXCJuZXdzdGF0ZW1lbnRcIjtcbiAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICB9XG4gICAgaWYgKGJ1aWx0aW4ucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkge1xuICAgICAgaWYgKGJsb2NrS2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgY3VyUHVuYyA9IFwibmV3c3RhdGVtZW50XCI7XG4gICAgICByZXR1cm4gXCJidWlsdGluXCI7XG4gICAgfVxuICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gXCJhdG9tXCI7XG4gICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge2VuZCA9IHRydWU7IGJyZWFrO31cbiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gXCJcXFxcXCI7XG4gICAgICB9XG4gICAgICBpZiAoZW5kIHx8ICEoZXNjYXBlZCB8fCBtdWx0aUxpbmVTdHJpbmdzKSlcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIi9cIiAmJiBtYXliZUVuZCkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIqXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbk5lc3RlZENvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDtcbiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICBpZiAoY2ggPT0gXCIvXCIgJiYgbWF5YmVFbmQpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG1heWJlRW5kID0gKGNoID09IFwiK1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBhbGlnbiwgcHJldikge1xuICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDtcbiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYWxpZ24gPSBhbGlnbjtcbiAgICB0aGlzLnByZXYgPSBwcmV2O1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBjb2wsIHR5cGUpIHtcbiAgICB2YXIgaW5kZW50ID0gc3RhdGUuaW5kZW50ZWQ7XG4gICAgaWYgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC50eXBlID09IFwic3RhdGVtZW50XCIpXG4gICAgICBpbmRlbnQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkO1xuICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoaW5kZW50LCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpO1xuICB9XG4gIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHtcbiAgICB2YXIgdCA9IHN0YXRlLmNvbnRleHQudHlwZTtcbiAgICBpZiAodCA9PSBcIilcIiB8fCB0ID09IFwiXVwiIHx8IHQgPT0gXCJ9XCIpXG4gICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmNvbnRleHQuaW5kZW50ZWQ7XG4gICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG4gIH1cblxuICAvLyBJbnRlcmZhY2VcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRva2VuaXplOiBudWxsLFxuICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsIFwidG9wXCIsIGZhbHNlKSxcbiAgICAgICAgaW5kZW50ZWQ6IDAsXG4gICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICBjdXJQdW5jID0gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IChzdGF0ZS50b2tlbml6ZSB8fCB0b2tlbkJhc2UpKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHN0eWxlID09IFwiY29tbWVudFwiIHx8IHN0eWxlID09IFwibWV0YVwiKSByZXR1cm4gc3R5bGU7XG4gICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IHRydWU7XG5cbiAgICAgIGlmICgoY3VyUHVuYyA9PSBcIjtcIiB8fCBjdXJQdW5jID09IFwiOlwiIHx8IGN1clB1bmMgPT0gXCIsXCIpICYmIGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIntcIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCJ9XCIpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIltcIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCJdXCIpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIihcIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCIpXCIpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIn1cIikge1xuICAgICAgICB3aGlsZSAoY3R4LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICAgIGlmIChjdHgudHlwZSA9PSBcIn1cIikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gY3R4LnR5cGUpIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgZWxzZSBpZiAoKChjdHgudHlwZSA9PSBcIn1cIiB8fCBjdHgudHlwZSA9PSBcInRvcFwiKSAmJiBjdXJQdW5jICE9ICc7JykgfHwgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIgJiYgY3VyUHVuYyA9PSBcIm5ld3N0YXRlbWVudFwiKSlcbiAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCJzdGF0ZW1lbnRcIik7XG4gICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UgJiYgc3RhdGUudG9rZW5pemUgIT0gbnVsbCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0LCBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTtcbiAgICAgIGlmIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiICYmIGZpcnN0Q2hhciA9PSBcIn1cIikgY3R4ID0gY3R4LnByZXY7XG4gICAgICB2YXIgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSBjdHgudHlwZTtcbiAgICAgIGlmIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSBcIntcIiA/IDAgOiBzdGF0ZW1lbnRJbmRlbnRVbml0KTtcbiAgICAgIGVsc2UgaWYgKGN0eC5hbGlnbikgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTtcbiAgICAgIGVsc2UgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpO1xuICAgIH0sXG5cbiAgICBlbGVjdHJpY0NoYXJzOiBcInt9XCIsXG4gICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiLypcIixcbiAgICBibG9ja0NvbW1lbnRFbmQ6IFwiKi9cIixcbiAgICBibG9ja0NvbW1lbnRDb250aW51ZTogXCIgKiBcIixcbiAgICBsaW5lQ29tbWVudDogXCIvL1wiLFxuICAgIGZvbGQ6IFwiYnJhY2VcIlxuICB9O1xufSk7XG5cbiAgZnVuY3Rpb24gd29yZHMoc3RyKSB7XG4gICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdChcIiBcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciBibG9ja0tleXdvcmRzID0gXCJib2R5IGNhdGNoIGNsYXNzIGRvIGVsc2UgZW51bSBmb3IgZm9yZWFjaCBmb3JlYWNoX3JldmVyc2UgaWYgaW4gaW50ZXJmYWNlIG1peGluIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICBcIm91dCBzY29wZSBzdHJ1Y3Qgc3dpdGNoIHRyeSB1bmlvbiB1bml0dGVzdCB2ZXJzaW9uIHdoaWxlIHdpdGhcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtZFwiLCB7XG4gICAgbmFtZTogXCJkXCIsXG4gICAga2V5d29yZHM6IHdvcmRzKFwiYWJzdHJhY3QgYWxpYXMgYWxpZ24gYXNtIGFzc2VydCBhdXRvIGJyZWFrIGNhc2UgY2FzdCBjZG91YmxlIGNlbnQgY2Zsb2F0IGNvbnN0IGNvbnRpbnVlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJkZWJ1ZyBkZWZhdWx0IGRlbGVnYXRlIGRlbGV0ZSBkZXByZWNhdGVkIGV4cG9ydCBleHRlcm4gZmluYWwgZmluYWxseSBmdW5jdGlvbiBnb3RvIGltbXV0YWJsZSBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiaW1wb3J0IGlub3V0IGludmFyaWFudCBpcyBsYXp5IG1hY3JvIG1vZHVsZSBuZXcgbm90aHJvdyBvdmVycmlkZSBwYWNrYWdlIHByYWdtYSBwcml2YXRlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJwcm90ZWN0ZWQgcHVibGljIHB1cmUgcmVmIHJldHVybiBzaGFyZWQgc2hvcnQgc3RhdGljIHN1cGVyIHN5bmNocm9uaXplZCB0ZW1wbGF0ZSB0aGlzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ0aHJvdyB0eXBlZGVmIHR5cGVpZCB0eXBlb2Ygdm9sYXRpbGUgX19GSUxFX18gX19MSU5FX18gX19nc2hhcmVkIF9fdHJhaXRzIF9fdmVjdG9yIF9fcGFyYW1ldGVycyBcIiArXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrS2V5d29yZHMpLFxuICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKGJsb2NrS2V5d29yZHMpLFxuICAgIGJ1aWx0aW46IHdvcmRzKFwiYm9vbCBieXRlIGNoYXIgY3JlYWwgZGNoYXIgZG91YmxlIGZsb2F0IGlkb3VibGUgaWZsb2F0IGludCBpcmVhbCBsb25nIHJlYWwgc2hvcnQgdWJ5dGUgXCIgK1xuICAgICAgICAgICAgICAgICAgIFwidWNlbnQgdWludCB1bG9uZyB1c2hvcnQgd2NoYXIgd3N0cmluZyB2b2lkIHNpemVfdCBzaXplZGlmZl90XCIpLFxuICAgIGF0b21zOiB3b3JkcyhcImV4aXQgZmFpbHVyZSBzdWNjZXNzIHRydWUgZmFsc2UgbnVsbFwiKSxcbiAgICBob29rczoge1xuICAgICAgXCJAXCI6IGZ1bmN0aW9uKHN0cmVhbSwgX3N0YXRlKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9dLyk7XG4gICAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi9jbGlrZS9jbGlrZVwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4uL2NsaWtlL2NsaWtlXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIga2V5d29yZHMgPSAoXCJ0aGlzIHN1cGVyIHN0YXRpYyBmaW5hbCBjb25zdCBhYnN0cmFjdCBjbGFzcyBleHRlbmRzIGV4dGVybmFsIGZhY3RvcnkgXCIgK1xuICAgIFwiaW1wbGVtZW50cyBtaXhpbiBnZXQgbmF0aXZlIHNldCB0eXBlZGVmIHdpdGggZW51bSB0aHJvdyByZXRocm93IFwiICtcbiAgICBcImFzc2VydCBicmVhayBjYXNlIGNvbnRpbnVlIGRlZmF1bHQgaW4gcmV0dXJuIG5ldyBkZWZlcnJlZCBhc3luYyBhd2FpdCBjb3ZhcmlhbnQgXCIgK1xuICAgIFwidHJ5IGNhdGNoIGZpbmFsbHkgZG8gZWxzZSBmb3IgaWYgc3dpdGNoIHdoaWxlIGltcG9ydCBsaWJyYXJ5IGV4cG9ydCBcIiArXG4gICAgXCJwYXJ0IG9mIHNob3cgaGlkZSBpcyBhcyBleHRlbnNpb24gb24geWllbGQgbGF0ZSByZXF1aXJlZFwiKS5zcGxpdChcIiBcIik7XG4gIHZhciBibG9ja0tleXdvcmRzID0gXCJ0cnkgY2F0Y2ggZmluYWxseSBkbyBlbHNlIGZvciBpZiBzd2l0Y2ggd2hpbGVcIi5zcGxpdChcIiBcIik7XG4gIHZhciBhdG9tcyA9IFwidHJ1ZSBmYWxzZSBudWxsXCIuc3BsaXQoXCIgXCIpO1xuICB2YXIgYnVpbHRpbnMgPSBcInZvaWQgYm9vbCBudW0gaW50IGRvdWJsZSBkeW5hbWljIHZhciBTdHJpbmcgTnVsbCBOZXZlclwiLnNwbGl0KFwiIFwiKTtcblxuICBmdW5jdGlvbiBzZXQod29yZHMpIHtcbiAgICB2YXIgb2JqID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hJbnRlcnBvbGF0aW9uU3RhY2soc3RhdGUpIHtcbiAgICAoc3RhdGUuaW50ZXJwb2xhdGlvblN0YWNrIHx8IChzdGF0ZS5pbnRlcnBvbGF0aW9uU3RhY2sgPSBbXSkpLnB1c2goc3RhdGUudG9rZW5pemUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9wSW50ZXJwb2xhdGlvblN0YWNrKHN0YXRlKSB7XG4gICAgcmV0dXJuIChzdGF0ZS5pbnRlcnBvbGF0aW9uU3RhY2sgfHwgKHN0YXRlLmludGVycG9sYXRpb25TdGFjayA9IFtdKSkucG9wKCk7XG4gIH1cblxuICBmdW5jdGlvbiBzaXplSW50ZXJwb2xhdGlvblN0YWNrKHN0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlLmludGVycG9sYXRpb25TdGFjayA/IHN0YXRlLmludGVycG9sYXRpb25TdGFjay5sZW5ndGggOiAwO1xuICB9XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vZGFydFwiLCB7XG4gICAgbmFtZTogXCJjbGlrZVwiLFxuICAgIGtleXdvcmRzOiBzZXQoa2V5d29yZHMpLFxuICAgIGJsb2NrS2V5d29yZHM6IHNldChibG9ja0tleXdvcmRzKSxcbiAgICBidWlsdGluOiBzZXQoYnVpbHRpbnMpLFxuICAgIGF0b21zOiBzZXQoYXRvbXMpLFxuICAgIGhvb2tzOiB7XG4gICAgICBcIkBcIjogZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9cXC5dLyk7XG4gICAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICAgIH0sXG5cbiAgICAgIC8vIGN1c3RvbSBzdHJpbmcgaGFuZGxpbmcgdG8gZGVhbCB3aXRoIHRyaXBsZS1xdW90ZWQgc3RyaW5ncyBhbmQgc3RyaW5nIGludGVycG9sYXRpb25cbiAgICAgIFwiJ1wiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHJldHVybiB0b2tlblN0cmluZyhcIidcIiwgc3RyZWFtLCBzdGF0ZSwgZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIFwiXFxcIlwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHJldHVybiB0b2tlblN0cmluZyhcIlxcXCJcIiwgc3RyZWFtLCBzdGF0ZSwgZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIFwiclwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHZhciBwZWVrID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgICAgaWYgKHBlZWsgPT0gXCInXCIgfHwgcGVlayA9PSBcIlxcXCJcIikge1xuICAgICAgICAgIHJldHVybiB0b2tlblN0cmluZyhzdHJlYW0ubmV4dCgpLCBzdHJlYW0sIHN0YXRlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuXG4gICAgICBcIn1cIjogZnVuY3Rpb24oX3N0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgLy8gXCJ9XCIgaXMgZW5kIG9mIGludGVycG9sYXRpb24sIGlmIGludGVycG9sYXRpb24gc3RhY2sgaXMgbm9uLWVtcHR5XG4gICAgICAgIGlmIChzaXplSW50ZXJwb2xhdGlvblN0YWNrKHN0YXRlKSA+IDApIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBvcEludGVycG9sYXRpb25TdGFjayhzdGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcblxuICAgICAgXCIvXCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKCFzdHJlYW0uZWF0KFwiKlwiKSkgcmV0dXJuIGZhbHNlXG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5OZXN0ZWRDb21tZW50KDEpXG4gICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKVxuICAgICAgfSxcbiAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIF8sIHN0eWxlKSB7XG4gICAgICAgIGlmIChzdHlsZSA9PSBcInZhcmlhYmxlXCIpIHtcbiAgICAgICAgICAvLyBBc3N1bWUgdXBwZXJjYXNlIHN5bWJvbHMgYXJlIGNsYXNzZXMgdXNpbmcgdmFyaWFibGUtMlxuICAgICAgICAgIHZhciBpc1VwcGVyID0gUmVnRXhwKCdeW18kXSpbQS1aXVthLXpBLVowLTlfJF0qJCcsJ2cnKTtcbiAgICAgICAgICBpZiAoaXNVcHBlci50ZXN0KHN0cmVhbS5jdXJyZW50KCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlLTInO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUsIHN0cmVhbSwgc3RhdGUsIHJhdykge1xuICAgIHZhciB0cmlwbGVRdW90ZWQgPSBmYWxzZTtcbiAgICBpZiAoc3RyZWFtLmVhdChxdW90ZSkpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KHF1b3RlKSkgdHJpcGxlUXVvdGVkID0gdHJ1ZTtcbiAgICAgIGVsc2UgcmV0dXJuIFwic3RyaW5nXCI7IC8vZW1wdHkgc3RyaW5nXG4gICAgfVxuICAgIGZ1bmN0aW9uIHRva2VuU3RyaW5nSGVscGVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2U7XG4gICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuICAgICAgICBpZiAoIXJhdyAmJiAhZXNjYXBlZCAmJiBzdHJlYW0ucGVlaygpID09IFwiJFwiKSB7XG4gICAgICAgICAgcHVzaEludGVycG9sYXRpb25TdGFjayhzdGF0ZSk7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkludGVycG9sYXRpb247XG4gICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5leHQgPSBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCAmJiAoIXRyaXBsZVF1b3RlZCB8fCBzdHJlYW0ubWF0Y2gocXVvdGUgKyBxdW90ZSkpKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWQgPSAhcmF3ICYmICFlc2NhcGVkICYmIG5leHQgPT0gXCJcXFxcXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9XG4gICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZ0hlbHBlcjtcbiAgICByZXR1cm4gdG9rZW5TdHJpbmdIZWxwZXIoc3RyZWFtLCBzdGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkludGVycG9sYXRpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgIHN0cmVhbS5lYXQoXCIkXCIpO1xuICAgIGlmIChzdHJlYW0uZWF0KFwie1wiKSkge1xuICAgICAgLy8gbGV0IGNsaWtlIGhhbmRsZSB0aGUgY29udGVudCBvZiAkey4uLn0sXG4gICAgICAvLyB3ZSB0YWtlIG92ZXIgYWdhaW4gd2hlbiBcIn1cIiBhcHBlYXJzIChzZWUgaG9va3MpLlxuICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuSW50ZXJwb2xhdGlvbklkZW50aWZpZXI7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5JbnRlcnBvbGF0aW9uSWRlbnRpZmllcihzdHJlYW0sIHN0YXRlKSB7XG4gICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3X10vKTtcbiAgICBzdGF0ZS50b2tlbml6ZSA9IHBvcEludGVycG9sYXRpb25TdGFjayhzdGF0ZSk7XG4gICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuTmVzdGVkQ29tbWVudChkZXB0aCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGNoXG4gICAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICAgIGlmIChjaCA9PSBcIipcIiAmJiBzdHJlYW0uZWF0KFwiL1wiKSkge1xuICAgICAgICAgIGlmIChkZXB0aCA9PSAxKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGxcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5OZXN0ZWRDb21tZW50KGRlcHRoIC0gMSlcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PSBcIi9cIiAmJiBzdHJlYW0uZWF0KFwiKlwiKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5OZXN0ZWRDb21tZW50KGRlcHRoICsgMSlcbiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFwiY29tbWVudFwiXG4gICAgfVxuICB9XG5cbiAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImhpbnRXb3Jkc1wiLCBcImFwcGxpY2F0aW9uL2RhcnRcIiwga2V5d29yZHMuY29uY2F0KGF0b21zKS5jb25jYXQoYnVpbHRpbnMpKTtcblxuICAvLyBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIGxvYWRpbmcgdGhyb3VnaCBtZXRhLmpzIHdvcmsuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhcnRcIiwgZnVuY3Rpb24oY29uZikge1xuICAgIHJldHVybiBDb2RlTWlycm9yLmdldE1vZGUoY29uZiwgXCJhcHBsaWNhdGlvbi9kYXJ0XCIpO1xuICB9LCBcImNsaWtlXCIpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRpZmZcIiwgZnVuY3Rpb24oKSB7XG5cbiAgdmFyIFRPS0VOX05BTUVTID0ge1xuICAgICcrJzogJ3Bvc2l0aXZlJyxcbiAgICAnLSc6ICduZWdhdGl2ZScsXG4gICAgJ0AnOiAnbWV0YSdcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgIHZhciB0d19wb3MgPSBzdHJlYW0uc3RyaW5nLnNlYXJjaCgvW1xcdCBdKz8kLyk7XG5cbiAgICAgIGlmICghc3RyZWFtLnNvbCgpIHx8IHR3X3BvcyA9PT0gMCkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiAoXCJlcnJvciBcIiArIChcbiAgICAgICAgICBUT0tFTl9OQU1FU1tzdHJlYW0uc3RyaW5nLmNoYXJBdCgwKV0gfHwgJycpKS5yZXBsYWNlKC8gJC8sICcnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRva2VuX25hbWUgPSBUT0tFTl9OQU1FU1tzdHJlYW0ucGVlaygpXSB8fCBzdHJlYW0uc2tpcFRvRW5kKCk7XG5cbiAgICAgIGlmICh0d19wb3MgPT09IC0xKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmVhbS5wb3MgPSB0d19wb3M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0b2tlbl9uYW1lO1xuICAgIH1cbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtZGlmZlwiLCBcImRpZmZcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgaHRtbENvbmZpZyA9IHtcbiAgYXV0b1NlbGZDbG9zZXJzOiB7J2FyZWEnOiB0cnVlLCAnYmFzZSc6IHRydWUsICdicic6IHRydWUsICdjb2wnOiB0cnVlLCAnY29tbWFuZCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICdlbWJlZCc6IHRydWUsICdmcmFtZSc6IHRydWUsICdocic6IHRydWUsICdpbWcnOiB0cnVlLCAnaW5wdXQnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAna2V5Z2VuJzogdHJ1ZSwgJ2xpbmsnOiB0cnVlLCAnbWV0YSc6IHRydWUsICdwYXJhbSc6IHRydWUsICdzb3VyY2UnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAndHJhY2snOiB0cnVlLCAnd2JyJzogdHJ1ZSwgJ21lbnVpdGVtJzogdHJ1ZX0sXG4gIGltcGxpY2l0bHlDbG9zZWQ6IHsnZGQnOiB0cnVlLCAnbGknOiB0cnVlLCAnb3B0Z3JvdXAnOiB0cnVlLCAnb3B0aW9uJzogdHJ1ZSwgJ3AnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgJ3JwJzogdHJ1ZSwgJ3J0JzogdHJ1ZSwgJ3Rib2R5JzogdHJ1ZSwgJ3RkJzogdHJ1ZSwgJ3Rmb290JzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICd0aCc6IHRydWUsICd0cic6IHRydWV9LFxuICBjb250ZXh0R3JhYmJlcnM6IHtcbiAgICAnZGQnOiB7J2RkJzogdHJ1ZSwgJ2R0JzogdHJ1ZX0sXG4gICAgJ2R0JzogeydkZCc6IHRydWUsICdkdCc6IHRydWV9LFxuICAgICdsaSc6IHsnbGknOiB0cnVlfSxcbiAgICAnb3B0aW9uJzogeydvcHRpb24nOiB0cnVlLCAnb3B0Z3JvdXAnOiB0cnVlfSxcbiAgICAnb3B0Z3JvdXAnOiB7J29wdGdyb3VwJzogdHJ1ZX0sXG4gICAgJ3AnOiB7J2FkZHJlc3MnOiB0cnVlLCAnYXJ0aWNsZSc6IHRydWUsICdhc2lkZSc6IHRydWUsICdibG9ja3F1b3RlJzogdHJ1ZSwgJ2Rpcic6IHRydWUsXG4gICAgICAgICAgJ2Rpdic6IHRydWUsICdkbCc6IHRydWUsICdmaWVsZHNldCc6IHRydWUsICdmb290ZXInOiB0cnVlLCAnZm9ybSc6IHRydWUsXG4gICAgICAgICAgJ2gxJzogdHJ1ZSwgJ2gyJzogdHJ1ZSwgJ2gzJzogdHJ1ZSwgJ2g0JzogdHJ1ZSwgJ2g1JzogdHJ1ZSwgJ2g2JzogdHJ1ZSxcbiAgICAgICAgICAnaGVhZGVyJzogdHJ1ZSwgJ2hncm91cCc6IHRydWUsICdocic6IHRydWUsICdtZW51JzogdHJ1ZSwgJ25hdic6IHRydWUsICdvbCc6IHRydWUsXG4gICAgICAgICAgJ3AnOiB0cnVlLCAncHJlJzogdHJ1ZSwgJ3NlY3Rpb24nOiB0cnVlLCAndGFibGUnOiB0cnVlLCAndWwnOiB0cnVlfSxcbiAgICAncnAnOiB7J3JwJzogdHJ1ZSwgJ3J0JzogdHJ1ZX0sXG4gICAgJ3J0JzogeydycCc6IHRydWUsICdydCc6IHRydWV9LFxuICAgICd0Ym9keSc6IHsndGJvZHknOiB0cnVlLCAndGZvb3QnOiB0cnVlfSxcbiAgICAndGQnOiB7J3RkJzogdHJ1ZSwgJ3RoJzogdHJ1ZX0sXG4gICAgJ3Rmb290Jzogeyd0Ym9keSc6IHRydWV9LFxuICAgICd0aCc6IHsndGQnOiB0cnVlLCAndGgnOiB0cnVlfSxcbiAgICAndGhlYWQnOiB7J3Rib2R5JzogdHJ1ZSwgJ3Rmb290JzogdHJ1ZX0sXG4gICAgJ3RyJzogeyd0cic6IHRydWV9XG4gIH0sXG4gIGRvTm90SW5kZW50OiB7XCJwcmVcIjogdHJ1ZX0sXG4gIGFsbG93VW5xdW90ZWQ6IHRydWUsXG4gIGFsbG93TWlzc2luZzogdHJ1ZSxcbiAgY2FzZUZvbGQ6IHRydWVcbn1cblxudmFyIHhtbENvbmZpZyA9IHtcbiAgYXV0b1NlbGZDbG9zZXJzOiB7fSxcbiAgaW1wbGljaXRseUNsb3NlZDoge30sXG4gIGNvbnRleHRHcmFiYmVyczoge30sXG4gIGRvTm90SW5kZW50OiB7fSxcbiAgYWxsb3dVbnF1b3RlZDogZmFsc2UsXG4gIGFsbG93TWlzc2luZzogZmFsc2UsXG4gIGFsbG93TWlzc2luZ1RhZ05hbWU6IGZhbHNlLFxuICBjYXNlRm9sZDogZmFsc2Vcbn1cblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwieG1sXCIsIGZ1bmN0aW9uKGVkaXRvckNvbmYsIGNvbmZpZ18pIHtcbiAgdmFyIGluZGVudFVuaXQgPSBlZGl0b3JDb25mLmluZGVudFVuaXRcbiAgdmFyIGNvbmZpZyA9IHt9XG4gIHZhciBkZWZhdWx0cyA9IGNvbmZpZ18uaHRtbE1vZGUgPyBodG1sQ29uZmlnIDogeG1sQ29uZmlnXG4gIGZvciAodmFyIHByb3AgaW4gZGVmYXVsdHMpIGNvbmZpZ1twcm9wXSA9IGRlZmF1bHRzW3Byb3BdXG4gIGZvciAodmFyIHByb3AgaW4gY29uZmlnXykgY29uZmlnW3Byb3BdID0gY29uZmlnX1twcm9wXVxuXG4gIC8vIFJldHVybiB2YXJpYWJsZXMgZm9yIHRva2VuaXplcnNcbiAgdmFyIHR5cGUsIHNldFN0eWxlO1xuXG4gIGZ1bmN0aW9uIGluVGV4dChzdHJlYW0sIHN0YXRlKSB7XG4gICAgZnVuY3Rpb24gY2hhaW4ocGFyc2VyKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlcjtcbiAgICAgIHJldHVybiBwYXJzZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gXCI8XCIpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiIVwiKSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIltcIikpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKFwiQ0RBVEFbXCIpKSByZXR1cm4gY2hhaW4oaW5CbG9jayhcImF0b21cIiwgXCJdXT5cIikpO1xuICAgICAgICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKFwiLS1cIikpIHtcbiAgICAgICAgICByZXR1cm4gY2hhaW4oaW5CbG9jayhcImNvbW1lbnRcIiwgXCItLT5cIikpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChcIkRPQ1RZUEVcIiwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5fXFwtXS8pO1xuICAgICAgICAgIHJldHVybiBjaGFpbihkb2N0eXBlKDEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KFwiP1wiKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5fXFwtXS8pO1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQmxvY2soXCJtZXRhXCIsIFwiPz5cIik7XG4gICAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGUgPSBzdHJlYW0uZWF0KFwiL1wiKSA/IFwiY2xvc2VUYWdcIiA6IFwib3BlblRhZ1wiO1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGFnO1xuICAgICAgICByZXR1cm4gXCJ0YWcgYnJhY2tldFwiO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCImXCIpIHtcbiAgICAgIHZhciBvaztcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiI1wiKSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcInhcIikpIHtcbiAgICAgICAgICBvayA9IHN0cmVhbS5lYXRXaGlsZSgvW2EtZkEtRlxcZF0vKSAmJiBzdHJlYW0uZWF0KFwiO1wiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvayA9IHN0cmVhbS5lYXRXaGlsZSgvW1xcZF0vKSAmJiBzdHJlYW0uZWF0KFwiO1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5cXC06XS8pICYmIHN0cmVhbS5lYXQoXCI7XCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9rID8gXCJhdG9tXCIgOiBcImVycm9yXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14mPF0vKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBpblRleHQuaXNJblRleHQgPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIGluVGFnKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgIGlmIChjaCA9PSBcIj5cIiB8fCAoY2ggPT0gXCIvXCIgJiYgc3RyZWFtLmVhdChcIj5cIikpKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDtcbiAgICAgIHR5cGUgPSBjaCA9PSBcIj5cIiA/IFwiZW5kVGFnXCIgOiBcInNlbGZjbG9zZVRhZ1wiO1xuICAgICAgcmV0dXJuIFwidGFnIGJyYWNrZXRcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiPVwiKSB7XG4gICAgICB0eXBlID0gXCJlcXVhbHNcIjtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCI8XCIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0O1xuICAgICAgc3RhdGUuc3RhdGUgPSBiYXNlU3RhdGU7XG4gICAgICBzdGF0ZS50YWdOYW1lID0gc3RhdGUudGFnU3RhcnQgPSBudWxsO1xuICAgICAgdmFyIG5leHQgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIHJldHVybiBuZXh0ID8gbmV4dCArIFwiIHRhZyBlcnJvclwiIDogXCJ0YWcgZXJyb3JcIjtcbiAgICB9IGVsc2UgaWYgKC9bXFwnXFxcIl0vLnRlc3QoY2gpKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQXR0cmlidXRlKGNoKTtcbiAgICAgIHN0YXRlLnN0cmluZ1N0YXJ0Q29sID0gc3RyZWFtLmNvbHVtbigpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0ubWF0Y2goL15bXlxcc1xcdTAwYTA9PD5cXFwiXFwnXSpbXlxcc1xcdTAwYTA9PD5cXFwiXFwnXFwvXS8pO1xuICAgICAgcmV0dXJuIFwid29yZFwiO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluQXR0cmlidXRlKHF1b3RlKSB7XG4gICAgdmFyIGNsb3N1cmUgPSBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuICAgICAgICBpZiAoc3RyZWFtLm5leHQoKSA9PSBxdW90ZSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH07XG4gICAgY2xvc3VyZS5pc0luQXR0cmlidXRlID0gdHJ1ZTtcbiAgICByZXR1cm4gY2xvc3VyZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluQmxvY2soc3R5bGUsIHRlcm1pbmF0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCh0ZXJtaW5hdG9yKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZG9jdHlwZShkZXB0aCkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY2g7XG4gICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2ggPT0gXCI8XCIpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGRvY3R5cGUoZGVwdGggKyAxKTtcbiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCI+XCIpIHtcbiAgICAgICAgICBpZiAoZGVwdGggPT0gMSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBkb2N0eXBlKGRlcHRoIC0gMSk7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQoc3RhdGUsIHRhZ05hbWUsIHN0YXJ0T2ZMaW5lKSB7XG4gICAgdGhpcy5wcmV2ID0gc3RhdGUuY29udGV4dDtcbiAgICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lO1xuICAgIHRoaXMuaW5kZW50ID0gc3RhdGUuaW5kZW50ZWQ7XG4gICAgdGhpcy5zdGFydE9mTGluZSA9IHN0YXJ0T2ZMaW5lO1xuICAgIGlmIChjb25maWcuZG9Ob3RJbmRlbnQuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgfHwgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC5ub0luZGVudCkpXG4gICAgICB0aGlzLm5vSW5kZW50ID0gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmNvbnRleHQpIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVQb3BDb250ZXh0KHN0YXRlLCBuZXh0VGFnTmFtZSkge1xuICAgIHZhciBwYXJlbnRUYWdOYW1lO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoIXN0YXRlLmNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcGFyZW50VGFnTmFtZSA9IHN0YXRlLmNvbnRleHQudGFnTmFtZTtcbiAgICAgIGlmICghY29uZmlnLmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRUYWdOYW1lKSB8fFxuICAgICAgICAgICFjb25maWcuY29udGV4dEdyYWJiZXJzW3BhcmVudFRhZ05hbWVdLmhhc093blByb3BlcnR5KG5leHRUYWdOYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBiYXNlU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwib3BlblRhZ1wiKSB7XG4gICAgICBzdGF0ZS50YWdTdGFydCA9IHN0cmVhbS5jb2x1bW4oKTtcbiAgICAgIHJldHVybiB0YWdOYW1lU3RhdGU7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiY2xvc2VUYWdcIikge1xuICAgICAgcmV0dXJuIGNsb3NlVGFnTmFtZVN0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYmFzZVN0YXRlO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB0YWdOYW1lU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7XG4gICAgICBzdGF0ZS50YWdOYW1lID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgIHNldFN0eWxlID0gXCJ0YWdcIjtcbiAgICAgIHJldHVybiBhdHRyU3RhdGU7XG4gICAgfSBlbHNlIGlmIChjb25maWcuYWxsb3dNaXNzaW5nVGFnTmFtZSAmJiB0eXBlID09IFwiZW5kVGFnXCIpIHtcbiAgICAgIHNldFN0eWxlID0gXCJ0YWcgYnJhY2tldFwiO1xuICAgICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgICByZXR1cm4gdGFnTmFtZVN0YXRlO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjbG9zZVRhZ05hbWVTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgIHZhciB0YWdOYW1lID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQudGFnTmFtZSAhPSB0YWdOYW1lICYmXG4gICAgICAgICAgY29uZmlnLmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoc3RhdGUuY29udGV4dC50YWdOYW1lKSlcbiAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICBpZiAoKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC50YWdOYW1lID09IHRhZ05hbWUpIHx8IGNvbmZpZy5tYXRjaENsb3NpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgIHNldFN0eWxlID0gXCJ0YWdcIjtcbiAgICAgICAgcmV0dXJuIGNsb3NlU3RhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRTdHlsZSA9IFwidGFnIGVycm9yXCI7XG4gICAgICAgIHJldHVybiBjbG9zZVN0YXRlRXJyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29uZmlnLmFsbG93TWlzc2luZ1RhZ05hbWUgJiYgdHlwZSA9PSBcImVuZFRhZ1wiKSB7XG4gICAgICBzZXRTdHlsZSA9IFwidGFnIGJyYWNrZXRcIjtcbiAgICAgIHJldHVybiBjbG9zZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICAgIHJldHVybiBjbG9zZVN0YXRlRXJyO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlU3RhdGUodHlwZSwgX3N0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSAhPSBcImVuZFRhZ1wiKSB7XG4gICAgICBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICAgIHJldHVybiBjbG9zZVN0YXRlO1xuICAgIH1cbiAgICBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICByZXR1cm4gYmFzZVN0YXRlO1xuICB9XG4gIGZ1bmN0aW9uIGNsb3NlU3RhdGVFcnIodHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIHNldFN0eWxlID0gXCJlcnJvclwiO1xuICAgIHJldHVybiBjbG9zZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXR0clN0YXRlKHR5cGUsIF9zdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgIHNldFN0eWxlID0gXCJhdHRyaWJ1dGVcIjtcbiAgICAgIHJldHVybiBhdHRyRXFTdGF0ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJlbmRUYWdcIiB8fCB0eXBlID09IFwic2VsZmNsb3NlVGFnXCIpIHtcbiAgICAgIHZhciB0YWdOYW1lID0gc3RhdGUudGFnTmFtZSwgdGFnU3RhcnQgPSBzdGF0ZS50YWdTdGFydDtcbiAgICAgIHN0YXRlLnRhZ05hbWUgPSBzdGF0ZS50YWdTdGFydCA9IG51bGw7XG4gICAgICBpZiAodHlwZSA9PSBcInNlbGZjbG9zZVRhZ1wiIHx8XG4gICAgICAgICAgY29uZmlnLmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eSh0YWdOYW1lKSkge1xuICAgICAgICBtYXliZVBvcENvbnRleHQoc3RhdGUsIHRhZ05hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF5YmVQb3BDb250ZXh0KHN0YXRlLCB0YWdOYW1lKTtcbiAgICAgICAgc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLCB0YWdOYW1lLCB0YWdTdGFydCA9PSBzdGF0ZS5pbmRlbnRlZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVN0YXRlO1xuICAgIH1cbiAgICBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICByZXR1cm4gYXR0clN0YXRlO1xuICB9XG4gIGZ1bmN0aW9uIGF0dHJFcVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcImVxdWFsc1wiKSByZXR1cm4gYXR0clZhbHVlU3RhdGU7XG4gICAgaWYgKCFjb25maWcuYWxsb3dNaXNzaW5nKSBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICByZXR1cm4gYXR0clN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICB9XG4gIGZ1bmN0aW9uIGF0dHJWYWx1ZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcInN0cmluZ1wiKSByZXR1cm4gYXR0ckNvbnRpbnVlZFN0YXRlO1xuICAgIGlmICh0eXBlID09IFwid29yZFwiICYmIGNvbmZpZy5hbGxvd1VucXVvdGVkKSB7c2V0U3R5bGUgPSBcInN0cmluZ1wiOyByZXR1cm4gYXR0clN0YXRlO31cbiAgICBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICByZXR1cm4gYXR0clN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICB9XG4gIGZ1bmN0aW9uIGF0dHJDb250aW51ZWRTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGF0dHJDb250aW51ZWRTdGF0ZTtcbiAgICByZXR1cm4gYXR0clN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlSW5kZW50KSB7XG4gICAgICB2YXIgc3RhdGUgPSB7dG9rZW5pemU6IGluVGV4dCxcbiAgICAgICAgICAgICAgICAgICBzdGF0ZTogYmFzZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgIGluZGVudGVkOiBiYXNlSW5kZW50IHx8IDAsXG4gICAgICAgICAgICAgICAgICAgdGFnTmFtZTogbnVsbCwgdGFnU3RhcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgY29udGV4dDogbnVsbH1cbiAgICAgIGlmIChiYXNlSW5kZW50ICE9IG51bGwpIHN0YXRlLmJhc2VJbmRlbnQgPSBiYXNlSW5kZW50XG4gICAgICByZXR1cm4gc3RhdGVcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmICghc3RhdGUudGFnTmFtZSAmJiBzdHJlYW0uc29sKCkpXG4gICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG5cbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICB0eXBlID0gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKChzdHlsZSB8fCB0eXBlKSAmJiBzdHlsZSAhPSBcImNvbW1lbnRcIikge1xuICAgICAgICBzZXRTdHlsZSA9IG51bGw7XG4gICAgICAgIHN0YXRlLnN0YXRlID0gc3RhdGUuc3RhdGUodHlwZSB8fCBzdHlsZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIGlmIChzZXRTdHlsZSlcbiAgICAgICAgICBzdHlsZSA9IHNldFN0eWxlID09IFwiZXJyb3JcIiA/IHN0eWxlICsgXCIgZXJyb3JcIiA6IHNldFN0eWxlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIsIGZ1bGxMaW5lKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHN0YXRlLmNvbnRleHQ7XG4gICAgICAvLyBJbmRlbnQgbXVsdGktbGluZSBzdHJpbmdzIChlLmcuIGNzcykuXG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSkge1xuICAgICAgICBpZiAoc3RhdGUudGFnU3RhcnQgPT0gc3RhdGUuaW5kZW50ZWQpXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnN0cmluZ1N0YXJ0Q29sICsgMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJldHVybiBzdGF0ZS5pbmRlbnRlZCArIGluZGVudFVuaXQ7XG4gICAgICB9XG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Lm5vSW5kZW50KSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IGluVGFnICYmIHN0YXRlLnRva2VuaXplICE9IGluVGV4dClcbiAgICAgICAgcmV0dXJuIGZ1bGxMaW5lID8gZnVsbExpbmUubWF0Y2goL14oXFxzKikvKVswXS5sZW5ndGggOiAwO1xuICAgICAgLy8gSW5kZW50IHRoZSBzdGFydHMgb2YgYXR0cmlidXRlIG5hbWVzLlxuICAgICAgaWYgKHN0YXRlLnRhZ05hbWUpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnICE9PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gc3RhdGUudGFnU3RhcnQgKyBzdGF0ZS50YWdOYW1lLmxlbmd0aCArIDI7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gc3RhdGUudGFnU3RhcnQgKyBpbmRlbnRVbml0ICogKGNvbmZpZy5tdWx0aWxpbmVUYWdJbmRlbnRGYWN0b3IgfHwgMSk7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLmFsaWduQ0RBVEEgJiYgLzwhXFxbQ0RBVEFcXFsvLnRlc3QodGV4dEFmdGVyKSkgcmV0dXJuIDA7XG4gICAgICB2YXIgdGFnQWZ0ZXIgPSB0ZXh0QWZ0ZXIgJiYgL148KFxcLyk/KFtcXHdfOlxcLi1dKikvLmV4ZWModGV4dEFmdGVyKTtcbiAgICAgIGlmICh0YWdBZnRlciAmJiB0YWdBZnRlclsxXSkgeyAvLyBDbG9zaW5nIHRhZyBzcG90dGVkXG4gICAgICAgIHdoaWxlIChjb250ZXh0KSB7XG4gICAgICAgICAgaWYgKGNvbnRleHQudGFnTmFtZSA9PSB0YWdBZnRlclsyXSkge1xuICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoY29udGV4dC50YWdOYW1lKSkge1xuICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhZ0FmdGVyKSB7IC8vIE9wZW5pbmcgdGFnIHNwb3R0ZWRcbiAgICAgICAgd2hpbGUgKGNvbnRleHQpIHtcbiAgICAgICAgICB2YXIgZ3JhYmJlcnMgPSBjb25maWcuY29udGV4dEdyYWJiZXJzW2NvbnRleHQudGFnTmFtZV07XG4gICAgICAgICAgaWYgKGdyYWJiZXJzICYmIGdyYWJiZXJzLmhhc093blByb3BlcnR5KHRhZ0FmdGVyWzJdKSlcbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChjb250ZXh0ICYmIGNvbnRleHQucHJldiAmJiAhY29udGV4dC5zdGFydE9mTGluZSlcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjtcbiAgICAgIGlmIChjb250ZXh0KSByZXR1cm4gY29udGV4dC5pbmRlbnQgKyBpbmRlbnRVbml0O1xuICAgICAgZWxzZSByZXR1cm4gc3RhdGUuYmFzZUluZGVudCB8fCAwO1xuICAgIH0sXG5cbiAgICBlbGVjdHJpY0lucHV0OiAvPFxcL1tcXHNcXHc6XSs+JC8sXG4gICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiPCEtLVwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCItLT5cIixcblxuICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZy5odG1sTW9kZSA/IFwiaHRtbFwiIDogXCJ4bWxcIixcbiAgICBoZWxwZXJUeXBlOiBjb25maWcuaHRtbE1vZGUgPyBcImh0bWxcIiA6IFwieG1sXCIsXG5cbiAgICBza2lwQXR0cmlidXRlOiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLnN0YXRlID09IGF0dHJWYWx1ZVN0YXRlKVxuICAgICAgICBzdGF0ZS5zdGF0ZSA9IGF0dHJTdGF0ZVxuICAgIH0sXG5cbiAgICB4bWxDdXJyZW50VGFnOiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLnRhZ05hbWUgPyB7bmFtZTogc3RhdGUudGFnTmFtZSwgY2xvc2U6IHN0YXRlLnR5cGUgPT0gXCJjbG9zZVRhZ1wifSA6IG51bGxcbiAgICB9LFxuXG4gICAgeG1sQ3VycmVudENvbnRleHQ6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICB2YXIgY29udGV4dCA9IFtdXG4gICAgICBmb3IgKHZhciBjeCA9IHN0YXRlLmNvbnRleHQ7IGN4OyBjeCA9IGN4LnByZXYpXG4gICAgICAgIGlmIChjeC50YWdOYW1lKSBjb250ZXh0LnB1c2goY3gudGFnTmFtZSlcbiAgICAgIHJldHVybiBjb250ZXh0LnJldmVyc2UoKVxuICAgIH1cbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3htbFwiLCBcInhtbFwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3htbFwiLCBcInhtbFwiKTtcbmlmICghQ29kZU1pcnJvci5taW1lTW9kZXMuaGFzT3duUHJvcGVydHkoXCJ0ZXh0L2h0bWxcIikpXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvaHRtbFwiLCB7bmFtZTogXCJ4bWxcIiwgaHRtbE1vZGU6IHRydWV9KTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImphdmFzY3JpcHRcIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHtcbiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDtcbiAgdmFyIHN0YXRlbWVudEluZGVudCA9IHBhcnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRlbnQ7XG4gIHZhciBqc29ubGRNb2RlID0gcGFyc2VyQ29uZmlnLmpzb25sZDtcbiAgdmFyIGpzb25Nb2RlID0gcGFyc2VyQ29uZmlnLmpzb24gfHwganNvbmxkTW9kZTtcbiAgdmFyIGlzVFMgPSBwYXJzZXJDb25maWcudHlwZXNjcmlwdDtcbiAgdmFyIHdvcmRSRSA9IHBhcnNlckNvbmZpZy53b3JkQ2hhcmFjdGVycyB8fCAvW1xcdyRcXHhhMS1cXHVmZmZmXS87XG5cbiAgLy8gVG9rZW5pemVyXG5cbiAgdmFyIGtleXdvcmRzID0gZnVuY3Rpb24oKXtcbiAgICBmdW5jdGlvbiBrdyh0eXBlKSB7cmV0dXJuIHt0eXBlOiB0eXBlLCBzdHlsZTogXCJrZXl3b3JkXCJ9O31cbiAgICB2YXIgQSA9IGt3KFwia2V5d29yZCBhXCIpLCBCID0ga3coXCJrZXl3b3JkIGJcIiksIEMgPSBrdyhcImtleXdvcmQgY1wiKSwgRCA9IGt3KFwia2V5d29yZCBkXCIpO1xuICAgIHZhciBvcGVyYXRvciA9IGt3KFwib3BlcmF0b3JcIiksIGF0b20gPSB7dHlwZTogXCJhdG9tXCIsIHN0eWxlOiBcImF0b21cIn07XG5cbiAgICByZXR1cm4ge1xuICAgICAgXCJpZlwiOiBrdyhcImlmXCIpLCBcIndoaWxlXCI6IEEsIFwid2l0aFwiOiBBLCBcImVsc2VcIjogQiwgXCJkb1wiOiBCLCBcInRyeVwiOiBCLCBcImZpbmFsbHlcIjogQixcbiAgICAgIFwicmV0dXJuXCI6IEQsIFwiYnJlYWtcIjogRCwgXCJjb250aW51ZVwiOiBELCBcIm5ld1wiOiBrdyhcIm5ld1wiKSwgXCJkZWxldGVcIjogQywgXCJ2b2lkXCI6IEMsIFwidGhyb3dcIjogQyxcbiAgICAgIFwiZGVidWdnZXJcIjoga3coXCJkZWJ1Z2dlclwiKSwgXCJ2YXJcIjoga3coXCJ2YXJcIiksIFwiY29uc3RcIjoga3coXCJ2YXJcIiksIFwibGV0XCI6IGt3KFwidmFyXCIpLFxuICAgICAgXCJmdW5jdGlvblwiOiBrdyhcImZ1bmN0aW9uXCIpLCBcImNhdGNoXCI6IGt3KFwiY2F0Y2hcIiksXG4gICAgICBcImZvclwiOiBrdyhcImZvclwiKSwgXCJzd2l0Y2hcIjoga3coXCJzd2l0Y2hcIiksIFwiY2FzZVwiOiBrdyhcImNhc2VcIiksIFwiZGVmYXVsdFwiOiBrdyhcImRlZmF1bHRcIiksXG4gICAgICBcImluXCI6IG9wZXJhdG9yLCBcInR5cGVvZlwiOiBvcGVyYXRvciwgXCJpbnN0YW5jZW9mXCI6IG9wZXJhdG9yLFxuICAgICAgXCJ0cnVlXCI6IGF0b20sIFwiZmFsc2VcIjogYXRvbSwgXCJudWxsXCI6IGF0b20sIFwidW5kZWZpbmVkXCI6IGF0b20sIFwiTmFOXCI6IGF0b20sIFwiSW5maW5pdHlcIjogYXRvbSxcbiAgICAgIFwidGhpc1wiOiBrdyhcInRoaXNcIiksIFwiY2xhc3NcIjoga3coXCJjbGFzc1wiKSwgXCJzdXBlclwiOiBrdyhcImF0b21cIiksXG4gICAgICBcInlpZWxkXCI6IEMsIFwiZXhwb3J0XCI6IGt3KFwiZXhwb3J0XCIpLCBcImltcG9ydFwiOiBrdyhcImltcG9ydFwiKSwgXCJleHRlbmRzXCI6IEMsXG4gICAgICBcImF3YWl0XCI6IENcbiAgICB9O1xuICB9KCk7XG5cbiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXFwtKiYlPTw+IT98fl5AXS87XG4gIHZhciBpc0pzb25sZEtleXdvcmQgPSAvXkAoY29udGV4dHxpZHx2YWx1ZXxsYW5ndWFnZXx0eXBlfGNvbnRhaW5lcnxsaXN0fHNldHxyZXZlcnNlfGluZGV4fGJhc2V8dm9jYWJ8Z3JhcGgpXCIvO1xuXG4gIGZ1bmN0aW9uIHJlYWRSZWdleHAoc3RyZWFtKSB7XG4gICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgaW5TZXQgPSBmYWxzZTtcbiAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICBpZiAoIWVzY2FwZWQpIHtcbiAgICAgICAgaWYgKG5leHQgPT0gXCIvXCIgJiYgIWluU2V0KSByZXR1cm47XG4gICAgICAgIGlmIChuZXh0ID09IFwiW1wiKSBpblNldCA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKGluU2V0ICYmIG5leHQgPT0gXCJdXCIpIGluU2V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICB9XG4gIH1cblxuICAvLyBVc2VkIGFzIHNjcmF0Y2ggdmFyaWFibGVzIHRvIGNvbW11bmljYXRlIG11bHRpcGxlIHZhbHVlcyB3aXRob3V0XG4gIC8vIGNvbnNpbmcgdXAgdG9ucyBvZiBvYmplY3RzLlxuICB2YXIgdHlwZSwgY29udGVudDtcbiAgZnVuY3Rpb24gcmV0KHRwLCBzdHlsZSwgY29udCkge1xuICAgIHR5cGUgPSB0cDsgY29udGVudCA9IGNvbnQ7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gJ1wiJyB8fCBjaCA9PSBcIidcIikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIi5cIiAmJiBzdHJlYW0ubWF0Y2goL15cXGRbXFxkX10qKD86W2VFXVsrXFwtXT9bXFxkX10rKT8vKSkge1xuICAgICAgcmV0dXJuIHJldChcIm51bWJlclwiLCBcIm51bWJlclwiKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiLlwiICYmIHN0cmVhbS5tYXRjaChcIi4uXCIpKSB7XG4gICAgICByZXR1cm4gcmV0KFwic3ByZWFkXCIsIFwibWV0YVwiKTtcbiAgICB9IGVsc2UgaWYgKC9bXFxbXFxde31cXChcXCksO1xcOlxcLl0vLnRlc3QoY2gpKSB7XG4gICAgICByZXR1cm4gcmV0KGNoKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiPVwiICYmIHN0cmVhbS5lYXQoXCI+XCIpKSB7XG4gICAgICByZXR1cm4gcmV0KFwiPT5cIiwgXCJvcGVyYXRvclwiKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiMFwiICYmIHN0cmVhbS5tYXRjaCgvXig/OnhbXFxkQS1GYS1mX10rfG9bMC03X10rfGJbMDFfXSspbj8vKSkge1xuICAgICAgcmV0dXJuIHJldChcIm51bWJlclwiLCBcIm51bWJlclwiKTtcbiAgICB9IGVsc2UgaWYgKC9cXGQvLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goL15bXFxkX10qKD86bnwoPzpcXC5bXFxkX10qKT8oPzpbZUVdWytcXC1dP1tcXGRfXSspPyk/Lyk7XG4gICAgICByZXR1cm4gcmV0KFwibnVtYmVyXCIsIFwibnVtYmVyXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIvXCIpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiKlwiKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDtcbiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gcmV0KFwiY29tbWVudFwiLCBcImNvbW1lbnRcIik7XG4gICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb25BbGxvd2VkKHN0cmVhbSwgc3RhdGUsIDEpKSB7XG4gICAgICAgIHJlYWRSZWdleHAoc3RyZWFtKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eXFxiKChbZ2lteXVzXSkoPyFbZ2lteXVzXSpcXDIpKStcXGIvKTtcbiAgICAgICAgcmV0dXJuIHJldChcInJlZ2V4cFwiLCBcInN0cmluZy0yXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLmVhdChcIj1cIik7XG4gICAgICAgIHJldHVybiByZXQoXCJvcGVyYXRvclwiLCBcIm9wZXJhdG9yXCIsIHN0cmVhbS5jdXJyZW50KCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCJgXCIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5RdWFzaTtcbiAgICAgIHJldHVybiB0b2tlblF1YXNpKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIjXCIgJiYgc3RyZWFtLnBlZWsoKSA9PSBcIiFcIikge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgcmV0dXJuIHJldChcIm1ldGFcIiwgXCJtZXRhXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIjXCIgJiYgc3RyZWFtLmVhdFdoaWxlKHdvcmRSRSkpIHtcbiAgICAgIHJldHVybiByZXQoXCJ2YXJpYWJsZVwiLCBcInByb3BlcnR5XCIpXG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIjxcIiAmJiBzdHJlYW0ubWF0Y2goXCIhLS1cIikgfHxcbiAgICAgICAgICAgICAgIChjaCA9PSBcIi1cIiAmJiBzdHJlYW0ubWF0Y2goXCItPlwiKSAmJiAhL1xcUy8udGVzdChzdHJlYW0uc3RyaW5nLnNsaWNlKDAsIHN0cmVhbS5zdGFydCkpKSkge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpXG4gICAgICByZXR1cm4gcmV0KFwiY29tbWVudFwiLCBcImNvbW1lbnRcIilcbiAgICB9IGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7XG4gICAgICBpZiAoY2ggIT0gXCI+XCIgfHwgIXN0YXRlLmxleGljYWwgfHwgc3RhdGUubGV4aWNhbC50eXBlICE9IFwiPlwiKSB7XG4gICAgICAgIGlmIChzdHJlYW0uZWF0KFwiPVwiKSkge1xuICAgICAgICAgIGlmIChjaCA9PSBcIiFcIiB8fCBjaCA9PSBcIj1cIikgc3RyZWFtLmVhdChcIj1cIilcbiAgICAgICAgfSBlbHNlIGlmICgvWzw+KitcXC18Jj9dLy50ZXN0KGNoKSkge1xuICAgICAgICAgIHN0cmVhbS5lYXQoY2gpXG4gICAgICAgICAgaWYgKGNoID09IFwiPlwiKSBzdHJlYW0uZWF0KGNoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT0gXCI/XCIgJiYgc3RyZWFtLmVhdChcIi5cIikpIHJldHVybiByZXQoXCIuXCIpXG4gICAgICByZXR1cm4gcmV0KFwib3BlcmF0b3JcIiwgXCJvcGVyYXRvclwiLCBzdHJlYW0uY3VycmVudCgpKTtcbiAgICB9IGVsc2UgaWYgKHdvcmRSRS50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKHdvcmRSRSk7XG4gICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KClcbiAgICAgIGlmIChzdGF0ZS5sYXN0VHlwZSAhPSBcIi5cIikge1xuICAgICAgICBpZiAoa2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkpIHtcbiAgICAgICAgICB2YXIga3cgPSBrZXl3b3Jkc1t3b3JkXVxuICAgICAgICAgIHJldHVybiByZXQoa3cudHlwZSwga3cuc3R5bGUsIHdvcmQpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdvcmQgPT0gXCJhc3luY1wiICYmIHN0cmVhbS5tYXRjaCgvXihcXHN8XFwvXFwqKFteKl18XFwqKD8hXFwvKSkqP1xcKlxcLykqW1xcW1xcKFxcd10vLCBmYWxzZSkpXG4gICAgICAgICAgcmV0dXJuIHJldChcImFzeW5jXCIsIFwia2V5d29yZFwiLCB3b3JkKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldChcInZhcmlhYmxlXCIsIFwidmFyaWFibGVcIiwgd29yZClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0O1xuICAgICAgaWYgKGpzb25sZE1vZGUgJiYgc3RyZWFtLnBlZWsoKSA9PSBcIkBcIiAmJiBzdHJlYW0ubWF0Y2goaXNKc29ubGRLZXl3b3JkKSl7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICByZXR1cm4gcmV0KFwianNvbmxkLWtleXdvcmRcIiwgXCJtZXRhXCIpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkgYnJlYWs7XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgICAgfVxuICAgICAgaWYgKCFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgIHJldHVybiByZXQoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIi9cIiAmJiBtYXliZUVuZCkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBtYXliZUVuZCA9IChjaCA9PSBcIipcIik7XG4gICAgfVxuICAgIHJldHVybiByZXQoXCJjb21tZW50XCIsIFwiY29tbWVudFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuUXVhc2koc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQ7XG4gICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgaWYgKCFlc2NhcGVkICYmIChuZXh0ID09IFwiYFwiIHx8IG5leHQgPT0gXCIkXCIgJiYgc3RyZWFtLmVhdChcIntcIikpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgIH1cbiAgICByZXR1cm4gcmV0KFwicXVhc2lcIiwgXCJzdHJpbmctMlwiLCBzdHJlYW0uY3VycmVudCgpKTtcbiAgfVxuXG4gIHZhciBicmFja2V0cyA9IFwiKFt7fV0pXCI7XG4gIC8vIFRoaXMgaXMgYSBjcnVkZSBsb29rYWhlYWQgdHJpY2sgdG8gdHJ5IGFuZCBub3RpY2UgdGhhdCB3ZSdyZVxuICAvLyBwYXJzaW5nIHRoZSBhcmd1bWVudCBwYXR0ZXJucyBmb3IgYSBmYXQtYXJyb3cgZnVuY3Rpb24gYmVmb3JlIHdlXG4gIC8vIGFjdHVhbGx5IGhpdCB0aGUgYXJyb3cgdG9rZW4uIEl0IG9ubHkgd29ya3MgaWYgdGhlIGFycm93IGlzIG9uXG4gIC8vIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGFyZ3VtZW50cyBhbmQgdGhlcmUncyBubyBzdHJhbmdlIG5vaXNlXG4gIC8vIChjb21tZW50cykgaW4gYmV0d2Vlbi4gRmFsbGJhY2sgaXMgdG8gb25seSBub3RpY2Ugd2hlbiB3ZSBoaXQgdGhlXG4gIC8vIGFycm93LCBhbmQgbm90IGRlY2xhcmUgdGhlIGFyZ3VtZW50cyBhcyBsb2NhbHMgZm9yIHRoZSBhcnJvd1xuICAvLyBib2R5LlxuICBmdW5jdGlvbiBmaW5kRmF0QXJyb3coc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5mYXRBcnJvd0F0KSBzdGF0ZS5mYXRBcnJvd0F0ID0gbnVsbDtcbiAgICB2YXIgYXJyb3cgPSBzdHJlYW0uc3RyaW5nLmluZGV4T2YoXCI9PlwiLCBzdHJlYW0uc3RhcnQpO1xuICAgIGlmIChhcnJvdyA8IDApIHJldHVybjtcblxuICAgIGlmIChpc1RTKSB7IC8vIFRyeSB0byBza2lwIFR5cGVTY3JpcHQgcmV0dXJuIHR5cGUgZGVjbGFyYXRpb25zIGFmdGVyIHRoZSBhcmd1bWVudHNcbiAgICAgIHZhciBtID0gLzpcXHMqKD86XFx3Kyg/OjxbXj5dKj58XFxbXFxdKT98XFx7W159XSpcXH0pXFxzKiQvLmV4ZWMoc3RyZWFtLnN0cmluZy5zbGljZShzdHJlYW0uc3RhcnQsIGFycm93KSlcbiAgICAgIGlmIChtKSBhcnJvdyA9IG0uaW5kZXhcbiAgICB9XG5cbiAgICB2YXIgZGVwdGggPSAwLCBzYXdTb21ldGhpbmcgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBwb3MgPSBhcnJvdyAtIDE7IHBvcyA+PSAwOyAtLXBvcykge1xuICAgICAgdmFyIGNoID0gc3RyZWFtLnN0cmluZy5jaGFyQXQocG9zKTtcbiAgICAgIHZhciBicmFja2V0ID0gYnJhY2tldHMuaW5kZXhPZihjaCk7XG4gICAgICBpZiAoYnJhY2tldCA+PSAwICYmIGJyYWNrZXQgPCAzKSB7XG4gICAgICAgIGlmICghZGVwdGgpIHsgKytwb3M7IGJyZWFrOyB9XG4gICAgICAgIGlmICgtLWRlcHRoID09IDApIHsgaWYgKGNoID09IFwiKFwiKSBzYXdTb21ldGhpbmcgPSB0cnVlOyBicmVhazsgfVxuICAgICAgfSBlbHNlIGlmIChicmFja2V0ID49IDMgJiYgYnJhY2tldCA8IDYpIHtcbiAgICAgICAgKytkZXB0aDtcbiAgICAgIH0gZWxzZSBpZiAod29yZFJFLnRlc3QoY2gpKSB7XG4gICAgICAgIHNhd1NvbWV0aGluZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKC9bXCInXFwvYF0vLnRlc3QoY2gpKSB7XG4gICAgICAgIGZvciAoOzsgLS1wb3MpIHtcbiAgICAgICAgICBpZiAocG9zID09IDApIHJldHVyblxuICAgICAgICAgIHZhciBuZXh0ID0gc3RyZWFtLnN0cmluZy5jaGFyQXQocG9zIC0gMSlcbiAgICAgICAgICBpZiAobmV4dCA9PSBjaCAmJiBzdHJlYW0uc3RyaW5nLmNoYXJBdChwb3MgLSAyKSAhPSBcIlxcXFxcIikgeyBwb3MtLTsgYnJlYWsgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNhd1NvbWV0aGluZyAmJiAhZGVwdGgpIHtcbiAgICAgICAgKytwb3M7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2F3U29tZXRoaW5nICYmICFkZXB0aCkgc3RhdGUuZmF0QXJyb3dBdCA9IHBvcztcbiAgfVxuXG4gIC8vIFBhcnNlclxuXG4gIHZhciBhdG9taWNUeXBlcyA9IHtcImF0b21cIjogdHJ1ZSwgXCJudW1iZXJcIjogdHJ1ZSwgXCJ2YXJpYWJsZVwiOiB0cnVlLCBcInN0cmluZ1wiOiB0cnVlLCBcInJlZ2V4cFwiOiB0cnVlLCBcInRoaXNcIjogdHJ1ZSwgXCJqc29ubGQta2V5d29yZFwiOiB0cnVlfTtcblxuICBmdW5jdGlvbiBKU0xleGljYWwoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYsIGluZm8pIHtcbiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7XG4gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByZXYgPSBwcmV2O1xuICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgaWYgKGFsaWduICE9IG51bGwpIHRoaXMuYWxpZ24gPSBhbGlnbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluU2NvcGUoc3RhdGUsIHZhcm5hbWUpIHtcbiAgICBmb3IgKHZhciB2ID0gc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KVxuICAgICAgaWYgKHYubmFtZSA9PSB2YXJuYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKHZhciBjeCA9IHN0YXRlLmNvbnRleHQ7IGN4OyBjeCA9IGN4LnByZXYpIHtcbiAgICAgIGZvciAodmFyIHYgPSBjeC52YXJzOyB2OyB2ID0gdi5uZXh0KVxuICAgICAgICBpZiAodi5uYW1lID09IHZhcm5hbWUpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlSlMoc3RhdGUsIHN0eWxlLCB0eXBlLCBjb250ZW50LCBzdHJlYW0pIHtcbiAgICB2YXIgY2MgPSBzdGF0ZS5jYztcbiAgICAvLyBDb21tdW5pY2F0ZSBvdXIgY29udGV4dCB0byB0aGUgY29tYmluYXRvcnMuXG4gICAgLy8gKExlc3Mgd2FzdGVmdWwgdGhhbiBjb25zaW5nIHVwIGEgaHVuZHJlZCBjbG9zdXJlcyBvbiBldmVyeSBjYWxsLilcbiAgICBjeC5zdGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBzdHJlYW07IGN4Lm1hcmtlZCA9IG51bGwsIGN4LmNjID0gY2M7IGN4LnN0eWxlID0gc3R5bGU7XG5cbiAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoXCJhbGlnblwiKSlcbiAgICAgIHN0YXRlLmxleGljYWwuYWxpZ24gPSB0cnVlO1xuXG4gICAgd2hpbGUodHJ1ZSkge1xuICAgICAgdmFyIGNvbWJpbmF0b3IgPSBjYy5sZW5ndGggPyBjYy5wb3AoKSA6IGpzb25Nb2RlID8gZXhwcmVzc2lvbiA6IHN0YXRlbWVudDtcbiAgICAgIGlmIChjb21iaW5hdG9yKHR5cGUsIGNvbnRlbnQpKSB7XG4gICAgICAgIHdoaWxlKGNjLmxlbmd0aCAmJiBjY1tjYy5sZW5ndGggLSAxXS5sZXgpXG4gICAgICAgICAgY2MucG9wKCkoKTtcbiAgICAgICAgaWYgKGN4Lm1hcmtlZCkgcmV0dXJuIGN4Lm1hcmtlZDtcbiAgICAgICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmIGluU2NvcGUoc3RhdGUsIGNvbnRlbnQpKSByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDb21iaW5hdG9yIHV0aWxzXG5cbiAgdmFyIGN4ID0ge3N0YXRlOiBudWxsLCBjb2x1bW46IG51bGwsIG1hcmtlZDogbnVsbCwgY2M6IG51bGx9O1xuICBmdW5jdGlvbiBwYXNzKCkge1xuICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGN4LmNjLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgfVxuICBmdW5jdGlvbiBjb250KCkge1xuICAgIHBhc3MuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiBpbkxpc3QobmFtZSwgbGlzdCkge1xuICAgIGZvciAodmFyIHYgPSBsaXN0OyB2OyB2ID0gdi5uZXh0KSBpZiAodi5uYW1lID09IG5hbWUpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKHZhcm5hbWUpIHtcbiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTtcbiAgICBjeC5tYXJrZWQgPSBcImRlZlwiO1xuICAgIGlmIChzdGF0ZS5jb250ZXh0KSB7XG4gICAgICBpZiAoc3RhdGUubGV4aWNhbC5pbmZvID09IFwidmFyXCIgJiYgc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LmJsb2NrKSB7XG4gICAgICAgIC8vIEZJWE1FIGZ1bmN0aW9uIGRlY2xzIGFyZSBhbHNvIG5vdCBibG9jayBzY29wZWRcbiAgICAgICAgdmFyIG5ld0NvbnRleHQgPSByZWdpc3RlclZhclNjb3BlZCh2YXJuYW1lLCBzdGF0ZS5jb250ZXh0KVxuICAgICAgICBpZiAobmV3Q29udGV4dCAhPSBudWxsKSB7XG4gICAgICAgICAgc3RhdGUuY29udGV4dCA9IG5ld0NvbnRleHRcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaW5MaXN0KHZhcm5hbWUsIHN0YXRlLmxvY2FsVmFycykpIHtcbiAgICAgICAgc3RhdGUubG9jYWxWYXJzID0gbmV3IFZhcih2YXJuYW1lLCBzdGF0ZS5sb2NhbFZhcnMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICAvLyBGYWxsIHRocm91Z2ggbWVhbnMgdGhpcyBpcyBnbG9iYWxcbiAgICBpZiAocGFyc2VyQ29uZmlnLmdsb2JhbFZhcnMgJiYgIWluTGlzdCh2YXJuYW1lLCBzdGF0ZS5nbG9iYWxWYXJzKSlcbiAgICAgIHN0YXRlLmdsb2JhbFZhcnMgPSBuZXcgVmFyKHZhcm5hbWUsIHN0YXRlLmdsb2JhbFZhcnMpXG4gIH1cbiAgZnVuY3Rpb24gcmVnaXN0ZXJWYXJTY29wZWQodmFybmFtZSwgY29udGV4dCkge1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQuYmxvY2spIHtcbiAgICAgIHZhciBpbm5lciA9IHJlZ2lzdGVyVmFyU2NvcGVkKHZhcm5hbWUsIGNvbnRleHQucHJldilcbiAgICAgIGlmICghaW5uZXIpIHJldHVybiBudWxsXG4gICAgICBpZiAoaW5uZXIgPT0gY29udGV4dC5wcmV2KSByZXR1cm4gY29udGV4dFxuICAgICAgcmV0dXJuIG5ldyBDb250ZXh0KGlubmVyLCBjb250ZXh0LnZhcnMsIHRydWUpXG4gICAgfSBlbHNlIGlmIChpbkxpc3QodmFybmFtZSwgY29udGV4dC52YXJzKSkge1xuICAgICAgcmV0dXJuIGNvbnRleHRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBDb250ZXh0KGNvbnRleHQucHJldiwgbmV3IFZhcih2YXJuYW1lLCBjb250ZXh0LnZhcnMpLCBmYWxzZSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc01vZGlmaWVyKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZSA9PSBcInB1YmxpY1wiIHx8IG5hbWUgPT0gXCJwcml2YXRlXCIgfHwgbmFtZSA9PSBcInByb3RlY3RlZFwiIHx8IG5hbWUgPT0gXCJhYnN0cmFjdFwiIHx8IG5hbWUgPT0gXCJyZWFkb25seVwiXG4gIH1cblxuICAvLyBDb21iaW5hdG9yc1xuXG4gIGZ1bmN0aW9uIENvbnRleHQocHJldiwgdmFycywgYmxvY2spIHsgdGhpcy5wcmV2ID0gcHJldjsgdGhpcy52YXJzID0gdmFyczsgdGhpcy5ibG9jayA9IGJsb2NrIH1cbiAgZnVuY3Rpb24gVmFyKG5hbWUsIG5leHQpIHsgdGhpcy5uYW1lID0gbmFtZTsgdGhpcy5uZXh0ID0gbmV4dCB9XG5cbiAgdmFyIGRlZmF1bHRWYXJzID0gbmV3IFZhcihcInRoaXNcIiwgbmV3IFZhcihcImFyZ3VtZW50c1wiLCBudWxsKSlcbiAgZnVuY3Rpb24gcHVzaGNvbnRleHQoKSB7XG4gICAgY3guc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KGN4LnN0YXRlLmNvbnRleHQsIGN4LnN0YXRlLmxvY2FsVmFycywgZmFsc2UpXG4gICAgY3guc3RhdGUubG9jYWxWYXJzID0gZGVmYXVsdFZhcnNcbiAgfVxuICBmdW5jdGlvbiBwdXNoYmxvY2tjb250ZXh0KCkge1xuICAgIGN4LnN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChjeC5zdGF0ZS5jb250ZXh0LCBjeC5zdGF0ZS5sb2NhbFZhcnMsIHRydWUpXG4gICAgY3guc3RhdGUubG9jYWxWYXJzID0gbnVsbFxuICB9XG4gIGZ1bmN0aW9uIHBvcGNvbnRleHQoKSB7XG4gICAgY3guc3RhdGUubG9jYWxWYXJzID0gY3guc3RhdGUuY29udGV4dC52YXJzXG4gICAgY3guc3RhdGUuY29udGV4dCA9IGN4LnN0YXRlLmNvbnRleHQucHJldlxuICB9XG4gIHBvcGNvbnRleHQubGV4ID0gdHJ1ZVxuICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGluZm8pIHtcbiAgICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZSwgaW5kZW50ID0gc3RhdGUuaW5kZW50ZWQ7XG4gICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09IFwic3RhdFwiKSBpbmRlbnQgPSBzdGF0ZS5sZXhpY2FsLmluZGVudGVkO1xuICAgICAgZWxzZSBmb3IgKHZhciBvdXRlciA9IHN0YXRlLmxleGljYWw7IG91dGVyICYmIG91dGVyLnR5cGUgPT0gXCIpXCIgJiYgb3V0ZXIuYWxpZ247IG91dGVyID0gb3V0ZXIucHJldilcbiAgICAgICAgaW5kZW50ID0gb3V0ZXIuaW5kZW50ZWQ7XG4gICAgICBzdGF0ZS5sZXhpY2FsID0gbmV3IEpTTGV4aWNhbChpbmRlbnQsIGN4LnN0cmVhbS5jb2x1bW4oKSwgdHlwZSwgbnVsbCwgc3RhdGUubGV4aWNhbCwgaW5mbyk7XG4gICAgfTtcbiAgICByZXN1bHQubGV4ID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGZ1bmN0aW9uIHBvcGxleCgpIHtcbiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTtcbiAgICBpZiAoc3RhdGUubGV4aWNhbC5wcmV2KSB7XG4gICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09IFwiKVwiKVxuICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7XG4gICAgICBzdGF0ZS5sZXhpY2FsID0gc3RhdGUubGV4aWNhbC5wcmV2O1xuICAgIH1cbiAgfVxuICBwb3BsZXgubGV4ID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBleHBlY3Qod2FudGVkKSB7XG4gICAgZnVuY3Rpb24gZXhwKHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09IHdhbnRlZCkgcmV0dXJuIGNvbnQoKTtcbiAgICAgIGVsc2UgaWYgKHdhbnRlZCA9PSBcIjtcIiB8fCB0eXBlID09IFwifVwiIHx8IHR5cGUgPT0gXCIpXCIgfHwgdHlwZSA9PSBcIl1cIikgcmV0dXJuIHBhc3MoKTtcbiAgICAgIGVsc2UgcmV0dXJuIGNvbnQoZXhwKTtcbiAgICB9O1xuICAgIHJldHVybiBleHA7XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0ZW1lbnQodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcInZhclwiKSByZXR1cm4gY29udChwdXNobGV4KFwidmFyZGVmXCIsIHZhbHVlKSwgdmFyZGVmLCBleHBlY3QoXCI7XCIpLCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwia2V5d29yZCBhXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBwYXJlbkV4cHIsIHN0YXRlbWVudCwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImtleXdvcmQgYlwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgc3RhdGVtZW50LCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwia2V5d29yZCBkXCIpIHJldHVybiBjeC5zdHJlYW0ubWF0Y2goL15cXHMqJC8sIGZhbHNlKSA/IGNvbnQoKSA6IGNvbnQocHVzaGxleChcInN0YXRcIiksIG1heWJlZXhwcmVzc2lvbiwgZXhwZWN0KFwiO1wiKSwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImRlYnVnZ2VyXCIpIHJldHVybiBjb250KGV4cGVjdChcIjtcIikpO1xuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gY29udChwdXNobGV4KFwifVwiKSwgcHVzaGJsb2NrY29udGV4dCwgYmxvY2ssIHBvcGxleCwgcG9wY29udGV4dCk7XG4gICAgaWYgKHR5cGUgPT0gXCI7XCIpIHJldHVybiBjb250KCk7XG4gICAgaWYgKHR5cGUgPT0gXCJpZlwiKSB7XG4gICAgICBpZiAoY3guc3RhdGUubGV4aWNhbC5pbmZvID09IFwiZWxzZVwiICYmIGN4LnN0YXRlLmNjW2N4LnN0YXRlLmNjLmxlbmd0aCAtIDFdID09IHBvcGxleClcbiAgICAgICAgY3guc3RhdGUuY2MucG9wKCkoKTtcbiAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBwYXJlbkV4cHIsIHN0YXRlbWVudCwgcG9wbGV4LCBtYXliZWVsc2UpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTtcbiAgICBpZiAodHlwZSA9PSBcImZvclwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgZm9yc3BlYywgc3RhdGVtZW50LCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwiY2xhc3NcIiB8fCAoaXNUUyAmJiB2YWx1ZSA9PSBcImludGVyZmFjZVwiKSkge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIsIHR5cGUgPT0gXCJjbGFzc1wiID8gdHlwZSA6IHZhbHVlKSwgY2xhc3NOYW1lLCBwb3BsZXgpXG4gICAgfVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikge1xuICAgICAgaWYgKGlzVFMgJiYgdmFsdWUgPT0gXCJkZWNsYXJlXCIpIHtcbiAgICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgICAgcmV0dXJuIGNvbnQoc3RhdGVtZW50KVxuICAgICAgfSBlbHNlIGlmIChpc1RTICYmICh2YWx1ZSA9PSBcIm1vZHVsZVwiIHx8IHZhbHVlID09IFwiZW51bVwiIHx8IHZhbHVlID09IFwidHlwZVwiKSAmJiBjeC5zdHJlYW0ubWF0Y2goL15cXHMqXFx3LywgZmFsc2UpKSB7XG4gICAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICAgIGlmICh2YWx1ZSA9PSBcImVudW1cIikgcmV0dXJuIGNvbnQoZW51bWRlZik7XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwidHlwZVwiKSByZXR1cm4gY29udCh0eXBlbmFtZSwgZXhwZWN0KFwib3BlcmF0b3JcIiksIHR5cGVleHByLCBleHBlY3QoXCI7XCIpKTtcbiAgICAgICAgZWxzZSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgcGF0dGVybiwgZXhwZWN0KFwie1wiKSwgcHVzaGxleChcIn1cIiksIGJsb2NrLCBwb3BsZXgsIHBvcGxleClcbiAgICAgIH0gZWxzZSBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcIm5hbWVzcGFjZVwiKSB7XG4gICAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBleHByZXNzaW9uLCBzdGF0ZW1lbnQsIHBvcGxleClcbiAgICAgIH0gZWxzZSBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcImFic3RyYWN0XCIpIHtcbiAgICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgICAgcmV0dXJuIGNvbnQoc3RhdGVtZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbnQocHVzaGxleChcInN0YXRcIiksIG1heWJlbGFiZWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcInN3aXRjaFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgcGFyZW5FeHByLCBleHBlY3QoXCJ7XCIpLCBwdXNobGV4KFwifVwiLCBcInN3aXRjaFwiKSwgcHVzaGJsb2NrY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIHBvcGxleCwgcG9wbGV4LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAodHlwZSA9PSBcImNhc2VcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KFwiOlwiKSk7XG4gICAgaWYgKHR5cGUgPT0gXCJkZWZhdWx0XCIpIHJldHVybiBjb250KGV4cGVjdChcIjpcIikpO1xuICAgIGlmICh0eXBlID09IFwiY2F0Y2hcIikgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIHB1c2hjb250ZXh0LCBtYXliZUNhdGNoQmluZGluZywgc3RhdGVtZW50LCBwb3BsZXgsIHBvcGNvbnRleHQpO1xuICAgIGlmICh0eXBlID09IFwiZXhwb3J0XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJzdGF0XCIpLCBhZnRlckV4cG9ydCwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImltcG9ydFwiKSByZXR1cm4gY29udChwdXNobGV4KFwic3RhdFwiKSwgYWZ0ZXJJbXBvcnQsIHBvcGxleCk7XG4gICAgaWYgKHR5cGUgPT0gXCJhc3luY1wiKSByZXR1cm4gY29udChzdGF0ZW1lbnQpXG4gICAgaWYgKHZhbHVlID09IFwiQFwiKSByZXR1cm4gY29udChleHByZXNzaW9uLCBzdGF0ZW1lbnQpXG4gICAgcmV0dXJuIHBhc3MocHVzaGxleChcInN0YXRcIiksIGV4cHJlc3Npb24sIGV4cGVjdChcIjtcIiksIHBvcGxleCk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVDYXRjaEJpbmRpbmcodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChmdW5hcmcsIGV4cGVjdChcIilcIikpXG4gIH1cbiAgZnVuY3Rpb24gZXhwcmVzc2lvbih0eXBlLCB2YWx1ZSkge1xuICAgIHJldHVybiBleHByZXNzaW9uSW5uZXIodHlwZSwgdmFsdWUsIGZhbHNlKTtcbiAgfVxuICBmdW5jdGlvbiBleHByZXNzaW9uTm9Db21tYSh0eXBlLCB2YWx1ZSkge1xuICAgIHJldHVybiBleHByZXNzaW9uSW5uZXIodHlwZSwgdmFsdWUsIHRydWUpO1xuICB9XG4gIGZ1bmN0aW9uIHBhcmVuRXhwcih0eXBlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCIoXCIpIHJldHVybiBwYXNzKClcbiAgICByZXR1cm4gY29udChwdXNobGV4KFwiKVwiKSwgbWF5YmVleHByZXNzaW9uLCBleHBlY3QoXCIpXCIpLCBwb3BsZXgpXG4gIH1cbiAgZnVuY3Rpb24gZXhwcmVzc2lvbklubmVyKHR5cGUsIHZhbHVlLCBub0NvbW1hKSB7XG4gICAgaWYgKGN4LnN0YXRlLmZhdEFycm93QXQgPT0gY3guc3RyZWFtLnN0YXJ0KSB7XG4gICAgICB2YXIgYm9keSA9IG5vQ29tbWEgPyBhcnJvd0JvZHlOb0NvbW1hIDogYXJyb3dCb2R5O1xuICAgICAgaWYgKHR5cGUgPT0gXCIoXCIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBwdXNobGV4KFwiKVwiKSwgY29tbWFzZXAoZnVuYXJnLCBcIilcIiksIHBvcGxleCwgZXhwZWN0KFwiPT5cIiksIGJvZHksIHBvcGNvbnRleHQpO1xuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHJldHVybiBwYXNzKHB1c2hjb250ZXh0LCBwYXR0ZXJuLCBleHBlY3QoXCI9PlwiKSwgYm9keSwgcG9wY29udGV4dCk7XG4gICAgfVxuXG4gICAgdmFyIG1heWJlb3AgPSBub0NvbW1hID8gbWF5YmVvcGVyYXRvck5vQ29tbWEgOiBtYXliZW9wZXJhdG9yQ29tbWE7XG4gICAgaWYgKGF0b21pY1R5cGVzLmhhc093blByb3BlcnR5KHR5cGUpKSByZXR1cm4gY29udChtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmLCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcImNsYXNzXCIgfHwgKGlzVFMgJiYgdmFsdWUgPT0gXCJpbnRlcmZhY2VcIikpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBjbGFzc0V4cHJlc3Npb24sIHBvcGxleCk7IH1cbiAgICBpZiAodHlwZSA9PSBcImtleXdvcmQgY1wiIHx8IHR5cGUgPT0gXCJhc3luY1wiKSByZXR1cm4gY29udChub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9uKTtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIilcIiksIG1heWJlZXhwcmVzc2lvbiwgZXhwZWN0KFwiKVwiKSwgcG9wbGV4LCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcIm9wZXJhdG9yXCIgfHwgdHlwZSA9PSBcInNwcmVhZFwiKSByZXR1cm4gY29udChub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9uKTtcbiAgICBpZiAodHlwZSA9PSBcIltcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIl1cIiksIGFycmF5TGl0ZXJhbCwgcG9wbGV4LCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIGNvbnRDb21tYXNlcChvYmpwcm9wLCBcIn1cIiwgbnVsbCwgbWF5YmVvcCk7XG4gICAgaWYgKHR5cGUgPT0gXCJxdWFzaVwiKSByZXR1cm4gcGFzcyhxdWFzaSwgbWF5YmVvcCk7XG4gICAgaWYgKHR5cGUgPT0gXCJuZXdcIikgcmV0dXJuIGNvbnQobWF5YmVUYXJnZXQobm9Db21tYSkpO1xuICAgIGlmICh0eXBlID09IFwiaW1wb3J0XCIpIHJldHVybiBjb250KGV4cHJlc3Npb24pO1xuICAgIHJldHVybiBjb250KCk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVleHByZXNzaW9uKHR5cGUpIHtcbiAgICBpZiAodHlwZS5tYXRjaCgvWztcXH1cXClcXF0sXS8pKSByZXR1cm4gcGFzcygpO1xuICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvckNvbW1hKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCIsXCIpIHJldHVybiBjb250KG1heWJlZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIG1heWJlb3BlcmF0b3JOb0NvbW1hKHR5cGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvck5vQ29tbWEodHlwZSwgdmFsdWUsIG5vQ29tbWEpIHtcbiAgICB2YXIgbWUgPSBub0NvbW1hID09IGZhbHNlID8gbWF5YmVvcGVyYXRvckNvbW1hIDogbWF5YmVvcGVyYXRvck5vQ29tbWE7XG4gICAgdmFyIGV4cHIgPSBub0NvbW1hID09IGZhbHNlID8gZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25Ob0NvbW1hO1xuICAgIGlmICh0eXBlID09IFwiPT5cIikgcmV0dXJuIGNvbnQocHVzaGNvbnRleHQsIG5vQ29tbWEgPyBhcnJvd0JvZHlOb0NvbW1hIDogYXJyb3dCb2R5LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAodHlwZSA9PSBcIm9wZXJhdG9yXCIpIHtcbiAgICAgIGlmICgvXFwrXFwrfC0tLy50ZXN0KHZhbHVlKSB8fCBpc1RTICYmIHZhbHVlID09IFwiIVwiKSByZXR1cm4gY29udChtZSk7XG4gICAgICBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcIjxcIiAmJiBjeC5zdHJlYW0ubWF0Y2goL14oW148Pl18PFtePD5dKj4pKj5cXHMqXFwoLywgZmFsc2UpKVxuICAgICAgICByZXR1cm4gY29udChwdXNobGV4KFwiPlwiKSwgY29tbWFzZXAodHlwZWV4cHIsIFwiPlwiKSwgcG9wbGV4LCBtZSk7XG4gICAgICBpZiAodmFsdWUgPT0gXCI/XCIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdChcIjpcIiksIGV4cHIpO1xuICAgICAgcmV0dXJuIGNvbnQoZXhwcik7XG4gICAgfVxuICAgIGlmICh0eXBlID09IFwicXVhc2lcIikgeyByZXR1cm4gcGFzcyhxdWFzaSwgbWUpOyB9XG4gICAgaWYgKHR5cGUgPT0gXCI7XCIpIHJldHVybjtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnRDb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgXCIpXCIsIFwiY2FsbFwiLCBtZSk7XG4gICAgaWYgKHR5cGUgPT0gXCIuXCIpIHJldHVybiBjb250KHByb3BlcnR5LCBtZSk7XG4gICAgaWYgKHR5cGUgPT0gXCJbXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJdXCIpLCBtYXliZWV4cHJlc3Npb24sIGV4cGVjdChcIl1cIiksIHBvcGxleCwgbWUpO1xuICAgIGlmIChpc1RTICYmIHZhbHVlID09IFwiYXNcIikgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQodHlwZWV4cHIsIG1lKSB9XG4gICAgaWYgKHR5cGUgPT0gXCJyZWdleHBcIikge1xuICAgICAgY3guc3RhdGUubGFzdFR5cGUgPSBjeC5tYXJrZWQgPSBcIm9wZXJhdG9yXCJcbiAgICAgIGN4LnN0cmVhbS5iYWNrVXAoY3guc3RyZWFtLnBvcyAtIGN4LnN0cmVhbS5zdGFydCAtIDEpXG4gICAgICByZXR1cm4gY29udChleHByKVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBxdWFzaSh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlICE9IFwicXVhc2lcIikgcmV0dXJuIHBhc3MoKTtcbiAgICBpZiAodmFsdWUuc2xpY2UodmFsdWUubGVuZ3RoIC0gMikgIT0gXCIke1wiKSByZXR1cm4gY29udChxdWFzaSk7XG4gICAgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgY29udGludWVRdWFzaSk7XG4gIH1cbiAgZnVuY3Rpb24gY29udGludWVRdWFzaSh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ9XCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwic3RyaW5nLTJcIjtcbiAgICAgIGN4LnN0YXRlLnRva2VuaXplID0gdG9rZW5RdWFzaTtcbiAgICAgIHJldHVybiBjb250KHF1YXNpKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gYXJyb3dCb2R5KHR5cGUpIHtcbiAgICBmaW5kRmF0QXJyb3coY3guc3RyZWFtLCBjeC5zdGF0ZSk7XG4gICAgcmV0dXJuIHBhc3ModHlwZSA9PSBcIntcIiA/IHN0YXRlbWVudCA6IGV4cHJlc3Npb24pO1xuICB9XG4gIGZ1bmN0aW9uIGFycm93Qm9keU5vQ29tbWEodHlwZSkge1xuICAgIGZpbmRGYXRBcnJvdyhjeC5zdHJlYW0sIGN4LnN0YXRlKTtcbiAgICByZXR1cm4gcGFzcyh0eXBlID09IFwie1wiID8gc3RhdGVtZW50IDogZXhwcmVzc2lvbk5vQ29tbWEpO1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlVGFyZ2V0KG5vQ29tbWEpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odHlwZSkge1xuICAgICAgaWYgKHR5cGUgPT0gXCIuXCIpIHJldHVybiBjb250KG5vQ29tbWEgPyB0YXJnZXROb0NvbW1hIDogdGFyZ2V0KTtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmIGlzVFMpIHJldHVybiBjb250KG1heWJlVHlwZUFyZ3MsIG5vQ29tbWEgPyBtYXliZW9wZXJhdG9yTm9Db21tYSA6IG1heWJlb3BlcmF0b3JDb21tYSlcbiAgICAgIGVsc2UgcmV0dXJuIHBhc3Mobm9Db21tYSA/IGV4cHJlc3Npb25Ob0NvbW1hIDogZXhwcmVzc2lvbik7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB0YXJnZXQoXywgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJ0YXJnZXRcIikgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvckNvbW1hKTsgfVxuICB9XG4gIGZ1bmN0aW9uIHRhcmdldE5vQ29tbWEoXywgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJ0YXJnZXRcIikgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvck5vQ29tbWEpOyB9XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVsYWJlbCh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCI6XCIpIHJldHVybiBjb250KHBvcGxleCwgc3RhdGVtZW50KTtcbiAgICByZXR1cm4gcGFzcyhtYXliZW9wZXJhdG9yQ29tbWEsIGV4cGVjdChcIjtcIiksIHBvcGxleCk7XG4gIH1cbiAgZnVuY3Rpb24gcHJvcGVydHkodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikge2N4Lm1hcmtlZCA9IFwicHJvcGVydHlcIjsgcmV0dXJuIGNvbnQoKTt9XG4gIH1cbiAgZnVuY3Rpb24gb2JqcHJvcCh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwiYXN5bmNcIikge1xuICAgICAgY3gubWFya2VkID0gXCJwcm9wZXJ0eVwiO1xuICAgICAgcmV0dXJuIGNvbnQob2JqcHJvcCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwidmFyaWFibGVcIiB8fCBjeC5zdHlsZSA9PSBcImtleXdvcmRcIikge1xuICAgICAgY3gubWFya2VkID0gXCJwcm9wZXJ0eVwiO1xuICAgICAgaWYgKHZhbHVlID09IFwiZ2V0XCIgfHwgdmFsdWUgPT0gXCJzZXRcIikgcmV0dXJuIGNvbnQoZ2V0dGVyU2V0dGVyKTtcbiAgICAgIHZhciBtIC8vIFdvcmsgYXJvdW5kIGZhdC1hcnJvdy1kZXRlY3Rpb24gY29tcGxpY2F0aW9uIGZvciBkZXRlY3RpbmcgdHlwZXNjcmlwdCB0eXBlZCBhcnJvdyBwYXJhbXNcbiAgICAgIGlmIChpc1RTICYmIGN4LnN0YXRlLmZhdEFycm93QXQgPT0gY3guc3RyZWFtLnN0YXJ0ICYmIChtID0gY3guc3RyZWFtLm1hdGNoKC9eXFxzKjpcXHMqLywgZmFsc2UpKSlcbiAgICAgICAgY3guc3RhdGUuZmF0QXJyb3dBdCA9IGN4LnN0cmVhbS5wb3MgKyBtWzBdLmxlbmd0aFxuICAgICAgcmV0dXJuIGNvbnQoYWZ0ZXJwcm9wKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJudW1iZXJcIiB8fCB0eXBlID09IFwic3RyaW5nXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IGpzb25sZE1vZGUgPyBcInByb3BlcnR5XCIgOiAoY3guc3R5bGUgKyBcIiBwcm9wZXJ0eVwiKTtcbiAgICAgIHJldHVybiBjb250KGFmdGVycHJvcCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwianNvbmxkLWtleXdvcmRcIikge1xuICAgICAgcmV0dXJuIGNvbnQoYWZ0ZXJwcm9wKTtcbiAgICB9IGVsc2UgaWYgKGlzVFMgJiYgaXNNb2RpZmllcih2YWx1ZSkpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICByZXR1cm4gY29udChvYmpwcm9wKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIltcIikge1xuICAgICAgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgbWF5YmV0eXBlLCBleHBlY3QoXCJdXCIpLCBhZnRlcnByb3ApO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcInNwcmVhZFwiKSB7XG4gICAgICByZXR1cm4gY29udChleHByZXNzaW9uTm9Db21tYSwgYWZ0ZXJwcm9wKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09IFwiKlwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjtcbiAgICAgIHJldHVybiBjb250KG9ianByb3ApO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIjpcIikge1xuICAgICAgcmV0dXJuIHBhc3MoYWZ0ZXJwcm9wKVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBnZXR0ZXJTZXR0ZXIodHlwZSkge1xuICAgIGlmICh0eXBlICE9IFwidmFyaWFibGVcIikgcmV0dXJuIHBhc3MoYWZ0ZXJwcm9wKTtcbiAgICBjeC5tYXJrZWQgPSBcInByb3BlcnR5XCI7XG4gICAgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO1xuICB9XG4gIGZ1bmN0aW9uIGFmdGVycHJvcCh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCI6XCIpIHJldHVybiBjb250KGV4cHJlc3Npb25Ob0NvbW1hKTtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIHBhc3MoZnVuY3Rpb25kZWYpO1xuICB9XG4gIGZ1bmN0aW9uIGNvbW1hc2VwKHdoYXQsIGVuZCwgc2VwKSB7XG4gICAgZnVuY3Rpb24gcHJvY2VlZCh0eXBlLCB2YWx1ZSkge1xuICAgICAgaWYgKHNlcCA/IHNlcC5pbmRleE9mKHR5cGUpID4gLTEgOiB0eXBlID09IFwiLFwiKSB7XG4gICAgICAgIHZhciBsZXggPSBjeC5zdGF0ZS5sZXhpY2FsO1xuICAgICAgICBpZiAobGV4LmluZm8gPT0gXCJjYWxsXCIpIGxleC5wb3MgPSAobGV4LnBvcyB8fCAwKSArIDE7XG4gICAgICAgIHJldHVybiBjb250KGZ1bmN0aW9uKHR5cGUsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGUgPT0gZW5kIHx8IHZhbHVlID09IGVuZCkgcmV0dXJuIHBhc3MoKVxuICAgICAgICAgIHJldHVybiBwYXNzKHdoYXQpXG4gICAgICAgIH0sIHByb2NlZWQpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT0gZW5kIHx8IHZhbHVlID09IGVuZCkgcmV0dXJuIGNvbnQoKTtcbiAgICAgIGlmIChzZXAgJiYgc2VwLmluZGV4T2YoXCI7XCIpID4gLTEpIHJldHVybiBwYXNzKHdoYXQpXG4gICAgICByZXR1cm4gY29udChleHBlY3QoZW5kKSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbih0eXBlLCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGUgPT0gZW5kIHx8IHZhbHVlID09IGVuZCkgcmV0dXJuIGNvbnQoKTtcbiAgICAgIHJldHVybiBwYXNzKHdoYXQsIHByb2NlZWQpO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gY29udENvbW1hc2VwKHdoYXQsIGVuZCwgaW5mbykge1xuICAgIGZvciAodmFyIGkgPSAzOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgY3guY2MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIHJldHVybiBjb250KHB1c2hsZXgoZW5kLCBpbmZvKSwgY29tbWFzZXAod2hhdCwgZW5kKSwgcG9wbGV4KTtcbiAgfVxuICBmdW5jdGlvbiBibG9jayh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ9XCIpIHJldHVybiBjb250KCk7XG4gICAgcmV0dXJuIHBhc3Moc3RhdGVtZW50LCBibG9jayk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmV0eXBlKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKGlzVFMpIHtcbiAgICAgIGlmICh0eXBlID09IFwiOlwiKSByZXR1cm4gY29udCh0eXBlZXhwcik7XG4gICAgICBpZiAodmFsdWUgPT0gXCI/XCIpIHJldHVybiBjb250KG1heWJldHlwZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIG1heWJldHlwZU9ySW4odHlwZSwgdmFsdWUpIHtcbiAgICBpZiAoaXNUUyAmJiAodHlwZSA9PSBcIjpcIiB8fCB2YWx1ZSA9PSBcImluXCIpKSByZXR1cm4gY29udCh0eXBlZXhwcilcbiAgfVxuICBmdW5jdGlvbiBtYXliZXJldHR5cGUodHlwZSkge1xuICAgIGlmIChpc1RTICYmIHR5cGUgPT0gXCI6XCIpIHtcbiAgICAgIGlmIChjeC5zdHJlYW0ubWF0Y2goL15cXHMqXFx3K1xccytpc1xcYi8sIGZhbHNlKSkgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgaXNLVywgdHlwZWV4cHIpXG4gICAgICBlbHNlIHJldHVybiBjb250KHR5cGVleHByKVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBpc0tXKF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiaXNcIikge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgIHJldHVybiBjb250KClcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdHlwZWV4cHIodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJrZXlvZlwiIHx8IHZhbHVlID09IFwidHlwZW9mXCIgfHwgdmFsdWUgPT0gXCJpbmZlclwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcImtleXdvcmRcIlxuICAgICAgcmV0dXJuIGNvbnQodmFsdWUgPT0gXCJ0eXBlb2ZcIiA/IGV4cHJlc3Npb25Ob0NvbW1hIDogdHlwZWV4cHIpXG4gICAgfVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIiB8fCB2YWx1ZSA9PSBcInZvaWRcIikge1xuICAgICAgY3gubWFya2VkID0gXCJ0eXBlXCJcbiAgICAgIHJldHVybiBjb250KGFmdGVyVHlwZSlcbiAgICB9XG4gICAgaWYgKHZhbHVlID09IFwifFwiIHx8IHZhbHVlID09IFwiJlwiKSByZXR1cm4gY29udCh0eXBlZXhwcilcbiAgICBpZiAodHlwZSA9PSBcInN0cmluZ1wiIHx8IHR5cGUgPT0gXCJudW1iZXJcIiB8fCB0eXBlID09IFwiYXRvbVwiKSByZXR1cm4gY29udChhZnRlclR5cGUpO1xuICAgIGlmICh0eXBlID09IFwiW1wiKSByZXR1cm4gY29udChwdXNobGV4KFwiXVwiKSwgY29tbWFzZXAodHlwZWV4cHIsIFwiXVwiLCBcIixcIiksIHBvcGxleCwgYWZ0ZXJUeXBlKVxuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gY29udChwdXNobGV4KFwifVwiKSwgY29tbWFzZXAodHlwZXByb3AsIFwifVwiLCBcIiw7XCIpLCBwb3BsZXgsIGFmdGVyVHlwZSlcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQoY29tbWFzZXAodHlwZWFyZywgXCIpXCIpLCBtYXliZVJldHVyblR5cGUsIGFmdGVyVHlwZSlcbiAgICBpZiAodHlwZSA9PSBcIjxcIikgcmV0dXJuIGNvbnQoY29tbWFzZXAodHlwZWV4cHIsIFwiPlwiKSwgdHlwZWV4cHIpXG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVSZXR1cm5UeXBlKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIj0+XCIpIHJldHVybiBjb250KHR5cGVleHByKVxuICB9XG4gIGZ1bmN0aW9uIHR5cGVwcm9wKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiIHx8IGN4LnN0eWxlID09IFwia2V5d29yZFwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInByb3BlcnR5XCJcbiAgICAgIHJldHVybiBjb250KHR5cGVwcm9wKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCI/XCIgfHwgdHlwZSA9PSBcIm51bWJlclwiIHx8IHR5cGUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGNvbnQodHlwZXByb3ApXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiOlwiKSB7XG4gICAgICByZXR1cm4gY29udCh0eXBlZXhwcilcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJbXCIpIHtcbiAgICAgIHJldHVybiBjb250KGV4cGVjdChcInZhcmlhYmxlXCIpLCBtYXliZXR5cGVPckluLCBleHBlY3QoXCJdXCIpLCB0eXBlcHJvcClcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCIoXCIpIHtcbiAgICAgIHJldHVybiBwYXNzKGZ1bmN0aW9uZGVjbCwgdHlwZXByb3ApXG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHR5cGVhcmcodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgJiYgY3guc3RyZWFtLm1hdGNoKC9eXFxzKls/Ol0vLCBmYWxzZSkgfHwgdmFsdWUgPT0gXCI/XCIpIHJldHVybiBjb250KHR5cGVhcmcpXG4gICAgaWYgKHR5cGUgPT0gXCI6XCIpIHJldHVybiBjb250KHR5cGVleHByKVxuICAgIGlmICh0eXBlID09IFwic3ByZWFkXCIpIHJldHVybiBjb250KHR5cGVhcmcpXG4gICAgcmV0dXJuIHBhc3ModHlwZWV4cHIpXG4gIH1cbiAgZnVuY3Rpb24gYWZ0ZXJUeXBlKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiPFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiPlwiKSwgY29tbWFzZXAodHlwZWV4cHIsIFwiPlwiKSwgcG9wbGV4LCBhZnRlclR5cGUpXG4gICAgaWYgKHZhbHVlID09IFwifFwiIHx8IHR5cGUgPT0gXCIuXCIgfHwgdmFsdWUgPT0gXCImXCIpIHJldHVybiBjb250KHR5cGVleHByKVxuICAgIGlmICh0eXBlID09IFwiW1wiKSByZXR1cm4gY29udCh0eXBlZXhwciwgZXhwZWN0KFwiXVwiKSwgYWZ0ZXJUeXBlKVxuICAgIGlmICh2YWx1ZSA9PSBcImV4dGVuZHNcIiB8fCB2YWx1ZSA9PSBcImltcGxlbWVudHNcIikgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQodHlwZWV4cHIpIH1cbiAgICBpZiAodmFsdWUgPT0gXCI/XCIpIHJldHVybiBjb250KHR5cGVleHByLCBleHBlY3QoXCI6XCIpLCB0eXBlZXhwcilcbiAgfVxuICBmdW5jdGlvbiBtYXliZVR5cGVBcmdzKF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiPFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiPlwiKSwgY29tbWFzZXAodHlwZWV4cHIsIFwiPlwiKSwgcG9wbGV4LCBhZnRlclR5cGUpXG4gIH1cbiAgZnVuY3Rpb24gdHlwZXBhcmFtKCkge1xuICAgIHJldHVybiBwYXNzKHR5cGVleHByLCBtYXliZVR5cGVEZWZhdWx0KVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlVHlwZURlZmF1bHQoXywgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCI9XCIpIHJldHVybiBjb250KHR5cGVleHByKVxuICB9XG4gIGZ1bmN0aW9uIHZhcmRlZihfLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcImVudW1cIikge2N4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChlbnVtZGVmKX1cbiAgICByZXR1cm4gcGFzcyhwYXR0ZXJuLCBtYXliZXR5cGUsIG1heWJlQXNzaWduLCB2YXJkZWZDb250KTtcbiAgfVxuICBmdW5jdGlvbiBwYXR0ZXJuKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKGlzVFMgJiYgaXNNb2RpZmllcih2YWx1ZSkpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KHBhdHRlcm4pIH1cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHsgcmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udCgpOyB9XG4gICAgaWYgKHR5cGUgPT0gXCJzcHJlYWRcIikgcmV0dXJuIGNvbnQocGF0dGVybik7XG4gICAgaWYgKHR5cGUgPT0gXCJbXCIpIHJldHVybiBjb250Q29tbWFzZXAoZWx0cGF0dGVybiwgXCJdXCIpO1xuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gY29udENvbW1hc2VwKHByb3BwYXR0ZXJuLCBcIn1cIik7XG4gIH1cbiAgZnVuY3Rpb24gcHJvcHBhdHRlcm4odHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgJiYgIWN4LnN0cmVhbS5tYXRjaCgvXlxccyo6LywgZmFsc2UpKSB7XG4gICAgICByZWdpc3Rlcih2YWx1ZSk7XG4gICAgICByZXR1cm4gY29udChtYXliZUFzc2lnbik7XG4gICAgfVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgY3gubWFya2VkID0gXCJwcm9wZXJ0eVwiO1xuICAgIGlmICh0eXBlID09IFwic3ByZWFkXCIpIHJldHVybiBjb250KHBhdHRlcm4pO1xuICAgIGlmICh0eXBlID09IFwifVwiKSByZXR1cm4gcGFzcygpO1xuICAgIGlmICh0eXBlID09IFwiW1wiKSByZXR1cm4gY29udChleHByZXNzaW9uLCBleHBlY3QoJ10nKSwgZXhwZWN0KCc6JyksIHByb3BwYXR0ZXJuKTtcbiAgICByZXR1cm4gY29udChleHBlY3QoXCI6XCIpLCBwYXR0ZXJuLCBtYXliZUFzc2lnbik7XG4gIH1cbiAgZnVuY3Rpb24gZWx0cGF0dGVybigpIHtcbiAgICByZXR1cm4gcGFzcyhwYXR0ZXJuLCBtYXliZUFzc2lnbilcbiAgfVxuICBmdW5jdGlvbiBtYXliZUFzc2lnbihfdHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCI9XCIpIHJldHVybiBjb250KGV4cHJlc3Npb25Ob0NvbW1hKTtcbiAgfVxuICBmdW5jdGlvbiB2YXJkZWZDb250KHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIixcIikgcmV0dXJuIGNvbnQodmFyZGVmKTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZWVsc2UodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcImtleXdvcmQgYlwiICYmIHZhbHVlID09IFwiZWxzZVwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiLCBcImVsc2VcIiksIHN0YXRlbWVudCwgcG9wbGV4KTtcbiAgfVxuICBmdW5jdGlvbiBmb3JzcGVjKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiYXdhaXRcIikgcmV0dXJuIGNvbnQoZm9yc3BlYyk7XG4gICAgaWYgKHR5cGUgPT0gXCIoXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCIpXCIpLCBmb3JzcGVjMSwgcG9wbGV4KTtcbiAgfVxuICBmdW5jdGlvbiBmb3JzcGVjMSh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJcIikgcmV0dXJuIGNvbnQodmFyZGVmLCBmb3JzcGVjMik7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gY29udChmb3JzcGVjMik7XG4gICAgcmV0dXJuIHBhc3MoZm9yc3BlYzIpXG4gIH1cbiAgZnVuY3Rpb24gZm9yc3BlYzIodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcIilcIikgcmV0dXJuIGNvbnQoKVxuICAgIGlmICh0eXBlID09IFwiO1wiKSByZXR1cm4gY29udChmb3JzcGVjMilcbiAgICBpZiAodmFsdWUgPT0gXCJpblwiIHx8IHZhbHVlID09IFwib2ZcIikgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZm9yc3BlYzIpIH1cbiAgICByZXR1cm4gcGFzcyhleHByZXNzaW9uLCBmb3JzcGVjMilcbiAgfVxuICBmdW5jdGlvbiBmdW5jdGlvbmRlZih0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIipcIikge2N4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChmdW5jdGlvbmRlZik7fVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO31cbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQocHVzaGNvbnRleHQsIHB1c2hsZXgoXCIpXCIpLCBjb21tYXNlcChmdW5hcmcsIFwiKVwiKSwgcG9wbGV4LCBtYXliZXJldHR5cGUsIHN0YXRlbWVudCwgcG9wY29udGV4dCk7XG4gICAgaWYgKGlzVFMgJiYgdmFsdWUgPT0gXCI8XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlcGFyYW0sIFwiPlwiKSwgcG9wbGV4LCBmdW5jdGlvbmRlZilcbiAgfVxuICBmdW5jdGlvbiBmdW5jdGlvbmRlY2wodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCIqXCIpIHtjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWNsKTt9XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udChmdW5jdGlvbmRlY2wpO31cbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQocHVzaGNvbnRleHQsIHB1c2hsZXgoXCIpXCIpLCBjb21tYXNlcChmdW5hcmcsIFwiKVwiKSwgcG9wbGV4LCBtYXliZXJldHR5cGUsIHBvcGNvbnRleHQpO1xuICAgIGlmIChpc1RTICYmIHZhbHVlID09IFwiPFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiPlwiKSwgY29tbWFzZXAodHlwZXBhcmFtLCBcIj5cIiksIHBvcGxleCwgZnVuY3Rpb25kZWNsKVxuICB9XG4gIGZ1bmN0aW9uIHR5cGVuYW1lKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJrZXl3b3JkXCIgfHwgdHlwZSA9PSBcInZhcmlhYmxlXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwidHlwZVwiXG4gICAgICByZXR1cm4gY29udCh0eXBlbmFtZSlcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09IFwiPFwiKSB7XG4gICAgICByZXR1cm4gY29udChwdXNobGV4KFwiPlwiKSwgY29tbWFzZXAodHlwZXBhcmFtLCBcIj5cIiksIHBvcGxleClcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZnVuYXJnKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiQFwiKSBjb250KGV4cHJlc3Npb24sIGZ1bmFyZylcbiAgICBpZiAodHlwZSA9PSBcInNwcmVhZFwiKSByZXR1cm4gY29udChmdW5hcmcpO1xuICAgIGlmIChpc1RTICYmIGlzTW9kaWZpZXIodmFsdWUpKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChmdW5hcmcpOyB9XG4gICAgaWYgKGlzVFMgJiYgdHlwZSA9PSBcInRoaXNcIikgcmV0dXJuIGNvbnQobWF5YmV0eXBlLCBtYXliZUFzc2lnbilcbiAgICByZXR1cm4gcGFzcyhwYXR0ZXJuLCBtYXliZXR5cGUsIG1heWJlQXNzaWduKTtcbiAgfVxuICBmdW5jdGlvbiBjbGFzc0V4cHJlc3Npb24odHlwZSwgdmFsdWUpIHtcbiAgICAvLyBDbGFzcyBleHByZXNzaW9ucyBtYXkgaGF2ZSBhbiBvcHRpb25hbCBuYW1lLlxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgcmV0dXJuIGNsYXNzTmFtZSh0eXBlLCB2YWx1ZSk7XG4gICAgcmV0dXJuIGNsYXNzTmFtZUFmdGVyKHR5cGUsIHZhbHVlKTtcbiAgfVxuICBmdW5jdGlvbiBjbGFzc05hbWUodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KGNsYXNzTmFtZUFmdGVyKTt9XG4gIH1cbiAgZnVuY3Rpb24gY2xhc3NOYW1lQWZ0ZXIodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCI8XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlcGFyYW0sIFwiPlwiKSwgcG9wbGV4LCBjbGFzc05hbWVBZnRlcilcbiAgICBpZiAodmFsdWUgPT0gXCJleHRlbmRzXCIgfHwgdmFsdWUgPT0gXCJpbXBsZW1lbnRzXCIgfHwgKGlzVFMgJiYgdHlwZSA9PSBcIixcIikpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBcImltcGxlbWVudHNcIikgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7XG4gICAgICByZXR1cm4gY29udChpc1RTID8gdHlwZWV4cHIgOiBleHByZXNzaW9uLCBjbGFzc05hbWVBZnRlcik7XG4gICAgfVxuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gY29udChwdXNobGV4KFwifVwiKSwgY2xhc3NCb2R5LCBwb3BsZXgpO1xuICB9XG4gIGZ1bmN0aW9uIGNsYXNzQm9keSh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwiYXN5bmNcIiB8fFxuICAgICAgICAodHlwZSA9PSBcInZhcmlhYmxlXCIgJiZcbiAgICAgICAgICh2YWx1ZSA9PSBcInN0YXRpY1wiIHx8IHZhbHVlID09IFwiZ2V0XCIgfHwgdmFsdWUgPT0gXCJzZXRcIiB8fCAoaXNUUyAmJiBpc01vZGlmaWVyKHZhbHVlKSkpICYmXG4gICAgICAgICBjeC5zdHJlYW0ubWF0Y2goL15cXHMrW1xcdyRcXHhhMS1cXHVmZmZmXS8sIGZhbHNlKSkpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiO1xuICAgICAgcmV0dXJuIGNvbnQoY2xhc3NCb2R5KTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiIHx8IGN4LnN0eWxlID09IFwia2V5d29yZFwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInByb3BlcnR5XCI7XG4gICAgICByZXR1cm4gY29udChjbGFzc2ZpZWxkLCBjbGFzc0JvZHkpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcIm51bWJlclwiIHx8IHR5cGUgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbnQoY2xhc3NmaWVsZCwgY2xhc3NCb2R5KTtcbiAgICBpZiAodHlwZSA9PSBcIltcIilcbiAgICAgIHJldHVybiBjb250KGV4cHJlc3Npb24sIG1heWJldHlwZSwgZXhwZWN0KFwiXVwiKSwgY2xhc3NmaWVsZCwgY2xhc3NCb2R5KVxuICAgIGlmICh2YWx1ZSA9PSBcIipcIikge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7XG4gICAgICByZXR1cm4gY29udChjbGFzc0JvZHkpO1xuICAgIH1cbiAgICBpZiAoaXNUUyAmJiB0eXBlID09IFwiKFwiKSByZXR1cm4gcGFzcyhmdW5jdGlvbmRlY2wsIGNsYXNzQm9keSlcbiAgICBpZiAodHlwZSA9PSBcIjtcIiB8fCB0eXBlID09IFwiLFwiKSByZXR1cm4gY29udChjbGFzc0JvZHkpO1xuICAgIGlmICh0eXBlID09IFwifVwiKSByZXR1cm4gY29udCgpO1xuICAgIGlmICh2YWx1ZSA9PSBcIkBcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgY2xhc3NCb2R5KVxuICB9XG4gIGZ1bmN0aW9uIGNsYXNzZmllbGQodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCI/XCIpIHJldHVybiBjb250KGNsYXNzZmllbGQpXG4gICAgaWYgKHR5cGUgPT0gXCI6XCIpIHJldHVybiBjb250KHR5cGVleHByLCBtYXliZUFzc2lnbilcbiAgICBpZiAodmFsdWUgPT0gXCI9XCIpIHJldHVybiBjb250KGV4cHJlc3Npb25Ob0NvbW1hKVxuICAgIHZhciBjb250ZXh0ID0gY3guc3RhdGUubGV4aWNhbC5wcmV2LCBpc0ludGVyZmFjZSA9IGNvbnRleHQgJiYgY29udGV4dC5pbmZvID09IFwiaW50ZXJmYWNlXCJcbiAgICByZXR1cm4gcGFzcyhpc0ludGVyZmFjZSA/IGZ1bmN0aW9uZGVjbCA6IGZ1bmN0aW9uZGVmKVxuICB9XG4gIGZ1bmN0aW9uIGFmdGVyRXhwb3J0KHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiKlwiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChtYXliZUZyb20sIGV4cGVjdChcIjtcIikpOyB9XG4gICAgaWYgKHZhbHVlID09IFwiZGVmYXVsdFwiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChleHByZXNzaW9uLCBleHBlY3QoXCI7XCIpKTsgfVxuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gY29udChjb21tYXNlcChleHBvcnRGaWVsZCwgXCJ9XCIpLCBtYXliZUZyb20sIGV4cGVjdChcIjtcIikpO1xuICAgIHJldHVybiBwYXNzKHN0YXRlbWVudCk7XG4gIH1cbiAgZnVuY3Rpb24gZXhwb3J0RmllbGQodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJhc1wiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChleHBlY3QoXCJ2YXJpYWJsZVwiKSk7IH1cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHJldHVybiBwYXNzKGV4cHJlc3Npb25Ob0NvbW1hLCBleHBvcnRGaWVsZCk7XG4gIH1cbiAgZnVuY3Rpb24gYWZ0ZXJJbXBvcnQodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwic3RyaW5nXCIpIHJldHVybiBjb250KCk7XG4gICAgaWYgKHR5cGUgPT0gXCIoXCIpIHJldHVybiBwYXNzKGV4cHJlc3Npb24pO1xuICAgIHJldHVybiBwYXNzKGltcG9ydFNwZWMsIG1heWJlTW9yZUltcG9ydHMsIG1heWJlRnJvbSk7XG4gIH1cbiAgZnVuY3Rpb24gaW1wb3J0U3BlYyh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gY29udENvbW1hc2VwKGltcG9ydFNwZWMsIFwifVwiKTtcbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHJlZ2lzdGVyKHZhbHVlKTtcbiAgICBpZiAodmFsdWUgPT0gXCIqXCIpIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiO1xuICAgIHJldHVybiBjb250KG1heWJlQXMpO1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlTW9yZUltcG9ydHModHlwZSkge1xuICAgIGlmICh0eXBlID09IFwiLFwiKSByZXR1cm4gY29udChpbXBvcnRTcGVjLCBtYXliZU1vcmVJbXBvcnRzKVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlQXMoX3R5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiYXNcIikgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQoaW1wb3J0U3BlYyk7IH1cbiAgfVxuICBmdW5jdGlvbiBtYXliZUZyb20oX3R5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiZnJvbVwiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChleHByZXNzaW9uKTsgfVxuICB9XG4gIGZ1bmN0aW9uIGFycmF5TGl0ZXJhbCh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJdXCIpIHJldHVybiBjb250KCk7XG4gICAgcmV0dXJuIHBhc3MoY29tbWFzZXAoZXhwcmVzc2lvbk5vQ29tbWEsIFwiXVwiKSk7XG4gIH1cbiAgZnVuY3Rpb24gZW51bWRlZigpIHtcbiAgICByZXR1cm4gcGFzcyhwdXNobGV4KFwiZm9ybVwiKSwgcGF0dGVybiwgZXhwZWN0KFwie1wiKSwgcHVzaGxleChcIn1cIiksIGNvbW1hc2VwKGVudW1tZW1iZXIsIFwifVwiKSwgcG9wbGV4LCBwb3BsZXgpXG4gIH1cbiAgZnVuY3Rpb24gZW51bW1lbWJlcigpIHtcbiAgICByZXR1cm4gcGFzcyhwYXR0ZXJuLCBtYXliZUFzc2lnbik7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NvbnRpbnVlZFN0YXRlbWVudChzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlLmxhc3RUeXBlID09IFwib3BlcmF0b3JcIiB8fCBzdGF0ZS5sYXN0VHlwZSA9PSBcIixcIiB8fFxuICAgICAgaXNPcGVyYXRvckNoYXIudGVzdCh0ZXh0QWZ0ZXIuY2hhckF0KDApKSB8fFxuICAgICAgL1ssLl0vLnRlc3QodGV4dEFmdGVyLmNoYXJBdCgwKSk7XG4gIH1cblxuICBmdW5jdGlvbiBleHByZXNzaW9uQWxsb3dlZChzdHJlYW0sIHN0YXRlLCBiYWNrVXApIHtcbiAgICByZXR1cm4gc3RhdGUudG9rZW5pemUgPT0gdG9rZW5CYXNlICYmXG4gICAgICAvXig/Om9wZXJhdG9yfHNvZnxrZXl3b3JkIFtiY2RdfGNhc2V8bmV3fGV4cG9ydHxkZWZhdWx0fHNwcmVhZHxbXFxbe31cXCgsOzpdfD0+KSQvLnRlc3Qoc3RhdGUubGFzdFR5cGUpIHx8XG4gICAgICAoc3RhdGUubGFzdFR5cGUgPT0gXCJxdWFzaVwiICYmIC9cXHtcXHMqJC8udGVzdChzdHJlYW0uc3RyaW5nLnNsaWNlKDAsIHN0cmVhbS5wb3MgLSAoYmFja1VwIHx8IDApKSkpXG4gIH1cblxuICAvLyBJbnRlcmZhY2VcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHtcbiAgICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSxcbiAgICAgICAgbGFzdFR5cGU6IFwic29mXCIsXG4gICAgICAgIGNjOiBbXSxcbiAgICAgICAgbGV4aWNhbDogbmV3IEpTTGV4aWNhbCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsIFwiYmxvY2tcIiwgZmFsc2UpLFxuICAgICAgICBsb2NhbFZhcnM6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnMsXG4gICAgICAgIGNvbnRleHQ6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnMgJiYgbmV3IENvbnRleHQobnVsbCwgbnVsbCwgZmFsc2UpLFxuICAgICAgICBpbmRlbnRlZDogYmFzZWNvbHVtbiB8fCAwXG4gICAgICB9O1xuICAgICAgaWYgKHBhcnNlckNvbmZpZy5nbG9iYWxWYXJzICYmIHR5cGVvZiBwYXJzZXJDb25maWcuZ2xvYmFsVmFycyA9PSBcIm9iamVjdFwiKVxuICAgICAgICBzdGF0ZS5nbG9iYWxWYXJzID0gcGFyc2VyQ29uZmlnLmdsb2JhbFZhcnM7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgIGlmICghc3RhdGUubGV4aWNhbC5oYXNPd25Qcm9wZXJ0eShcImFsaWduXCIpKVxuICAgICAgICAgIHN0YXRlLmxleGljYWwuYWxpZ24gPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgICAgZmluZEZhdEFycm93KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IHRva2VuQ29tbWVudCAmJiBzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmICh0eXBlID09IFwiY29tbWVudFwiKSByZXR1cm4gc3R5bGU7XG4gICAgICBzdGF0ZS5sYXN0VHlwZSA9IHR5cGUgPT0gXCJvcGVyYXRvclwiICYmIChjb250ZW50ID09IFwiKytcIiB8fCBjb250ZW50ID09IFwiLS1cIikgPyBcImluY2RlY1wiIDogdHlwZTtcbiAgICAgIHJldHVybiBwYXJzZUpTKHN0YXRlLCBzdHlsZSwgdHlwZSwgY29udGVudCwgc3RyZWFtKTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgPT0gdG9rZW5Db21tZW50IHx8IHN0YXRlLnRva2VuaXplID09IHRva2VuUXVhc2kpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDtcbiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWwsIHRvcFxuICAgICAgLy8gS2x1ZGdlIHRvIHByZXZlbnQgJ21heWJlbHNlJyBmcm9tIGJsb2NraW5nIGxleGljYWwgc2NvcGUgcG9wc1xuICAgICAgaWYgKCEvXlxccyplbHNlXFxiLy50ZXN0KHRleHRBZnRlcikpIGZvciAodmFyIGkgPSBzdGF0ZS5jYy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgYyA9IHN0YXRlLmNjW2ldO1xuICAgICAgICBpZiAoYyA9PSBwb3BsZXgpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7XG4gICAgICAgIGVsc2UgaWYgKGMgIT0gbWF5YmVlbHNlKSBicmVhaztcbiAgICAgIH1cbiAgICAgIHdoaWxlICgobGV4aWNhbC50eXBlID09IFwic3RhdFwiIHx8IGxleGljYWwudHlwZSA9PSBcImZvcm1cIikgJiZcbiAgICAgICAgICAgICAoZmlyc3RDaGFyID09IFwifVwiIHx8ICgodG9wID0gc3RhdGUuY2Nbc3RhdGUuY2MubGVuZ3RoIC0gMV0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b3AgPT0gbWF5YmVvcGVyYXRvckNvbW1hIHx8IHRvcCA9PSBtYXliZW9wZXJhdG9yTm9Db21tYSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIS9eWyxcXC49K1xcLSo6P1tcXChdLy50ZXN0KHRleHRBZnRlcikpKSlcbiAgICAgICAgbGV4aWNhbCA9IGxleGljYWwucHJldjtcbiAgICAgIGlmIChzdGF0ZW1lbnRJbmRlbnQgJiYgbGV4aWNhbC50eXBlID09IFwiKVwiICYmIGxleGljYWwucHJldi50eXBlID09IFwic3RhdFwiKVxuICAgICAgICBsZXhpY2FsID0gbGV4aWNhbC5wcmV2O1xuICAgICAgdmFyIHR5cGUgPSBsZXhpY2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTtcblxuICAgICAgaWYgKHR5cGUgPT0gXCJ2YXJkZWZcIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoc3RhdGUubGFzdFR5cGUgPT0gXCJvcGVyYXRvclwiIHx8IHN0YXRlLmxhc3RUeXBlID09IFwiLFwiID8gbGV4aWNhbC5pbmZvLmxlbmd0aCArIDEgOiAwKTtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJmb3JtXCIgJiYgZmlyc3RDaGFyID09IFwie1wiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZDtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJmb3JtXCIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgaW5kZW50VW5pdDtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJzdGF0XCIpXG4gICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKGlzQ29udGludWVkU3RhdGVtZW50KHN0YXRlLCB0ZXh0QWZ0ZXIpID8gc3RhdGVtZW50SW5kZW50IHx8IGluZGVudFVuaXQgOiAwKTtcbiAgICAgIGVsc2UgaWYgKGxleGljYWwuaW5mbyA9PSBcInN3aXRjaFwiICYmICFjbG9zaW5nICYmIHBhcnNlckNvbmZpZy5kb3VibGVJbmRlbnRTd2l0Y2ggIT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKC9eKD86Y2FzZXxkZWZhdWx0KVxcYi8udGVzdCh0ZXh0QWZ0ZXIpID8gaW5kZW50VW5pdCA6IDIgKiBpbmRlbnRVbml0KTtcbiAgICAgIGVsc2UgaWYgKGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpO1xuICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpO1xuICAgIH0sXG5cbiAgICBlbGVjdHJpY0lucHV0OiAvXlxccyooPzpjYXNlIC4qPzp8ZGVmYXVsdDp8XFx7fFxcfSkkLyxcbiAgICBibG9ja0NvbW1lbnRTdGFydDoganNvbk1vZGUgPyBudWxsIDogXCIvKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDoganNvbk1vZGUgPyBudWxsIDogXCIqL1wiLFxuICAgIGJsb2NrQ29tbWVudENvbnRpbnVlOiBqc29uTW9kZSA/IG51bGwgOiBcIiAqIFwiLFxuICAgIGxpbmVDb21tZW50OiBqc29uTW9kZSA/IG51bGwgOiBcIi8vXCIsXG4gICAgZm9sZDogXCJicmFjZVwiLFxuICAgIGNsb3NlQnJhY2tldHM6IFwiKClbXXt9JydcXFwiXFxcImBgXCIsXG5cbiAgICBoZWxwZXJUeXBlOiBqc29uTW9kZSA/IFwianNvblwiIDogXCJqYXZhc2NyaXB0XCIsXG4gICAganNvbmxkTW9kZToganNvbmxkTW9kZSxcbiAgICBqc29uTW9kZToganNvbk1vZGUsXG5cbiAgICBleHByZXNzaW9uQWxsb3dlZDogZXhwcmVzc2lvbkFsbG93ZWQsXG5cbiAgICBza2lwRXhwcmVzc2lvbjogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIHZhciB0b3AgPSBzdGF0ZS5jY1tzdGF0ZS5jYy5sZW5ndGggLSAxXVxuICAgICAgaWYgKHRvcCA9PSBleHByZXNzaW9uIHx8IHRvcCA9PSBleHByZXNzaW9uTm9Db21tYSkgc3RhdGUuY2MucG9wKClcbiAgICB9XG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcIndvcmRDaGFyc1wiLCBcImphdmFzY3JpcHRcIiwgL1tcXHckXS8pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L2phdmFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC9lY21hc2NyaXB0XCIsIFwiamF2YXNjcmlwdFwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0XCIsIFwiamF2YXNjcmlwdFwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vanNvblwiLCB7bmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb246IHRydWV9KTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3gtanNvblwiLCB7bmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb246IHRydWV9KTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2xkK2pzb25cIiwge25hbWU6IFwiamF2YXNjcmlwdFwiLCBqc29ubGQ6IHRydWV9KTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvdHlwZXNjcmlwdFwiLCB7IG5hbWU6IFwiamF2YXNjcmlwdFwiLCB0eXBlc2NyaXB0OiB0cnVlIH0pO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vdHlwZXNjcmlwdFwiLCB7IG5hbWU6IFwiamF2YXNjcmlwdFwiLCB0eXBlc2NyaXB0OiB0cnVlIH0pO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi94bWwveG1sXCIpLCByZXF1aXJlKFwiLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0XCIpLCByZXF1aXJlKFwiLi4vY3NzL2Nzc1wiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4uL3htbC94bWxcIiwgXCIuLi9qYXZhc2NyaXB0L2phdmFzY3JpcHRcIiwgXCIuLi9jc3MvY3NzXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgZGVmYXVsdFRhZ3MgPSB7XG4gICAgc2NyaXB0OiBbXG4gICAgICBbXCJsYW5nXCIsIC8oamF2YXNjcmlwdHxiYWJlbCkvaSwgXCJqYXZhc2NyaXB0XCJdLFxuICAgICAgW1widHlwZVwiLCAvXig/OnRleHR8YXBwbGljYXRpb24pXFwvKD86eC0pPyg/OmphdmF8ZWNtYSlzY3JpcHQkfF5tb2R1bGUkfF4kL2ksIFwiamF2YXNjcmlwdFwiXSxcbiAgICAgIFtcInR5cGVcIiwgLy4vLCBcInRleHQvcGxhaW5cIl0sXG4gICAgICBbbnVsbCwgbnVsbCwgXCJqYXZhc2NyaXB0XCJdXG4gICAgXSxcbiAgICBzdHlsZTogIFtcbiAgICAgIFtcImxhbmdcIiwgL15jc3MkL2ksIFwiY3NzXCJdLFxuICAgICAgW1widHlwZVwiLCAvXih0ZXh0XFwvKT8oeC0pPyhzdHlsZXNoZWV0fGNzcykkL2ksIFwiY3NzXCJdLFxuICAgICAgW1widHlwZVwiLCAvLi8sIFwidGV4dC9wbGFpblwiXSxcbiAgICAgIFtudWxsLCBudWxsLCBcImNzc1wiXVxuICAgIF1cbiAgfTtcblxuICBmdW5jdGlvbiBtYXliZUJhY2t1cChzdHJlYW0sIHBhdCwgc3R5bGUpIHtcbiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKSwgY2xvc2UgPSBjdXIuc2VhcmNoKHBhdCk7XG4gICAgaWYgKGNsb3NlID4gLTEpIHtcbiAgICAgIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCAtIGNsb3NlKTtcbiAgICB9IGVsc2UgaWYgKGN1ci5tYXRjaCgvPFxcLz8kLykpIHtcbiAgICAgIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCk7XG4gICAgICBpZiAoIXN0cmVhbS5tYXRjaChwYXQsIGZhbHNlKSkgc3RyZWFtLm1hdGNoKGN1cik7XG4gICAgfVxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIHZhciBhdHRyUmVnZXhwQ2FjaGUgPSB7fTtcbiAgZnVuY3Rpb24gZ2V0QXR0clJlZ2V4cChhdHRyKSB7XG4gICAgdmFyIHJlZ2V4cCA9IGF0dHJSZWdleHBDYWNoZVthdHRyXTtcbiAgICBpZiAocmVnZXhwKSByZXR1cm4gcmVnZXhwO1xuICAgIHJldHVybiBhdHRyUmVnZXhwQ2FjaGVbYXR0cl0gPSBuZXcgUmVnRXhwKFwiXFxcXHMrXCIgKyBhdHRyICsgXCJcXFxccyo9XFxcXHMqKCd8XFxcIik/KFteJ1xcXCJdKykoJ3xcXFwiKT9cXFxccypcIik7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBdHRyVmFsdWUodGV4dCwgYXR0cikge1xuICAgIHZhciBtYXRjaCA9IHRleHQubWF0Y2goZ2V0QXR0clJlZ2V4cChhdHRyKSlcbiAgICByZXR1cm4gbWF0Y2ggPyAvXlxccyooLio/KVxccyokLy5leGVjKG1hdGNoWzJdKVsxXSA6IFwiXCJcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRhZ1JlZ2V4cCh0YWdOYW1lLCBhbmNob3JlZCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKChhbmNob3JlZCA/IFwiXlwiIDogXCJcIikgKyBcIjxcXC9cXHMqXCIgKyB0YWdOYW1lICsgXCJcXHMqPlwiLCBcImlcIik7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRUYWdzKGZyb20sIHRvKSB7XG4gICAgZm9yICh2YXIgdGFnIGluIGZyb20pIHtcbiAgICAgIHZhciBkZXN0ID0gdG9bdGFnXSB8fCAodG9bdGFnXSA9IFtdKTtcbiAgICAgIHZhciBzb3VyY2UgPSBmcm9tW3RhZ107XG4gICAgICBmb3IgKHZhciBpID0gc291cmNlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgICBkZXN0LnVuc2hpZnQoc291cmNlW2ldKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRNYXRjaGluZ01vZGUodGFnSW5mbywgdGFnVGV4dCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFnSW5mby5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNwZWMgPSB0YWdJbmZvW2ldO1xuICAgICAgaWYgKCFzcGVjWzBdIHx8IHNwZWNbMV0udGVzdChnZXRBdHRyVmFsdWUodGFnVGV4dCwgc3BlY1swXSkpKSByZXR1cm4gc3BlY1syXTtcbiAgICB9XG4gIH1cblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJodG1sbWl4ZWRcIiwgZnVuY3Rpb24gKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7XG4gICAgdmFyIGh0bWxNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywge1xuICAgICAgbmFtZTogXCJ4bWxcIixcbiAgICAgIGh0bWxNb2RlOiB0cnVlLFxuICAgICAgbXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yOiBwYXJzZXJDb25maWcubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yLFxuICAgICAgbXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZzogcGFyc2VyQ29uZmlnLm11bHRpbGluZVRhZ0luZGVudFBhc3RUYWdcbiAgICB9KTtcblxuICAgIHZhciB0YWdzID0ge307XG4gICAgdmFyIGNvbmZpZ1RhZ3MgPSBwYXJzZXJDb25maWcgJiYgcGFyc2VyQ29uZmlnLnRhZ3MsIGNvbmZpZ1NjcmlwdCA9IHBhcnNlckNvbmZpZyAmJiBwYXJzZXJDb25maWcuc2NyaXB0VHlwZXM7XG4gICAgYWRkVGFncyhkZWZhdWx0VGFncywgdGFncyk7XG4gICAgaWYgKGNvbmZpZ1RhZ3MpIGFkZFRhZ3MoY29uZmlnVGFncywgdGFncyk7XG4gICAgaWYgKGNvbmZpZ1NjcmlwdCkgZm9yICh2YXIgaSA9IGNvbmZpZ1NjcmlwdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgIHRhZ3Muc2NyaXB0LnVuc2hpZnQoW1widHlwZVwiLCBjb25maWdTY3JpcHRbaV0ubWF0Y2hlcywgY29uZmlnU2NyaXB0W2ldLm1vZGVdKVxuXG4gICAgZnVuY3Rpb24gaHRtbChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgc3R5bGUgPSBodG1sTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmh0bWxTdGF0ZSksIHRhZyA9IC9cXGJ0YWdcXGIvLnRlc3Qoc3R5bGUpLCB0YWdOYW1lXG4gICAgICBpZiAodGFnICYmICEvWzw+XFxzXFwvXS8udGVzdChzdHJlYW0uY3VycmVudCgpKSAmJlxuICAgICAgICAgICh0YWdOYW1lID0gc3RhdGUuaHRtbFN0YXRlLnRhZ05hbWUgJiYgc3RhdGUuaHRtbFN0YXRlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkgJiZcbiAgICAgICAgICB0YWdzLmhhc093blByb3BlcnR5KHRhZ05hbWUpKSB7XG4gICAgICAgIHN0YXRlLmluVGFnID0gdGFnTmFtZSArIFwiIFwiXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmluVGFnICYmIHRhZyAmJiAvPiQvLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkpIHtcbiAgICAgICAgdmFyIGluVGFnID0gL14oW1xcU10rKSAoLiopLy5leGVjKHN0YXRlLmluVGFnKVxuICAgICAgICBzdGF0ZS5pblRhZyA9IG51bGxcbiAgICAgICAgdmFyIG1vZGVTcGVjID0gc3RyZWFtLmN1cnJlbnQoKSA9PSBcIj5cIiAmJiBmaW5kTWF0Y2hpbmdNb2RlKHRhZ3NbaW5UYWdbMV1dLCBpblRhZ1syXSlcbiAgICAgICAgdmFyIG1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBtb2RlU3BlYylcbiAgICAgICAgdmFyIGVuZFRhZ0EgPSBnZXRUYWdSZWdleHAoaW5UYWdbMV0sIHRydWUpLCBlbmRUYWcgPSBnZXRUYWdSZWdleHAoaW5UYWdbMV0sIGZhbHNlKTtcbiAgICAgICAgc3RhdGUudG9rZW4gPSBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goZW5kVGFnQSwgZmFsc2UpKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbiA9IGh0bWw7XG4gICAgICAgICAgICBzdGF0ZS5sb2NhbFN0YXRlID0gc3RhdGUubG9jYWxNb2RlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWF5YmVCYWNrdXAoc3RyZWFtLCBlbmRUYWcsIHN0YXRlLmxvY2FsTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmxvY2FsU3RhdGUpKTtcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdGUubG9jYWxNb2RlID0gbW9kZTtcbiAgICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShtb2RlLCBodG1sTW9kZS5pbmRlbnQoc3RhdGUuaHRtbFN0YXRlLCBcIlwiLCBcIlwiKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmluVGFnKSB7XG4gICAgICAgIHN0YXRlLmluVGFnICs9IHN0cmVhbS5jdXJyZW50KClcbiAgICAgICAgaWYgKHN0cmVhbS5lb2woKSkgc3RhdGUuaW5UYWcgKz0gXCIgXCJcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKGh0bWxNb2RlKTtcbiAgICAgICAgcmV0dXJuIHt0b2tlbjogaHRtbCwgaW5UYWc6IG51bGwsIGxvY2FsTW9kZTogbnVsbCwgbG9jYWxTdGF0ZTogbnVsbCwgaHRtbFN0YXRlOiBzdGF0ZX07XG4gICAgICB9LFxuXG4gICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgbG9jYWw7XG4gICAgICAgIGlmIChzdGF0ZS5sb2NhbFN0YXRlKSB7XG4gICAgICAgICAgbG9jYWwgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShzdGF0ZS5sb2NhbE1vZGUsIHN0YXRlLmxvY2FsU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7dG9rZW46IHN0YXRlLnRva2VuLCBpblRhZzogc3RhdGUuaW5UYWcsXG4gICAgICAgICAgICAgICAgbG9jYWxNb2RlOiBzdGF0ZS5sb2NhbE1vZGUsIGxvY2FsU3RhdGU6IGxvY2FsLFxuICAgICAgICAgICAgICAgIGh0bWxTdGF0ZTogQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1vZGUsIHN0YXRlLmh0bWxTdGF0ZSl9O1xuICAgICAgfSxcblxuICAgICAgdG9rZW46IGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS50b2tlbihzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH0sXG5cbiAgICAgIGluZGVudDogZnVuY3Rpb24gKHN0YXRlLCB0ZXh0QWZ0ZXIsIGxpbmUpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5sb2NhbE1vZGUgfHwgL15cXHMqPFxcLy8udGVzdCh0ZXh0QWZ0ZXIpKVxuICAgICAgICAgIHJldHVybiBodG1sTW9kZS5pbmRlbnQoc3RhdGUuaHRtbFN0YXRlLCB0ZXh0QWZ0ZXIsIGxpbmUpO1xuICAgICAgICBlbHNlIGlmIChzdGF0ZS5sb2NhbE1vZGUuaW5kZW50KVxuICAgICAgICAgIHJldHVybiBzdGF0ZS5sb2NhbE1vZGUuaW5kZW50KHN0YXRlLmxvY2FsU3RhdGUsIHRleHRBZnRlciwgbGluZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgfSxcblxuICAgICAgaW5uZXJNb2RlOiBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtzdGF0ZTogc3RhdGUubG9jYWxTdGF0ZSB8fCBzdGF0ZS5odG1sU3RhdGUsIG1vZGU6IHN0YXRlLmxvY2FsTW9kZSB8fCBodG1sTW9kZX07XG4gICAgICB9XG4gICAgfTtcbiAgfSwgXCJ4bWxcIiwgXCJqYXZhc2NyaXB0XCIsIFwiY3NzXCIpO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvaHRtbFwiLCBcImh0bWxtaXhlZFwiKTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLy8gVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBtb2RlcyB0byBiZSBjb21iaW5lZC4gVGhlIG1vZGUgZ2l2ZW5cbi8vIGFzIHRoZSBiYXNlIGFyZ3VtZW50IHRha2VzIGNhcmUgb2YgbW9zdCBvZiB0aGUgbm9ybWFsIG1vZGVcbi8vIGZ1bmN0aW9uYWxpdHksIGJ1dCBhIHNlY29uZCAodHlwaWNhbGx5IHNpbXBsZSkgbW9kZSBpcyB1c2VkLCB3aGljaFxuLy8gY2FuIG92ZXJyaWRlIHRoZSBzdHlsZSBvZiB0ZXh0LiBCb3RoIG1vZGVzIGdldCB0byBwYXJzZSBhbGwgb2YgdGhlXG4vLyB0ZXh0LCBidXQgd2hlbiBib3RoIGFzc2lnbiBhIG5vbi1udWxsIHN0eWxlIHRvIGEgcGllY2Ugb2YgY29kZSwgdGhlXG4vLyBvdmVybGF5IHdpbnMsIHVubGVzcyB0aGUgY29tYmluZSBhcmd1bWVudCB3YXMgdHJ1ZSBhbmQgbm90IG92ZXJyaWRkZW4sXG4vLyBvciBzdGF0ZS5vdmVybGF5LmNvbWJpbmVUb2tlbnMgd2FzIHRydWUsIGluIHdoaWNoIGNhc2UgdGhlIHN0eWxlcyBhcmVcbi8vIGNvbWJpbmVkLlxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSwgcmVxdWlyZShcIi4uL2h0bWxtaXhlZC9odG1sbWl4ZWRcIiksXG4gICAgICAgIHJlcXVpcmUoXCIuLi8uLi9hZGRvbi9tb2RlL292ZXJsYXlcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi9odG1sbWl4ZWQvaHRtbG1peGVkXCIsXG4gICAgICAgICAgICBcIi4uLy4uL2FkZG9uL21vZGUvb3ZlcmxheVwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGphbmdvOmlubmVyXCIsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXl3b3JkcyA9IFtcImJsb2NrXCIsIFwiZW5kYmxvY2tcIiwgXCJmb3JcIiwgXCJlbmRmb3JcIiwgXCJ0cnVlXCIsIFwiZmFsc2VcIiwgXCJmaWx0ZXJcIiwgXCJlbmRmaWx0ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJsb29wXCIsIFwibm9uZVwiLCBcInNlbGZcIiwgXCJzdXBlclwiLCBcImlmXCIsIFwiZWxpZlwiLCBcImVuZGlmXCIsIFwiYXNcIiwgXCJlbHNlXCIsIFwiaW1wb3J0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwid2l0aFwiLCBcImVuZHdpdGhcIiwgXCJ3aXRob3V0XCIsIFwiY29udGV4dFwiLCBcImlmZXF1YWxcIiwgXCJlbmRpZmVxdWFsXCIsIFwiaWZub3RlcXVhbFwiLFxuICAgICAgICAgICAgICAgICAgICBcImVuZGlmbm90ZXF1YWxcIiwgXCJleHRlbmRzXCIsIFwiaW5jbHVkZVwiLCBcImxvYWRcIiwgXCJjb21tZW50XCIsIFwiZW5kY29tbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICBcImVtcHR5XCIsIFwidXJsXCIsIFwic3RhdGljXCIsIFwidHJhbnNcIiwgXCJibG9ja3RyYW5zXCIsIFwiZW5kYmxvY2t0cmFuc1wiLCBcIm5vd1wiLFxuICAgICAgICAgICAgICAgICAgICBcInJlZ3JvdXBcIiwgXCJsb3JlbVwiLCBcImlmY2hhbmdlZFwiLCBcImVuZGlmY2hhbmdlZFwiLCBcImZpcnN0b2ZcIiwgXCJkZWJ1Z1wiLCBcImN5Y2xlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY3NyZl90b2tlblwiLCBcImF1dG9lc2NhcGVcIiwgXCJlbmRhdXRvZXNjYXBlXCIsIFwic3BhY2VsZXNzXCIsIFwiZW5kc3BhY2VsZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3NpXCIsIFwidGVtcGxhdGV0YWdcIiwgXCJ2ZXJiYXRpbVwiLCBcImVuZHZlcmJhdGltXCIsIFwid2lkdGhyYXRpb1wiXSxcbiAgICAgICAgZmlsdGVycyA9IFtcImFkZFwiLCBcImFkZHNsYXNoZXNcIiwgXCJjYXBmaXJzdFwiLCBcImNlbnRlclwiLCBcImN1dFwiLCBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICBcImRlZmF1bHRcIiwgXCJkZWZhdWx0X2lmX25vbmVcIiwgXCJkaWN0c29ydFwiLFxuICAgICAgICAgICAgICAgICAgIFwiZGljdHNvcnRyZXZlcnNlZFwiLCBcImRpdmlzaWJsZWJ5XCIsIFwiZXNjYXBlXCIsIFwiZXNjYXBlanNcIixcbiAgICAgICAgICAgICAgICAgICBcImZpbGVzaXplZm9ybWF0XCIsIFwiZmlyc3RcIiwgXCJmbG9hdGZvcm1hdFwiLCBcImZvcmNlX2VzY2FwZVwiLFxuICAgICAgICAgICAgICAgICAgIFwiZ2V0X2RpZ2l0XCIsIFwiaXJpZW5jb2RlXCIsIFwiam9pblwiLCBcImxhc3RcIiwgXCJsZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICBcImxlbmd0aF9pc1wiLCBcImxpbmVicmVha3NcIiwgXCJsaW5lYnJlYWtzYnJcIiwgXCJsaW5lbnVtYmVyc1wiLFxuICAgICAgICAgICAgICAgICAgIFwibGp1c3RcIiwgXCJsb3dlclwiLCBcIm1ha2VfbGlzdFwiLCBcInBob25lMm51bWVyaWNcIiwgXCJwbHVyYWxpemVcIixcbiAgICAgICAgICAgICAgICAgICBcInBwcmludFwiLCBcInJhbmRvbVwiLCBcInJlbW92ZXRhZ3NcIiwgXCJyanVzdFwiLCBcInNhZmVcIixcbiAgICAgICAgICAgICAgICAgICBcInNhZmVzZXFcIiwgXCJzbGljZVwiLCBcInNsdWdpZnlcIiwgXCJzdHJpbmdmb3JtYXRcIiwgXCJzdHJpcHRhZ3NcIixcbiAgICAgICAgICAgICAgICAgICBcInRpbWVcIiwgXCJ0aW1lc2luY2VcIiwgXCJ0aW1ldW50aWxcIiwgXCJ0aXRsZVwiLCBcInRydW5jYXRlY2hhcnNcIixcbiAgICAgICAgICAgICAgICAgICBcInRydW5jYXRlY2hhcnNfaHRtbFwiLCBcInRydW5jYXRld29yZHNcIiwgXCJ0cnVuY2F0ZXdvcmRzX2h0bWxcIixcbiAgICAgICAgICAgICAgICAgICBcInVub3JkZXJlZF9saXN0XCIsIFwidXBwZXJcIiwgXCJ1cmxlbmNvZGVcIiwgXCJ1cmxpemVcIixcbiAgICAgICAgICAgICAgICAgICBcInVybGl6ZXRydW5jXCIsIFwid29yZGNvdW50XCIsIFwid29yZHdyYXBcIiwgXCJ5ZXNub1wiXSxcbiAgICAgICAgb3BlcmF0b3JzID0gW1wiPT1cIiwgXCIhPVwiLCBcIjxcIiwgXCI+XCIsIFwiPD1cIiwgXCI+PVwiXSxcbiAgICAgICAgd29yZE9wZXJhdG9ycyA9IFtcImluXCIsIFwibm90XCIsIFwib3JcIiwgXCJhbmRcIl07XG5cbiAgICBrZXl3b3JkcyA9IG5ldyBSZWdFeHAoXCJeXFxcXGIoXCIgKyBrZXl3b3Jkcy5qb2luKFwifFwiKSArIFwiKVxcXFxiXCIpO1xuICAgIGZpbHRlcnMgPSBuZXcgUmVnRXhwKFwiXlxcXFxiKFwiICsgZmlsdGVycy5qb2luKFwifFwiKSArIFwiKVxcXFxiXCIpO1xuICAgIG9wZXJhdG9ycyA9IG5ldyBSZWdFeHAoXCJeXFxcXGIoXCIgKyBvcGVyYXRvcnMuam9pbihcInxcIikgKyBcIilcXFxcYlwiKTtcbiAgICB3b3JkT3BlcmF0b3JzID0gbmV3IFJlZ0V4cChcIl5cXFxcYihcIiArIHdvcmRPcGVyYXRvcnMuam9pbihcInxcIikgKyBcIilcXFxcYlwiKTtcblxuICAgIC8vIFdlIGhhdmUgdG8gcmV0dXJuIFwibnVsbFwiIGluc3RlYWQgb2YgbnVsbCwgaW4gb3JkZXIgdG8gYXZvaWQgc3RyaW5nXG4gICAgLy8gc3R5bGluZyBhcyB0aGUgZGVmYXVsdCwgd2hlbiB1c2luZyBEamFuZ28gdGVtcGxhdGVzIGluc2lkZSBIVE1MXG4gICAgLy8gZWxlbWVudCBhdHRyaWJ1dGVzXG4gICAgZnVuY3Rpb24gdG9rZW5CYXNlIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAvLyBBdHRlbXB0IHRvIGlkZW50aWZ5IGEgdmFyaWFibGUsIHRlbXBsYXRlIG9yIGNvbW1lbnQgdGFnIHJlc3BlY3RpdmVseVxuICAgICAgaWYgKHN0cmVhbS5tYXRjaChcInt7XCIpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5WYXJpYWJsZTtcbiAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChcInslXCIpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWc7XG4gICAgICAgIHJldHVybiBcInRhZ1wiO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goXCJ7I1wiKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQ29tbWVudDtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfVxuXG4gICAgICAvLyBJZ25vcmUgY29tcGxldGVseSBhbnkgc3RyZWFtIHNlcmllcyB0aGF0IGRvIG5vdCBtYXRjaCB0aGVcbiAgICAgIC8vIERqYW5nbyB0ZW1wbGF0ZSBvcGVuaW5nIHRhZ3MuXG4gICAgICB3aGlsZSAoc3RyZWFtLm5leHQoKSAhPSBudWxsICYmICFzdHJlYW0ubWF0Y2goL1xce1t7JSNdLywgZmFsc2UpKSB7fVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQSBzdHJpbmcgY2FuIGJlIGluY2x1ZGVkIGluIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyAodGhpcyBpc1xuICAgIC8vIHRoZSBkZWxpbWl0ZXIpLiBNYXJrIGV2ZXJ5dGhpbmcgYXMgYSBzdHJpbmcgdW50aWwgdGhlIHN0YXJ0IGRlbGltaXRlclxuICAgIC8vIG9jY3VycyBhZ2Fpbi5cbiAgICBmdW5jdGlvbiBpblN0cmluZyAoZGVsaW1pdGVyLCBwcmV2aW91c1Rva2VuaXplcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RhdGUuZXNjYXBlTmV4dCAmJiBzdHJlYW0uZWF0KGRlbGltaXRlcikpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHByZXZpb3VzVG9rZW5pemVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzdGF0ZS5lc2NhcGVOZXh0KSB7XG4gICAgICAgICAgICBzdGF0ZS5lc2NhcGVOZXh0ID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgICAgICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSBiYWNrc2xhc2ggZm9yIGVzY2FwaW5nIGNoYXJhY3RlcnMsIHN1Y2ggYXNcbiAgICAgICAgICAvLyB0aGUgc3RyaW5nIGRlbGltaXRlci5cbiAgICAgICAgICBpZiAoY2ggPT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgIHN0YXRlLmVzY2FwZU5leHQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBEamFuZ28gdGVtcGxhdGUgdmFyaWFibGUgc3ludGF4IGhpZ2hsaWdodGluZ1xuICAgIGZ1bmN0aW9uIGluVmFyaWFibGUgKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIC8vIEF0dGVtcHQgdG8gbWF0Y2ggYSBkb3QgdGhhdCBwcmVjZWRlcyBhIHByb3BlcnR5XG4gICAgICBpZiAoc3RhdGUud2FpdERvdCkge1xuICAgICAgICBzdGF0ZS53YWl0RG90ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgIT0gXCIuXCIpIHtcbiAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEb3QgZm9sbG93ZWQgYnkgYSBub24td29yZCBjaGFyYWN0ZXIgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYW4gZXJyb3IuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1xcLlxcVysvKSkge1xuICAgICAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcIi5cIikpIHtcbiAgICAgICAgICBzdGF0ZS53YWl0UHJvcGVydHkgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciAoXCJVbmV4cGVjdGVkIGVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHByb3BlcnR5LlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBdHRlbXB0IHRvIG1hdGNoIGEgcGlwZSB0aGF0IHByZWNlZGVzIGEgZmlsdGVyXG4gICAgICBpZiAoc3RhdGUud2FpdFBpcGUpIHtcbiAgICAgICAgc3RhdGUud2FpdFBpcGUgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSAhPSBcInxcIikge1xuICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBpcGUgZm9sbG93ZWQgYnkgYSBub24td29yZCBjaGFyYWN0ZXIgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYW4gZXJyb3IuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1xcLlxcVysvKSkge1xuICAgICAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcInxcIikpIHtcbiAgICAgICAgICBzdGF0ZS53YWl0RmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IgKFwiVW5leHBlY3RlZCBlcnJvciB3aGlsZSB3YWl0aW5nIGZvciBmaWx0ZXIuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhpZ2hsaWdodCBwcm9wZXJ0aWVzXG4gICAgICBpZiAoc3RhdGUud2FpdFByb3BlcnR5KSB7XG4gICAgICAgIHN0YXRlLndhaXRQcm9wZXJ0eSA9IGZhbHNlO1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXGIoXFx3KylcXGIvKSkge1xuICAgICAgICAgIHN0YXRlLndhaXREb3QgPSB0cnVlOyAgLy8gQSBwcm9wZXJ0eSBjYW4gYmUgZm9sbG93ZWQgYnkgYW5vdGhlciBwcm9wZXJ0eVxuICAgICAgICAgIHN0YXRlLndhaXRQaXBlID0gdHJ1ZTsgIC8vIEEgcHJvcGVydHkgY2FuIGJlIGZvbGxvd2VkIGJ5IGEgZmlsdGVyXG4gICAgICAgICAgcmV0dXJuIFwicHJvcGVydHlcIjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBIaWdobGlnaHQgZmlsdGVyc1xuICAgICAgaWYgKHN0YXRlLndhaXRGaWx0ZXIpIHtcbiAgICAgICAgICBzdGF0ZS53YWl0RmlsdGVyID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goZmlsdGVycykpIHtcbiAgICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWdub3JlIGFsbCB3aGl0ZSBzcGFjZXNcbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgICBzdGF0ZS53YWl0UHJvcGVydHkgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuXG4gICAgICAvLyBJZGVudGlmeSBudW1iZXJzXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXGJcXGQrKFxcLlxcZCspP1xcYi8pKSB7XG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgfVxuXG4gICAgICAvLyBJZGVudGlmeSBzdHJpbmdzXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKFwiJ1wiKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluU3RyaW5nKFwiJ1wiLCBzdGF0ZS50b2tlbml6ZSk7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goJ1wiJykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblN0cmluZygnXCInLCBzdGF0ZS50b2tlbml6ZSk7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgdGhlIHZhcmlhYmxlXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXGIoXFx3KylcXGIvKSAmJiAhc3RhdGUuZm91bmRWYXJpYWJsZSkge1xuICAgICAgICBzdGF0ZS53YWl0RG90ID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUud2FpdFBpcGUgPSB0cnVlOyAgLy8gQSBwcm9wZXJ0eSBjYW4gYmUgZm9sbG93ZWQgYnkgYSBmaWx0ZXJcbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgZm91bmQgY2xvc2luZyB0YWcgcmVzZXRcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goXCJ9fVwiKSkge1xuICAgICAgICBzdGF0ZS53YWl0UHJvcGVydHkgPSBudWxsO1xuICAgICAgICBzdGF0ZS53YWl0RmlsdGVyID0gbnVsbDtcbiAgICAgICAgc3RhdGUud2FpdERvdCA9IG51bGw7XG4gICAgICAgIHN0YXRlLndhaXRQaXBlID0gbnVsbDtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIHJldHVybiBcInRhZ1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCwgYWR2YW5jZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXJcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5UYWcgKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIC8vIEF0dGVtcHQgdG8gbWF0Y2ggYSBkb3QgdGhhdCBwcmVjZWRlcyBhIHByb3BlcnR5XG4gICAgICBpZiAoc3RhdGUud2FpdERvdCkge1xuICAgICAgICBzdGF0ZS53YWl0RG90ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgIT0gXCIuXCIpIHtcbiAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEb3QgZm9sbG93ZWQgYnkgYSBub24td29yZCBjaGFyYWN0ZXIgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYW4gZXJyb3IuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1xcLlxcVysvKSkge1xuICAgICAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcIi5cIikpIHtcbiAgICAgICAgICBzdGF0ZS53YWl0UHJvcGVydHkgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciAoXCJVbmV4cGVjdGVkIGVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHByb3BlcnR5LlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBdHRlbXB0IHRvIG1hdGNoIGEgcGlwZSB0aGF0IHByZWNlZGVzIGEgZmlsdGVyXG4gICAgICBpZiAoc3RhdGUud2FpdFBpcGUpIHtcbiAgICAgICAgc3RhdGUud2FpdFBpcGUgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSAhPSBcInxcIikge1xuICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBpcGUgZm9sbG93ZWQgYnkgYSBub24td29yZCBjaGFyYWN0ZXIgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYW4gZXJyb3IuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1xcLlxcVysvKSkge1xuICAgICAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcInxcIikpIHtcbiAgICAgICAgICBzdGF0ZS53YWl0RmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IgKFwiVW5leHBlY3RlZCBlcnJvciB3aGlsZSB3YWl0aW5nIGZvciBmaWx0ZXIuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhpZ2hsaWdodCBwcm9wZXJ0aWVzXG4gICAgICBpZiAoc3RhdGUud2FpdFByb3BlcnR5KSB7XG4gICAgICAgIHN0YXRlLndhaXRQcm9wZXJ0eSA9IGZhbHNlO1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXGIoXFx3KylcXGIvKSkge1xuICAgICAgICAgIHN0YXRlLndhaXREb3QgPSB0cnVlOyAgLy8gQSBwcm9wZXJ0eSBjYW4gYmUgZm9sbG93ZWQgYnkgYW5vdGhlciBwcm9wZXJ0eVxuICAgICAgICAgIHN0YXRlLndhaXRQaXBlID0gdHJ1ZTsgIC8vIEEgcHJvcGVydHkgY2FuIGJlIGZvbGxvd2VkIGJ5IGEgZmlsdGVyXG4gICAgICAgICAgcmV0dXJuIFwicHJvcGVydHlcIjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBIaWdobGlnaHQgZmlsdGVyc1xuICAgICAgaWYgKHN0YXRlLndhaXRGaWx0ZXIpIHtcbiAgICAgICAgICBzdGF0ZS53YWl0RmlsdGVyID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goZmlsdGVycykpIHtcbiAgICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWdub3JlIGFsbCB3aGl0ZSBzcGFjZXNcbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgICBzdGF0ZS53YWl0UHJvcGVydHkgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuXG4gICAgICAvLyBJZGVudGlmeSBudW1iZXJzXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXGJcXGQrKFxcLlxcZCspP1xcYi8pKSB7XG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgfVxuXG4gICAgICAvLyBJZGVudGlmeSBzdHJpbmdzXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKFwiJ1wiKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluU3RyaW5nKFwiJ1wiLCBzdGF0ZS50b2tlbml6ZSk7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goJ1wiJykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblN0cmluZygnXCInLCBzdGF0ZS50b2tlbml6ZSk7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBdHRlbXB0IHRvIG1hdGNoIGFuIG9wZXJhdG9yXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKG9wZXJhdG9ycykpIHtcbiAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgIH1cblxuICAgICAgLy8gQXR0ZW1wdCB0byBtYXRjaCBhIHdvcmQgb3BlcmF0b3JcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2god29yZE9wZXJhdG9ycykpIHtcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgfVxuXG4gICAgICAvLyBBdHRlbXB0IHRvIG1hdGNoIGEga2V5d29yZFxuICAgICAgdmFyIGtleXdvcmRNYXRjaCA9IHN0cmVhbS5tYXRjaChrZXl3b3Jkcyk7XG4gICAgICBpZiAoa2V5d29yZE1hdGNoKSB7XG4gICAgICAgIGlmIChrZXl3b3JkTWF0Y2hbMF0gPT0gXCJjb21tZW50XCIpIHtcbiAgICAgICAgICBzdGF0ZS5ibG9ja0NvbW1lbnRUYWcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgIH1cblxuICAgICAgLy8gQXR0ZW1wdCB0byBtYXRjaCBhIHZhcmlhYmxlXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXGIoXFx3KylcXGIvKSkge1xuICAgICAgICBzdGF0ZS53YWl0RG90ID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUud2FpdFBpcGUgPSB0cnVlOyAgLy8gQSBwcm9wZXJ0eSBjYW4gYmUgZm9sbG93ZWQgYnkgYSBmaWx0ZXJcbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgZm91bmQgY2xvc2luZyB0YWcgcmVzZXRcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goXCIlfVwiKSkge1xuICAgICAgICBzdGF0ZS53YWl0UHJvcGVydHkgPSBudWxsO1xuICAgICAgICBzdGF0ZS53YWl0RmlsdGVyID0gbnVsbDtcbiAgICAgICAgc3RhdGUud2FpdERvdCA9IG51bGw7XG4gICAgICAgIHN0YXRlLndhaXRQaXBlID0gbnVsbDtcbiAgICAgICAgLy8gSWYgdGhlIHRhZyB0aGF0IGNsb3NlcyBpcyBhIGJsb2NrIGNvbW1lbnQgdGFnLCB3ZSB3YW50IHRvIG1hcmsgdGhlXG4gICAgICAgIC8vIGZvbGxvd2luZyBjb2RlIGFzIGNvbW1lbnQsIHVudGlsIHRoZSB0YWcgY2xvc2VzLlxuICAgICAgICBpZiAoc3RhdGUuYmxvY2tDb21tZW50VGFnKSB7XG4gICAgICAgICAgc3RhdGUuYmxvY2tDb21tZW50VGFnID0gZmFsc2U7ICAvLyBSZWxlYXNlIHRoZSBcImxvY2tcIlxuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5CbG9ja0NvbW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kLCBhZHZhbmNlIHRvIHRoZSBuZXh0IGNoYXJhY3RlclxuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGV2ZXJ5dGhpbmcgYXMgY29tbWVudCBpbnNpZGUgdGhlIHRhZyBhbmQgdGhlIHRhZyBpdHNlbGYuXG4gICAgZnVuY3Rpb24gaW5Db21tZW50IChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLio/I1xcfS8pKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZVxuICAgICAgZWxzZSBzdHJlYW0uc2tpcFRvRW5kKClcbiAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGV2ZXJ5dGhpbmcgYXMgYSBjb21tZW50IHVudGlsIHRoZSBgYmxvY2tjb21tZW50YCB0YWcgY2xvc2VzLlxuICAgIGZ1bmN0aW9uIGluQmxvY2tDb21tZW50IChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXHslXFxzKmVuZGNvbW1lbnRcXHMqJVxcfS8sIGZhbHNlKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGFnO1xuICAgICAgICBzdHJlYW0ubWF0Y2goXCJ7JVwiKTtcbiAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9rZW5CYXNlfTtcbiAgICAgIH0sXG4gICAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfSxcbiAgICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcInslIGNvbW1lbnQgJX1cIixcbiAgICAgIGJsb2NrQ29tbWVudEVuZDogXCJ7JSBlbmRjb21tZW50ICV9XCJcbiAgICB9O1xuICB9KTtcblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJkamFuZ29cIiwgZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgdmFyIGh0bWxCYXNlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJ0ZXh0L2h0bWxcIik7XG4gICAgdmFyIGRqYW5nb0lubmVyID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJkamFuZ286aW5uZXJcIik7XG4gICAgcmV0dXJuIENvZGVNaXJyb3Iub3ZlcmxheU1vZGUoaHRtbEJhc2UsIGRqYW5nb0lubmVyKTtcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWRqYW5nb1wiLCBcImRqYW5nb1wiKTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVTaW1wbGVNb2RlID0gZnVuY3Rpb24obmFtZSwgc3RhdGVzKSB7XG4gICAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKG5hbWUsIGZ1bmN0aW9uKGNvbmZpZykge1xuICAgICAgcmV0dXJuIENvZGVNaXJyb3Iuc2ltcGxlTW9kZShjb25maWcsIHN0YXRlcyk7XG4gICAgfSk7XG4gIH07XG5cbiAgQ29kZU1pcnJvci5zaW1wbGVNb2RlID0gZnVuY3Rpb24oY29uZmlnLCBzdGF0ZXMpIHtcbiAgICBlbnN1cmVTdGF0ZShzdGF0ZXMsIFwic3RhcnRcIik7XG4gICAgdmFyIHN0YXRlc18gPSB7fSwgbWV0YSA9IHN0YXRlcy5tZXRhIHx8IHt9LCBoYXNJbmRlbnRhdGlvbiA9IGZhbHNlO1xuICAgIGZvciAodmFyIHN0YXRlIGluIHN0YXRlcykgaWYgKHN0YXRlICE9IG1ldGEgJiYgc3RhdGVzLmhhc093blByb3BlcnR5KHN0YXRlKSkge1xuICAgICAgdmFyIGxpc3QgPSBzdGF0ZXNfW3N0YXRlXSA9IFtdLCBvcmlnID0gc3RhdGVzW3N0YXRlXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JpZy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZGF0YSA9IG9yaWdbaV07XG4gICAgICAgIGxpc3QucHVzaChuZXcgUnVsZShkYXRhLCBzdGF0ZXMpKTtcbiAgICAgICAgaWYgKGRhdGEuaW5kZW50IHx8IGRhdGEuZGVkZW50KSBoYXNJbmRlbnRhdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBtb2RlID0ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7c3RhdGU6IFwic3RhcnRcIiwgcGVuZGluZzogbnVsbCxcbiAgICAgICAgICAgICAgICBsb2NhbDogbnVsbCwgbG9jYWxTdGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICBpbmRlbnQ6IGhhc0luZGVudGF0aW9uID8gW10gOiBudWxsfTtcbiAgICAgIH0sXG4gICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICAgIHZhciBzID0ge3N0YXRlOiBzdGF0ZS5zdGF0ZSwgcGVuZGluZzogc3RhdGUucGVuZGluZyxcbiAgICAgICAgICAgICAgICAgbG9jYWw6IHN0YXRlLmxvY2FsLCBsb2NhbFN0YXRlOiBudWxsLFxuICAgICAgICAgICAgICAgICBpbmRlbnQ6IHN0YXRlLmluZGVudCAmJiBzdGF0ZS5pbmRlbnQuc2xpY2UoMCl9O1xuICAgICAgICBpZiAoc3RhdGUubG9jYWxTdGF0ZSlcbiAgICAgICAgICBzLmxvY2FsU3RhdGUgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShzdGF0ZS5sb2NhbC5tb2RlLCBzdGF0ZS5sb2NhbFN0YXRlKTtcbiAgICAgICAgaWYgKHN0YXRlLnN0YWNrKVxuICAgICAgICAgIHMuc3RhY2sgPSBzdGF0ZS5zdGFjay5zbGljZSgwKTtcbiAgICAgICAgZm9yICh2YXIgcGVycyA9IHN0YXRlLnBlcnNpc3RlbnRTdGF0ZXM7IHBlcnM7IHBlcnMgPSBwZXJzLm5leHQpXG4gICAgICAgICAgcy5wZXJzaXN0ZW50U3RhdGVzID0ge21vZGU6IHBlcnMubW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlYzogcGVycy5zcGVjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogcGVycy5zdGF0ZSA9PSBzdGF0ZS5sb2NhbFN0YXRlID8gcy5sb2NhbFN0YXRlIDogQ29kZU1pcnJvci5jb3B5U3RhdGUocGVycy5tb2RlLCBwZXJzLnN0YXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogcy5wZXJzaXN0ZW50U3RhdGVzfTtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgICB9LFxuICAgICAgdG9rZW46IHRva2VuRnVuY3Rpb24oc3RhdGVzXywgY29uZmlnKSxcbiAgICAgIGlubmVyTW9kZTogZnVuY3Rpb24oc3RhdGUpIHsgcmV0dXJuIHN0YXRlLmxvY2FsICYmIHttb2RlOiBzdGF0ZS5sb2NhbC5tb2RlLCBzdGF0ZTogc3RhdGUubG9jYWxTdGF0ZX07IH0sXG4gICAgICBpbmRlbnQ6IGluZGVudEZ1bmN0aW9uKHN0YXRlc18sIG1ldGEpXG4gICAgfTtcbiAgICBpZiAobWV0YSkgZm9yICh2YXIgcHJvcCBpbiBtZXRhKSBpZiAobWV0YS5oYXNPd25Qcm9wZXJ0eShwcm9wKSlcbiAgICAgIG1vZGVbcHJvcF0gPSBtZXRhW3Byb3BdO1xuICAgIHJldHVybiBtb2RlO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGVuc3VyZVN0YXRlKHN0YXRlcywgbmFtZSkge1xuICAgIGlmICghc3RhdGVzLmhhc093blByb3BlcnR5KG5hbWUpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5kZWZpbmVkIHN0YXRlIFwiICsgbmFtZSArIFwiIGluIHNpbXBsZSBtb2RlXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9SZWdleCh2YWwsIGNhcmV0KSB7XG4gICAgaWYgKCF2YWwpIHJldHVybiAvKD86KS87XG4gICAgdmFyIGZsYWdzID0gXCJcIjtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBpZiAodmFsLmlnbm9yZUNhc2UpIGZsYWdzID0gXCJpXCI7XG4gICAgICB2YWwgPSB2YWwuc291cmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWwgPSBTdHJpbmcodmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoKGNhcmV0ID09PSBmYWxzZSA/IFwiXCIgOiBcIl5cIikgKyBcIig/OlwiICsgdmFsICsgXCIpXCIsIGZsYWdzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzVG9rZW4odmFsKSB7XG4gICAgaWYgKCF2YWwpIHJldHVybiBudWxsO1xuICAgIGlmICh2YWwuYXBwbHkpIHJldHVybiB2YWxcbiAgICBpZiAodHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiKSByZXR1cm4gdmFsLnJlcGxhY2UoL1xcLi9nLCBcIiBcIik7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzdWx0LnB1c2godmFsW2ldICYmIHZhbFtpXS5yZXBsYWNlKC9cXC4vZywgXCIgXCIpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gUnVsZShkYXRhLCBzdGF0ZXMpIHtcbiAgICBpZiAoZGF0YS5uZXh0IHx8IGRhdGEucHVzaCkgZW5zdXJlU3RhdGUoc3RhdGVzLCBkYXRhLm5leHQgfHwgZGF0YS5wdXNoKTtcbiAgICB0aGlzLnJlZ2V4ID0gdG9SZWdleChkYXRhLnJlZ2V4KTtcbiAgICB0aGlzLnRva2VuID0gYXNUb2tlbihkYXRhLnRva2VuKTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5GdW5jdGlvbihzdGF0ZXMsIGNvbmZpZykge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RhdGUucGVuZGluZykge1xuICAgICAgICB2YXIgcGVuZCA9IHN0YXRlLnBlbmRpbmcuc2hpZnQoKTtcbiAgICAgICAgaWYgKHN0YXRlLnBlbmRpbmcubGVuZ3RoID09IDApIHN0YXRlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICBzdHJlYW0ucG9zICs9IHBlbmQudGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiBwZW5kLnRva2VuO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUubG9jYWwpIHtcbiAgICAgICAgaWYgKHN0YXRlLmxvY2FsLmVuZCAmJiBzdHJlYW0ubWF0Y2goc3RhdGUubG9jYWwuZW5kKSkge1xuICAgICAgICAgIHZhciB0b2sgPSBzdGF0ZS5sb2NhbC5lbmRUb2tlbiB8fCBudWxsO1xuICAgICAgICAgIHN0YXRlLmxvY2FsID0gc3RhdGUubG9jYWxTdGF0ZSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIHRvaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgdG9rID0gc3RhdGUubG9jYWwubW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmxvY2FsU3RhdGUpLCBtO1xuICAgICAgICAgIGlmIChzdGF0ZS5sb2NhbC5lbmRTY2FuICYmIChtID0gc3RhdGUubG9jYWwuZW5kU2Nhbi5leGVjKHN0cmVhbS5jdXJyZW50KCkpKSlcbiAgICAgICAgICAgIHN0cmVhbS5wb3MgPSBzdHJlYW0uc3RhcnQgKyBtLmluZGV4O1xuICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGN1clN0YXRlID0gc3RhdGVzW3N0YXRlLnN0YXRlXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3VyU3RhdGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJ1bGUgPSBjdXJTdGF0ZVtpXTtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSAoIXJ1bGUuZGF0YS5zb2wgfHwgc3RyZWFtLnNvbCgpKSAmJiBzdHJlYW0ubWF0Y2gocnVsZS5yZWdleCk7XG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgaWYgKHJ1bGUuZGF0YS5uZXh0KSB7XG4gICAgICAgICAgICBzdGF0ZS5zdGF0ZSA9IHJ1bGUuZGF0YS5uZXh0O1xuICAgICAgICAgIH0gZWxzZSBpZiAocnVsZS5kYXRhLnB1c2gpIHtcbiAgICAgICAgICAgIChzdGF0ZS5zdGFjayB8fCAoc3RhdGUuc3RhY2sgPSBbXSkpLnB1c2goc3RhdGUuc3RhdGUpO1xuICAgICAgICAgICAgc3RhdGUuc3RhdGUgPSBydWxlLmRhdGEucHVzaDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUuZGF0YS5wb3AgJiYgc3RhdGUuc3RhY2sgJiYgc3RhdGUuc3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGF0ZS5zdGF0ZSA9IHN0YXRlLnN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChydWxlLmRhdGEubW9kZSlcbiAgICAgICAgICAgIGVudGVyTG9jYWxNb2RlKGNvbmZpZywgc3RhdGUsIHJ1bGUuZGF0YS5tb2RlLCBydWxlLnRva2VuKTtcbiAgICAgICAgICBpZiAocnVsZS5kYXRhLmluZGVudClcbiAgICAgICAgICAgIHN0YXRlLmluZGVudC5wdXNoKHN0cmVhbS5pbmRlbnRhdGlvbigpICsgY29uZmlnLmluZGVudFVuaXQpO1xuICAgICAgICAgIGlmIChydWxlLmRhdGEuZGVkZW50KVxuICAgICAgICAgICAgc3RhdGUuaW5kZW50LnBvcCgpO1xuICAgICAgICAgIHZhciB0b2tlbiA9IHJ1bGUudG9rZW5cbiAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4uYXBwbHkpIHRva2VuID0gdG9rZW4obWF0Y2hlcylcbiAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAyICYmIHJ1bGUudG9rZW4gJiYgdHlwZW9mIHJ1bGUudG9rZW4gIT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgc3RhdGUucGVuZGluZyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDI7IGogPCBtYXRjaGVzLmxlbmd0aDsgaisrKVxuICAgICAgICAgICAgICBpZiAobWF0Y2hlc1tqXSlcbiAgICAgICAgICAgICAgICBzdGF0ZS5wZW5kaW5nLnB1c2goe3RleHQ6IG1hdGNoZXNbal0sIHRva2VuOiBydWxlLnRva2VuW2ogLSAxXX0pO1xuICAgICAgICAgICAgc3RyZWFtLmJhY2tVcChtYXRjaGVzWzBdLmxlbmd0aCAtIChtYXRjaGVzWzFdID8gbWF0Y2hlc1sxXS5sZW5ndGggOiAwKSk7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW5bMF07XG4gICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiAmJiB0b2tlbi5qb2luKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW5bMF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY21wKGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFhIHx8IHR5cGVvZiBhICE9IFwib2JqZWN0XCIgfHwgIWIgfHwgdHlwZW9mIGIgIT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBwcm9wcyA9IDA7XG4gICAgZm9yICh2YXIgcHJvcCBpbiBhKSBpZiAoYS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgaWYgKCFiLmhhc093blByb3BlcnR5KHByb3ApIHx8ICFjbXAoYVtwcm9wXSwgYltwcm9wXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHByb3BzKys7XG4gICAgfVxuICAgIGZvciAodmFyIHByb3AgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocHJvcCkpIHByb3BzLS07XG4gICAgcmV0dXJuIHByb3BzID09IDA7XG4gIH1cblxuICBmdW5jdGlvbiBlbnRlckxvY2FsTW9kZShjb25maWcsIHN0YXRlLCBzcGVjLCB0b2tlbikge1xuICAgIHZhciBwZXJzO1xuICAgIGlmIChzcGVjLnBlcnNpc3RlbnQpIGZvciAodmFyIHAgPSBzdGF0ZS5wZXJzaXN0ZW50U3RhdGVzOyBwICYmICFwZXJzOyBwID0gcC5uZXh0KVxuICAgICAgaWYgKHNwZWMuc3BlYyA/IGNtcChzcGVjLnNwZWMsIHAuc3BlYykgOiBzcGVjLm1vZGUgPT0gcC5tb2RlKSBwZXJzID0gcDtcbiAgICB2YXIgbW9kZSA9IHBlcnMgPyBwZXJzLm1vZGUgOiBzcGVjLm1vZGUgfHwgQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgc3BlYy5zcGVjKTtcbiAgICB2YXIgbFN0YXRlID0gcGVycyA/IHBlcnMuc3RhdGUgOiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUobW9kZSk7XG4gICAgaWYgKHNwZWMucGVyc2lzdGVudCAmJiAhcGVycylcbiAgICAgIHN0YXRlLnBlcnNpc3RlbnRTdGF0ZXMgPSB7bW9kZTogbW9kZSwgc3BlYzogc3BlYy5zcGVjLCBzdGF0ZTogbFN0YXRlLCBuZXh0OiBzdGF0ZS5wZXJzaXN0ZW50U3RhdGVzfTtcblxuICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBsU3RhdGU7XG4gICAgc3RhdGUubG9jYWwgPSB7bW9kZTogbW9kZSxcbiAgICAgICAgICAgICAgICAgICBlbmQ6IHNwZWMuZW5kICYmIHRvUmVnZXgoc3BlYy5lbmQpLFxuICAgICAgICAgICAgICAgICAgIGVuZFNjYW46IHNwZWMuZW5kICYmIHNwZWMuZm9yY2VFbmQgIT09IGZhbHNlICYmIHRvUmVnZXgoc3BlYy5lbmQsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICBlbmRUb2tlbjogdG9rZW4gJiYgdG9rZW4uam9pbiA/IHRva2VuW3Rva2VuLmxlbmd0aCAtIDFdIDogdG9rZW59O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5kZXhPZih2YWwsIGFycikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBpZiAoYXJyW2ldID09PSB2YWwpIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5kZW50RnVuY3Rpb24oc3RhdGVzLCBtZXRhKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIsIGxpbmUpIHtcbiAgICAgIGlmIChzdGF0ZS5sb2NhbCAmJiBzdGF0ZS5sb2NhbC5tb2RlLmluZGVudClcbiAgICAgICAgcmV0dXJuIHN0YXRlLmxvY2FsLm1vZGUuaW5kZW50KHN0YXRlLmxvY2FsU3RhdGUsIHRleHRBZnRlciwgbGluZSk7XG4gICAgICBpZiAoc3RhdGUuaW5kZW50ID09IG51bGwgfHwgc3RhdGUubG9jYWwgfHwgbWV0YS5kb250SW5kZW50U3RhdGVzICYmIGluZGV4T2Yoc3RhdGUuc3RhdGUsIG1ldGEuZG9udEluZGVudFN0YXRlcykgPiAtMSlcbiAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcblxuICAgICAgdmFyIHBvcyA9IHN0YXRlLmluZGVudC5sZW5ndGggLSAxLCBydWxlcyA9IHN0YXRlc1tzdGF0ZS5zdGF0ZV07XG4gICAgICBzY2FuOiBmb3IgKDs7KSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgcnVsZSA9IHJ1bGVzW2ldO1xuICAgICAgICAgIGlmIChydWxlLmRhdGEuZGVkZW50ICYmIHJ1bGUuZGF0YS5kZWRlbnRJZkxpbmVTdGFydCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHZhciBtID0gcnVsZS5yZWdleC5leGVjKHRleHRBZnRlcik7XG4gICAgICAgICAgICBpZiAobSAmJiBtWzBdKSB7XG4gICAgICAgICAgICAgIHBvcy0tO1xuICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0IHx8IHJ1bGUucHVzaCkgcnVsZXMgPSBzdGF0ZXNbcnVsZS5uZXh0IHx8IHJ1bGUucHVzaF07XG4gICAgICAgICAgICAgIHRleHRBZnRlciA9IHRleHRBZnRlci5zbGljZShtWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIHNjYW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBvcyA8IDAgPyAwIDogc3RhdGUuaW5kZW50W3Bvc107XG4gICAgfTtcbiAgfVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4vLi4vYWRkb24vbW9kZS9zaW1wbGVcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi8uLi9hZGRvbi9tb2RlL3NpbXBsZVwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIGZyb20gPSBcImZyb21cIjtcbiAgdmFyIGZyb21SZWdleCA9IG5ldyBSZWdFeHAoXCJeKFxcXFxzKilcXFxcYihcIiArIGZyb20gKyBcIilcXFxcYlwiLCBcImlcIik7XG5cbiAgdmFyIHNoZWxscyA9IFtcInJ1blwiLCBcImNtZFwiLCBcImVudHJ5cG9pbnRcIiwgXCJzaGVsbFwiXTtcbiAgdmFyIHNoZWxsc0FzQXJyYXlSZWdleCA9IG5ldyBSZWdFeHAoXCJeKFxcXFxzKikoXCIgKyBzaGVsbHMuam9pbignfCcpICsgXCIpKFxcXFxzK1xcXFxbKVwiLCBcImlcIik7XG5cbiAgdmFyIGV4cG9zZSA9IFwiZXhwb3NlXCI7XG4gIHZhciBleHBvc2VSZWdleCA9IG5ldyBSZWdFeHAoXCJeKFxcXFxzKikoXCIgKyBleHBvc2UgKyBcIikoXFxcXHMrKVwiLCBcImlcIik7XG5cbiAgdmFyIG90aGVycyA9IFtcbiAgICBcImFyZ1wiLCBcImZyb21cIiwgXCJtYWludGFpbmVyXCIsIFwibGFiZWxcIiwgXCJlbnZcIixcbiAgICBcImFkZFwiLCBcImNvcHlcIiwgXCJ2b2x1bWVcIiwgXCJ1c2VyXCIsXG4gICAgXCJ3b3JrZGlyXCIsIFwib25idWlsZFwiLCBcInN0b3BzaWduYWxcIiwgXCJoZWFsdGhjaGVja1wiLCBcInNoZWxsXCJcbiAgXTtcblxuICAvLyBDb2xsZWN0IGFsbCBEb2NrZXJmaWxlIGRpcmVjdGl2ZXNcbiAgdmFyIGluc3RydWN0aW9ucyA9IFtmcm9tLCBleHBvc2VdLmNvbmNhdChzaGVsbHMpLmNvbmNhdChvdGhlcnMpLFxuICAgICAgaW5zdHJ1Y3Rpb25SZWdleCA9IFwiKFwiICsgaW5zdHJ1Y3Rpb25zLmpvaW4oJ3wnKSArIFwiKVwiLFxuICAgICAgaW5zdHJ1Y3Rpb25Pbmx5TGluZSA9IG5ldyBSZWdFeHAoXCJeKFxcXFxzKilcIiArIGluc3RydWN0aW9uUmVnZXggKyBcIihcXFxccyopKCMuKik/JFwiLCBcImlcIiksXG4gICAgICBpbnN0cnVjdGlvbldpdGhBcmd1bWVudHMgPSBuZXcgUmVnRXhwKFwiXihcXFxccyopXCIgKyBpbnN0cnVjdGlvblJlZ2V4ICsgXCIoXFxcXHMrKVwiLCBcImlcIik7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVTaW1wbGVNb2RlKFwiZG9ja2VyZmlsZVwiLCB7XG4gICAgc3RhcnQ6IFtcbiAgICAgIC8vIEJsb2NrIGNvbW1lbnQ6IFRoaXMgaXMgYSBsaW5lIHN0YXJ0aW5nIHdpdGggYSBjb21tZW50XG4gICAgICB7XG4gICAgICAgIHJlZ2V4OiAvXlxccyojLiokLyxcbiAgICAgICAgc29sOiB0cnVlLFxuICAgICAgICB0b2tlbjogXCJjb21tZW50XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJlZ2V4OiBmcm9tUmVnZXgsXG4gICAgICAgIHRva2VuOiBbbnVsbCwgXCJrZXl3b3JkXCJdLFxuICAgICAgICBzb2w6IHRydWUsXG4gICAgICAgIG5leHQ6IFwiZnJvbVwiXG4gICAgICB9LFxuICAgICAgLy8gSGlnaGxpZ2h0IGFuIGluc3RydWN0aW9uIHdpdGhvdXQgYW55IGFyZ3VtZW50cyAoZm9yIGNvbnZlbmllbmNlKVxuICAgICAge1xuICAgICAgICByZWdleDogaW5zdHJ1Y3Rpb25Pbmx5TGluZSxcbiAgICAgICAgdG9rZW46IFtudWxsLCBcImtleXdvcmRcIiwgbnVsbCwgXCJlcnJvclwiXSxcbiAgICAgICAgc29sOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByZWdleDogc2hlbGxzQXNBcnJheVJlZ2V4LFxuICAgICAgICB0b2tlbjogW251bGwsIFwia2V5d29yZFwiLCBudWxsXSxcbiAgICAgICAgc29sOiB0cnVlLFxuICAgICAgICBuZXh0OiBcImFycmF5XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJlZ2V4OiBleHBvc2VSZWdleCxcbiAgICAgICAgdG9rZW46IFtudWxsLCBcImtleXdvcmRcIiwgbnVsbF0sXG4gICAgICAgIHNvbDogdHJ1ZSxcbiAgICAgICAgbmV4dDogXCJleHBvc2VcIlxuICAgICAgfSxcbiAgICAgIC8vIEhpZ2hsaWdodCBhbiBpbnN0cnVjdGlvbiBmb2xsb3dlZCBieSBhcmd1bWVudHNcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IGluc3RydWN0aW9uV2l0aEFyZ3VtZW50cyxcbiAgICAgICAgdG9rZW46IFtudWxsLCBcImtleXdvcmRcIiwgbnVsbF0sXG4gICAgICAgIHNvbDogdHJ1ZSxcbiAgICAgICAgbmV4dDogXCJhcmd1bWVudHNcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IC8uLyxcbiAgICAgICAgdG9rZW46IG51bGxcbiAgICAgIH1cbiAgICBdLFxuICAgIGZyb206IFtcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IC9cXHMqJC8sXG4gICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICBuZXh0OiBcInN0YXJ0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIExpbmUgY29tbWVudCB3aXRob3V0IGluc3RydWN0aW9uIGFyZ3VtZW50cyBpcyBhbiBlcnJvclxuICAgICAgICByZWdleDogLyhcXHMqKSgjLiopJC8sXG4gICAgICAgIHRva2VuOiBbbnVsbCwgXCJlcnJvclwiXSxcbiAgICAgICAgbmV4dDogXCJzdGFydFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByZWdleDogLyhcXHMqXFxTK1xccyspKGFzKS9pLFxuICAgICAgICB0b2tlbjogW251bGwsIFwia2V5d29yZFwiXSxcbiAgICAgICAgbmV4dDogXCJzdGFydFwiXG4gICAgICB9LFxuICAgICAgLy8gRmFpbCBzYWZlIHJldHVybiB0byBzdGFydFxuICAgICAge1xuICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgbmV4dDogXCJzdGFydFwiXG4gICAgICB9XG4gICAgXSxcbiAgICBzaW5nbGU6IFtcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IC8oPzpbXlxcXFwnXXxcXFxcLikvLFxuICAgICAgICB0b2tlbjogXCJzdHJpbmdcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IC8nLyxcbiAgICAgICAgdG9rZW46IFwic3RyaW5nXCIsXG4gICAgICAgIHBvcDogdHJ1ZVxuICAgICAgfVxuICAgIF0sXG4gICAgZG91YmxlOiBbXG4gICAgICB7XG4gICAgICAgIHJlZ2V4OiAvKD86W15cXFxcXCJdfFxcXFwuKS8sXG4gICAgICAgIHRva2VuOiBcInN0cmluZ1wiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByZWdleDogL1wiLyxcbiAgICAgICAgdG9rZW46IFwic3RyaW5nXCIsXG4gICAgICAgIHBvcDogdHJ1ZVxuICAgICAgfVxuICAgIF0sXG4gICAgYXJyYXk6IFtcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IC9cXF0vLFxuICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgbmV4dDogXCJzdGFydFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByZWdleDogL1wiKD86W15cXFxcXCJdfFxcXFwuKSpcIj8vLFxuICAgICAgICB0b2tlbjogXCJzdHJpbmdcIlxuICAgICAgfVxuICAgIF0sXG4gICAgZXhwb3NlOiBbXG4gICAgICB7XG4gICAgICAgIHJlZ2V4OiAvXFxkKyQvLFxuICAgICAgICB0b2tlbjogXCJudW1iZXJcIixcbiAgICAgICAgbmV4dDogXCJzdGFydFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByZWdleDogL1teXFxkXSskLyxcbiAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgIG5leHQ6IFwic3RhcnRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IC9cXGQrLyxcbiAgICAgICAgdG9rZW46IFwibnVtYmVyXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJlZ2V4OiAvW15cXGRdKy8sXG4gICAgICAgIHRva2VuOiBudWxsXG4gICAgICB9LFxuICAgICAgLy8gRmFpbCBzYWZlIHJldHVybiB0byBzdGFydFxuICAgICAge1xuICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgbmV4dDogXCJzdGFydFwiXG4gICAgICB9XG4gICAgXSxcbiAgICBhcmd1bWVudHM6IFtcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IC9eXFxzKiMuKiQvLFxuICAgICAgICBzb2w6IHRydWUsXG4gICAgICAgIHRva2VuOiBcImNvbW1lbnRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IC9cIig/OlteXFxcXFwiXXxcXFxcLikqXCI/JC8sXG4gICAgICAgIHRva2VuOiBcInN0cmluZ1wiLFxuICAgICAgICBuZXh0OiBcInN0YXJ0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJlZ2V4OiAvXCIvLFxuICAgICAgICB0b2tlbjogXCJzdHJpbmdcIixcbiAgICAgICAgcHVzaDogXCJkb3VibGVcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IC8nKD86W15cXFxcJ118XFxcXC4pKic/JC8sXG4gICAgICAgIHRva2VuOiBcInN0cmluZ1wiLFxuICAgICAgICBuZXh0OiBcInN0YXJ0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJlZ2V4OiAvJy8sXG4gICAgICAgIHRva2VuOiBcInN0cmluZ1wiLFxuICAgICAgICBwdXNoOiBcInNpbmdsZVwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByZWdleDogL1teI1wiJ10rW1xcXFxgXSQvLFxuICAgICAgICB0b2tlbjogbnVsbFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IC9bXiNcIiddKyQvLFxuICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgbmV4dDogXCJzdGFydFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByZWdleDogL1teI1wiJ10rLyxcbiAgICAgICAgdG9rZW46IG51bGxcbiAgICAgIH0sXG4gICAgICAvLyBGYWlsIHNhZmUgcmV0dXJuIHRvIHN0YXJ0XG4gICAgICB7XG4gICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICBuZXh0OiBcInN0YXJ0XCJcbiAgICAgIH1cbiAgICBdLFxuICAgIG1ldGE6IHtcbiAgICAgIGxpbmVDb21tZW50OiBcIiNcIlxuICAgIH1cbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWRvY2tlcmZpbGVcIiwgXCJkb2NrZXJmaWxlXCIpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vKlxuICBEVEQgbW9kZVxuICBQb3J0ZWQgdG8gQ29kZU1pcnJvciBieSBQZXRlciBLcm9vbiA8cGxha3Jvb25AZ21haWwuY29tPlxuICBSZXBvcnQgYnVncy9pc3N1ZXMgaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL2NvZGVtaXJyb3IvQ29kZU1pcnJvci9pc3N1ZXNcbiAgR2l0SHViOiBAcGV0ZXJrcm9vblxuKi9cblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJkdGRcIiwgZnVuY3Rpb24oY29uZmlnKSB7XG4gIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQsIHR5cGU7XG4gIGZ1bmN0aW9uIHJldChzdHlsZSwgdHApIHt0eXBlID0gdHA7IHJldHVybiBzdHlsZTt9XG5cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgaWYgKGNoID09IFwiPFwiICYmIHN0cmVhbS5lYXQoXCIhXCIpICkge1xuICAgICAgaWYgKHN0cmVhbS5lYXRXaGlsZSgvW1xcLV0vKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU0dNTENvbW1lbnQ7XG4gICAgICAgIHJldHVybiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0V2hpbGUoL1tcXHddLykpIHJldHVybiByZXQoXCJrZXl3b3JkXCIsIFwiZG9pbmRlbnRcIik7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIjxcIiAmJiBzdHJlYW0uZWF0KFwiP1wiKSkgeyAvL3htbCBkZWNsYXJhdGlvblxuICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkJsb2NrKFwibWV0YVwiLCBcIj8+XCIpO1xuICAgICAgcmV0dXJuIHJldChcIm1ldGFcIiwgY2gpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIjXCIgJiYgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XS8pKSByZXR1cm4gcmV0KFwiYXRvbVwiLCBcInRhZ1wiKTtcbiAgICBlbHNlIGlmIChjaCA9PSBcInxcIikgcmV0dXJuIHJldChcImtleXdvcmRcIiwgXCJzZXBlcmF0b3JcIik7XG4gICAgZWxzZSBpZiAoY2gubWF0Y2goL1tcXChcXClcXFtcXF1cXC1cXC4sXFwrXFw/Pl0vKSkgcmV0dXJuIHJldChudWxsLCBjaCk7Ly9pZihjaCA9PT0gXCI+XCIpIHJldHVybiByZXQobnVsbCwgXCJlbmR0YWdcIik7IGVsc2VcbiAgICBlbHNlIGlmIChjaC5tYXRjaCgvW1xcW1xcXV0vKSkgcmV0dXJuIHJldChcInJ1bGVcIiwgY2gpO1xuICAgIGVsc2UgaWYgKGNoID09IFwiXFxcIlwiIHx8IGNoID09IFwiJ1wiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXRXaGlsZSgvW2EtekEtWlxcP1xcK1xcZF0vKSkge1xuICAgICAgdmFyIHNjID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgIGlmKCBzYy5zdWJzdHIoc2MubGVuZ3RoLTEsc2MubGVuZ3RoKS5tYXRjaCgvXFw/fFxcKy8pICE9PSBudWxsIClzdHJlYW0uYmFja1VwKDEpO1xuICAgICAgcmV0dXJuIHJldChcInRhZ1wiLCBcInRhZ1wiKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiJVwiIHx8IGNoID09IFwiKlwiICkgcmV0dXJuIHJldChcIm51bWJlclwiLCBcIm51bWJlclwiKTtcbiAgICBlbHNlIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcXFxcXC1fJS57LF0vKTtcbiAgICAgIHJldHVybiByZXQobnVsbCwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGRhc2hlcyA9IDAsIGNoO1xuICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICBpZiAoZGFzaGVzID49IDIgJiYgY2ggPT0gXCI+XCIpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGFzaGVzID0gKGNoID09IFwiLVwiKSA/IGRhc2hlcyArIDEgOiAwO1xuICAgIH1cbiAgICByZXR1cm4gcmV0KFwiY29tbWVudFwiLCBcImNvbW1lbnRcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBjaDtcbiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQoXCJzdHJpbmdcIiwgXCJ0YWdcIik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluQmxvY2soc3R5bGUsIHRlcm1pbmF0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCh0ZXJtaW5hdG9yKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkge1xuICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9rZW5CYXNlLFxuICAgICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsXG4gICAgICAgICAgICAgIHN0YWNrOiBbXX07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG5cbiAgICAgIHZhciBjb250ZXh0ID0gc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdO1xuICAgICAgaWYgKHN0cmVhbS5jdXJyZW50KCkgPT0gXCJbXCIgfHwgdHlwZSA9PT0gXCJkb2luZGVudFwiIHx8IHR5cGUgPT0gXCJbXCIpIHN0YXRlLnN0YWNrLnB1c2goXCJydWxlXCIpO1xuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gXCJlbmR0YWdcIikgc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID0gXCJlbmR0YWdcIjtcbiAgICAgIGVsc2UgaWYgKHN0cmVhbS5jdXJyZW50KCkgPT0gXCJdXCIgfHwgdHlwZSA9PSBcIl1cIiB8fCAodHlwZSA9PSBcIj5cIiAmJiBjb250ZXh0ID09IFwicnVsZVwiKSkgc3RhdGUuc3RhY2sucG9wKCk7XG4gICAgICBlbHNlIGlmICh0eXBlID09IFwiW1wiKSBzdGF0ZS5zdGFjay5wdXNoKFwiW1wiKTtcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgICB2YXIgbiA9IHN0YXRlLnN0YWNrLmxlbmd0aDtcblxuICAgICAgaWYoIHRleHRBZnRlci5tYXRjaCgvXFxdXFxzK3xcXF0vKSApbj1uLTE7XG4gICAgICBlbHNlIGlmKHRleHRBZnRlci5zdWJzdHIodGV4dEFmdGVyLmxlbmd0aC0xLCB0ZXh0QWZ0ZXIubGVuZ3RoKSA9PT0gXCI+XCIpe1xuICAgICAgICBpZih0ZXh0QWZ0ZXIuc3Vic3RyKDAsMSkgPT09IFwiPFwiKSB7fVxuICAgICAgICBlbHNlIGlmKCB0eXBlID09IFwiZG9pbmRlbnRcIiAmJiB0ZXh0QWZ0ZXIubGVuZ3RoID4gMSApIHt9XG4gICAgICAgIGVsc2UgaWYoIHR5cGUgPT0gXCJkb2luZGVudFwiKW4tLTtcbiAgICAgICAgZWxzZSBpZiggdHlwZSA9PSBcIj5cIiAmJiB0ZXh0QWZ0ZXIubGVuZ3RoID4gMSkge31cbiAgICAgICAgZWxzZSBpZiggdHlwZSA9PSBcInRhZ1wiICYmIHRleHRBZnRlciAhPT0gXCI+XCIpIHt9XG4gICAgICAgIGVsc2UgaWYoIHR5cGUgPT0gXCJ0YWdcIiAmJiBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPT0gXCJydWxlXCIpbi0tO1xuICAgICAgICBlbHNlIGlmKCB0eXBlID09IFwidGFnXCIpbisrO1xuICAgICAgICBlbHNlIGlmKCB0ZXh0QWZ0ZXIgPT09IFwiPlwiICYmIHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXSA9PSBcInJ1bGVcIiAmJiB0eXBlID09PSBcIj5cIiluLS07XG4gICAgICAgIGVsc2UgaWYoIHRleHRBZnRlciA9PT0gXCI+XCIgJiYgc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID09IFwicnVsZVwiKSB7fVxuICAgICAgICBlbHNlIGlmKCB0ZXh0QWZ0ZXIuc3Vic3RyKDAsMSkgIT09IFwiPFwiICYmIHRleHRBZnRlci5zdWJzdHIoMCwxKSA9PT0gXCI+XCIgKW49bi0xO1xuICAgICAgICBlbHNlIGlmKCB0ZXh0QWZ0ZXIgPT09IFwiPlwiKSB7fVxuICAgICAgICBlbHNlIG49bi0xO1xuICAgICAgICAvL292ZXIgcnVsZSB0aGVtIGFsbFxuICAgICAgICBpZih0eXBlID09IG51bGwgfHwgdHlwZSA9PSBcIl1cIiluLS07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGF0ZS5iYXNlSW5kZW50ICsgbiAqIGluZGVudFVuaXQ7XG4gICAgfSxcblxuICAgIGVsZWN0cmljQ2hhcnM6IFwiXT5cIlxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3htbC1kdGRcIiwgXCJkdGRcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBmb3JFYWNoKGFyciwgZikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgZihhcnJbaV0sIGkpXG59XG5mdW5jdGlvbiBzb21lKGFyciwgZikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgaWYgKGYoYXJyW2ldLCBpKSkgcmV0dXJuIHRydWVcbiAgcmV0dXJuIGZhbHNlXG59XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImR5bGFuXCIsIGZ1bmN0aW9uKF9jb25maWcpIHtcbiAgLy8gV29yZHNcbiAgdmFyIHdvcmRzID0ge1xuICAgIC8vIFdvcmRzIHRoYXQgaW50cm9kdWNlIHVubmFtZWQgZGVmaW5pdGlvbnMgbGlrZSBcImRlZmluZSBpbnRlcmZhY2VcIlxuICAgIHVubmFtZWREZWZpbml0aW9uOiBbXCJpbnRlcmZhY2VcIl0sXG5cbiAgICAvLyBXb3JkcyB0aGF0IGludHJvZHVjZSBzaW1wbGUgbmFtZWQgZGVmaW5pdGlvbnMgbGlrZSBcImRlZmluZSBsaWJyYXJ5XCJcbiAgICBuYW1lZERlZmluaXRpb246IFtcIm1vZHVsZVwiLCBcImxpYnJhcnlcIiwgXCJtYWNyb1wiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiQy1zdHJ1Y3RcIiwgXCJDLXVuaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJDLWZ1bmN0aW9uXCIsIFwiQy1jYWxsYWJsZS13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgIF0sXG5cbiAgICAvLyBXb3JkcyB0aGF0IGludHJvZHVjZSB0eXBlIGRlZmluaXRpb25zIGxpa2UgXCJkZWZpbmUgY2xhc3NcIi5cbiAgICAvLyBUaGVzZSBhcmUgYWxzbyBwYXJhbWV0ZXJpemVkIGxpa2UgXCJkZWZpbmUgbWV0aG9kXCIgYW5kIGFyZVxuICAgIC8vIGFwcGVuZGVkIHRvIG90aGVyUGFyYW1ldGVyaXplZERlZmluaXRpb25Xb3Jkc1xuICAgIHR5cGVQYXJhbWV0ZXJpemVkRGVmaW5pdGlvbjogW1wiY2xhc3NcIiwgXCJDLXN1YnR5cGVcIiwgXCJDLW1hcHBlZC1zdWJ0eXBlXCJdLFxuXG4gICAgLy8gV29yZHMgdGhhdCBpbnRyb2R1Y2UgdHJpY2tpZXIgZGVmaW5pdGlvbnMgbGlrZSBcImRlZmluZSBtZXRob2RcIi5cbiAgICAvLyBUaGVzZSByZXF1aXJlIHNwZWNpYWwgZGVmaW5pdGlvbnMgdG8gYmUgYWRkZWQgdG8gc3RhcnRFeHByZXNzaW9uc1xuICAgIG90aGVyUGFyYW1ldGVyaXplZERlZmluaXRpb246IFtcIm1ldGhvZFwiLCBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQy12YXJpYWJsZVwiLCBcIkMtYWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcblxuICAgIC8vIFdvcmRzIHRoYXQgaW50cm9kdWNlIG1vZHVsZSBjb25zdGFudCBkZWZpbml0aW9ucy5cbiAgICAvLyBUaGVzZSBtdXN0IGFsc28gYmUgc2ltcGxlIGRlZmluaXRpb25zIGFuZCBhcmVcbiAgICAvLyBhcHBlbmRlZCB0byBvdGhlclNpbXBsZURlZmluaXRpb25Xb3Jkc1xuICAgIGNvbnN0YW50U2ltcGxlRGVmaW5pdGlvbjogW1wiY29uc3RhbnRcIl0sXG5cbiAgICAvLyBXb3JkcyB0aGF0IGludHJvZHVjZSBtb2R1bGUgdmFyaWFibGUgZGVmaW5pdGlvbnMuXG4gICAgLy8gVGhlc2UgbXVzdCBhbHNvIGJlIHNpbXBsZSBkZWZpbml0aW9ucyBhbmQgYXJlXG4gICAgLy8gYXBwZW5kZWQgdG8gb3RoZXJTaW1wbGVEZWZpbml0aW9uV29yZHNcbiAgICB2YXJpYWJsZVNpbXBsZURlZmluaXRpb246IFtcInZhcmlhYmxlXCJdLFxuXG4gICAgLy8gT3RoZXIgd29yZHMgdGhhdCBpbnRyb2R1Y2Ugc2ltcGxlIGRlZmluaXRpb25zXG4gICAgLy8gKHdpdGhvdXQgaW1wbGljaXQgYm9kaWVzKS5cbiAgICBvdGhlclNpbXBsZURlZmluaXRpb246IFtcImdlbmVyaWNcIiwgXCJkb21haW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkMtcG9pbnRlci10eXBlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuXG4gICAgLy8gV29yZHMgdGhhdCBiZWdpbiBzdGF0ZW1lbnRzIHdpdGggaW1wbGljaXQgYm9kaWVzLlxuICAgIHN0YXRlbWVudDogW1wiaWZcIiwgXCJibG9ja1wiLCBcImJlZ2luXCIsIFwibWV0aG9kXCIsIFwiY2FzZVwiLFxuICAgICAgICAgICAgICAgIFwiZm9yXCIsIFwic2VsZWN0XCIsIFwid2hlblwiLCBcInVubGVzc1wiLCBcInVudGlsXCIsXG4gICAgICAgICAgICAgICAgXCJ3aGlsZVwiLCBcIml0ZXJhdGVcIiwgXCJwcm9maWxpbmdcIiwgXCJkeW5hbWljLWJpbmRcIlxuICAgICAgICAgICAgICAgXSxcblxuICAgIC8vIFBhdHRlcm5zIHRoYXQgYWN0IGFzIHNlcGFyYXRvcnMgaW4gY29tcG91bmQgc3RhdGVtZW50cy5cbiAgICAvLyBUaGlzIG1heSBpbmNsdWRlIGFueSBnZW5lcmFsIHBhdHRlcm4gdGhhdCBtdXN0IGJlIGluZGVudGVkXG4gICAgLy8gc3BlY2lhbGx5LlxuICAgIHNlcGFyYXRvcjogW1wiZmluYWxseVwiLCBcImV4Y2VwdGlvblwiLCBcImNsZWFudXBcIiwgXCJlbHNlXCIsXG4gICAgICAgICAgICAgICAgXCJlbHNlaWZcIiwgXCJhZnRlcndhcmRzXCJcbiAgICAgICAgICAgICAgIF0sXG5cbiAgICAvLyBLZXl3b3JkcyB0aGF0IGRvIG5vdCByZXF1aXJlIHNwZWNpYWwgaW5kZW50YXRpb24gaGFuZGxpbmcsXG4gICAgLy8gYnV0IHdoaWNoIHNob3VsZCBiZSBoaWdobGlnaHRlZFxuICAgIG90aGVyOiBbXCJhYm92ZVwiLCBcImJlbG93XCIsIFwiYnlcIiwgXCJmcm9tXCIsIFwiaGFuZGxlclwiLCBcImluXCIsXG4gICAgICAgICAgICBcImluc3RhbmNlXCIsIFwibGV0XCIsIFwibG9jYWxcIiwgXCJvdGhlcndpc2VcIiwgXCJzbG90XCIsXG4gICAgICAgICAgICBcInN1YmNsYXNzXCIsIFwidGhlblwiLCBcInRvXCIsIFwia2V5ZWQtYnlcIiwgXCJ2aXJ0dWFsXCJcbiAgICAgICAgICAgXSxcblxuICAgIC8vIENvbmRpdGlvbiBzaWduYWxpbmcgZnVuY3Rpb24gY2FsbHNcbiAgICBzaWduYWxpbmdDYWxsczogW1wic2lnbmFsXCIsIFwiZXJyb3JcIiwgXCJjZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtcIiwgXCJjaGVjay10eXBlXCIsIFwiYWJvcnRcIlxuICAgICAgICAgICAgICAgICAgICBdXG4gIH07XG5cbiAgd29yZHNbXCJvdGhlckRlZmluaXRpb25cIl0gPVxuICAgIHdvcmRzW1widW5uYW1lZERlZmluaXRpb25cIl1cbiAgICAuY29uY2F0KHdvcmRzW1wibmFtZWREZWZpbml0aW9uXCJdKVxuICAgIC5jb25jYXQod29yZHNbXCJvdGhlclBhcmFtZXRlcml6ZWREZWZpbml0aW9uXCJdKTtcblxuICB3b3Jkc1tcImRlZmluaXRpb25cIl0gPVxuICAgIHdvcmRzW1widHlwZVBhcmFtZXRlcml6ZWREZWZpbml0aW9uXCJdXG4gICAgLmNvbmNhdCh3b3Jkc1tcIm90aGVyRGVmaW5pdGlvblwiXSk7XG5cbiAgd29yZHNbXCJwYXJhbWV0ZXJpemVkRGVmaW5pdGlvblwiXSA9XG4gICAgd29yZHNbXCJ0eXBlUGFyYW1ldGVyaXplZERlZmluaXRpb25cIl1cbiAgICAuY29uY2F0KHdvcmRzW1wib3RoZXJQYXJhbWV0ZXJpemVkRGVmaW5pdGlvblwiXSk7XG5cbiAgd29yZHNbXCJzaW1wbGVEZWZpbml0aW9uXCJdID1cbiAgICB3b3Jkc1tcImNvbnN0YW50U2ltcGxlRGVmaW5pdGlvblwiXVxuICAgIC5jb25jYXQod29yZHNbXCJ2YXJpYWJsZVNpbXBsZURlZmluaXRpb25cIl0pXG4gICAgLmNvbmNhdCh3b3Jkc1tcIm90aGVyU2ltcGxlRGVmaW5pdGlvblwiXSk7XG5cbiAgd29yZHNbXCJrZXl3b3JkXCJdID1cbiAgICB3b3Jkc1tcInN0YXRlbWVudFwiXVxuICAgIC5jb25jYXQod29yZHNbXCJzZXBhcmF0b3JcIl0pXG4gICAgLmNvbmNhdCh3b3Jkc1tcIm90aGVyXCJdKTtcblxuICAvLyBQYXR0ZXJuc1xuICB2YXIgc3ltYm9sUGF0dGVybiA9IFwiWy1fYS16QS1aPyEqQDw+JCVdK1wiO1xuICB2YXIgc3ltYm9sID0gbmV3IFJlZ0V4cChcIl5cIiArIHN5bWJvbFBhdHRlcm4pO1xuICB2YXIgcGF0dGVybnMgPSB7XG4gICAgLy8gU3ltYm9scyB3aXRoIHNwZWNpYWwgc3ludGF4XG4gICAgc3ltYm9sS2V5d29yZDogc3ltYm9sUGF0dGVybiArIFwiOlwiLFxuICAgIHN5bWJvbENsYXNzOiBcIjxcIiArIHN5bWJvbFBhdHRlcm4gKyBcIj5cIixcbiAgICBzeW1ib2xHbG9iYWw6IFwiXFxcXCpcIiArIHN5bWJvbFBhdHRlcm4gKyBcIlxcXFwqXCIsXG4gICAgc3ltYm9sQ29uc3RhbnQ6IFwiXFxcXCRcIiArIHN5bWJvbFBhdHRlcm5cbiAgfTtcbiAgdmFyIHBhdHRlcm5TdHlsZXMgPSB7XG4gICAgc3ltYm9sS2V5d29yZDogXCJhdG9tXCIsXG4gICAgc3ltYm9sQ2xhc3M6IFwidGFnXCIsXG4gICAgc3ltYm9sR2xvYmFsOiBcInZhcmlhYmxlLTJcIixcbiAgICBzeW1ib2xDb25zdGFudDogXCJ2YXJpYWJsZS0zXCJcbiAgfTtcblxuICAvLyBDb21waWxlIGFsbCBwYXR0ZXJucyB0byByZWd1bGFyIGV4cHJlc3Npb25zXG4gIGZvciAodmFyIHBhdHRlcm5OYW1lIGluIHBhdHRlcm5zKVxuICAgIGlmIChwYXR0ZXJucy5oYXNPd25Qcm9wZXJ0eShwYXR0ZXJuTmFtZSkpXG4gICAgICBwYXR0ZXJuc1twYXR0ZXJuTmFtZV0gPSBuZXcgUmVnRXhwKFwiXlwiICsgcGF0dGVybnNbcGF0dGVybk5hbWVdKTtcblxuICAvLyBOYW1lcyBiZWdpbm5pbmcgXCJ3aXRoLVwiIGFuZCBcIndpdGhvdXQtXCIgYXJlIGNvbW1vbmx5XG4gIC8vIHVzZWQgYXMgc3RhdGVtZW50IG1hY3JvXG4gIHBhdHRlcm5zW1wia2V5d29yZFwiXSA9IFsvXndpdGgoPzpvdXQpPy1bLV9hLXpBLVo/ISpAPD4kJV0rL107XG5cbiAgdmFyIHN0eWxlcyA9IHt9O1xuICBzdHlsZXNbXCJrZXl3b3JkXCJdID0gXCJrZXl3b3JkXCI7XG4gIHN0eWxlc1tcImRlZmluaXRpb25cIl0gPSBcImRlZlwiO1xuICBzdHlsZXNbXCJzaW1wbGVEZWZpbml0aW9uXCJdID0gXCJkZWZcIjtcbiAgc3R5bGVzW1wic2lnbmFsaW5nQ2FsbHNcIl0gPSBcImJ1aWx0aW5cIjtcblxuICAvLyBwcm90ZWN0ZWQgd29yZHMgbG9va3VwIHRhYmxlXG4gIHZhciB3b3JkTG9va3VwID0ge307XG4gIHZhciBzdHlsZUxvb2t1cCA9IHt9O1xuXG4gIGZvckVhY2goW1xuICAgIFwia2V5d29yZFwiLFxuICAgIFwiZGVmaW5pdGlvblwiLFxuICAgIFwic2ltcGxlRGVmaW5pdGlvblwiLFxuICAgIFwic2lnbmFsaW5nQ2FsbHNcIlxuICBdLCBmdW5jdGlvbih0eXBlKSB7XG4gICAgZm9yRWFjaCh3b3Jkc1t0eXBlXSwgZnVuY3Rpb24od29yZCkge1xuICAgICAgd29yZExvb2t1cFt3b3JkXSA9IHR5cGU7XG4gICAgICBzdHlsZUxvb2t1cFt3b3JkXSA9IHN0eWxlc1t0eXBlXTtcbiAgICB9KTtcbiAgfSk7XG5cblxuICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7XG4gICAgc3RhdGUudG9rZW5pemUgPSBmO1xuICAgIHJldHVybiBmKHN0cmVhbSwgc3RhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAvLyBTdHJpbmdcbiAgICB2YXIgY2ggPSBzdHJlYW0ucGVlaygpO1xuICAgIGlmIChjaCA9PSBcIidcIiB8fCBjaCA9PSAnXCInKSB7XG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuU3RyaW5nKGNoLCBcInN0cmluZ1wiKSk7XG4gICAgfVxuICAgIC8vIENvbW1lbnRcbiAgICBlbHNlIGlmIChjaCA9PSBcIi9cIikge1xuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiKlwiKSkge1xuICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5Db21tZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9XG4gICAgICBzdHJlYW0uYmFja1VwKDEpO1xuICAgIH1cbiAgICAvLyBEZWNpbWFsXG4gICAgZWxzZSBpZiAoL1srXFwtXFxkXFwuXS8udGVzdChjaCkpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bKy1dP1swLTldKlxcLlswLTldKihbZXNkeF1bKy1dP1swLTldKyk/L2kpIHx8XG4gICAgICAgICAgc3RyZWFtLm1hdGNoKC9eWystXT9bMC05XSsoW2VzZHhdWystXT9bMC05XSspL2kpIHx8XG4gICAgICAgICAgc3RyZWFtLm1hdGNoKC9eWystXT9cXGQrLykpIHtcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEhhc2hcbiAgICBlbHNlIGlmIChjaCA9PSBcIiNcIikge1xuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIC8vIFN5bWJvbCB3aXRoIHN0cmluZyBzeW50YXhcbiAgICAgIGNoID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgIGlmIChjaCA9PSAnXCInKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZygnXCInLCBcInN0cmluZ1wiKSk7XG4gICAgICB9XG4gICAgICAvLyBCaW5hcnkgbnVtYmVyXG4gICAgICBlbHNlIGlmIChjaCA9PSBcImJcIikge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1swMV0vKTtcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgICAvLyBIZXggbnVtYmVyXG4gICAgICBlbHNlIGlmIChjaCA9PSBcInhcIikge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXGRhLWZdL2kpO1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIC8vIE9jdGFsIG51bWJlclxuICAgICAgZWxzZSBpZiAoY2ggPT0gXCJvXCIpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bMC03XS8pO1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIC8vIFRva2VuIGNvbmNhdGVuYXRpb24gaW4gbWFjcm9zXG4gICAgICBlbHNlIGlmIChjaCA9PSAnIycpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIFwicHVuY3R1YXRpb25cIjtcbiAgICAgIH1cbiAgICAgIC8vIFNlcXVlbmNlIGxpdGVyYWxzXG4gICAgICBlbHNlIGlmICgoY2ggPT0gJ1snKSB8fCAoY2ggPT0gJygnKSkge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gXCJicmFja2V0XCI7XG4gICAgICAvLyBIYXNoIHN5bWJvbFxuICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL2Z8dHxhbGwta2V5c3xpbmNsdWRlfGtleXxuZXh0fHJlc3QvaSkpIHtcbiAgICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bLWEtekEtWl0vKTtcbiAgICAgICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09IFwiflwiKSB7XG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgY2ggPSBzdHJlYW0ucGVlaygpO1xuICAgICAgaWYgKGNoID09IFwiPVwiKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIGNoID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgICAgaWYgKGNoID09IFwiPVwiKSB7XG4gICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCI6XCIpIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICBjaCA9IHN0cmVhbS5wZWVrKCk7XG4gICAgICBpZiAoY2ggPT0gXCI9XCIpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCI6XCIpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIFwicHVuY3R1YXRpb25cIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFwiW10oKXt9XCIuaW5kZXhPZihjaCkgIT0gLTEpIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gXCJicmFja2V0XCI7XG4gICAgfSBlbHNlIGlmIChcIi4sXCIuaW5kZXhPZihjaCkgIT0gLTEpIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gXCJwdW5jdHVhdGlvblwiO1xuICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKFwiZW5kXCIpKSB7XG4gICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgfVxuICAgIGZvciAodmFyIG5hbWUgaW4gcGF0dGVybnMpIHtcbiAgICAgIGlmIChwYXR0ZXJucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICB2YXIgcGF0dGVybiA9IHBhdHRlcm5zW25hbWVdO1xuICAgICAgICBpZiAoKHBhdHRlcm4gaW5zdGFuY2VvZiBBcnJheSAmJiBzb21lKHBhdHRlcm4sIGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICByZXR1cm4gc3RyZWFtLm1hdGNoKHApO1xuICAgICAgICB9KSkgfHwgc3RyZWFtLm1hdGNoKHBhdHRlcm4pKVxuICAgICAgICAgIHJldHVybiBwYXR0ZXJuU3R5bGVzW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoL1srXFwtKlxcL149PD4mfF0vLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICB9XG4gICAgaWYgKHN0cmVhbS5tYXRjaChcImRlZmluZVwiKSkge1xuICAgICAgcmV0dXJuIFwiZGVmXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcLV0vKTtcbiAgICAgIC8vIEtleXdvcmRcbiAgICAgIGlmICh3b3JkTG9va3VwLmhhc093blByb3BlcnR5KHN0cmVhbS5jdXJyZW50KCkpKSB7XG4gICAgICAgIHJldHVybiBzdHlsZUxvb2t1cFtzdHJlYW0uY3VycmVudCgpXTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmN1cnJlbnQoKS5tYXRjaChzeW1ib2wpKSB7XG4gICAgICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgbWF5YmVOZXN0ZWQgPSBmYWxzZSwgbmVzdGVkQ291bnQgPSAwLCBjaDtcbiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkpIHtcbiAgICAgIGlmIChjaCA9PSBcIi9cIiAmJiBtYXliZUVuZCkge1xuICAgICAgICBpZiAobmVzdGVkQ291bnQgPiAwKSB7XG4gICAgICAgICAgbmVzdGVkQ291bnQtLTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaCA9PSBcIipcIiAmJiBtYXliZU5lc3RlZCkge1xuICAgICAgICBuZXN0ZWRDb3VudCsrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIqXCIpO1xuICAgICAgbWF5YmVOZXN0ZWQgPSAoY2ggPT0gXCIvXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSwgc3R5bGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7XG4gICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgZW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgfHwgIWVzY2FwZWQpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEludGVyZmFjZVxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSxcbiAgICAgICAgY3VycmVudEluZGVudDogMFxuICAgICAgfTtcbiAgICB9LFxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSxcbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCIvKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCIqL1wiXG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWR5bGFuXCIsIFwiZHlsYW5cIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZWJuZlwiLCBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgdmFyIGNvbW1lbnRUeXBlID0ge3NsYXNoOiAwLCBwYXJlbnRoZXNpczogMX07XG4gICAgdmFyIHN0YXRlVHlwZSA9IHtjb21tZW50OiAwLCBfc3RyaW5nOiAxLCBjaGFyYWN0ZXJDbGFzczogMn07XG4gICAgdmFyIGJyYWNlc01vZGUgPSBudWxsO1xuXG4gICAgaWYgKGNvbmZpZy5icmFjZXNNb2RlKVxuICAgICAgYnJhY2VzTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIGNvbmZpZy5icmFjZXNNb2RlKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RyaW5nVHlwZTogbnVsbCxcbiAgICAgICAgICBjb21tZW50VHlwZTogbnVsbCxcbiAgICAgICAgICBicmFjZWQ6IDAsXG4gICAgICAgICAgbGhzOiB0cnVlLFxuICAgICAgICAgIGxvY2FsU3RhdGU6IG51bGwsXG4gICAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAgIGluRGVmaW5pdGlvbjogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKCFzdHJlYW0pIHJldHVybjtcblxuICAgICAgICAvL2NoZWNrIGZvciBzdGF0ZSBjaGFuZ2VzXG4gICAgICAgIGlmIChzdGF0ZS5zdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvL3N0cmluZ3NcbiAgICAgICAgICBpZiAoKHN0cmVhbS5wZWVrKCkgPT0gJ1wiJykgfHwgKHN0cmVhbS5wZWVrKCkgPT0gXCInXCIpKSB7XG4gICAgICAgICAgICBzdGF0ZS5zdHJpbmdUeXBlID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7IC8vIFNraXAgcXVvdGVcbiAgICAgICAgICAgIHN0YXRlLnN0YWNrLnVuc2hpZnQoc3RhdGVUeXBlLl9zdHJpbmcpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eXFwvXFwqLykpIHsgLy9jb21tZW50cyBzdGFydGluZyB3aXRoIC8qXG4gICAgICAgICAgICBzdGF0ZS5zdGFjay51bnNoaWZ0KHN0YXRlVHlwZS5jb21tZW50KTtcbiAgICAgICAgICAgIHN0YXRlLmNvbW1lbnRUeXBlID0gY29tbWVudFR5cGUuc2xhc2g7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15cXChcXCovKSkgeyAvL2NvbW1lbnRzIHN0YXJ0aW5nIHdpdGggKCpcbiAgICAgICAgICAgIHN0YXRlLnN0YWNrLnVuc2hpZnQoc3RhdGVUeXBlLmNvbW1lbnQpO1xuICAgICAgICAgICAgc3RhdGUuY29tbWVudFR5cGUgPSBjb21tZW50VHlwZS5wYXJlbnRoZXNpcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL3JldHVybiBzdGF0ZVxuICAgICAgICAvL3N0YWNrIGhhc1xuICAgICAgICBzd2l0Y2ggKHN0YXRlLnN0YWNrWzBdKSB7XG4gICAgICAgIGNhc2Ugc3RhdGVUeXBlLl9zdHJpbmc6XG4gICAgICAgICAgd2hpbGUgKHN0YXRlLnN0YWNrWzBdID09PSBzdGF0ZVR5cGUuX3N0cmluZyAmJiAhc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gc3RhdGUuc3RyaW5nVHlwZSkge1xuICAgICAgICAgICAgICBzdHJlYW0ubmV4dCgpOyAvLyBTa2lwIHF1b3RlXG4gICAgICAgICAgICAgIHN0YXRlLnN0YWNrLnNoaWZ0KCk7IC8vIENsZWFyIGZsYWdcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0cmVhbS5tYXRjaCgvXi5bXlxcXFxcXFwiXFwnXSovKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLmxocyA/IFwicHJvcGVydHkgc3RyaW5nXCIgOiBcInN0cmluZ1wiOyAvLyBUb2tlbiBzdHlsZVxuXG4gICAgICAgIGNhc2Ugc3RhdGVUeXBlLmNvbW1lbnQ6XG4gICAgICAgICAgd2hpbGUgKHN0YXRlLnN0YWNrWzBdID09PSBzdGF0ZVR5cGUuY29tbWVudCAmJiAhc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuY29tbWVudFR5cGUgPT09IGNvbW1lbnRUeXBlLnNsYXNoICYmIHN0cmVhbS5tYXRjaCgvXFwqXFwvLykpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc3RhY2suc2hpZnQoKTsgLy8gQ2xlYXIgZmxhZ1xuICAgICAgICAgICAgICBzdGF0ZS5jb21tZW50VHlwZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmNvbW1lbnRUeXBlID09PSBjb21tZW50VHlwZS5wYXJlbnRoZXNpcyAmJiBzdHJlYW0ubWF0Y2goL1xcKlxcKS8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnN0YWNrLnNoaWZ0KCk7IC8vIENsZWFyIGZsYWdcbiAgICAgICAgICAgICAgc3RhdGUuY29tbWVudFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyZWFtLm1hdGNoKC9eLlteXFwqXSovKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVUeXBlLmNoYXJhY3RlckNsYXNzOlxuICAgICAgICAgIHdoaWxlIChzdGF0ZS5zdGFja1swXSA9PT0gc3RhdGVUeXBlLmNoYXJhY3RlckNsYXNzICYmICFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgICAgIGlmICghKHN0cmVhbS5tYXRjaCgvXlteXFxdXFxcXF0rLykgfHwgc3RyZWFtLm1hdGNoKC9eXFxcXC4vKSkpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwZWVrID0gc3RyZWFtLnBlZWsoKTtcblxuICAgICAgICBpZiAoYnJhY2VzTW9kZSAhPT0gbnVsbCAmJiAoc3RhdGUuYnJhY2VkIHx8IHBlZWsgPT09IFwie1wiKSkge1xuICAgICAgICAgIGlmIChzdGF0ZS5sb2NhbFN0YXRlID09PSBudWxsKVxuICAgICAgICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShicmFjZXNNb2RlKTtcblxuICAgICAgICAgIHZhciB0b2tlbiA9IGJyYWNlc01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0YXRlKSxcbiAgICAgICAgICB0ZXh0ID0gc3RyZWFtLmN1cnJlbnQoKTtcblxuICAgICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAodGV4dFtpXSA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuYnJhY2VkID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICB0b2tlbiA9IFwibWF0Y2hpbmdicmFja2V0XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0YXRlLmJyYWNlZCsrO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRleHRbaV0gPT09IFwifVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuYnJhY2VkLS07XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmJyYWNlZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgdG9rZW4gPSBcIm1hdGNoaW5nYnJhY2tldFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cblxuICAgICAgICAvL25vIHN0YWNrXG4gICAgICAgIHN3aXRjaCAocGVlaykge1xuICAgICAgICBjYXNlIFwiW1wiOlxuICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgc3RhdGUuc3RhY2sudW5zaGlmdChzdGF0ZVR5cGUuY2hhcmFjdGVyQ2xhc3MpO1xuICAgICAgICAgIHJldHVybiBcImJyYWNrZXRcIjtcbiAgICAgICAgY2FzZSBcIjpcIjpcbiAgICAgICAgY2FzZSBcInxcIjpcbiAgICAgICAgY2FzZSBcIjtcIjpcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgICAgIGNhc2UgXCIlXCI6XG4gICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChcIiUlXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJoZWFkZXJcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvWyVdW0EtWmEtel0rLykpIHtcbiAgICAgICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvWyVdW31dLykpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm1hdGNoaW5nYnJhY2tldFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIi9cIjpcbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9bXFwvXVtBLVphLXpdKy8pKSB7XG4gICAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJcXFxcXCI6XG4gICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvW1xcXVthLXpdKy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJzdHJpbmctMlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcIi5cIjpcbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKFwiLlwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcIipcIjpcbiAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgY2FzZSBcIitcIjpcbiAgICAgICAgY2FzZSBcIl5cIjpcbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHBlZWspKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFwiJFwiOlxuICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goXCIkJFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiYnVpbHRpblwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9bJF1bMC05XSsvKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwidmFyaWFibGUtM1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcIjxcIjpcbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC88PFthLXpBLVpfXSs+Pi8pKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJidWlsdGluXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxcL1xcLy8pKSB7XG4gICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL3JldHVybi8pKSB7XG4gICAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15bYS16QS1aX11bYS16QS1aMC05X10qLykpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC8oPz1bXFwoLl0pLykpIHtcbiAgICAgICAgICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goLyg/PVtcXHNcXG5dKls6PV0pLykpIHtcbiAgICAgICAgICAgIHJldHVybiBcImRlZlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoW1wiW1wiLCBcIl1cIiwgXCIoXCIsIFwiKVwiXS5pbmRleE9mKHN0cmVhbS5wZWVrKCkpICE9IC0xKSB7XG4gICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICByZXR1cm4gXCJicmFja2V0XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtZWJuZlwiLCBcImVibmZcIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZWNsXCIsIGZ1bmN0aW9uKGNvbmZpZykge1xuXG4gIGZ1bmN0aW9uIHdvcmRzKHN0cikge1xuICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoXCIgXCIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBmdW5jdGlvbiBtZXRhSG9vayhzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKCFzdGF0ZS5zdGFydE9mTGluZSkgcmV0dXJuIGZhbHNlO1xuICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICByZXR1cm4gXCJtZXRhXCI7XG4gIH1cblxuICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0O1xuICB2YXIga2V5d29yZCA9IHdvcmRzKFwiYWJzIGFjb3MgYWxsbm9kZXMgYXNjaWkgYXNpbiBhc3N0cmluZyBhdGFuIGF0YW4yIGF2ZSBjYXNlIGNob29zZSBjaG9vc2VuIGNob29zZXNldHMgY2x1c3RlcnNpemUgY29tYmluZSBjb3JyZWxhdGlvbiBjb3MgY29zaCBjb3VudCBjb3ZhcmlhbmNlIGNyb24gZGF0YXNldCBkZWR1cCBkZWZpbmUgZGVub3JtYWxpemUgZGlzdHJpYnV0ZSBkaXN0cmlidXRlZCBkaXN0cmlidXRpb24gZWJjZGljIGVudGggZXJyb3IgZXZhbHVhdGUgZXZlbnQgZXZlbnRleHRyYSBldmVudG5hbWUgZXhpc3RzIGV4cCBmYWlsY29kZSBmYWlsbWVzc2FnZSBmZXRjaCBmcm9tdW5pY29kZSBnZXRpc3ZhbGlkIGdsb2JhbCBncmFwaCBncm91cCBoYXNoIGhhc2gzMiBoYXNoNjQgaGFzaGNyYyBoYXNobWQ1IGhhdmluZyBpZiBpbmRleCBpbnRmb3JtYXQgaXN2YWxpZCBpdGVyYXRlIGpvaW4ga2V5dW5pY29kZSBsZW5ndGggbGlicmFyeSBsaW1pdCBsbiBsb2NhbCBsb2cgbG9vcCBtYXAgbWF0Y2hlZCBtYXRjaGxlbmd0aCBtYXRjaHBvc2l0aW9uIG1hdGNodGV4dCBtYXRjaHVuaWNvZGUgbWF4IG1lcmdlIG1lcmdlam9pbiBtaW4gbm9sb2NhbCBub25lbXB0eSBub3JtYWxpemUgcGFyc2UgcGlwZSBwb3dlciBwcmVsb2FkIHByb2Nlc3MgcHJvamVjdCBwdWxsIHJhbmRvbSByYW5nZSByYW5rIHJhbmtlZCByZWFsZm9ybWF0IHJlY29yZG9mIHJlZ2V4ZmluZCByZWdleHJlcGxhY2UgcmVncm91cCByZWplY3RlZCByb2xsdXAgcm91bmQgcm91bmR1cCByb3cgcm93ZGlmZiBzYW1wbGUgc2V0IHNpbiBzaW5oIHNpemVvZiBzb2FwY2FsbCBzb3J0IHNvcnRlZCBzcXJ0IHN0ZXBwZWQgc3RvcmVkIHN1bSB0YWJsZSB0YW4gdGFuaCB0aGlzbm9kZSB0b3BuIHRvdW5pY29kZSB0cmFuc2ZlciB0cmltIHRydW5jYXRlIHR5cGVvZiB1bmdyb3VwIHVuaWNvZGVvcmRlciB2YXJpYW5jZSB3aGljaCB3b3JrdW5pdCB4bWxkZWNvZGUgeG1sZW5jb2RlIHhtbHRleHQgeG1sdW5pY29kZVwiKTtcbiAgdmFyIHZhcmlhYmxlID0gd29yZHMoXCJhcHBseSBhc3NlcnQgYnVpbGQgYnVpbGRpbmRleCBldmFsdWF0ZSBmYWlsIGtleWRpZmYga2V5cGF0Y2ggbG9hZHhtbCBub3Rob3Igbm90aWZ5IG91dHB1dCBwYXJhbGxlbCBzZXF1ZW50aWFsIHNvYXBjYWxsIHdhaXRcIik7XG4gIHZhciB2YXJpYWJsZV8yID0gd29yZHMoXCJfX2NvbXByZXNzZWRfXyBhbGwgYW5kIGFueSBhcyBhdG1vc3QgYmVmb3JlIGJlZ2luYysrIGJlc3QgYmV0d2VlbiBjYXNlIGNvbnN0IGNvdW50ZXIgY3N2IGRlc2NlbmQgZW5jcnlwdCBlbmQgZW5kYysrIGVuZG1hY3JvIGV4Y2VwdCBleGNsdXNpdmUgZXhwaXJlIGV4cG9ydCBleHRlbmQgZmFsc2UgZmV3IGZpcnN0IGZsYXQgZnJvbSBmdWxsIGZ1bmN0aW9uIGdyb3VwIGhlYWRlciBoZWFkaW5nIGhvbGUgaWZibG9jayBpbXBvcnQgaW4gaW50ZXJmYWNlIGpvaW5lZCBrZWVwIGtleWVkIGxhc3QgbGVmdCBsaW1pdCBsb2FkIGxvY2FsIGxvY2FsZSBsb29rdXAgbWFjcm8gbWFueSBtYXhjb3VudCBtYXhsZW5ndGggbWluIHNrZXcgbW9kdWxlIG5hbWVkIG5vY2FzZSBub3Jvb3Qgbm9zY2FuIG5vc29ydCBub3Qgb2Ygb25seSBvcHQgb3Igb3V0ZXIgb3ZlcndyaXRlIHBhY2tlZCBwYXJ0aXRpb24gcGVuYWx0eSBwaHlzaWNhbGxlbmd0aCBwaXBlIHF1b3RlIHJlY29yZCByZWxhdGlvbnNoaXAgcmVwZWF0IHJldHVybiByaWdodCBzY2FuIHNlbGYgc2VwYXJhdG9yIHNlcnZpY2Ugc2hhcmVkIHNrZXcgc2tpcCBzcWwgc3RvcmUgdGVybWluYXRvciB0aG9yIHRocmVzaG9sZCB0b2tlbiB0cmFuc2Zvcm0gdHJpbSB0cnVlIHR5cGUgdW5pY29kZW9yZGVyIHVuc29ydGVkIHZhbGlkYXRlIHZpcnR1YWwgd2hvbGUgd2lsZCB3aXRoaW4geG1sIHhwYXRoXCIpO1xuICB2YXIgdmFyaWFibGVfMyA9IHdvcmRzKFwiYXNjaWkgYmlnX2VuZGlhbiBib29sZWFuIGRhdGEgZGVjaW1hbCBlYmNkaWMgaW50ZWdlciBwYXR0ZXJuIHFzdHJpbmcgcmVhbCByZWNvcmQgcnVsZSBzZXQgb2Ygc3RyaW5nIHRva2VuIHVkZWNpbWFsIHVuaWNvZGUgdW5zaWduZWQgdmFyc3RyaW5nIHZhcnVuaWNvZGVcIik7XG4gIHZhciBidWlsdGluID0gd29yZHMoXCJjaGVja3BvaW50IGRlcHJlY2F0ZWQgZmFpbGNvZGUgZmFpbG1lc3NhZ2UgZmFpbHVyZSBnbG9iYWwgaW5kZXBlbmRlbnQgb253YXJuaW5nIHBlcnNpc3QgcHJpb3JpdHkgcmVjb3Zlcnkgc3RvcmVkIHN1Y2Nlc3Mgd2FpdCB3aGVuXCIpO1xuICB2YXIgYmxvY2tLZXl3b3JkcyA9IHdvcmRzKFwiY2F0Y2ggY2xhc3MgZG8gZWxzZSBmaW5hbGx5IGZvciBpZiBzd2l0Y2ggdHJ5IHdoaWxlXCIpO1xuICB2YXIgYXRvbXMgPSB3b3JkcyhcInRydWUgZmFsc2UgbnVsbFwiKTtcbiAgdmFyIGhvb2tzID0ge1wiI1wiOiBtZXRhSG9va307XG4gIHZhciBpc09wZXJhdG9yQ2hhciA9IC9bK1xcLSomJT08PiE/fFxcL10vO1xuXG4gIHZhciBjdXJQdW5jO1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoaG9va3NbY2hdKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gaG9va3NbY2hdKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmIChjaCA9PSAnXCInIHx8IGNoID09IFwiJ1wiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgaWYgKC9bXFxbXFxde31cXChcXCksO1xcOlxcLl0vLnRlc3QoY2gpKSB7XG4gICAgICBjdXJQdW5jID0gY2g7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKC9cXGQvLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5dLyk7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9XG4gICAgaWYgKGNoID09IFwiL1wiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIipcIikpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQ7XG4gICAgICAgIHJldHVybiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTtcbiAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgfVxuICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9dLyk7XG4gICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoa2V5d29yZC5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7XG4gICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gXCJuZXdzdGF0ZW1lbnRcIjtcbiAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICB9IGVsc2UgaWYgKHZhcmlhYmxlLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHtcbiAgICAgIGlmIChibG9ja0tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSBcIm5ld3N0YXRlbWVudFwiO1xuICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICB9IGVsc2UgaWYgKHZhcmlhYmxlXzIucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkge1xuICAgICAgaWYgKGJsb2NrS2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgY3VyUHVuYyA9IFwibmV3c3RhdGVtZW50XCI7XG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgfSBlbHNlIGlmICh2YXJpYWJsZV8zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHtcbiAgICAgIGlmIChibG9ja0tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSBcIm5ld3N0YXRlbWVudFwiO1xuICAgICAgcmV0dXJuIFwidmFyaWFibGUtM1wiO1xuICAgIH0gZWxzZSBpZiAoYnVpbHRpbi5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7XG4gICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gXCJuZXdzdGF0ZW1lbnRcIjtcbiAgICAgIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgICB9IGVsc2UgeyAvL0RhdGEgdHlwZXMgYXJlIG9mIGZyb20gS0VZV09SRCMjXG4gICAgICAgICAgICAgICAgdmFyIGkgPSBjdXIubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICB3aGlsZShpID49IDAgJiYgKCFpc05hTihjdXJbaV0pIHx8IGN1cltpXSA9PSAnXycpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLS1pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyMiA9IGN1ci5zdWJzdHIoMCwgaSArIDEpO1xuICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZV8zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cjIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIyKSkgY3VyUHVuYyA9IFwibmV3c3RhdGVtZW50XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0zXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuIFwiYXRvbVwiO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7XG4gICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fVxuICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgfHwgIWVzY2FwZWQpXG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIi9cIiAmJiBtYXliZUVuZCkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBtYXliZUVuZCA9IChjaCA9PSBcIipcIik7XG4gICAgfVxuICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHtcbiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7XG4gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmFsaWduID0gYWxpZ247XG4gICAgdGhpcy5wcmV2ID0gcHJldjtcbiAgfVxuICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7XG4gICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZS5pbmRlbnRlZCwgY29sLCB0eXBlLCBudWxsLCBzdGF0ZS5jb250ZXh0KTtcbiAgfVxuICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7XG4gICAgdmFyIHQgPSBzdGF0ZS5jb250ZXh0LnR5cGU7XG4gICAgaWYgKHQgPT0gXCIpXCIgfHwgdCA9PSBcIl1cIiB8fCB0ID09IFwifVwiKVxuICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkO1xuICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICB9XG5cbiAgLy8gSW50ZXJmYWNlXG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbml6ZTogbnVsbCxcbiAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQoKGJhc2Vjb2x1bW4gfHwgMCkgLSBpbmRlbnRVbml0LCAwLCBcInRvcFwiLCBmYWxzZSksXG4gICAgICAgIGluZGVudGVkOiAwLFxuICAgICAgICBzdGFydE9mTGluZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0O1xuICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgY3VyUHVuYyA9IG51bGw7XG4gICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChzdHlsZSA9PSBcImNvbW1lbnRcIiB8fCBzdHlsZSA9PSBcIm1ldGFcIikgcmV0dXJuIHN0eWxlO1xuICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlO1xuXG4gICAgICBpZiAoKGN1clB1bmMgPT0gXCI7XCIgfHwgY3VyUHVuYyA9PSBcIjpcIikgJiYgY3R4LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIikgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwie1wiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIn1cIik7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwiW1wiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIl1cIik7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwiKFwiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIilcIik7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwifVwiKSB7XG4gICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgaWYgKGN0eC50eXBlID09IFwifVwiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBjdHgudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICBlbHNlIGlmIChjdHgudHlwZSA9PSBcIn1cIiB8fCBjdHgudHlwZSA9PSBcInRvcFwiIHx8IChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiICYmIGN1clB1bmMgPT0gXCJuZXdzdGF0ZW1lbnRcIikpXG4gICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwic3RhdGVtZW50XCIpO1xuICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTtcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlICYmIHN0YXRlLnRva2VuaXplICE9IG51bGwpIHJldHVybiAwO1xuICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQsIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApO1xuICAgICAgaWYgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIgJiYgZmlyc3RDaGFyID09IFwifVwiKSBjdHggPSBjdHgucHJldjtcbiAgICAgIHZhciBjbG9zaW5nID0gZmlyc3RDaGFyID09IGN0eC50eXBlO1xuICAgICAgaWYgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIHJldHVybiBjdHguaW5kZW50ZWQgKyAoZmlyc3RDaGFyID09IFwie1wiID8gMCA6IGluZGVudFVuaXQpO1xuICAgICAgZWxzZSBpZiAoY3R4LmFsaWduKSByZXR1cm4gY3R4LmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpO1xuICAgICAgZWxzZSByZXR1cm4gY3R4LmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7XG4gICAgfSxcblxuICAgIGVsZWN0cmljQ2hhcnM6IFwie31cIlxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1lY2xcIiwgXCJlY2xcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJlaWZmZWxcIiwgZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHdvcmRPYmood29yZHMpIHtcbiAgICB2YXIgbyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBlID0gd29yZHMubGVuZ3RoOyBpIDwgZTsgKytpKSBvW3dvcmRzW2ldXSA9IHRydWU7XG4gICAgcmV0dXJuIG87XG4gIH1cbiAgdmFyIGtleXdvcmRzID0gd29yZE9iaihbXG4gICAgJ25vdGUnLFxuICAgICdhY3Jvc3MnLFxuICAgICd3aGVuJyxcbiAgICAndmFyaWFudCcsXG4gICAgJ3VudGlsJyxcbiAgICAndW5pcXVlJyxcbiAgICAndW5kZWZpbmUnLFxuICAgICd0aGVuJyxcbiAgICAnc3RyaXAnLFxuICAgICdzZWxlY3QnLFxuICAgICdyZXRyeScsXG4gICAgJ3Jlc2N1ZScsXG4gICAgJ3JlcXVpcmUnLFxuICAgICdyZW5hbWUnLFxuICAgICdyZWZlcmVuY2UnLFxuICAgICdyZWRlZmluZScsXG4gICAgJ3ByZWZpeCcsXG4gICAgJ29uY2UnLFxuICAgICdvbGQnLFxuICAgICdvYnNvbGV0ZScsXG4gICAgJ2xvb3AnLFxuICAgICdsb2NhbCcsXG4gICAgJ2xpa2UnLFxuICAgICdpcycsXG4gICAgJ2luc3BlY3QnLFxuICAgICdpbmZpeCcsXG4gICAgJ2luY2x1ZGUnLFxuICAgICdpZicsXG4gICAgJ2Zyb3plbicsXG4gICAgJ2Zyb20nLFxuICAgICdleHRlcm5hbCcsXG4gICAgJ2V4cG9ydCcsXG4gICAgJ2Vuc3VyZScsXG4gICAgJ2VuZCcsXG4gICAgJ2Vsc2VpZicsXG4gICAgJ2Vsc2UnLFxuICAgICdkbycsXG4gICAgJ2NyZWF0aW9uJyxcbiAgICAnY3JlYXRlJyxcbiAgICAnY2hlY2snLFxuICAgICdhbGlhcycsXG4gICAgJ2FnZW50JyxcbiAgICAnc2VwYXJhdGUnLFxuICAgICdpbnZhcmlhbnQnLFxuICAgICdpbmhlcml0JyxcbiAgICAnaW5kZXhpbmcnLFxuICAgICdmZWF0dXJlJyxcbiAgICAnZXhwYW5kZWQnLFxuICAgICdkZWZlcnJlZCcsXG4gICAgJ2NsYXNzJyxcbiAgICAnVm9pZCcsXG4gICAgJ1RydWUnLFxuICAgICdSZXN1bHQnLFxuICAgICdQcmVjdXJzb3InLFxuICAgICdGYWxzZScsXG4gICAgJ0N1cnJlbnQnLFxuICAgICdjcmVhdGUnLFxuICAgICdhdHRhY2hlZCcsXG4gICAgJ2RldGFjaGFibGUnLFxuICAgICdhcycsXG4gICAgJ2FuZCcsXG4gICAgJ2ltcGxpZXMnLFxuICAgICdub3QnLFxuICAgICdvcidcbiAgXSk7XG4gIHZhciBvcGVyYXRvcnMgPSB3b3JkT2JqKFtcIjo9XCIsIFwiYW5kIHRoZW5cIixcImFuZFwiLCBcIm9yXCIsXCI8PFwiLFwiPj5cIl0pO1xuXG4gIGZ1bmN0aW9uIGNoYWluKG5ld3Rvaywgc3RyZWFtLCBzdGF0ZSkge1xuICAgIHN0YXRlLnRva2VuaXplLnB1c2gobmV3dG9rKTtcbiAgICByZXR1cm4gbmV3dG9rKHN0cmVhbSwgc3RhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKGNoID09ICdcIid8fGNoID09IFwiJ1wiKSB7XG4gICAgICByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZChjaCwgXCJzdHJpbmdcIiksIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCItXCImJnN0cmVhbS5lYXQoXCItXCIpKSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIjpcIiYmc3RyZWFtLmVhdChcIj1cIikpIHtcbiAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgfSBlbHNlIGlmICgvWzAtOV0vLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1t4WGJCQ2MwLTlcXC5dLyk7XG4gICAgICBzdHJlYW0uZWF0KC9bXFw/XFwhXS8pO1xuICAgICAgcmV0dXJuIFwiaWRlbnRcIjtcbiAgICB9IGVsc2UgaWYgKC9bYS16QS1aXzAtOV0vLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1thLXpBLVpfMC05XS8pO1xuICAgICAgc3RyZWFtLmVhdCgvW1xcP1xcIV0vKTtcbiAgICAgIHJldHVybiBcImlkZW50XCI7XG4gICAgfSBlbHNlIGlmICgvWz0rXFwtXFwvKl4lPD5+XS8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvWz0rXFwtXFwvKl4lPD5+XS8pO1xuICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZFF1b3RlZChxdW90ZSwgc3R5bGUsICB1bmVzY2FwZWQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7XG4gICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2ggPT0gcXVvdGUgJiYgKHVuZXNjYXBlZCB8fCAhZXNjYXBlZCkpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gXCIlXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge3Rva2VuaXplOiBbdG9rZW5CYXNlXX07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBpZiAoc3R5bGUgPT0gXCJpZGVudFwiKSB7XG4gICAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgICAgc3R5bGUgPSBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpKSA/IFwia2V5d29yZFwiXG4gICAgICAgICAgOiBvcGVyYXRvcnMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkgPyBcIm9wZXJhdG9yXCJcbiAgICAgICAgICA6IC9eW0EtWl1bQS1aXzAtOV0qJC9nLnRlc3Qod29yZCkgPyBcInRhZ1wiXG4gICAgICAgICAgOiAvXjBbYkJdWzAtMV0rJC9nLnRlc3Qod29yZCkgPyBcIm51bWJlclwiXG4gICAgICAgICAgOiAvXjBbY0NdWzAtN10rJC9nLnRlc3Qod29yZCkgPyBcIm51bWJlclwiXG4gICAgICAgICAgOiAvXjBbeFhdW2EtZkEtRjAtOV0rJC9nLnRlc3Qod29yZCkgPyBcIm51bWJlclwiXG4gICAgICAgICAgOiAvXihbMC05XStcXC5bMC05XSopfChbMC05XSpcXC5bMC05XSspJC9nLnRlc3Qod29yZCkgPyBcIm51bWJlclwiXG4gICAgICAgICAgOiAvXlswLTldKyQvZy50ZXN0KHdvcmQpID8gXCJudW1iZXJcIlxuICAgICAgICAgIDogXCJ2YXJpYWJsZVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG4gICAgbGluZUNvbW1lbnQ6IFwiLS1cIlxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1laWZmZWxcIiwgXCJlaWZmZWxcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciBNb2RlIEVsaXhpciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlLCBJYW4gV2FsdGVyLCBhbmRcbi8vIG90aGVycy4gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHA6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFLlxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgnZWxpeGlyJywgY29uZmlnID0+IHtcbiAgY29uc3Qgd29yZE9iaiA9IHdvcmRzID0+IHtcbiAgICBsZXQgbyA9IHt9XG4gICAgZm9yICh2YXIgaSA9IDAsIGUgPSB3b3Jkcy5sZW5ndGg7IGkgPCBlOyArK2kpIG9bd29yZHNbaV1dID0gdHJ1ZVxuICAgIHJldHVybiBvXG4gIH1cblxuICBjb25zdCBrZXl3b3JkcyA9IHdvcmRPYmooW1xuICAgICdhbGlhcycsICdjYXNlJywgJ2NvbmQnLCAnZGVmJywgJ2RlZm1vZHVsZScsICdkZWZwJywgJ2RlZnN0cnVjdCcsXG4gICAgJ2RlZnByb3RvY29sJywgJ2RlZmltcGwnLCAnZGVmbWFjcm8nLCAncXVvdGUnLCAndW5xdW90ZScsICdyZWNlaXZlJywgJ2ZuJyxcbiAgICAnZG8nLCAnZWxzZScsICdlbHNlIGlmJywgJ2VuZCcsICdmYWxzZScsICdpZicsICdpbicsICduZXh0JywgJ3Jlc2N1ZScsXG4gICAgJ2ZvcicsICd0cnVlJywgJ3VubGVzcycsICd3aGVuJywgJ25pbCcsICdyYWlzZScsICd0aHJvdycsICd0cnknLCAnY2F0Y2gnLFxuICAgICdhZnRlcicsICd3aXRoJywgJ3JlcXVpcmUnLCAndXNlJywgJ19fTU9EVUxFX18nLCAnX19GSUxFX18nLCAnX19ESVJfXycsXG4gICAgJ19fRU5WX18nLCAnX19DQUxMRVJfXydcbiAgXSlcbiAgY29uc3QgaW5kZW50V29yZHMgPSB3b3JkT2JqKFtcbiAgICAnZGVmJywgJ2RlZm1vZHVsZScsICdkZWZwJywgJ2Nhc2UnLCAnY29uZCcsICdyZXNjdWUnLCAndHJ5JywgJ2NhdGNoJywgJy0+J1xuICBdKVxuICBjb25zdCBkZWRlbnRXb3JkcyA9IHdvcmRPYmooWydlbmQnXSlcbiAgY29uc3QgbWF0Y2hpbmcgPSB7J1snOiAnXScsICd7JzogJ30nLCAnKCc6ICcpJ31cblxuICBsZXQgY3VyUHVuY1xuXG4gIGNvbnN0IGNoYWluID0gKG5ld3Rvaywgc3RyZWFtLCBzdGF0ZSkgPT4ge1xuICAgIHN0YXRlLnRva2VuaXplLnB1c2gobmV3dG9rKVxuICAgIHJldHVybiBuZXd0b2soc3RyZWFtLCBzdGF0ZSlcbiAgfVxuXG4gIGNvbnN0IHRva2VuQmFzZSA9IChzdHJlYW0sIHN0YXRlKSA9PiB7XG4gICAgaWYgKHN0cmVhbS5zb2woKSAmJiBzdHJlYW0ubWF0Y2goJ1wiXCJcIicpICYmIHN0cmVhbS5lb2woKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUucHVzaChyZWFkQmxvY2tDb21tZW50KVxuICAgICAgcmV0dXJuICdjb21tZW50J1xuICAgIH1cblxuICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBsZXQgY2ggPSBzdHJlYW0ubmV4dCgpXG4gICAgbGV0IG1cblxuICAgIGlmIChjaCA9PT0gJ1xcJycgfHwgY2ggPT09ICdcIicpIHtcbiAgICAgIHJldHVybiBjaGFpbihyZWFkUXVvdGVkKGNoLCAnc3RyaW5nJywgY2ggPT09ICdcIicpLCBzdHJlYW0sIHN0YXRlKVxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcvJykge1xuICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoXG4gICAgICBpZiAoc3RyZWFtLnNraXBUbygnLycpKSB7XG4gICAgICAgIGxldCBzZWFyY2hUaWxsID0gc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGhcbiAgICAgICAgbGV0IGJhbGFuY2UgPSAwICAvLyBiYWxhbmNlIGJyYWNrZXRzXG5cbiAgICAgICAgc3RyZWFtLmJhY2tVcChzdHJlYW0uY3VycmVudCgpLmxlbmd0aCAtIGN1cnJlbnRJbmRleClcblxuICAgICAgICB3aGlsZSAoc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGggPCBzZWFyY2hUaWxsKSB7XG4gICAgICAgICAgY29uc3QgY2hjaHIgPSBzdHJlYW0ubmV4dCgpXG4gICAgICAgICAgaWYgKGNoY2hyID09PSAnKCcpIHtcbiAgICAgICAgICAgIGJhbGFuY2UgKz0gMVxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hjaHIgPT09ICcpJykge1xuICAgICAgICAgICAgYmFsYW5jZSAtPSAxXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChiYWxhbmNlIDwgMCkge1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW0uYmFja1VwKHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoIC0gY3VycmVudEluZGV4KVxuXG4gICAgICAgIGlmIChiYWxhbmNlID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNoYWluKHJlYWRRdW90ZWQoY2gsICdzdHJpbmctMicsIHRydWUpLCBzdHJlYW0sIHN0YXRlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnb3BlcmF0b3InXG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJyUnKSB7XG4gICAgICBsZXQgc3R5bGUgPSAnc3RyaW5nJ1xuICAgICAgbGV0IGVtYmVkID0gdHJ1ZVxuXG4gICAgICBpZiAoc3RyZWFtLmVhdCgncycpKSB7XG4gICAgICAgIHN0eWxlID0gJ2F0b20nXG4gICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoL1tXUV0vKSkge1xuICAgICAgICBzdHlsZSA9ICdzdHJpbmcnXG4gICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoL1tyXS8pKSB7XG4gICAgICAgIHN0eWxlID0gJ3N0cmluZy0yJ1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KC9bd3hxXS8pKSB7XG4gICAgICAgIHN0eWxlID0gJ3N0cmluZydcbiAgICAgICAgZW1iZWQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBsZXQgZGVsaW0gPSBzdHJlYW0uZWF0KC9bXlxcd1xccz1dLylcblxuICAgICAgaWYgKCFkZWxpbSkge1xuICAgICAgICByZXR1cm4gJ29wZXJhdG9yJ1xuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hpbmcucHJvcGVydHlJc0VudW1lcmFibGUoZGVsaW0pKSB7XG4gICAgICAgIGRlbGltID0gbWF0Y2hpbmdbZGVsaW1dXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFpbihyZWFkUXVvdGVkKGRlbGltLCBzdHlsZSwgZW1iZWQsIHRydWUpLCBzdHJlYW0sIHN0YXRlKVxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcjJykge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpXG4gICAgICByZXR1cm4gJ2NvbW1lbnQnXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNoID09PSAnPCcgJiZcbiAgICAgIChtID0gc3RyZWFtLm1hdGNoKC9ePC0/W1xcYFxcXCJcXCddPyhbYS16QS1aXz9dXFx3KilbXFxgXFxcIlxcJ10/KD86O3wkKS8pKVxuICAgICkge1xuICAgICAgcmV0dXJuIGNoYWluKHJlYWRIZXJlRG9jKG1bMV0pLCBzdHJlYW0sIHN0YXRlKVxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcwJykge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoJ3gnKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXGRhLWZBLUZdLylcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdCgnYicpKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvWzAxXS8pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1swLTddLylcbiAgICAgIH1cbiAgICAgIHJldHVybiAnbnVtYmVyJ1xuICAgIH0gZWxzZSBpZiAoL1xcZC8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5tYXRjaCgvXltcXGRfXSooPzpcXC5bXFxkX10rKT8oPzpbZUVdWytcXC1dP1tcXGRfXSspPy8pXG4gICAgICByZXR1cm4gJ251bWJlcidcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnPycpIHtcbiAgICAgIHdoaWxlIChzdHJlYW0ubWF0Y2goL15cXFxcW0NNXS0vKSkge31cblxuICAgICAgaWYgKHN0cmVhbS5lYXQoJ1xcXFwnKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1xcdy8pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0ubmV4dCgpXG4gICAgICB9XG4gICAgICByZXR1cm4gJ3N0cmluZydcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnOicpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KCdcXCcnKSkge1xuICAgICAgICByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZCgnXFwnJywgJ2F0b20nLCBmYWxzZSksIHN0cmVhbSwgc3RhdGUpXG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLmVhdCgnXCInKSkge1xuICAgICAgICByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZCgnXCInLCAnYXRvbScsIHRydWUpLCBzdHJlYW0sIHN0YXRlKVxuICAgICAgfVxuXG4gICAgICAvLyA6PiA6Pj4gOjwgOjw8IGFyZSB2YWxpZCBzeW1ib2xzXG4gICAgICBpZiAoc3RyZWFtLmVhdCgvW1xcPFxcPl0vKSkge1xuICAgICAgICBzdHJlYW0uZWF0KC9bXFw8XFw+XS8pXG4gICAgICAgIHJldHVybiAnYXRvbSdcbiAgICAgIH1cblxuICAgICAgLy8gOisgOi0gOi8gOiogOnwgOiYgOiEgYXJlIHZhbGlkIHN5bWJvbHNcbiAgICAgIGlmIChzdHJlYW0uZWF0KC9bXFwrXFwtXFwqXFwvXFwmXFx8XFw6XFwhXS8pKSB7XG4gICAgICAgIHJldHVybiAnYXRvbSdcbiAgICAgIH1cblxuICAgICAgLy8gU3ltYm9scyBjYW4ndCBzdGFydCBieSBhIGRpZ2l0XG4gICAgICBpZiAoc3RyZWFtLmVhdCgvW2EtekEtWiRAX1xceGExLVxcdWZmZmZdLykpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3JFxceGExLVxcdWZmZmZdLylcbiAgICAgICAgLy8gT25seSBvbmUgPyAhID0gaXMgYWxsb3dlZCBhbmQgb25seSBhcyB0aGUgbGFzdCBjaGFyYWN0ZXJcbiAgICAgICAgc3RyZWFtLmVhdCgvW1xcP1xcIVxcPV0vKVxuICAgICAgICByZXR1cm4gJ2F0b20nXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnb3BlcmF0b3InXG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJ0AnICYmIHN0cmVhbS5tYXRjaCgvXkA/W2EtekEtWl9cXHhhMS1cXHVmZmZmXS8pKSB7XG4gICAgICBzdHJlYW0uZWF0KCdAJylcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xceGExLVxcdWZmZmZdLylcbiAgICAgIHJldHVybiAndmFyaWFibGUtMidcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnJCcpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KC9bYS16QS1aX10vKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHddLylcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdCgvXFxkLykpIHtcbiAgICAgICAgc3RyZWFtLmVhdCgvXFxkLylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCkgLy8gTXVzdCBiZSBhIHNwZWNpYWwgZ2xvYmFsIGxpa2UgJDogb3IgJCFcbiAgICAgIH1cbiAgICAgIHJldHVybiAndmFyaWFibGUtMydcbiAgICB9IGVsc2UgaWYgKC9bYS16QS1aX1xceGExLVxcdWZmZmZdLy50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFx4YTEtXFx1ZmZmZl0vKVxuICAgICAgc3RyZWFtLmVhdCgvW1xcP1xcIV0vKVxuICAgICAgaWYgKHN0cmVhbS5lYXQoJzonKSkge1xuICAgICAgICByZXR1cm4gJ2F0b20nXG4gICAgICB9XG4gICAgICByZXR1cm4gJ2lkZW50J1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjaCA9PT0gJ3wnICYmXG4gICAgICAoc3RhdGUudmFyTGlzdCB8fCBzdGF0ZS5sYXN0VG9rID09PSAneycgfHwgc3RhdGUubGFzdFRvayA9PT0gJ2RvJylcbiAgICApIHtcbiAgICAgIGN1clB1bmMgPSAnfCdcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIGlmICgvW1xcKFxcKVxcW1xcXXt9XFxcXDtdLy50ZXN0KGNoKSkge1xuICAgICAgY3VyUHVuYyA9IGNoXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICctJyAmJiBzdHJlYW0uZWF0KCc+JykpIHtcbiAgICAgIHJldHVybiAnYXJyb3cnXG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJ3wnICYmIHN0cmVhbS5lYXQoJz4nKSkge1xuICAgICAgcmV0dXJuICdwaXBlJ1xuICAgIH0gZWxzZSBpZiAoL1s9K1xcLVxcLyo6XFwuXiU8Pn58XS8udGVzdChjaCkpIHtcbiAgICAgIGlmIChjaCA9PT0gJy4nICYmICFzdHJlYW0uZWF0V2hpbGUoL1s9K1xcLVxcLyo6XFwuXiU8Pn58XS8pKSB7XG4gICAgICAgIGN1clB1bmMgPSAnLidcbiAgICAgIH1cbiAgICAgIHJldHVybiAnb3BlcmF0b3InXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgdG9rZW5CYXNlVW50aWxCcmFjZSA9IGRlcHRoID0+IHtcbiAgICBpZiAoIWRlcHRoKSB7XG4gICAgICBkZXB0aCA9IDFcbiAgICB9XG5cbiAgICByZXR1cm4gKHN0cmVhbSwgc3RhdGUpID0+IHtcbiAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAnfScpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAxKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKClcbiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoIC0gMV0oc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGggLSAxXSA9IHRva2VuQmFzZVVudGlsQnJhY2UoZGVwdGggLSAxKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICd7Jykge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGggLSAxXSA9IHRva2VuQmFzZVVudGlsQnJhY2UoZGVwdGggKyAxKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRva2VuQmFzZU9uY2UgPSAoKSA9PiB7XG4gICAgbGV0IGFscmVhZHlDYWxsZWQgPSBmYWxzZVxuICAgIHJldHVybiAoc3RyZWFtLCBzdGF0ZSkgPT4ge1xuICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKClcbiAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplW3N0YXRlLnRva2VuaXplLmxlbmd0aCAtIDFdKHN0cmVhbSwgc3RhdGUpXG4gICAgICB9XG4gICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZVxuICAgICAgcmV0dXJuIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlYWRRdW90ZWQgPSAocXVvdGUsIHN0eWxlLCBlbWJlZCwgdW5lc2NhcGVkKSA9PiB7XG4gICAgcmV0dXJuIChzdHJlYW0sIHN0YXRlKSA9PiB7XG4gICAgICBsZXQgZXNjYXBlZCA9IGZhbHNlXG4gICAgICBsZXQgY2hcblxuICAgICAgaWYgKHN0YXRlLmNvbnRleHQudHlwZSA9PT0gJ3JlYWQtcXVvdGVkLXBhdXNlZCcpIHtcbiAgICAgICAgc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldlxuICAgICAgICBzdHJlYW0uZWF0KCd9JylcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICBpZiAoY2ggPT09IHF1b3RlICYmICh1bmVzY2FwZWQgfHwgIWVzY2FwZWQpKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVtYmVkICYmIGNoID09PSAnIycgJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLmVhdCgneycpKSB7XG4gICAgICAgICAgICBpZiAocXVvdGUgPT09ICd9Jykge1xuICAgICAgICAgICAgICBzdGF0ZS5jb250ZXh0ID0ge3ByZXY6IHN0YXRlLmNvbnRleHQsIHR5cGU6ICdyZWFkLXF1b3RlZC1wYXVzZWQnfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbkJhc2VVbnRpbEJyYWNlKCkpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH0gZWxzZSBpZiAoL1tAXFwkXS8udGVzdChzdHJlYW0ucGVlaygpKSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbkJhc2VPbmNlKCkpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PT0gJ1xcXFwnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlYWRIZXJlRG9jID0gcGhyYXNlID0+IHtcbiAgICByZXR1cm4gKHN0cmVhbSwgc3RhdGUpID0+IHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2gocGhyYXNlKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpXG4gICAgICB9XG4gICAgICByZXR1cm4gJ3N0cmluZydcbiAgICB9XG4gIH1cblxuICBjb25zdCByZWFkQmxvY2tDb21tZW50ID0gKHN0cmVhbSwgc3RhdGUpID0+IHtcbiAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaCgnXCJcIlwiJykgJiYgc3RyZWFtLmVvbCgpKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKVxuICAgIH1cbiAgICBzdHJlYW0uc2tpcFRvRW5kKClcbiAgICByZXR1cm4gJ2NvbW1lbnQnXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6ICgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRva2VuaXplOiBbdG9rZW5CYXNlXSxcbiAgICAgICAgaW5kZW50ZWQ6IDAsXG4gICAgICAgIGNvbnRleHQ6IHt0eXBlOiAndG9wJywgaW5kZW50ZWQ6IC1jb25maWcuaW5kZW50VW5pdH0sXG4gICAgICAgIGNvbnRpbnVlZExpbmU6IGZhbHNlLFxuICAgICAgICBsYXN0VG9rOiBudWxsLFxuICAgICAgICB2YXJMaXN0OiBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgdG9rZW46IChzdHJlYW0sIHN0YXRlKSA9PiB7XG4gICAgICBjdXJQdW5jID0gbnVsbFxuXG4gICAgICAvLyBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAvLyAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKClcbiAgICAgIC8vIH1cblxuICAgICAgbGV0IHN0eWxlID0gc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoIC0gMV0oc3RyZWFtLCBzdGF0ZSlcbiAgICAgIGxldCBrd3R5cGVcbiAgICAgIGxldCB0aGlzVG9rID0gY3VyUHVuY1xuXG4gICAgICBpZiAoc3R5bGUgPT09ICdpZGVudCcpIHtcbiAgICAgICAgbGV0IHdvcmQgPSBzdHJlYW0uY3VycmVudCgpXG5cbiAgICAgICAgc3R5bGUgPSBzdGF0ZS5sYXN0VG9rID09PSAnLicgPyAncHJvcGVydHknXG4gICAgICAgICAgOiBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpKSA/ICdrZXl3b3JkJ1xuICAgICAgICAgIDogL15bQS1aXS8udGVzdCh3b3JkKSA/ICd0YWcnXG4gICAgICAgICAgOiAoc3RhdGUubGFzdFRvayA9PT0gJ2RlZicgfHwgc3RhdGUubGFzdFRvayA9PT0gJ2NsYXNzJyB8fCBzdGF0ZS52YXJMaXN0KSA/ICdkZWYnXG4gICAgICAgICAgOiAndmFyaWFibGUnXG5cbiAgICAgICAgY29uc3QgaXNDb2x1bW5JbmRlbnQgPSBzdHJlYW0uY29sdW1uKCkgPT09IHN0cmVhbS5pbmRlbnRhdGlvbigpXG4gICAgICAgIGlmIChzdHlsZSA9PT0gJ2tleXdvcmQnKSB7XG4gICAgICAgICAgdGhpc1RvayA9IHdvcmRcbiAgICAgICAgICBpZiAoaW5kZW50V29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkpIHtcbiAgICAgICAgICAgIGt3dHlwZSA9ICdpbmRlbnQnXG4gICAgICAgICAgfSBlbHNlIGlmIChkZWRlbnRXb3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSkge1xuICAgICAgICAgICAga3d0eXBlID0gJ2RlZGVudCdcbiAgICAgICAgICB9IGVsc2UgaWYgKCh3b3JkID09PSAnaWYnIHx8IHdvcmQgPT09ICd1bmxlc3MnKSAmJiBpc0NvbHVtbkluZGVudCkge1xuICAgICAgICAgICAga3d0eXBlID0gJ2luZGVudCdcbiAgICAgICAgICB9IGVsc2UgaWYgKHdvcmQgPT09ICdkbycgJiYgc3RhdGUuY29udGV4dC5pbmRlbnRlZCA8IHN0YXRlLmluZGVudGVkKSB7XG4gICAgICAgICAgICBrd3R5cGUgPSAnaW5kZW50J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY3VyUHVuYyB8fCAoc3R5bGUgJiYgc3R5bGUgIT09ICdjb21tZW50JykpIHtcbiAgICAgICAgc3RhdGUubGFzdFRvayA9IHRoaXNUb2tcbiAgICAgIH1cblxuICAgICAgaWYgKGN1clB1bmMgPT09ICd8Jykge1xuICAgICAgICBzdGF0ZS52YXJMaXN0ID0gIXN0YXRlLnZhckxpc3RcbiAgICAgIH1cblxuICAgICAgaWYgKGt3dHlwZSA9PT0gJ2luZGVudCcgfHwgL1tcXChcXFtcXHtdLy50ZXN0KGN1clB1bmMpKSB7XG4gICAgICAgIHN0YXRlLmNvbnRleHQgPSB7XG4gICAgICAgICAgcHJldjogc3RhdGUuY29udGV4dCxcbiAgICAgICAgICB0eXBlOiBjdXJQdW5jIHx8IHN0eWxlLFxuICAgICAgICAgIGluZGVudGVkOiBzdGF0ZS5pbmRlbnRlZFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAoa3d0eXBlID09PSAnZGVkZW50JyB8fCAvW1xcKVxcXVxcfV0vLnRlc3QoY3VyUHVuYykpICYmXG4gICAgICAgIHN0YXRlLmNvbnRleHQucHJldlxuICAgICAgKSB7XG4gICAgICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXZcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5lb2woKSkge1xuICAgICAgICBzdGF0ZS5jb250aW51ZWRMaW5lID0gKGN1clB1bmMgPT09ICdcXFxcJyB8fCBzdHlsZSA9PT0gJ29wZXJhdG9yJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlXG4gICAgfSxcbiAgICAvLyBpbmRlbnQ6IChzdGF0ZSwgdGV4dEFmdGVyKSA9PiB7XG4gICAgLy8gICBpZiAoc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoIC0gMV0gIT09IHRva2VuQmFzZSkge1xuICAgIC8vICAgICByZXR1cm4gMFxuICAgIC8vICAgfVxuICAgIC8vICAgbGV0IGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApXG4gICAgLy8gICBsZXQgY3QgPSBzdGF0ZS5jb250ZXh0XG4gICAgLy8gICBsZXQgY2xvc2luZyA9IGN0LnR5cGUgPT09IG1hdGNoaW5nW2ZpcnN0Q2hhcl0gfHxcbiAgICAvLyAgICAgY3QudHlwZSA9PT0gJ2tleXdvcmQnICYmIC9eKD86ZW5kfHVudGlsfGVsc2V8ZWxzZSBpZnx3aGVufHJlc2N1ZSlcXGIvLnRlc3QodGV4dEFmdGVyKVxuICAgIC8vICAgcmV0dXJuIGN0LmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogY29uZmlnLmluZGVudFVuaXQpICtcbiAgICAvLyAgICAgKHN0YXRlLmNvbnRpbnVlZExpbmUgPyBjb25maWcuaW5kZW50VW5pdCA6IDApXG4gICAgLy8gfSxcbiAgICBlbGVjdHJpY0lucHV0OiAvXlxccyooPzplbmR8cmVzY3VlfGVsc2UgaWZ8ZWxzZXxjYXRjaFxcfSkkLyxcbiAgICBsaW5lQ29tbWVudDogJyMnXG4gIH1cbn0pXG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LWVsaXhpcicsICdlbGl4aXInKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHA6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcImVsbVwiLCBmdW5jdGlvbigpIHtcblxuICAgIGZ1bmN0aW9uIHN3aXRjaFN0YXRlKHNvdXJjZSwgc2V0U3RhdGUsIGYpXG4gICAge1xuICAgICAgc2V0U3RhdGUoZik7XG4gICAgICByZXR1cm4gZihzb3VyY2UsIHNldFN0YXRlKTtcbiAgICB9XG5cbiAgICB2YXIgbG93ZXJSRSA9IC9bYS16XS87XG4gICAgdmFyIHVwcGVyUkUgPSAvW0EtWl0vO1xuICAgIHZhciBpbm5lclJFID0gL1thLXpBLVowLTlfXS87XG5cbiAgICB2YXIgZGlnaXRSRSA9IC9bMC05XS87XG4gICAgdmFyIGhleFJFID0gL1swLTlBLUZhLWZdLztcbiAgICB2YXIgc3ltYm9sUkUgPSAvWy0mKisuXFxcXC88Pj0/Xnw6XS87XG4gICAgdmFyIHNwZWNpYWxSRSA9IC9bKCksW1xcXXt9XS87XG4gICAgdmFyIHNwYWNlc1JFID0gL1sgXFx2XFxmXS87IC8vIG5ld2xpbmVzIGFyZSBoYW5kbGVkIGluIHRva2VuaXplclxuXG4gICAgZnVuY3Rpb24gbm9ybWFsKClcbiAgICB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc291cmNlLCBzZXRTdGF0ZSlcbiAgICAgIHtcbiAgICAgICAgaWYgKHNvdXJjZS5lYXRXaGlsZShzcGFjZXNSRSkpXG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyID0gc291cmNlLm5leHQoKTtcblxuICAgICAgICBpZiAoc3BlY2lhbFJFLnRlc3QoY2hhcikpXG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gKGNoYXIgPT09ICd7JyAmJiBzb3VyY2UuZWF0KCctJykpXG4gICAgICAgICAgICA/IHN3aXRjaFN0YXRlKHNvdXJjZSwgc2V0U3RhdGUsIGNob21wTXVsdGlDb21tZW50KDEpKVxuICAgICAgICAgICAgOiAoY2hhciA9PT0gJ1snICYmIHNvdXJjZS5tYXRjaCgnZ2xzbHwnKSlcbiAgICAgICAgICAgICAgICA/IHN3aXRjaFN0YXRlKHNvdXJjZSwgc2V0U3RhdGUsIGNob21wR2xzbClcbiAgICAgICAgICAgICAgICA6ICdidWlsdGluJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFyID09PSAnXFwnJylcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiBzd2l0Y2hTdGF0ZShzb3VyY2UsIHNldFN0YXRlLCBjaG9tcENoYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYXIgPT09ICdcIicpXG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gc291cmNlLmVhdCgnXCInKVxuICAgICAgICAgICAgPyBzb3VyY2UuZWF0KCdcIicpXG4gICAgICAgICAgICAgICAgPyBzd2l0Y2hTdGF0ZShzb3VyY2UsIHNldFN0YXRlLCBjaG9tcE11bHRpU3RyaW5nKVxuICAgICAgICAgICAgICAgIDogJ3N0cmluZydcbiAgICAgICAgICAgIDogc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgY2hvbXBTaW5nbGVTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVwcGVyUkUudGVzdChjaGFyKSlcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZS5lYXRXaGlsZShpbm5lclJFKTtcbiAgICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlLTInO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvd2VyUkUudGVzdChjaGFyKSlcbiAgICAgICAge1xuICAgICAgICAgIHZhciBpc0RlZiA9IHNvdXJjZS5wb3MgPT09IDE7XG4gICAgICAgICAgc291cmNlLmVhdFdoaWxlKGlubmVyUkUpO1xuICAgICAgICAgIHJldHVybiBpc0RlZiA/IFwiZGVmXCIgOiBcInZhcmlhYmxlXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlnaXRSRS50ZXN0KGNoYXIpKVxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGNoYXIgPT09ICcwJylcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoc291cmNlLmVhdCgvW3hYXS8pKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzb3VyY2UuZWF0V2hpbGUoaGV4UkUpOyAvLyBzaG91bGQgcmVxdWlyZSBhdCBsZWFzdCAxXG4gICAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLmVhdFdoaWxlKGRpZ2l0UkUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc291cmNlLmVhdCgnLicpKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5lYXRXaGlsZShkaWdpdFJFKTsgLy8gc2hvdWxkIHJlcXVpcmUgYXQgbGVhc3QgMVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc291cmNlLmVhdCgvW2VFXS8pKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5lYXQoL1stK10vKTtcbiAgICAgICAgICAgIHNvdXJjZS5lYXRXaGlsZShkaWdpdFJFKTsgLy8gc2hvdWxkIHJlcXVpcmUgYXQgbGVhc3QgMVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzeW1ib2xSRS50ZXN0KGNoYXIpKVxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGNoYXIgPT09ICctJyAmJiBzb3VyY2UuZWF0KCctJykpXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLnNraXBUb0VuZCgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzb3VyY2UuZWF0V2hpbGUoc3ltYm9sUkUpO1xuICAgICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFyID09PSAnXycpXG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNob21wTXVsdGlDb21tZW50KG5lc3QpXG4gICAge1xuICAgICAgaWYgKG5lc3QgPT0gMClcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNvdXJjZSwgc2V0U3RhdGUpXG4gICAgICB7XG4gICAgICAgIHdoaWxlICghc291cmNlLmVvbCgpKVxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGNoYXIgPSBzb3VyY2UubmV4dCgpO1xuICAgICAgICAgIGlmIChjaGFyID09ICd7JyAmJiBzb3VyY2UuZWF0KCctJykpXG4gICAgICAgICAge1xuICAgICAgICAgICAgKytuZXN0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChjaGFyID09ICctJyAmJiBzb3VyY2UuZWF0KCd9JykpXG4gICAgICAgICAge1xuICAgICAgICAgICAgLS1uZXN0O1xuICAgICAgICAgICAgaWYgKG5lc3QgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNldFN0YXRlKG5vcm1hbCgpKTtcbiAgICAgICAgICAgICAgcmV0dXJuICdjb21tZW50JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3RhdGUoY2hvbXBNdWx0aUNvbW1lbnQobmVzdCkpO1xuICAgICAgICByZXR1cm4gJ2NvbW1lbnQnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNob21wTXVsdGlTdHJpbmcoc291cmNlLCBzZXRTdGF0ZSlcbiAgICB7XG4gICAgICB3aGlsZSAoIXNvdXJjZS5lb2woKSlcbiAgICAgIHtcbiAgICAgICAgdmFyIGNoYXIgPSBzb3VyY2UubmV4dCgpO1xuICAgICAgICBpZiAoY2hhciA9PT0gJ1wiJyAmJiBzb3VyY2UuZWF0KCdcIicpICYmIHNvdXJjZS5lYXQoJ1wiJykpXG4gICAgICAgIHtcbiAgICAgICAgICBzZXRTdGF0ZShub3JtYWwoKSk7XG4gICAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hvbXBTaW5nbGVTdHJpbmcoc291cmNlLCBzZXRTdGF0ZSlcbiAgICB7XG4gICAgICB3aGlsZSAoc291cmNlLnNraXBUbygnXFxcXFwiJykpIHsgc291cmNlLm5leHQoKTsgc291cmNlLm5leHQoKTsgfVxuICAgICAgaWYgKHNvdXJjZS5za2lwVG8oJ1wiJykpXG4gICAgICB7XG4gICAgICAgIHNvdXJjZS5uZXh0KCk7XG4gICAgICAgIHNldFN0YXRlKG5vcm1hbCgpKTtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfVxuICAgICAgc291cmNlLnNraXBUb0VuZCgpO1xuICAgICAgc2V0U3RhdGUobm9ybWFsKCkpO1xuICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hvbXBDaGFyKHNvdXJjZSwgc2V0U3RhdGUpXG4gICAge1xuICAgICAgd2hpbGUgKHNvdXJjZS5za2lwVG8oXCJcXFxcJ1wiKSkgeyBzb3VyY2UubmV4dCgpOyBzb3VyY2UubmV4dCgpOyB9XG4gICAgICBpZiAoc291cmNlLnNraXBUbyhcIidcIikpXG4gICAgICB7XG4gICAgICAgIHNvdXJjZS5uZXh0KCk7XG4gICAgICAgIHNldFN0YXRlKG5vcm1hbCgpKTtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfVxuICAgICAgc291cmNlLnNraXBUb0VuZCgpO1xuICAgICAgc2V0U3RhdGUobm9ybWFsKCkpO1xuICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hvbXBHbHNsKHNvdXJjZSwgc2V0U3RhdGUpXG4gICAge1xuICAgICAgd2hpbGUgKCFzb3VyY2UuZW9sKCkpXG4gICAgICB7XG4gICAgICAgIHZhciBjaGFyID0gc291cmNlLm5leHQoKTtcbiAgICAgICAgaWYgKGNoYXIgPT09ICd8JyAmJiBzb3VyY2UuZWF0KCddJykpXG4gICAgICAgIHtcbiAgICAgICAgICBzZXRTdGF0ZShub3JtYWwoKSk7XG4gICAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgfVxuXG4gICAgdmFyIHdlbGxLbm93bldvcmRzID0ge1xuICAgICAgY2FzZTogMSxcbiAgICAgIG9mOiAxLFxuICAgICAgYXM6IDEsXG4gICAgICBpZjogMSxcbiAgICAgIHRoZW46IDEsXG4gICAgICBlbHNlOiAxLFxuICAgICAgbGV0OiAxLFxuICAgICAgaW46IDEsXG4gICAgICB0eXBlOiAxLFxuICAgICAgYWxpYXM6IDEsXG4gICAgICBtb2R1bGU6IDEsXG4gICAgICB3aGVyZTogMSxcbiAgICAgIGltcG9ydDogMSxcbiAgICAgIGV4cG9zaW5nOiAxLFxuICAgICAgcG9ydDogMVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkgIHsgcmV0dXJuIHsgZjogbm9ybWFsKCkgfTsgfSxcbiAgICAgIGNvcHlTdGF0ZTogIGZ1bmN0aW9uIChzKSB7IHJldHVybiB7IGY6IHMuZiB9OyB9LFxuXG4gICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IHN0YXRlLmYoc3RyZWFtLCBmdW5jdGlvbihzKSB7IHN0YXRlLmYgPSBzOyB9KTtcbiAgICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgICAgICByZXR1cm4gKHdlbGxLbm93bldvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKSA/ICdrZXl3b3JkJyA6IHR5cGU7XG4gICAgICB9XG4gICAgfTtcblxuICB9KTtcblxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtZWxtXCIsIFwiZWxtXCIpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vKmpzaGludCB1bnVzZWQ6dHJ1ZSwgZXFudWxsOnRydWUsIGN1cmx5OnRydWUsIGJpdHdpc2U6dHJ1ZSAqL1xuLypqc2hpbnQgdW5kZWY6dHJ1ZSwgbGF0ZWRlZjp0cnVlLCB0cmFpbGluZzp0cnVlICovXG4vKmdsb2JhbCBDb2RlTWlycm9yOnRydWUgKi9cblxuLy8gZXJsYW5nIG1vZGUuXG4vLyB0b2tlbml6ZXIgLT4gdG9rZW4gdHlwZXMgLT4gQ29kZU1pcnJvciBzdHlsZXNcbi8vIHRva2VuaXplciBtYWludGFpbnMgYSBwYXJzZSBzdGFja1xuLy8gaW5kZW50ZXIgdXNlcyB0aGUgcGFyc2Ugc3RhY2tcblxuLy8gVE9ETyBpbmRlbnRlcjpcbi8vICAgYml0IHN5bnRheFxuLy8gICBvbGQgZ3VhcmQvYmlmL2NvbnZlcnNpb24gY2xhc2hlcyAoZS5nLiBcImZsb2F0LzFcIilcbi8vICAgdHlwZS9zcGVjL29wYXF1ZVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1lcmxhbmdcIiwgXCJlcmxhbmdcIik7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImVybGFuZ1wiLCBmdW5jdGlvbihjbUNmZykge1xuICBcInVzZSBzdHJpY3RcIjtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGNvbnN0YW50c1xuXG4gIHZhciB0eXBlV29yZHMgPSBbXG4gICAgXCItdHlwZVwiLCBcIi1zcGVjXCIsIFwiLWV4cG9ydF90eXBlXCIsIFwiLW9wYXF1ZVwiXTtcblxuICB2YXIga2V5d29yZFdvcmRzID0gW1xuICAgIFwiYWZ0ZXJcIixcImJlZ2luXCIsXCJjYXRjaFwiLFwiY2FzZVwiLFwiY29uZFwiLFwiZW5kXCIsXCJmdW5cIixcImlmXCIsXG4gICAgXCJsZXRcIixcIm9mXCIsXCJxdWVyeVwiLFwicmVjZWl2ZVwiLFwidHJ5XCIsXCJ3aGVuXCJdO1xuXG4gIHZhciBzZXBhcmF0b3JSRSAgICA9IC9bXFwtPiw7XS87XG4gIHZhciBzZXBhcmF0b3JXb3JkcyA9IFtcbiAgICBcIi0+XCIsXCI7XCIsXCIsXCJdO1xuXG4gIHZhciBvcGVyYXRvckF0b21Xb3JkcyA9IFtcbiAgICBcImFuZFwiLFwiYW5kYWxzb1wiLFwiYmFuZFwiLFwiYm5vdFwiLFwiYm9yXCIsXCJic2xcIixcImJzclwiLFwiYnhvclwiLFxuICAgIFwiZGl2XCIsXCJub3RcIixcIm9yXCIsXCJvcmVsc2VcIixcInJlbVwiLFwieG9yXCJdO1xuXG4gIHZhciBvcGVyYXRvclN5bWJvbFJFICAgID0gL1tcXCtcXC1cXCpcXC88Pj1cXHw6IV0vO1xuICB2YXIgb3BlcmF0b3JTeW1ib2xXb3JkcyA9IFtcbiAgICBcIj1cIixcIitcIixcIi1cIixcIipcIixcIi9cIixcIj5cIixcIj49XCIsXCI8XCIsXCI9PFwiLFwiPTo9XCIsXCI9PVwiLFwiPS89XCIsXCIvPVwiLFwifHxcIixcIjwtXCIsXCIhXCJdO1xuXG4gIHZhciBvcGVuUGFyZW5SRSAgICA9IC9bPFxcKFxcW1xce10vO1xuICB2YXIgb3BlblBhcmVuV29yZHMgPSBbXG4gICAgXCI8PFwiLFwiKFwiLFwiW1wiLFwie1wiXTtcblxuICB2YXIgY2xvc2VQYXJlblJFICAgID0gL1s+XFwpXFxdXFx9XS87XG4gIHZhciBjbG9zZVBhcmVuV29yZHMgPSBbXG4gICAgXCJ9XCIsXCJdXCIsXCIpXCIsXCI+PlwiXTtcblxuICB2YXIgZ3VhcmRXb3JkcyA9IFtcbiAgICBcImlzX2F0b21cIixcImlzX2JpbmFyeVwiLFwiaXNfYml0c3RyaW5nXCIsXCJpc19ib29sZWFuXCIsXCJpc19mbG9hdFwiLFxuICAgIFwiaXNfZnVuY3Rpb25cIixcImlzX2ludGVnZXJcIixcImlzX2xpc3RcIixcImlzX251bWJlclwiLFwiaXNfcGlkXCIsXG4gICAgXCJpc19wb3J0XCIsXCJpc19yZWNvcmRcIixcImlzX3JlZmVyZW5jZVwiLFwiaXNfdHVwbGVcIixcbiAgICBcImF0b21cIixcImJpbmFyeVwiLFwiYml0c3RyaW5nXCIsXCJib29sZWFuXCIsXCJmdW5jdGlvblwiLFwiaW50ZWdlclwiLFwibGlzdFwiLFxuICAgIFwibnVtYmVyXCIsXCJwaWRcIixcInBvcnRcIixcInJlY29yZFwiLFwicmVmZXJlbmNlXCIsXCJ0dXBsZVwiXTtcblxuICB2YXIgYmlmV29yZHMgPSBbXG4gICAgXCJhYnNcIixcImFkbGVyMzJcIixcImFkbGVyMzJfY29tYmluZVwiLFwiYWxpdmVcIixcImFwcGx5XCIsXCJhdG9tX3RvX2JpbmFyeVwiLFxuICAgIFwiYXRvbV90b19saXN0XCIsXCJiaW5hcnlfdG9fYXRvbVwiLFwiYmluYXJ5X3RvX2V4aXN0aW5nX2F0b21cIixcbiAgICBcImJpbmFyeV90b19saXN0XCIsXCJiaW5hcnlfdG9fdGVybVwiLFwiYml0X3NpemVcIixcImJpdHN0cmluZ190b19saXN0XCIsXG4gICAgXCJieXRlX3NpemVcIixcImNoZWNrX3Byb2Nlc3NfY29kZVwiLFwiY29udGFjdF9iaW5hcnlcIixcImNyYzMyXCIsXG4gICAgXCJjcmMzMl9jb21iaW5lXCIsXCJkYXRlXCIsXCJkZWNvZGVfcGFja2V0XCIsXCJkZWxldGVfbW9kdWxlXCIsXG4gICAgXCJkaXNjb25uZWN0X25vZGVcIixcImVsZW1lbnRcIixcImVyYXNlXCIsXCJleGl0XCIsXCJmbG9hdFwiLFwiZmxvYXRfdG9fbGlzdFwiLFxuICAgIFwiZ2FyYmFnZV9jb2xsZWN0XCIsXCJnZXRcIixcImdldF9rZXlzXCIsXCJncm91cF9sZWFkZXJcIixcImhhbHRcIixcImhkXCIsXG4gICAgXCJpbnRlZ2VyX3RvX2xpc3RcIixcImludGVybmFsX2JpZlwiLFwiaW9saXN0X3NpemVcIixcImlvbGlzdF90b19iaW5hcnlcIixcbiAgICBcImlzX2FsaXZlXCIsXCJpc19hdG9tXCIsXCJpc19iaW5hcnlcIixcImlzX2JpdHN0cmluZ1wiLFwiaXNfYm9vbGVhblwiLFxuICAgIFwiaXNfZmxvYXRcIixcImlzX2Z1bmN0aW9uXCIsXCJpc19pbnRlZ2VyXCIsXCJpc19saXN0XCIsXCJpc19udW1iZXJcIixcImlzX3BpZFwiLFxuICAgIFwiaXNfcG9ydFwiLFwiaXNfcHJvY2Vzc19hbGl2ZVwiLFwiaXNfcmVjb3JkXCIsXCJpc19yZWZlcmVuY2VcIixcImlzX3R1cGxlXCIsXG4gICAgXCJsZW5ndGhcIixcImxpbmtcIixcImxpc3RfdG9fYXRvbVwiLFwibGlzdF90b19iaW5hcnlcIixcImxpc3RfdG9fYml0c3RyaW5nXCIsXG4gICAgXCJsaXN0X3RvX2V4aXN0aW5nX2F0b21cIixcImxpc3RfdG9fZmxvYXRcIixcImxpc3RfdG9faW50ZWdlclwiLFxuICAgIFwibGlzdF90b19waWRcIixcImxpc3RfdG9fdHVwbGVcIixcImxvYWRfbW9kdWxlXCIsXCJtYWtlX3JlZlwiLFwibW9kdWxlX2xvYWRlZFwiLFxuICAgIFwibW9uaXRvcl9ub2RlXCIsXCJub2RlXCIsXCJub2RlX2xpbmtcIixcIm5vZGVfdW5saW5rXCIsXCJub2Rlc1wiLFwibm90YWxpdmVcIixcbiAgICBcIm5vd1wiLFwib3Blbl9wb3J0XCIsXCJwaWRfdG9fbGlzdFwiLFwicG9ydF9jbG9zZVwiLFwicG9ydF9jb21tYW5kXCIsXG4gICAgXCJwb3J0X2Nvbm5lY3RcIixcInBvcnRfY29udHJvbFwiLFwicHJlX2xvYWRlZFwiLFwicHJvY2Vzc19mbGFnXCIsXG4gICAgXCJwcm9jZXNzX2luZm9cIixcInByb2Nlc3Nlc1wiLFwicHVyZ2VfbW9kdWxlXCIsXCJwdXRcIixcInJlZ2lzdGVyXCIsXG4gICAgXCJyZWdpc3RlcmVkXCIsXCJyb3VuZFwiLFwic2VsZlwiLFwic2V0ZWxlbWVudFwiLFwic2l6ZVwiLFwic3Bhd25cIixcInNwYXduX2xpbmtcIixcbiAgICBcInNwYXduX21vbml0b3JcIixcInNwYXduX29wdFwiLFwic3BsaXRfYmluYXJ5XCIsXCJzdGF0aXN0aWNzXCIsXG4gICAgXCJ0ZXJtX3RvX2JpbmFyeVwiLFwidGltZVwiLFwidGhyb3dcIixcInRsXCIsXCJ0cnVuY1wiLFwidHVwbGVfc2l6ZVwiLFxuICAgIFwidHVwbGVfdG9fbGlzdFwiLFwidW5saW5rXCIsXCJ1bnJlZ2lzdGVyXCIsXCJ3aGVyZWlzXCJdO1xuXG4vLyB1cHBlciBjYXNlOiBbQS1aXSBbw5gtw55dIFvDgC3Dll1cbi8vIGxvd2VyIGNhc2U6IFthLXpdIFvDny3Dtl0gW8O4LcO/XVxuICB2YXIgYW51bVJFICAgICAgID0gL1tcXHdAw5gtw57DgC3DlsOfLcO2w7gtw79dLztcbiAgdmFyIGVzY2FwZXNSRSAgICA9XG4gICAgL1swLTddezEsM318W2JkZWZucnN0dlxcXFxcIiddfFxcXlthLXpBLVpdfHhbMC05YS16QS1aXXsyfXx4e1swLTlhLXpBLVpdK30vO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gdG9rZW5pemVyXG5cbiAgZnVuY3Rpb24gdG9rZW5pemVyKHN0cmVhbSxzdGF0ZSkge1xuICAgIC8vIGluIG11bHRpLWxpbmUgc3RyaW5nXG4gICAgaWYgKHN0YXRlLmluX3N0cmluZykge1xuICAgICAgc3RhdGUuaW5fc3RyaW5nID0gKCFkb3VibGVRdW90ZShzdHJlYW0pKTtcbiAgICAgIHJldHVybiBydmFsKHN0YXRlLHN0cmVhbSxcInN0cmluZ1wiKTtcbiAgICB9XG5cbiAgICAvLyBpbiBtdWx0aS1saW5lIGF0b21cbiAgICBpZiAoc3RhdGUuaW5fYXRvbSkge1xuICAgICAgc3RhdGUuaW5fYXRvbSA9ICghc2luZ2xlUXVvdGUoc3RyZWFtKSk7XG4gICAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sXCJhdG9tXCIpO1xuICAgIH1cblxuICAgIC8vIHdoaXRlc3BhY2VcbiAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgIHJldHVybiBydmFsKHN0YXRlLHN0cmVhbSxcIndoaXRlc3BhY2VcIik7XG4gICAgfVxuXG4gICAgLy8gYXR0cmlidXRlcyBhbmQgdHlwZSBzcGVjc1xuICAgIGlmICghcGVla1Rva2VuKHN0YXRlKSAmJlxuICAgICAgICBzdHJlYW0ubWF0Y2goLy1cXHMqW2EtesOfLcO2w7gtw79dW1xcd8OYLcOew4Atw5bDny3DtsO4LcO/XSovKSkge1xuICAgICAgaWYgKGlzX21lbWJlcihzdHJlYW0uY3VycmVudCgpLHR5cGVXb3JkcykpIHtcbiAgICAgICAgcmV0dXJuIHJ2YWwoc3RhdGUsc3RyZWFtLFwidHlwZVwiKTtcbiAgICAgIH1lbHNle1xuICAgICAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sXCJhdHRyaWJ1dGVcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgIC8vIGNvbW1lbnRcbiAgICBpZiAoY2ggPT0gJyUnKSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sXCJjb21tZW50XCIpO1xuICAgIH1cblxuICAgIC8vIGNvbG9uXG4gICAgaWYgKGNoID09IFwiOlwiKSB7XG4gICAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sXCJjb2xvblwiKTtcbiAgICB9XG5cbiAgICAvLyBtYWNyb1xuICAgIGlmIChjaCA9PSAnPycpIHtcbiAgICAgIHN0cmVhbS5lYXRTcGFjZSgpO1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKGFudW1SRSk7XG4gICAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sXCJtYWNyb1wiKTtcbiAgICB9XG5cbiAgICAvLyByZWNvcmRcbiAgICBpZiAoY2ggPT0gXCIjXCIpIHtcbiAgICAgIHN0cmVhbS5lYXRTcGFjZSgpO1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKGFudW1SRSk7XG4gICAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sXCJyZWNvcmRcIik7XG4gICAgfVxuXG4gICAgLy8gZG9sbGFyIGVzY2FwZVxuICAgIGlmIChjaCA9PSBcIiRcIikge1xuICAgICAgaWYgKHN0cmVhbS5uZXh0KCkgPT0gXCJcXFxcXCIgJiYgIXN0cmVhbS5tYXRjaChlc2NhcGVzUkUpKSB7XG4gICAgICAgIHJldHVybiBydmFsKHN0YXRlLHN0cmVhbSxcImVycm9yXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJ2YWwoc3RhdGUsc3RyZWFtLFwibnVtYmVyXCIpO1xuICAgIH1cblxuICAgIC8vIGRvdFxuICAgIGlmIChjaCA9PSBcIi5cIikge1xuICAgICAgcmV0dXJuIHJ2YWwoc3RhdGUsc3RyZWFtLFwiZG90XCIpO1xuICAgIH1cblxuICAgIC8vIHF1b3RlZCBhdG9tXG4gICAgaWYgKGNoID09ICdcXCcnKSB7XG4gICAgICBpZiAoIShzdGF0ZS5pbl9hdG9tID0gKCFzaW5nbGVRdW90ZShzdHJlYW0pKSkpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXFxzKlxcL1xccypbMC05XS8sZmFsc2UpKSB7XG4gICAgICAgICAgc3RyZWFtLm1hdGNoKC9cXHMqXFwvXFxzKlswLTldLyx0cnVlKTtcbiAgICAgICAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sXCJmdW5cIik7ICAgICAgLy8gJ2YnLzAgc3R5bGUgZnVuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXFxzKlxcKC8sZmFsc2UpIHx8IHN0cmVhbS5tYXRjaCgvXFxzKjovLGZhbHNlKSkge1xuICAgICAgICAgIHJldHVybiBydmFsKHN0YXRlLHN0cmVhbSxcImZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sXCJhdG9tXCIpO1xuICAgIH1cblxuICAgIC8vIHN0cmluZ1xuICAgIGlmIChjaCA9PSAnXCInKSB7XG4gICAgICBzdGF0ZS5pbl9zdHJpbmcgPSAoIWRvdWJsZVF1b3RlKHN0cmVhbSkpO1xuICAgICAgcmV0dXJuIHJ2YWwoc3RhdGUsc3RyZWFtLFwic3RyaW5nXCIpO1xuICAgIH1cblxuICAgIC8vIHZhcmlhYmxlXG4gICAgaWYgKC9bQS1aX8OYLcOew4Atw5ZdLy50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKGFudW1SRSk7XG4gICAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sXCJ2YXJpYWJsZVwiKTtcbiAgICB9XG5cbiAgICAvLyBhdG9tL2tleXdvcmQvQklGL2Z1bmN0aW9uXG4gICAgaWYgKC9bYS16X8OfLcO2w7gtw79dLy50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKGFudW1SRSk7XG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1xccypcXC9cXHMqWzAtOV0vLGZhbHNlKSkge1xuICAgICAgICBzdHJlYW0ubWF0Y2goL1xccypcXC9cXHMqWzAtOV0vLHRydWUpO1xuICAgICAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sXCJmdW5cIik7ICAgICAgLy8gZi8wIHN0eWxlIGZ1blxuICAgICAgfVxuXG4gICAgICB2YXIgdyA9IHN0cmVhbS5jdXJyZW50KCk7XG5cbiAgICAgIGlmIChpc19tZW1iZXIodyxrZXl3b3JkV29yZHMpKSB7XG4gICAgICAgIHJldHVybiBydmFsKHN0YXRlLHN0cmVhbSxcImtleXdvcmRcIik7XG4gICAgICB9ZWxzZSBpZiAoaXNfbWVtYmVyKHcsb3BlcmF0b3JBdG9tV29yZHMpKSB7XG4gICAgICAgIHJldHVybiBydmFsKHN0YXRlLHN0cmVhbSxcIm9wZXJhdG9yXCIpO1xuICAgICAgfWVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXFxzKlxcKC8sZmFsc2UpKSB7XG4gICAgICAgIC8vICdwdXQnIGFuZCAnZXJsYW5nOnB1dCcgYXJlIGJpZnMsICdmb286cHV0JyBpcyBub3RcbiAgICAgICAgaWYgKGlzX21lbWJlcih3LGJpZldvcmRzKSAmJlxuICAgICAgICAgICAgKChwZWVrVG9rZW4oc3RhdGUpLnRva2VuICE9IFwiOlwiKSB8fFxuICAgICAgICAgICAgIChwZWVrVG9rZW4oc3RhdGUsMikudG9rZW4gPT0gXCJlcmxhbmdcIikpKSB7XG4gICAgICAgICAgcmV0dXJuIHJ2YWwoc3RhdGUsc3RyZWFtLFwiYnVpbHRpblwiKTtcbiAgICAgICAgfWVsc2UgaWYgKGlzX21lbWJlcih3LGd1YXJkV29yZHMpKSB7XG4gICAgICAgICAgcmV0dXJuIHJ2YWwoc3RhdGUsc3RyZWFtLFwiZ3VhcmRcIik7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHJldHVybiBydmFsKHN0YXRlLHN0cmVhbSxcImZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICB9ZWxzZSBpZiAobG9va2FoZWFkKHN0cmVhbSkgPT0gXCI6XCIpIHtcbiAgICAgICAgaWYgKHcgPT0gXCJlcmxhbmdcIikge1xuICAgICAgICAgIHJldHVybiBydmFsKHN0YXRlLHN0cmVhbSxcImJ1aWx0aW5cIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJ2YWwoc3RhdGUsc3RyZWFtLFwiZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgIH1lbHNlIGlmIChpc19tZW1iZXIodyxbXCJ0cnVlXCIsXCJmYWxzZVwiXSkpIHtcbiAgICAgICAgcmV0dXJuIHJ2YWwoc3RhdGUsc3RyZWFtLFwiYm9vbGVhblwiKTtcbiAgICAgIH1lbHNle1xuICAgICAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sXCJhdG9tXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG51bWJlclxuICAgIHZhciBkaWdpdFJFICAgICAgPSAvWzAtOV0vO1xuICAgIHZhciByYWRpeFJFICAgICAgPSAvWzAtOWEtekEtWl0vOyAgICAgICAgIC8vIDM2I3paIHN0eWxlIGludFxuICAgIGlmIChkaWdpdFJFLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoZGlnaXRSRSk7XG4gICAgICBpZiAoc3RyZWFtLmVhdCgnIycpKSB7ICAgICAgICAgICAgICAgIC8vIDM2I2FaICBzdHlsZSBpbnRlZ2VyXG4gICAgICAgIGlmICghc3RyZWFtLmVhdFdoaWxlKHJhZGl4UkUpKSB7XG4gICAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTsgICAgICAgICAgICAgICAgIC8vXCIzNiNcIiAtIHN5bnRheCBlcnJvclxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoJy4nKSkgeyAgICAgICAvLyBmbG9hdFxuICAgICAgICBpZiAoIXN0cmVhbS5lYXRXaGlsZShkaWdpdFJFKSkge1xuICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7ICAgICAgICAvLyBcIjMuXCIgLSBwcm9iYWJseSBlbmQgb2YgZnVuY3Rpb25cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLmVhdCgvW2VFXS8pKSB7ICAgICAgICAvLyBmbG9hdCB3aXRoIGV4cG9uZW50XG4gICAgICAgICAgICBpZiAoc3RyZWFtLmVhdCgvWy0rXS8pKSB7XG4gICAgICAgICAgICAgIGlmICghc3RyZWFtLmVhdFdoaWxlKGRpZ2l0UkUpKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcCgyKTsgICAgICAgICAgICAvLyBcIjJlLVwiIC0gc3ludGF4IGVycm9yXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICghc3RyZWFtLmVhdFdoaWxlKGRpZ2l0UkUpKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTsgICAgICAgICAgICAvLyBcIjJlXCIgLSBzeW50YXggZXJyb3JcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJ2YWwoc3RhdGUsc3RyZWFtLFwibnVtYmVyXCIpOyAgIC8vIG5vcm1hbCBpbnRlZ2VyXG4gICAgfVxuXG4gICAgLy8gb3BlbiBwYXJlbnNcbiAgICBpZiAobm9uZ3JlZWR5KHN0cmVhbSxvcGVuUGFyZW5SRSxvcGVuUGFyZW5Xb3JkcykpIHtcbiAgICAgIHJldHVybiBydmFsKHN0YXRlLHN0cmVhbSxcIm9wZW5fcGFyZW5cIik7XG4gICAgfVxuXG4gICAgLy8gY2xvc2UgcGFyZW5zXG4gICAgaWYgKG5vbmdyZWVkeShzdHJlYW0sY2xvc2VQYXJlblJFLGNsb3NlUGFyZW5Xb3JkcykpIHtcbiAgICAgIHJldHVybiBydmFsKHN0YXRlLHN0cmVhbSxcImNsb3NlX3BhcmVuXCIpO1xuICAgIH1cblxuICAgIC8vIHNlcGFyYXRvcnNcbiAgICBpZiAoZ3JlZWR5KHN0cmVhbSxzZXBhcmF0b3JSRSxzZXBhcmF0b3JXb3JkcykpIHtcbiAgICAgIHJldHVybiBydmFsKHN0YXRlLHN0cmVhbSxcInNlcGFyYXRvclwiKTtcbiAgICB9XG5cbiAgICAvLyBvcGVyYXRvcnNcbiAgICBpZiAoZ3JlZWR5KHN0cmVhbSxvcGVyYXRvclN5bWJvbFJFLG9wZXJhdG9yU3ltYm9sV29yZHMpKSB7XG4gICAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sXCJvcGVyYXRvclwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnZhbChzdGF0ZSxzdHJlYW0sbnVsbCk7XG4gIH1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHV0aWxpdGllc1xuICBmdW5jdGlvbiBub25ncmVlZHkoc3RyZWFtLHJlLHdvcmRzKSB7XG4gICAgaWYgKHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoID09IDEgJiYgcmUudGVzdChzdHJlYW0uY3VycmVudCgpKSkge1xuICAgICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICAgIHdoaWxlIChyZS50ZXN0KHN0cmVhbS5wZWVrKCkpKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIGlmIChpc19tZW1iZXIoc3RyZWFtLmN1cnJlbnQoKSx3b3JkcykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RyZWFtLmJhY2tVcChzdHJlYW0uY3VycmVudCgpLmxlbmd0aC0xKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ3JlZWR5KHN0cmVhbSxyZSx3b3Jkcykge1xuICAgIGlmIChzdHJlYW0uY3VycmVudCgpLmxlbmd0aCA9PSAxICYmIHJlLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkpIHtcbiAgICAgIHdoaWxlIChyZS50ZXN0KHN0cmVhbS5wZWVrKCkpKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoMCA8IHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoKSB7XG4gICAgICAgIGlmIChpc19tZW1iZXIoc3RyZWFtLmN1cnJlbnQoKSx3b3JkcykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZG91YmxlUXVvdGUoc3RyZWFtKSB7XG4gICAgcmV0dXJuIHF1b3RlKHN0cmVhbSwgJ1wiJywgJ1xcXFwnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpbmdsZVF1b3RlKHN0cmVhbSkge1xuICAgIHJldHVybiBxdW90ZShzdHJlYW0sJ1xcJycsJ1xcXFwnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHF1b3RlKHN0cmVhbSxxdW90ZUNoYXIsZXNjYXBlQ2hhcikge1xuICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7XG4gICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgICAgaWYgKGNoID09IHF1b3RlQ2hhcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1lbHNlIGlmIChjaCA9PSBlc2NhcGVDaGFyKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvb2thaGVhZChzdHJlYW0pIHtcbiAgICB2YXIgbSA9IHN0cmVhbS5tYXRjaCgvKFtcXG5cXHNdK3wlW15cXG5dKlxcbikqKC4pLyxmYWxzZSk7XG4gICAgcmV0dXJuIG0gPyBtLnBvcCgpIDogXCJcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzX21lbWJlcihlbGVtZW50LGxpc3QpIHtcbiAgICByZXR1cm4gKC0xIDwgbGlzdC5pbmRleE9mKGVsZW1lbnQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJ2YWwoc3RhdGUsc3RyZWFtLHR5cGUpIHtcblxuICAgIC8vIHBhcnNlIHN0YWNrXG4gICAgcHVzaFRva2VuKHN0YXRlLHJlYWxUb2tlbih0eXBlLHN0cmVhbSkpO1xuXG4gICAgLy8gbWFwIGVybGFuZyB0b2tlbiB0eXBlIHRvIENvZGVNaXJyb3Igc3R5bGUgY2xhc3NcbiAgICAvLyAgICAgZXJsYW5nICAgICAgICAgICAgIC0+IENvZGVNaXJyb3IgdGFnXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiYXRvbVwiOiAgICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgY2FzZSBcImF0dHJpYnV0ZVwiOiAgIHJldHVybiBcImF0dHJpYnV0ZVwiO1xuICAgICAgY2FzZSBcImJvb2xlYW5cIjogICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgIGNhc2UgXCJidWlsdGluXCI6ICAgICByZXR1cm4gXCJidWlsdGluXCI7XG4gICAgICBjYXNlIFwiY2xvc2VfcGFyZW5cIjogcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwiY29sb25cIjogICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwiY29tbWVudFwiOiAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgY2FzZSBcImRvdFwiOiAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcImVycm9yXCI6ICAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgICBjYXNlIFwiZnVuXCI6ICAgICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6ICAgIHJldHVybiBcInRhZ1wiO1xuICAgICAgY2FzZSBcImd1YXJkXCI6ICAgICAgIHJldHVybiBcInByb3BlcnR5XCI7XG4gICAgICBjYXNlIFwia2V5d29yZFwiOiAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgY2FzZSBcIm1hY3JvXCI6ICAgICAgIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjogICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIGNhc2UgXCJvcGVuX3BhcmVuXCI6ICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJvcGVyYXRvclwiOiAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgY2FzZSBcInJlY29yZFwiOiAgICAgIHJldHVybiBcImJyYWNrZXRcIjtcbiAgICAgIGNhc2UgXCJzZXBhcmF0b3JcIjogICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjogICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIGNhc2UgXCJ0eXBlXCI6ICAgICAgICByZXR1cm4gXCJkZWZcIjtcbiAgICAgIGNhc2UgXCJ2YXJpYWJsZVwiOiAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgICAgZGVmYXVsdDogICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhVG9rZW4odG9rLGNvbCxpbmQsdHlwKSB7XG4gICAgcmV0dXJuIHt0b2tlbjogIHRvayxcbiAgICAgICAgICAgIGNvbHVtbjogY29sLFxuICAgICAgICAgICAgaW5kZW50OiBpbmQsXG4gICAgICAgICAgICB0eXBlOiAgIHR5cH07XG4gIH1cblxuICBmdW5jdGlvbiByZWFsVG9rZW4odHlwZSxzdHJlYW0pIHtcbiAgICByZXR1cm4gYVRva2VuKHN0cmVhbS5jdXJyZW50KCksXG4gICAgICAgICAgICAgICAgIHN0cmVhbS5jb2x1bW4oKSxcbiAgICAgICAgICAgICAgICAgc3RyZWFtLmluZGVudGF0aW9uKCksXG4gICAgICAgICAgICAgICAgIHR5cGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmFrZVRva2VuKHR5cGUpIHtcbiAgICByZXR1cm4gYVRva2VuKHR5cGUsMCwwLHR5cGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVla1Rva2VuKHN0YXRlLGRlcHRoKSB7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnRva2VuU3RhY2subGVuZ3RoO1xuICAgIHZhciBkZXAgPSAoZGVwdGggPyBkZXB0aCA6IDEpO1xuXG4gICAgaWYgKGxlbiA8IGRlcCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuU3RhY2tbbGVuLWRlcF07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHVzaFRva2VuKHN0YXRlLHRva2VuKSB7XG5cbiAgICBpZiAoISh0b2tlbi50eXBlID09IFwiY29tbWVudFwiIHx8IHRva2VuLnR5cGUgPT0gXCJ3aGl0ZXNwYWNlXCIpKSB7XG4gICAgICBzdGF0ZS50b2tlblN0YWNrID0gbWF5YmVfZHJvcF9wcmUoc3RhdGUudG9rZW5TdGFjayx0b2tlbik7XG4gICAgICBzdGF0ZS50b2tlblN0YWNrID0gbWF5YmVfZHJvcF9wb3N0KHN0YXRlLnRva2VuU3RhY2spO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1heWJlX2Ryb3BfcHJlKHMsdG9rZW4pIHtcbiAgICB2YXIgbGFzdCA9IHMubGVuZ3RoLTE7XG5cbiAgICBpZiAoMCA8IGxhc3QgJiYgc1tsYXN0XS50eXBlID09PSBcInJlY29yZFwiICYmIHRva2VuLnR5cGUgPT09IFwiZG90XCIpIHtcbiAgICAgIHMucG9wKCk7XG4gICAgfWVsc2UgaWYgKDAgPCBsYXN0ICYmIHNbbGFzdF0udHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICBzLnBvcCgpO1xuICAgICAgcy5wdXNoKHRva2VuKTtcbiAgICB9ZWxzZXtcbiAgICAgIHMucHVzaCh0b2tlbik7XG4gICAgfVxuICAgIHJldHVybiBzO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF5YmVfZHJvcF9wb3N0KHMpIHtcbiAgICBpZiAoIXMubGVuZ3RoKSByZXR1cm4gc1xuICAgIHZhciBsYXN0ID0gcy5sZW5ndGgtMTtcblxuICAgIGlmIChzW2xhc3RdLnR5cGUgPT09IFwiZG90XCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKGxhc3QgPiAxICYmIHNbbGFzdF0udHlwZSA9PT0gXCJmdW5cIiAmJiBzW2xhc3QtMV0udG9rZW4gPT09IFwiZnVuXCIpIHtcbiAgICAgIHJldHVybiBzLnNsaWNlKDAsbGFzdC0xKTtcbiAgICB9XG4gICAgc3dpdGNoIChzW2xhc3RdLnRva2VuKSB7XG4gICAgICBjYXNlIFwifVwiOiAgICByZXR1cm4gZChzLHtnOltcIntcIl19KTtcbiAgICAgIGNhc2UgXCJdXCI6ICAgIHJldHVybiBkKHMse2k6W1wiW1wiXX0pO1xuICAgICAgY2FzZSBcIilcIjogICAgcmV0dXJuIGQocyx7aTpbXCIoXCJdfSk7XG4gICAgICBjYXNlIFwiPj5cIjogICByZXR1cm4gZChzLHtpOltcIjw8XCJdfSk7XG4gICAgICBjYXNlIFwiZW5kXCI6ICByZXR1cm4gZChzLHtpOltcImJlZ2luXCIsXCJjYXNlXCIsXCJmdW5cIixcImlmXCIsXCJyZWNlaXZlXCIsXCJ0cnlcIl19KTtcbiAgICAgIGNhc2UgXCIsXCI6ICAgIHJldHVybiBkKHMse2U6W1wiYmVnaW5cIixcInRyeVwiLFwid2hlblwiLFwiLT5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIixcIixcIihcIixcIltcIixcIntcIixcIjw8XCJdfSk7XG4gICAgICBjYXNlIFwiLT5cIjogICByZXR1cm4gZChzLHtyOltcIndoZW5cIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbTpbXCJ0cnlcIixcImlmXCIsXCJjYXNlXCIsXCJyZWNlaXZlXCJdfSk7XG4gICAgICBjYXNlIFwiO1wiOiAgICByZXR1cm4gZChzLHtFOltcImNhc2VcIixcImZ1blwiLFwiaWZcIixcInJlY2VpdmVcIixcInRyeVwiLFwid2hlblwiXX0pO1xuICAgICAgY2FzZSBcImNhdGNoXCI6cmV0dXJuIGQocyx7ZTpbXCJ0cnlcIl19KTtcbiAgICAgIGNhc2UgXCJvZlwiOiAgIHJldHVybiBkKHMse2U6W1wiY2FzZVwiXX0pO1xuICAgICAgY2FzZSBcImFmdGVyXCI6cmV0dXJuIGQocyx7ZTpbXCJyZWNlaXZlXCIsXCJ0cnlcIl19KTtcbiAgICAgIGRlZmF1bHQ6ICAgICByZXR1cm4gcztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkKHN0YWNrLHR0KSB7XG4gICAgLy8gc3RhY2sgaXMgYSBzdGFjayBvZiBUb2tlbiBvYmplY3RzLlxuICAgIC8vIHR0IGlzIGFuIG9iamVjdDsge3R5cGU6dG9rZW5zfVxuICAgIC8vIHR5cGUgaXMgYSBjaGFyLCB0b2tlbnMgaXMgYSBsaXN0IG9mIHRva2VuIHN0cmluZ3MuXG4gICAgLy8gVGhlIGZ1bmN0aW9uIHJldHVybnMgKHBvc3NpYmx5IHRydW5jYXRlZCkgc3RhY2suXG4gICAgLy8gSXQgd2lsbCBkZXNjZW5kIHRoZSBzdGFjaywgbG9va2luZyBmb3IgYSBUb2tlbiBzdWNoIHRoYXQgVG9rZW4udG9rZW5cbiAgICAvLyAgaXMgYSBtZW1iZXIgb2YgdG9rZW5zLiBJZiBpdCBkb2VzIG5vdCBmaW5kIHRoYXQsIGl0IHdpbGwgbm9ybWFsbHkgKGJ1dFxuICAgIC8vICBzZWUgXCJFXCIgYmVsb3cpIHJldHVybiBzdGFjay4gSWYgaXQgZG9lcyBmaW5kIGEgbWF0Y2gsIGl0IHdpbGwgcmVtb3ZlXG4gICAgLy8gIGFsbCB0aGUgVG9rZW5zIGJldHdlZW4gdGhlIHRvcCBhbmQgdGhlIG1hdGNoZWQgVG9rZW4uXG4gICAgLy8gSWYgdHlwZSBpcyBcIm1cIiwgdGhhdCBpcyBhbGwgaXQgZG9lcy5cbiAgICAvLyBJZiB0eXBlIGlzIFwiaVwiLCBpdCB3aWxsIGFsc28gcmVtb3ZlIHRoZSBtYXRjaGVkIFRva2VuIGFuZCB0aGUgdG9wIFRva2VuLlxuICAgIC8vIElmIHR5cGUgaXMgXCJnXCIsIGxpa2UgXCJpXCIsIGJ1dCBhZGQgYSBmYWtlIFwiZ3JvdXBcIiB0b2tlbiBhdCB0aGUgdG9wLlxuICAgIC8vIElmIHR5cGUgaXMgXCJyXCIsIGl0IHdpbGwgcmVtb3ZlIHRoZSBtYXRjaGVkIFRva2VuLCBidXQgbm90IHRoZSB0b3AgVG9rZW4uXG4gICAgLy8gSWYgdHlwZSBpcyBcImVcIiwgaXQgd2lsbCBrZWVwIHRoZSBtYXRjaGVkIFRva2VuIGJ1dCBub3QgdGhlIHRvcCBUb2tlbi5cbiAgICAvLyBJZiB0eXBlIGlzIFwiRVwiLCBpdCBiZWhhdmVzIGFzIGZvciB0eXBlIFwiZVwiLCBleGNlcHQgaWYgdGhlcmUgaXMgbm8gbWF0Y2gsXG4gICAgLy8gIGluIHdoaWNoIGNhc2UgaXQgd2lsbCByZXR1cm4gYW4gZW1wdHkgc3RhY2suXG5cbiAgICBmb3IgKHZhciB0eXBlIGluIHR0KSB7XG4gICAgICB2YXIgbGVuID0gc3RhY2subGVuZ3RoLTE7XG4gICAgICB2YXIgdG9rZW5zID0gdHRbdHlwZV07XG4gICAgICBmb3IgKHZhciBpID0gbGVuLTE7IC0xIDwgaSA7IGktLSkge1xuICAgICAgICBpZiAoaXNfbWVtYmVyKHN0YWNrW2ldLnRva2VuLHRva2VucykpIHtcbiAgICAgICAgICB2YXIgc3MgPSBzdGFjay5zbGljZSgwLGkpO1xuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFwibVwiOiByZXR1cm4gc3MuY29uY2F0KHN0YWNrW2ldKS5jb25jYXQoc3RhY2tbbGVuXSk7XG4gICAgICAgICAgICAgIGNhc2UgXCJyXCI6IHJldHVybiBzcy5jb25jYXQoc3RhY2tbbGVuXSk7XG4gICAgICAgICAgICAgIGNhc2UgXCJpXCI6IHJldHVybiBzcztcbiAgICAgICAgICAgICAgY2FzZSBcImdcIjogcmV0dXJuIHNzLmNvbmNhdChmYWtlVG9rZW4oXCJncm91cFwiKSk7XG4gICAgICAgICAgICAgIGNhc2UgXCJFXCI6IHJldHVybiBzcy5jb25jYXQoc3RhY2tbaV0pO1xuICAgICAgICAgICAgICBjYXNlIFwiZVwiOiByZXR1cm4gc3MuY29uY2F0KHN0YWNrW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICh0eXBlID09IFwiRVwiID8gW10gOiBzdGFjayk7XG4gIH1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGluZGVudGVyXG5cbiAgZnVuY3Rpb24gaW5kZW50ZXIoc3RhdGUsdGV4dEFmdGVyKSB7XG4gICAgdmFyIHQ7XG4gICAgdmFyIHVuaXQgPSBjbUNmZy5pbmRlbnRVbml0O1xuICAgIHZhciB3b3JkQWZ0ZXIgPSB3b3JkYWZ0ZXIodGV4dEFmdGVyKTtcbiAgICB2YXIgY3VyclQgPSBwZWVrVG9rZW4oc3RhdGUsMSk7XG4gICAgdmFyIHByZXZUID0gcGVla1Rva2VuKHN0YXRlLDIpO1xuXG4gICAgaWYgKHN0YXRlLmluX3N0cmluZyB8fCBzdGF0ZS5pbl9hdG9tKSB7XG4gICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgIH1lbHNlIGlmICghcHJldlQpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1lbHNlIGlmIChjdXJyVC50b2tlbiA9PSBcIndoZW5cIikge1xuICAgICAgcmV0dXJuIGN1cnJULmNvbHVtbit1bml0O1xuICAgIH1lbHNlIGlmICh3b3JkQWZ0ZXIgPT09IFwid2hlblwiICYmIHByZXZULnR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHByZXZULmluZGVudCt1bml0O1xuICAgIH1lbHNlIGlmICh3b3JkQWZ0ZXIgPT09IFwiKFwiICYmIGN1cnJULnRva2VuID09PSBcImZ1blwiKSB7XG4gICAgICByZXR1cm4gIGN1cnJULmNvbHVtbiszO1xuICAgIH1lbHNlIGlmICh3b3JkQWZ0ZXIgPT09IFwiY2F0Y2hcIiAmJiAodCA9IGdldFRva2VuKHN0YXRlLFtcInRyeVwiXSkpKSB7XG4gICAgICByZXR1cm4gdC5jb2x1bW47XG4gICAgfWVsc2UgaWYgKGlzX21lbWJlcih3b3JkQWZ0ZXIsW1wiZW5kXCIsXCJhZnRlclwiLFwib2ZcIl0pKSB7XG4gICAgICB0ID0gZ2V0VG9rZW4oc3RhdGUsW1wiYmVnaW5cIixcImNhc2VcIixcImZ1blwiLFwiaWZcIixcInJlY2VpdmVcIixcInRyeVwiXSk7XG4gICAgICByZXR1cm4gdCA/IHQuY29sdW1uIDogQ29kZU1pcnJvci5QYXNzO1xuICAgIH1lbHNlIGlmIChpc19tZW1iZXIod29yZEFmdGVyLGNsb3NlUGFyZW5Xb3JkcykpIHtcbiAgICAgIHQgPSBnZXRUb2tlbihzdGF0ZSxvcGVuUGFyZW5Xb3Jkcyk7XG4gICAgICByZXR1cm4gdCA/IHQuY29sdW1uIDogQ29kZU1pcnJvci5QYXNzO1xuICAgIH1lbHNlIGlmIChpc19tZW1iZXIoY3VyclQudG9rZW4sW1wiLFwiLFwifFwiLFwifHxcIl0pIHx8XG4gICAgICAgICAgICAgIGlzX21lbWJlcih3b3JkQWZ0ZXIsW1wiLFwiLFwifFwiLFwifHxcIl0pKSB7XG4gICAgICB0ID0gcG9zdGNvbW1hVG9rZW4oc3RhdGUpO1xuICAgICAgcmV0dXJuIHQgPyB0LmNvbHVtbit0LnRva2VuLmxlbmd0aCA6IHVuaXQ7XG4gICAgfWVsc2UgaWYgKGN1cnJULnRva2VuID09IFwiLT5cIikge1xuICAgICAgaWYgKGlzX21lbWJlcihwcmV2VC50b2tlbiwgW1wicmVjZWl2ZVwiLFwiY2FzZVwiLFwiaWZcIixcInRyeVwiXSkpIHtcbiAgICAgICAgcmV0dXJuIHByZXZULmNvbHVtbit1bml0K3VuaXQ7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgcmV0dXJuIHByZXZULmNvbHVtbit1bml0O1xuICAgICAgfVxuICAgIH1lbHNlIGlmIChpc19tZW1iZXIoY3VyclQudG9rZW4sb3BlblBhcmVuV29yZHMpKSB7XG4gICAgICByZXR1cm4gY3VyclQuY29sdW1uK2N1cnJULnRva2VuLmxlbmd0aDtcbiAgICB9ZWxzZXtcbiAgICAgIHQgPSBkZWZhdWx0VG9rZW4oc3RhdGUpO1xuICAgICAgcmV0dXJuIHRydXRoeSh0KSA/IHQuY29sdW1uK3VuaXQgOiAwO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdvcmRhZnRlcihzdHIpIHtcbiAgICB2YXIgbSA9IHN0ci5tYXRjaCgvLHxbYS16XSt8XFx9fFxcXXxcXCl8Pj58XFx8K3xcXCgvKTtcblxuICAgIHJldHVybiB0cnV0aHkobSkgJiYgKG0uaW5kZXggPT09IDApID8gbVswXSA6IFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiBwb3N0Y29tbWFUb2tlbihzdGF0ZSkge1xuICAgIHZhciBvYmpzID0gc3RhdGUudG9rZW5TdGFjay5zbGljZSgwLC0xKTtcbiAgICB2YXIgaSA9IGdldFRva2VuSW5kZXgob2JqcyxcInR5cGVcIixbXCJvcGVuX3BhcmVuXCJdKTtcblxuICAgIHJldHVybiB0cnV0aHkob2Jqc1tpXSkgPyBvYmpzW2ldIDogZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBkZWZhdWx0VG9rZW4oc3RhdGUpIHtcbiAgICB2YXIgb2JqcyA9IHN0YXRlLnRva2VuU3RhY2s7XG4gICAgdmFyIHN0b3AgPSBnZXRUb2tlbkluZGV4KG9ianMsXCJ0eXBlXCIsW1wib3Blbl9wYXJlblwiLFwic2VwYXJhdG9yXCIsXCJrZXl3b3JkXCJdKTtcbiAgICB2YXIgb3BlciA9IGdldFRva2VuSW5kZXgob2JqcyxcInR5cGVcIixbXCJvcGVyYXRvclwiXSk7XG5cbiAgICBpZiAodHJ1dGh5KHN0b3ApICYmIHRydXRoeShvcGVyKSAmJiBzdG9wIDwgb3Blcikge1xuICAgICAgcmV0dXJuIG9ianNbc3RvcCsxXTtcbiAgICB9IGVsc2UgaWYgKHRydXRoeShzdG9wKSkge1xuICAgICAgcmV0dXJuIG9ianNbc3RvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUb2tlbihzdGF0ZSx0b2tlbnMpIHtcbiAgICB2YXIgb2JqcyA9IHN0YXRlLnRva2VuU3RhY2s7XG4gICAgdmFyIGkgPSBnZXRUb2tlbkluZGV4KG9ianMsXCJ0b2tlblwiLHRva2Vucyk7XG5cbiAgICByZXR1cm4gdHJ1dGh5KG9ianNbaV0pID8gb2Jqc1tpXSA6IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VG9rZW5JbmRleChvYmpzLHByb3BuYW1lLHByb3B2YWxzKSB7XG5cbiAgICBmb3IgKHZhciBpID0gb2Jqcy5sZW5ndGgtMTsgLTEgPCBpIDsgaS0tKSB7XG4gICAgICBpZiAoaXNfbWVtYmVyKG9ianNbaV1bcHJvcG5hbWVdLHByb3B2YWxzKSkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJ1dGh5KHgpIHtcbiAgICByZXR1cm4gKHggIT09IGZhbHNlKSAmJiAoeCAhPSBudWxsKTtcbiAgfVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gdGhpcyBvYmplY3QgZGVmaW5lcyB0aGUgbW9kZVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTpcbiAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge3Rva2VuU3RhY2s6IFtdLFxuICAgICAgICAgICAgICAgIGluX3N0cmluZzogIGZhbHNlLFxuICAgICAgICAgICAgICAgIGluX2F0b206ICAgIGZhbHNlfTtcbiAgICAgIH0sXG5cbiAgICB0b2tlbjpcbiAgICAgIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRva2VuaXplcihzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH0sXG5cbiAgICBpbmRlbnQ6XG4gICAgICBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgICAgIHJldHVybiBpbmRlbnRlcihzdGF0ZSx0ZXh0QWZ0ZXIpO1xuICAgICAgfSxcblxuICAgIGxpbmVDb21tZW50OiBcIiVcIlxuICB9O1xufSk7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLy8gRmFjdG9yIHN5bnRheCBoaWdobGlnaHQgLSBzaW1wbGUgbW9kZVxuLy9cbi8vIGJ5IERpbWFnZSBTYXBlbGtpbiAoaHR0cHM6Ly9naXRodWIuY29tL2tlcmFicm9tc211KVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4vLi4vYWRkb24vbW9kZS9zaW1wbGVcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi8uLi9hZGRvbi9tb2RlL3NpbXBsZVwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVTaW1wbGVNb2RlKFwiZmFjdG9yXCIsIHtcbiAgICAvLyBUaGUgc3RhcnQgc3RhdGUgY29udGFpbnMgdGhlIHJ1bGVzIHRoYXQgYXJlIGludGlhbGx5IHVzZWRcbiAgICBzdGFydDogW1xuICAgICAgLy8gY29tbWVudHNcbiAgICAgIHtyZWdleDogLyM/IS4qLywgdG9rZW46IFwiY29tbWVudFwifSxcbiAgICAgIC8vIHN0cmluZ3MgXCJcIlwiLCBtdWx0aWxpbmUgLS0+IHN0YXRlXG4gICAgICB7cmVnZXg6IC9cIlwiXCIvLCB0b2tlbjogXCJzdHJpbmdcIiwgbmV4dDogXCJzdHJpbmczXCJ9LFxuICAgICAge3JlZ2V4OiAvKFNUUklORzopKFxccykvLCB0b2tlbjogW1wia2V5d29yZFwiLCBudWxsXSwgbmV4dDogXCJzdHJpbmcyXCJ9LFxuICAgICAge3JlZ2V4OiAvXFxTKj9cIi8sIHRva2VuOiBcInN0cmluZ1wiLCBuZXh0OiBcInN0cmluZ1wifSxcbiAgICAgIC8vIG51bWJlcnM6IGRlYywgaGV4LCB1bmljb2RlLCBiaW4sIGZyYWN0aW9uYWwsIGNvbXBsZXhcbiAgICAgIHtyZWdleDogLyg/OjB4W1xcZCxhLWZdKyl8KD86MG9bMC03XSspfCg/OjBiWzAsMV0rKXwoPzpcXC0/XFxkKy4/XFxkKikoPz1cXHMpLywgdG9rZW46IFwibnVtYmVyXCJ9LFxuICAgICAgLy97cmVnZXg6IC9bKy1dPy99IC8vZnJhY3Rpb25hbFxuICAgICAgLy8gZGVmaW5pdGlvbjogZGVmaW5pbmcgd29yZCwgZGVmaW5lZCB3b3JkLCBldGNcbiAgICAgIHtyZWdleDogLygoPzpHRU5FUklDKXxcXDo/XFw6KShcXHMrKShcXFMrKShcXHMrKShcXCgpLywgdG9rZW46IFtcImtleXdvcmRcIiwgbnVsbCwgXCJkZWZcIiwgbnVsbCwgXCJicmFja2V0XCJdLCBuZXh0OiBcInN0YWNrXCJ9LFxuICAgICAgLy8gbWV0aG9kIGRlZmluaXRpb246IGRlZmluaW5nIHdvcmQsIHR5cGUsIGRlZmluZWQgd29yZCwgZXRjXG4gICAgICB7cmVnZXg6IC8oTVxcOikoXFxzKykoXFxTKykoXFxzKykoXFxTKykvLCB0b2tlbjogW1wia2V5d29yZFwiLCBudWxsLCBcImRlZlwiLCBudWxsLCBcInRhZ1wiXX0sXG4gICAgICAvLyB2b2NhYnVsYXJ5IHVzaW5nIC0tPiBzdGF0ZVxuICAgICAge3JlZ2V4OiAvVVNJTkdcXDovLCB0b2tlbjogXCJrZXl3b3JkXCIsIG5leHQ6IFwidm9jYWJ1bGFyeVwifSxcbiAgICAgIC8vIHZvY2FidWxhcnkgZGVmaW5pdGlvbi91c2VcbiAgICAgIHtyZWdleDogLyhVU0VcXDp8SU5cXDopKFxccyspKFxcUyspKD89XFxzfCQpLywgdG9rZW46IFtcImtleXdvcmRcIiwgbnVsbCwgXCJ0YWdcIl19LFxuICAgICAgLy8gZGVmaW5pdGlvbjogYSBkZWZpbmluZyB3b3JkLCBkZWZpbmVkIHdvcmRcbiAgICAgIHtyZWdleDogLyhcXFMrXFw6KShcXHMrKShcXFMrKSg/PVxcc3wkKS8sIHRva2VuOiBbXCJrZXl3b3JkXCIsIG51bGwsIFwiZGVmXCJdfSxcbiAgICAgIC8vIFwia2V5d29yZHNcIiwgaW5jbC4gOyB0IGYgLiBbIF0geyB9IGRlZmluaW5nIHdvcmRzXG4gICAgICB7cmVnZXg6IC8oPzo7fFxcXFx8dHxmfGlmfGxvb3B8d2hpbGV8dW50aWx8ZG98UFJJVkFURT58PFBSSVZBVEV8XFwufFxcUypcXFt8XFxdfFxcUypcXHt8XFx9KSg/PVxcc3wkKS8sIHRva2VuOiBcImtleXdvcmRcIn0sXG4gICAgICAvLyA8Y29uc3RydWN0b3JzPiBhbmQgdGhlIGxpa2VcbiAgICAgIHtyZWdleDogL1xcUytbXFwpPlxcLlxcKlxcP10rKD89XFxzfCQpLywgdG9rZW46IFwiYnVpbHRpblwifSxcbiAgICAgIHtyZWdleDogL1tcXCk+PF0rXFxTKyg/PVxcc3wkKS8sIHRva2VuOiBcImJ1aWx0aW5cIn0sXG4gICAgICAvLyBvcGVyYXRvcnNcbiAgICAgIHtyZWdleDogLyg/OltcXCtcXC1cXD1cXC9cXCo8Pl0pKD89XFxzfCQpLywgdG9rZW46IFwia2V5d29yZFwifSxcbiAgICAgIC8vIGFueSBpZCAoPylcbiAgICAgIHtyZWdleDogL1xcUysvLCB0b2tlbjogXCJ2YXJpYWJsZVwifSxcbiAgICAgIHtyZWdleDogL1xccyt8Li8sIHRva2VuOiBudWxsfVxuICAgIF0sXG4gICAgdm9jYWJ1bGFyeTogW1xuICAgICAge3JlZ2V4OiAvOy8sIHRva2VuOiBcImtleXdvcmRcIiwgbmV4dDogXCJzdGFydFwifSxcbiAgICAgIHtyZWdleDogL1xcUysvLCB0b2tlbjogXCJ0YWdcIn0sXG4gICAgICB7cmVnZXg6IC9cXHMrfC4vLCB0b2tlbjogbnVsbH1cbiAgICBdLFxuICAgIHN0cmluZzogW1xuICAgICAge3JlZ2V4OiAvKD86W15cXFxcXXxcXFxcLikqP1wiLywgdG9rZW46IFwic3RyaW5nXCIsIG5leHQ6IFwic3RhcnRcIn0sXG4gICAgICB7cmVnZXg6IC8uKi8sIHRva2VuOiBcInN0cmluZ1wifVxuICAgIF0sXG4gICAgc3RyaW5nMjogW1xuICAgICAge3JlZ2V4OiAvXjsvLCB0b2tlbjogXCJrZXl3b3JkXCIsIG5leHQ6IFwic3RhcnRcIn0sXG4gICAgICB7cmVnZXg6IC8uKi8sIHRva2VuOiBcInN0cmluZ1wifVxuICAgIF0sXG4gICAgc3RyaW5nMzogW1xuICAgICAge3JlZ2V4OiAvKD86W15cXFxcXXxcXFxcLikqP1wiXCJcIi8sIHRva2VuOiBcInN0cmluZ1wiLCBuZXh0OiBcInN0YXJ0XCJ9LFxuICAgICAge3JlZ2V4OiAvLiovLCB0b2tlbjogXCJzdHJpbmdcIn1cbiAgICBdLFxuICAgIHN0YWNrOiBbXG4gICAgICB7cmVnZXg6IC9cXCkvLCB0b2tlbjogXCJicmFja2V0XCIsIG5leHQ6IFwic3RhcnRcIn0sXG4gICAgICB7cmVnZXg6IC8tLS8sIHRva2VuOiBcImJyYWNrZXRcIn0sXG4gICAgICB7cmVnZXg6IC9cXFMrLywgdG9rZW46IFwibWV0YVwifSxcbiAgICAgIHtyZWdleDogL1xccyt8Li8sIHRva2VuOiBudWxsfVxuICAgIF0sXG4gICAgLy8gVGhlIG1ldGEgcHJvcGVydHkgY29udGFpbnMgZ2xvYmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtb2RlLiBJdFxuICAgIC8vIGNhbiBjb250YWluIHByb3BlcnRpZXMgbGlrZSBsaW5lQ29tbWVudCwgd2hpY2ggYXJlIHN1cHBvcnRlZCBieVxuICAgIC8vIGFsbCBtb2RlcywgYW5kIGFsc28gZGlyZWN0aXZlcyBsaWtlIGRvbnRJbmRlbnRTdGF0ZXMsIHdoaWNoIGFyZVxuICAgIC8vIHNwZWNpZmljIHRvIHNpbXBsZSBtb2Rlcy5cbiAgICBtZXRhOiB7XG4gICAgICBkb250SW5kZW50U3RhdGVzOiBbXCJzdGFydFwiLCBcInZvY2FidWxhcnlcIiwgXCJzdHJpbmdcIiwgXCJzdHJpbmczXCIsIFwic3RhY2tcIl0sXG4gICAgICBsaW5lQ29tbWVudDogWyBcIiFcIiwgXCIjIVwiIF1cbiAgICB9XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1mYWN0b3JcIiwgXCJmYWN0b3JcIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZmNsXCIsIGZ1bmN0aW9uKGNvbmZpZykge1xuICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0O1xuXG4gIHZhciBrZXl3b3JkcyA9IHtcbiAgICAgIFwidGVybVwiOiB0cnVlLFxuICAgICAgXCJtZXRob2RcIjogdHJ1ZSwgXCJhY2N1XCI6IHRydWUsXG4gICAgICBcInJ1bGVcIjogdHJ1ZSwgXCJ0aGVuXCI6IHRydWUsIFwiaXNcIjogdHJ1ZSwgXCJhbmRcIjogdHJ1ZSwgXCJvclwiOiB0cnVlLFxuICAgICAgXCJpZlwiOiB0cnVlLCBcImRlZmF1bHRcIjogdHJ1ZVxuICB9O1xuXG4gIHZhciBzdGFydF9ibG9ja3MgPSB7XG4gICAgICBcInZhcl9pbnB1dFwiOiB0cnVlLFxuICAgICAgXCJ2YXJfb3V0cHV0XCI6IHRydWUsXG4gICAgICBcImZ1enppZnlcIjogdHJ1ZSxcbiAgICAgIFwiZGVmdXp6aWZ5XCI6IHRydWUsXG4gICAgICBcImZ1bmN0aW9uX2Jsb2NrXCI6IHRydWUsXG4gICAgICBcInJ1bGVibG9ja1wiOiB0cnVlXG4gIH07XG5cbiAgdmFyIGVuZF9ibG9ja3MgPSB7XG4gICAgICBcImVuZF9ydWxlYmxvY2tcIjogdHJ1ZSxcbiAgICAgIFwiZW5kX2RlZnV6emlmeVwiOiB0cnVlLFxuICAgICAgXCJlbmRfZnVuY3Rpb25fYmxvY2tcIjogdHJ1ZSxcbiAgICAgIFwiZW5kX2Z1enppZnlcIjogdHJ1ZSxcbiAgICAgIFwiZW5kX3ZhclwiOiB0cnVlXG4gIH07XG5cbiAgdmFyIGF0b21zID0ge1xuICAgICAgXCJ0cnVlXCI6IHRydWUsIFwiZmFsc2VcIjogdHJ1ZSwgXCJuYW5cIjogdHJ1ZSxcbiAgICAgIFwicmVhbFwiOiB0cnVlLCBcIm1pblwiOiB0cnVlLCBcIm1heFwiOiB0cnVlLCBcImNvZ1wiOiB0cnVlLCBcImNvZ3NcIjogdHJ1ZVxuICB9O1xuXG4gIHZhciBpc09wZXJhdG9yQ2hhciA9IC9bK1xcLSomXiU6PTw+IXxcXC9dLztcblxuICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG5cbiAgICBpZiAoL1tcXGRcXC5dLy50ZXN0KGNoKSkge1xuICAgICAgaWYgKGNoID09IFwiLlwiKSB7XG4gICAgICAgIHN0cmVhbS5tYXRjaCgvXlswLTldKyhbZUVdW1xcLStdP1swLTldKyk/Lyk7XG4gICAgICB9IGVsc2UgaWYgKGNoID09IFwiMFwiKSB7XG4gICAgICAgIHN0cmVhbS5tYXRjaCgvXlt4WF1bMC05YS1mQS1GXSsvKSB8fCBzdHJlYW0ubWF0Y2goL14wWzAtN10rLyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0ubWF0Y2goL15bMC05XSpcXC4/WzAtOV0qKFtlRV1bXFwtK10/WzAtOV0rKT8vKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH1cblxuICAgIGlmIChjaCA9PSBcIi9cIiB8fCBjaCA9PSBcIihcIikge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50O1xuICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIvXCIpKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH1cbiAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfXFx4YTEtXFx1ZmZmZl0vKTtcblxuICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikgfHxcbiAgICAgICAgc3RhcnRfYmxvY2tzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikgfHxcbiAgICAgICAgZW5kX2Jsb2Nrcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7XG4gICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgfVxuICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gXCJhdG9tXCI7XG4gICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7XG4gICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYgKChjaCA9PSBcIi9cIiB8fCBjaCA9PSBcIilcIikgJiYgbWF5YmVFbmQpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIqXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2KSB7XG4gICAgdGhpcy5pbmRlbnRlZCA9IGluZGVudGVkO1xuICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5hbGlnbiA9IGFsaWduO1xuICAgIHRoaXMucHJldiA9IHByZXY7XG4gIH1cblxuICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7XG4gICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZS5pbmRlbnRlZCwgY29sLCB0eXBlLCBudWxsLCBzdGF0ZS5jb250ZXh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHtcbiAgICBpZiAoIXN0YXRlLmNvbnRleHQucHJldikgcmV0dXJuO1xuICAgIHZhciB0ID0gc3RhdGUuY29udGV4dC50eXBlO1xuICAgIGlmICh0ID09IFwiZW5kX2Jsb2NrXCIpXG4gICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmNvbnRleHQuaW5kZW50ZWQ7XG4gICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG4gIH1cblxuICAvLyBJbnRlcmZhY2VcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRva2VuaXplOiBudWxsLFxuICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsIFwidG9wXCIsIGZhbHNlKSxcbiAgICAgICAgaW5kZW50ZWQ6IDAsXG4gICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDtcbiAgICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSBmYWxzZTtcbiAgICAgICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcblxuICAgICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgaWYgKHN0eWxlID09IFwiY29tbWVudFwiKSByZXR1cm4gc3R5bGU7XG4gICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gdHJ1ZTtcblxuICAgICAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChzdGFydF9ibG9ja3MucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCJlbmRfYmxvY2tcIik7XG4gICAgICAgIGVsc2UgaWYgKGVuZF9ibG9ja3MucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgIHBvcENvbnRleHQoc3RhdGUpO1xuXG4gICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlICYmIHN0YXRlLnRva2VuaXplICE9IG51bGwpIHJldHVybiAwO1xuICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7XG5cbiAgICAgIHZhciBjbG9zaW5nID0gZW5kX2Jsb2Nrcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh0ZXh0QWZ0ZXIpO1xuICAgICAgaWYgKGN0eC5hbGlnbikgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTtcbiAgICAgIGVsc2UgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpO1xuICAgIH0sXG5cbiAgICBlbGVjdHJpY0NoYXJzOiBcInJ5a1wiLFxuICAgIGZvbGQ6IFwiYnJhY2VcIixcbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCIoKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCIqKVwiLFxuICAgIGxpbmVDb21tZW50OiBcIi8vXCJcbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtZmNsXCIsIFwiZmNsXCIpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vLyBBdXRob3I6IEFsaWFrc2VpIENoYXB5emhlbmthXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIGZ1bmN0aW9uIHRvV29yZExpc3Qod29yZHMpIHtcbiAgICB2YXIgcmV0ID0gW107XG4gICAgd29yZHMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1xuICAgICAgcmV0LnB1c2goe25hbWU6IGV9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgdmFyIGNvcmVXb3JkTGlzdCA9IHRvV29yZExpc3QoXG4nSU5WRVJUIEFORCBPUiBYT1JcXFxuIDIqIDIvIExTSElGVCBSU0hJRlRcXFxuIDA9ID0gMDwgPCA+IFU8IE1JTiBNQVhcXFxuIDJEUk9QIDJEVVAgMk9WRVIgMlNXQVAgP0RVUCBERVBUSCBEUk9QIERVUCBPVkVSIFJPVCBTV0FQXFxcbiA+UiBSPiBSQFxcXG4gKyAtIDErIDEtIEFCUyBORUdBVEVcXFxuIFM+RCAqIE0qIFVNKlxcXG4gRk0vTU9EIFNNL1JFTSBVTS9NT0QgKi8gKi9NT0QgLyAvTU9EIE1PRFxcXG4gSEVSRSAsIEAgISBDRUxMKyBDRUxMUyBDLCBDQCBDISBDSEFSUyAyQCAyIVxcXG4gQUxJR04gQUxJR05FRCArISBBTExPVFxcXG4gQ0hBUiBbQ0hBUl0gWyBdIEJMXFxcbiBGSU5EIEVYRUNVVEUgSU1NRURJQVRFIENPVU5UIExJVEVSQUwgU1RBVEVcXFxuIDsgRE9FUz4gPkJPRFlcXFxuIEVWQUxVQVRFXFxcbiBTT1VSQ0UgPklOXFxcbiA8IyAjICNTICM+IEhPTEQgU0lHTiBCQVNFID5OVU1CRVIgSEVYIERFQ0lNQUxcXFxuIEZJTEwgTU9WRVxcXG4gLiBDUiBFTUlUIFNQQUNFIFNQQUNFUyBUWVBFIFUuIC5SIFUuUlxcXG4gQUNDRVBUXFxcbiBUUlVFIEZBTFNFXFxcbiA8PiBVPiAwPD4gMD5cXFxuIE5JUCBUVUNLIFJPTEwgUElDS1xcXG4gMj5SIDJSQCAyUj5cXFxuIFdJVEhJTiBVTlVTRUQgTUFSS0VSXFxcbiBJIEpcXFxuIFRPXFxcbiBDT01QSUxFLCBbQ09NUElMRV1cXFxuIFNBVkUtSU5QVVQgUkVTVE9SRS1JTlBVVFxcXG4gUEFEIEVSQVNFXFxcbiAyTElURVJBTCBETkVHQVRFXFxcbiBELSBEKyBEMDwgRDA9IEQyKiBEMi8gRDwgRD0gRE1BWCBETUlOIEQ+UyBEQUJTXFxcbiBNKyBNKi8gRC4gRC5SIDJST1QgRFU8XFxcbiBDQVRDSCBUSFJPV1xcXG4gRlJFRSBSRVNJWkUgQUxMT0NBVEVcXFxuIENTLVBJQ0sgQ1MtUk9MTFxcXG4gR0VULUNVUlJFTlQgU0VULUNVUlJFTlQgRk9SVEgtV09SRExJU1QgR0VULU9SREVSIFNFVC1PUkRFUlxcXG4gUFJFVklPVVMgU0VBUkNILVdPUkRMSVNUIFdPUkRMSVNUIEZJTkQgQUxTTyBPTkxZIEZPUlRIIERFRklOSVRJT05TIE9SREVSXFxcbiAtVFJBSUxJTkcgL1NUUklORyBTRUFSQ0ggQ09NUEFSRSBDTU9WRSBDTU9WRT4gQkxBTksgU0xJVEVSQUwnKTtcblxuICB2YXIgaW1tZWRpYXRlV29yZExpc3QgPSB0b1dvcmRMaXN0KCdJRiBFTFNFIFRIRU4gQkVHSU4gV0hJTEUgUkVQRUFUIFVOVElMIFJFQ1VSU0UgW0lGXSBbRUxTRV0gW1RIRU5dID9ETyBETyBMT09QICtMT09QIFVOTE9PUCBMRUFWRSBFWElUIEFHQUlOIENBU0UgT0YgRU5ET0YgRU5EQ0FTRScpO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgnZm9ydGgnLCBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBzZWFyY2hXb3JkTGlzdCAod29yZExpc3QsIHdvcmQpIHtcbiAgICAgIHZhciBpO1xuICAgICAgZm9yIChpID0gd29yZExpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgaWYgKHdvcmRMaXN0W2ldLm5hbWUgPT09IHdvcmQudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIHJldHVybiB3b3JkTGlzdFtpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0ZTogJycsXG4gICAgICAgIGJhc2U6IDEwLFxuICAgICAgICBjb3JlV29yZExpc3Q6IGNvcmVXb3JkTGlzdCxcbiAgICAgICAgaW1tZWRpYXRlV29yZExpc3Q6IGltbWVkaWF0ZVdvcmRMaXN0LFxuICAgICAgICB3b3JkTGlzdDogW11cbiAgICAgIH07XG4gICAgfSxcbiAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3R0KSB7XG4gICAgICB2YXIgbWF0O1xuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHN0dC5zdGF0ZSA9PT0gJycpIHsgLy8gaW50ZXJwcmV0YXRpb25cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXihcXF18Ok5PTkFNRSkoXFxzfCQpL2kpKSB7XG4gICAgICAgICAgc3R0LnN0YXRlID0gJyBjb21waWxhdGlvbic7XG4gICAgICAgICAgcmV0dXJuICdidWlsdGluIGNvbXBpbGF0aW9uJztcbiAgICAgICAgfVxuICAgICAgICBtYXQgPSBzdHJlYW0ubWF0Y2goL14oXFw6KVxccysoXFxTKykoXFxzfCQpKy8pO1xuICAgICAgICBpZiAobWF0KSB7XG4gICAgICAgICAgc3R0LndvcmRMaXN0LnB1c2goe25hbWU6IG1hdFsyXS50b1VwcGVyQ2FzZSgpfSk7XG4gICAgICAgICAgc3R0LnN0YXRlID0gJyBjb21waWxhdGlvbic7XG4gICAgICAgICAgcmV0dXJuICdkZWYnICsgc3R0LnN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIG1hdCA9IHN0cmVhbS5tYXRjaCgvXihWQVJJQUJMRXwyVkFSSUFCTEV8Q09OU1RBTlR8MkNPTlNUQU5UfENSRUFURXxQT1NUUE9ORXxWQUxVRXxXT1JEKVxccysoXFxTKykoXFxzfCQpKy9pKTtcbiAgICAgICAgaWYgKG1hdCkge1xuICAgICAgICAgIHN0dC53b3JkTGlzdC5wdXNoKHtuYW1lOiBtYXRbMl0udG9VcHBlckNhc2UoKX0pO1xuICAgICAgICAgIHJldHVybiAnZGVmJyArIHN0dC5zdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBtYXQgPSBzdHJlYW0ubWF0Y2goL14oXFwnfFxcW1xcJ1xcXSlcXHMrKFxcUyspKFxcc3wkKSsvKTtcbiAgICAgICAgaWYgKG1hdCkge1xuICAgICAgICAgIHJldHVybiAnYnVpbHRpbicgKyBzdHQuc3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgLy8gY29tcGlsYXRpb25cbiAgICAgICAgLy8gOyBbXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14oXFw7fFxcWykoXFxzKS8pKSB7XG4gICAgICAgICAgc3R0LnN0YXRlID0gJyc7XG4gICAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICAgICAgICByZXR1cm4gJ2J1aWx0aW4gY29tcGlsYXRpb24nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14oXFw7fFxcWykoJCkvKSkge1xuICAgICAgICAgIHN0dC5zdGF0ZSA9ICcnO1xuICAgICAgICAgIHJldHVybiAnYnVpbHRpbiBjb21waWxhdGlvbic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXihQT1NUUE9ORSlcXHMrXFxTKyhcXHN8JCkrLykpIHtcbiAgICAgICAgICByZXR1cm4gJ2J1aWx0aW4nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGR5bmFtaWMgd29yZGxpc3RcbiAgICAgIG1hdCA9IHN0cmVhbS5tYXRjaCgvXihcXFMrKShcXHMrfCQpLyk7XG4gICAgICBpZiAobWF0KSB7XG4gICAgICAgIGlmIChzZWFyY2hXb3JkTGlzdChzdHQud29yZExpc3QsIG1hdFsxXSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiAndmFyaWFibGUnICsgc3R0LnN0YXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29tbWVudHNcbiAgICAgICAgaWYgKG1hdFsxXSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICAgICAgcmV0dXJuICdjb21tZW50JyArIHN0dC5zdGF0ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjb3JlIHdvcmRzXG4gICAgICAgICAgaWYgKHNlYXJjaFdvcmRMaXN0KHN0dC5jb3JlV29yZExpc3QsIG1hdFsxXSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuICdidWlsdGluJyArIHN0dC5zdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlYXJjaFdvcmRMaXN0KHN0dC5pbW1lZGlhdGVXb3JkTGlzdCwgbWF0WzFdKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2tleXdvcmQnICsgc3R0LnN0YXRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtYXRbMV0gPT09ICcoJykge1xuICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzICE9PSAnKSc7IH0pO1xuICAgICAgICAgICAgc3RyZWFtLmVhdCgnKScpO1xuICAgICAgICAgICAgcmV0dXJuICdjb21tZW50JyArIHN0dC5zdGF0ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAvLyBzdHJpbmdzXG4gICAgICAgICAgaWYgKG1hdFsxXSA9PT0gJy4oJykge1xuICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzICE9PSAnKSc7IH0pO1xuICAgICAgICAgICAgc3RyZWFtLmVhdCgnKScpO1xuICAgICAgICAgICAgcmV0dXJuICdzdHJpbmcnICsgc3R0LnN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWF0WzFdID09PSAnU1wiJyB8fCBtYXRbMV0gPT09ICcuXCInIHx8IG1hdFsxXSA9PT0gJ0NcIicpIHtcbiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShmdW5jdGlvbiAocykgeyByZXR1cm4gcyAhPT0gJ1wiJzsgfSk7XG4gICAgICAgICAgICBzdHJlYW0uZWF0KCdcIicpO1xuICAgICAgICAgICAgcmV0dXJuICdzdHJpbmcnICsgc3R0LnN0YXRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICBpZiAobWF0WzFdIC0gMHhmZmZmZmZmZmYpIHtcbiAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJyArIHN0dC5zdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaWYgKG1hdFsxXS5tYXRjaCgvXlstK10/WzAtOV0rXFwuWzAtOV0qLykpIHtcbiAgICAgICAgICAvLyAgICAgcmV0dXJuICdudW1iZXInICsgc3R0LnN0YXRlO1xuICAgICAgICAgIC8vIH1cblxuICAgICAgICAgIHJldHVybiAnYXRvbScgKyBzdHQuc3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9KTtcbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWZvcnRoXCIsIFwiZm9ydGhcIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZm9ydHJhblwiLCBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gd29yZHMoYXJyYXkpIHtcbiAgICB2YXIga2V5cyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICAgIGtleXNbYXJyYXlbaV1dID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cblxuICB2YXIga2V5d29yZHMgPSB3b3JkcyhbXG4gICAgICAgICAgICAgICAgICBcImFic3RyYWN0XCIsIFwiYWNjZXB0XCIsIFwiYWxsb2NhdGFibGVcIiwgXCJhbGxvY2F0ZVwiLFxuICAgICAgICAgICAgICAgICAgXCJhcnJheVwiLCBcImFzc2lnblwiLCBcImFzeW5jaHJvbm91c1wiLCBcImJhY2tzcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgXCJiaW5kXCIsIFwiYmxvY2tcIiwgXCJieXRlXCIsIFwiY2FsbFwiLCBcImNhc2VcIixcbiAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIiwgXCJjbG9zZVwiLCBcImNvbW1vblwiLCBcImNvbnRhaW5zXCIsXG4gICAgICAgICAgICAgICAgICBcImNvbnRpbnVlXCIsIFwiY3ljbGVcIiwgXCJkYXRhXCIsIFwiZGVhbGxvY2F0ZVwiLFxuICAgICAgICAgICAgICAgICAgXCJkZWNvZGVcIiwgXCJkZWZlcnJlZFwiLCBcImRpbWVuc2lvblwiLCBcImRvXCIsXG4gICAgICAgICAgICAgICAgICBcImVsZW1lbnRhbFwiLCBcImVsc2VcIiwgXCJlbmNvZGVcIiwgXCJlbmRcIixcbiAgICAgICAgICAgICAgICAgIFwiZW5kaWZcIiwgXCJlbnRyeVwiLCBcImVudW1lcmF0b3JcIiwgXCJlcXVpdmFsZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgXCJleGl0XCIsIFwiZXh0ZXJuYWxcIiwgXCJleHRyaW5zaWNcIiwgXCJmaW5hbFwiLFxuICAgICAgICAgICAgICAgICAgXCJmb3JhbGxcIiwgXCJmb3JtYXRcIiwgXCJmdW5jdGlvblwiLCBcImdlbmVyaWNcIixcbiAgICAgICAgICAgICAgICAgIFwiZ29cIiwgXCJnb3RvXCIsIFwiaWZcIiwgXCJpbXBsaWNpdFwiLCBcImltcG9ydFwiLCBcImluY2x1ZGVcIixcbiAgICAgICAgICAgICAgICAgIFwiaW5xdWlyZVwiLCBcImludGVudFwiLCBcImludGVyZmFjZVwiLCBcImludHJpbnNpY1wiLFxuICAgICAgICAgICAgICAgICAgXCJtb2R1bGVcIiwgXCJuYW1lbGlzdFwiLCBcIm5vbl9pbnRyaW5zaWNcIixcbiAgICAgICAgICAgICAgICAgIFwibm9uX292ZXJyaWRhYmxlXCIsIFwibm9uZVwiLCBcIm5vcGFzc1wiLFxuICAgICAgICAgICAgICAgICAgXCJudWxsaWZ5XCIsIFwib3BlblwiLCBcIm9wdGlvbmFsXCIsIFwib3B0aW9uc1wiLFxuICAgICAgICAgICAgICAgICAgXCJwYXJhbWV0ZXJcIiwgXCJwYXNzXCIsIFwicGF1c2VcIiwgXCJwb2ludGVyXCIsXG4gICAgICAgICAgICAgICAgICBcInByaW50XCIsIFwicHJpdmF0ZVwiLCBcInByb2dyYW1cIiwgXCJwcm90ZWN0ZWRcIixcbiAgICAgICAgICAgICAgICAgIFwicHVibGljXCIsIFwicHVyZVwiLCBcInJlYWRcIiwgXCJyZWN1cnNpdmVcIiwgXCJyZXN1bHRcIixcbiAgICAgICAgICAgICAgICAgIFwicmV0dXJuXCIsIFwicmV3aW5kXCIsIFwic2F2ZVwiLCBcInNlbGVjdFwiLCBcInNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICBcInN0b3BcIiwgXCJzdWJyb3V0aW5lXCIsIFwidGFyZ2V0XCIsIFwidGhlblwiLCBcInRvXCIsIFwidHlwZVwiLFxuICAgICAgICAgICAgICAgICAgXCJ1c2VcIiwgXCJ2YWx1ZVwiLCBcInZvbGF0aWxlXCIsIFwid2hlcmVcIiwgXCJ3aGlsZVwiLFxuICAgICAgICAgICAgICAgICAgXCJ3cml0ZVwiXSk7XG4gIHZhciBidWlsdGlucyA9IHdvcmRzKFtcImFib3J0XCIsIFwiYWJzXCIsIFwiYWNjZXNzXCIsIFwiYWNoYXJcIiwgXCJhY29zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRqdXN0bFwiLCBcImFkanVzdHJcIiwgXCJhaW1hZ1wiLCBcImFpbnRcIiwgXCJhbGFybVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImFsbFwiLCBcImFsbG9jYXRlZFwiLCBcImFsb2dcIiwgXCJhbWF4XCIsIFwiYW1pblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImFtb2RcIiwgXCJhbmRcIiwgXCJhbmludFwiLCBcImFueVwiLCBcImFzaW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NvY2lhdGVkXCIsIFwiYXRhblwiLCBcImJlc2pcIiwgXCJiZXNqblwiLCBcImJlc3lcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJiZXN5blwiLCBcImJpdF9zaXplXCIsIFwiYnRlc3RcIiwgXCJjYWJzXCIsIFwiY2Nvc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImNlaWxpbmdcIiwgXCJjZXhwXCIsIFwiY2hhclwiLCBcImNoZGlyXCIsIFwiY2htb2RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG9nXCIsIFwiY21wbHhcIiwgXCJjb21tYW5kX2FyZ3VtZW50X2NvdW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29tcGxleFwiLCBcImNvbmpnXCIsIFwiY29zXCIsIFwiY29zaFwiLCBcImNvdW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3B1X3RpbWVcIiwgXCJjc2hpZnRcIiwgXCJjc2luXCIsIFwiY3NxcnRcIiwgXCJjdGltZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImNfZnVubG9jXCIsIFwiY19sb2NcIiwgXCJjX2Fzc29jaWF0ZWRcIiwgXCJjX251bGxfcHRyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19udWxsX2Z1bnB0clwiLCBcImNfZl9wb2ludGVyXCIsIFwiY19udWxsX2NoYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjX2FsZXJ0XCIsIFwiY19iYWNrc3BhY2VcIiwgXCJjX2Zvcm1fZmVlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImNfbmV3X2xpbmVcIiwgXCJjX2NhcnJpYWdlX3JldHVyblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImNfaG9yaXpvbnRhbF90YWJcIiwgXCJjX3ZlcnRpY2FsX3RhYlwiLCBcImRhYnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYWNvc1wiLCBcImRhc2luXCIsIFwiZGF0YW5cIiwgXCJkYXRlX2FuZF90aW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGJlc2pcIiwgXCJkYmVzalwiLCBcImRiZXNqblwiLCBcImRiZXN5XCIsIFwiZGJlc3lcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYmVzeW5cIiwgXCJkYmxlXCIsIFwiZGNvc1wiLCBcImRjb3NoXCIsIFwiZGRpbVwiLCBcImRlcmZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZXJmY1wiLCBcImRleHBcIiwgXCJkaWdpdHNcIiwgXCJkaW1cIiwgXCJkaW50XCIsIFwiZGxvZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImRsb2dcIiwgXCJkbWF4XCIsIFwiZG1pblwiLCBcImRtb2RcIiwgXCJkbmludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvdF9wcm9kdWN0XCIsIFwiZHByb2RcIiwgXCJkc2lnblwiLCBcImRzaW5oXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHNpblwiLCBcImRzcXJ0XCIsIFwiZHRhbmhcIiwgXCJkdGFuXCIsIFwiZHRpbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlb3NoaWZ0XCIsIFwiZXBzaWxvblwiLCBcImVyZlwiLCBcImVyZmNcIiwgXCJldGltZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImV4aXRcIiwgXCJleHBcIiwgXCJleHBvbmVudFwiLCBcImV4dGVuZHNfdHlwZV9vZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImZkYXRlXCIsIFwiZmdldFwiLCBcImZnZXRjXCIsIFwiZmxvYXRcIiwgXCJmbG9vclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImZsdXNoXCIsIFwiZm51bVwiLCBcImZwdXRjXCIsIFwiZnB1dFwiLCBcImZyYWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZnNlZWtcIiwgXCJmc3RhdFwiLCBcImZ0ZWxsXCIsIFwiZ2Vycm9yXCIsIFwiZ2V0YXJnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2V0X2NvbW1hbmRcIiwgXCJnZXRfY29tbWFuZF9hcmd1bWVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImdldF9lbnZpcm9ubWVudF92YXJpYWJsZVwiLCBcImdldGN3ZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImdldGVudlwiLCBcImdldGdpZFwiLCBcImdldGxvZ1wiLCBcImdldHBpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImdldHVpZFwiLCBcImdtdGltZVwiLCBcImhvc3RubVwiLCBcImh1Z2VcIiwgXCJpYWJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWFjaGFyXCIsIFwiaWFuZFwiLCBcImlhcmdjXCIsIFwiaWJjbHJcIiwgXCJpYml0c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImlic2V0XCIsIFwiaWNoYXJcIiwgXCJpZGF0ZVwiLCBcImlkaW1cIiwgXCJpZGludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkbmludFwiLCBcImllb3JcIiwgXCJpZXJybm9cIiwgXCJpZml4XCIsIFwiaW1hZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImltYWdwYXJ0XCIsIFwiaW5kZXhcIiwgXCJpbnRcIiwgXCJpb3JcIiwgXCJpcmFuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzYXR0eVwiLCBcImlzaGZ0XCIsIFwiaXNoZnRjXCIsIFwiaXNpZ25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpc29fY19iaW5kaW5nXCIsIFwiaXNfaW9zdGF0X2VuZFwiLCBcImlzX2lvc3RhdF9lb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpdGltZVwiLCBcImtpbGxcIiwgXCJraW5kXCIsIFwibGJvdW5kXCIsIFwibGVuXCIsIFwibGVuX3RyaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsZ2VcIiwgXCJsZ3RcIiwgXCJsaW5rXCIsIFwibGxlXCIsIFwibGx0XCIsIFwibG5ibG5rXCIsIFwibG9jXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwibG9nXCIsIFwibG9naWNhbFwiLCBcImxvbmdcIiwgXCJsc2hpZnRcIiwgXCJsc3RhdFwiLCBcImx0aW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwibWF0bXVsXCIsIFwibWF4XCIsIFwibWF4ZXhwb25lbnRcIiwgXCJtYXhsb2NcIiwgXCJtYXh2YWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtY2xvY2tcIiwgXCJtZXJnZVwiLCBcIm1vdmVfYWxsb2NcIiwgXCJtaW5cIiwgXCJtaW5leHBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1pbmxvY1wiLCBcIm1pbnZhbFwiLCBcIm1vZFwiLCBcIm1vZHVsb1wiLCBcIm12Yml0c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5lYXJlc3RcIiwgXCJuZXdfbGluZVwiLCBcIm5pbnRcIiwgXCJub3RcIiwgXCJvclwiLCBcInBhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJyb3JcIiwgXCJwcmVjaXNpb25cIiwgXCJwcmVzZW50XCIsIFwicHJvZHVjdFwiLCBcInJhZGl4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwicmFuZFwiLCBcInJhbmRvbV9udW1iZXJcIiwgXCJyYW5kb21fc2VlZFwiLCBcInJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVhbFwiLCBcInJlYWxwYXJ0XCIsIFwicmVuYW1lXCIsIFwicmVwZWF0XCIsIFwicmVzaGFwZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInJyc3BhY2luZ1wiLCBcInJzaGlmdFwiLCBcInNhbWVfdHlwZV9hc1wiLCBcInNjYWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhblwiLCBcInNlY29uZFwiLCBcInNlbGVjdGVkX2ludF9raW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic2VsZWN0ZWRfcmVhbF9raW5kXCIsIFwic2V0X2V4cG9uZW50XCIsIFwic2hhcGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaG9ydFwiLCBcInNpZ25cIiwgXCJzaWduYWxcIiwgXCJzaW5oXCIsIFwic2luXCIsIFwic2xlZXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmdsXCIsIFwic3BhY2luZ1wiLCBcInNwcmVhZFwiLCBcInNxcnRcIiwgXCJzcmFuZFwiLCBcInN0YXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdW1cIiwgXCJzeW1sbmtcIiwgXCJzeXN0ZW1cIiwgXCJzeXN0ZW1fY2xvY2tcIiwgXCJ0YW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0YW5oXCIsIFwidGltZVwiLCBcInRpbnlcIiwgXCJ0cmFuc2ZlclwiLCBcInRyYW5zcG9zZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInRyaW1cIiwgXCJ0dHluYW1cIiwgXCJ1Ym91bmRcIiwgXCJ1bWFza1wiLCBcInVubGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInVucGFja1wiLCBcInZlcmlmeVwiLCBcInhvclwiLCBcInphYnNcIiwgXCJ6Y29zXCIsIFwiemV4cFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInpsb2dcIiwgXCJ6c2luXCIsIFwienNxcnRcIl0pO1xuXG4gICAgdmFyIGRhdGFUeXBlcyA9ICB3b3JkcyhbXCJjX2Jvb2xcIiwgXCJjX2NoYXJcIiwgXCJjX2RvdWJsZVwiLCBcImNfZG91YmxlX2NvbXBsZXhcIixcbiAgICAgICAgICAgICAgICAgICAgIFwiY19mbG9hdFwiLCBcImNfZmxvYXRfY29tcGxleFwiLCBcImNfZnVucHRyXCIsIFwiY19pbnRcIixcbiAgICAgICAgICAgICAgICAgICAgIFwiY19pbnQxNl90XCIsIFwiY19pbnQzMl90XCIsIFwiY19pbnQ2NF90XCIsIFwiY19pbnQ4X3RcIixcbiAgICAgICAgICAgICAgICAgICAgIFwiY19pbnRfZmFzdDE2X3RcIiwgXCJjX2ludF9mYXN0MzJfdFwiLCBcImNfaW50X2Zhc3Q2NF90XCIsXG4gICAgICAgICAgICAgICAgICAgICBcImNfaW50X2Zhc3Q4X3RcIiwgXCJjX2ludF9sZWFzdDE2X3RcIiwgXCJjX2ludF9sZWFzdDMyX3RcIixcbiAgICAgICAgICAgICAgICAgICAgIFwiY19pbnRfbGVhc3Q2NF90XCIsIFwiY19pbnRfbGVhc3Q4X3RcIiwgXCJjX2ludG1heF90XCIsXG4gICAgICAgICAgICAgICAgICAgICBcImNfaW50cHRyX3RcIiwgXCJjX2xvbmdcIiwgXCJjX2xvbmdfZG91YmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICBcImNfbG9uZ19kb3VibGVfY29tcGxleFwiLCBcImNfbG9uZ19sb25nXCIsIFwiY19wdHJcIixcbiAgICAgICAgICAgICAgICAgICAgIFwiY19zaG9ydFwiLCBcImNfc2lnbmVkX2NoYXJcIiwgXCJjX3NpemVfdFwiLCBcImNoYXJhY3RlclwiLFxuICAgICAgICAgICAgICAgICAgICAgXCJjb21wbGV4XCIsIFwiZG91YmxlXCIsIFwiaW50ZWdlclwiLCBcImxvZ2ljYWxcIiwgXCJyZWFsXCJdKTtcbiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXFwtKiY9PD5cXC9cXDpdLztcbiAgdmFyIGxpdE9wZXJhdG9yID0gbmV3IFJlZ0V4cChcIihcXC5hbmRcXC58XFwub3JcXC58XFwuZXFcXC58XFwubHRcXC58XFwubGVcXC58XFwuZ3RcXC58XFwuZ2VcXC58XFwubmVcXC58XFwubm90XFwufFxcLmVxdlxcLnxcXC5uZXF2XFwuKVwiLCBcImlcIik7XG5cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcblxuICAgIGlmIChzdHJlYW0ubWF0Y2gobGl0T3BlcmF0b3IpKXtcbiAgICAgICAgcmV0dXJuICdvcGVyYXRvcic7XG4gICAgfVxuXG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gXCIhXCIpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICB9XG4gICAgaWYgKGNoID09ICdcIicgfHwgY2ggPT0gXCInXCIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoL1tcXFtcXF1cXChcXCksXS8udGVzdChjaCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoL1xcZC8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcLl0vKTtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH1cbiAgICBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH1cbiAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfXS8pO1xuICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKXtcbiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7XG4gICAgfVxuICAgIGlmIChidWlsdGlucy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSB8fCBkYXRhVHlwZXMuaGFzT3duUHJvcGVydHkod29yZCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnYnVpbHRpbic7XG4gICAgfVxuICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTtcbiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgICAgIGVuZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgfHwgIWVzY2FwZWQpIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH07XG4gIH1cblxuICAvLyBJbnRlcmZhY2VcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHt0b2tlbml6ZTogbnVsbH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgdmFyIHN0eWxlID0gKHN0YXRlLnRva2VuaXplIHx8IHRva2VuQmFzZSkoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBpZiAoc3R5bGUgPT0gXCJjb21tZW50XCIgfHwgc3R5bGUgPT0gXCJtZXRhXCIpIHJldHVybiBzdHlsZTtcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9XG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWZvcnRyYW5cIiwgXCJmb3J0cmFuXCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZ2FzXCIsIGZ1bmN0aW9uKF9jb25maWcsIHBhcnNlckNvbmZpZykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gSWYgYW4gYXJjaGl0ZWN0dXJlIGlzIHNwZWNpZmllZCwgaXRzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIG1heVxuICAvLyBwb3B1bGF0ZSB0aGlzIGFycmF5IHdpdGggY3VzdG9tIHBhcnNpbmcgZnVuY3Rpb25zIHdoaWNoIHdpbGwgYmVcbiAgLy8gdHJpZWQgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIHN0YW5kYXJkIGZ1bmN0aW9ucyBkbyBub3QgZmluZCBhIG1hdGNoLlxuICB2YXIgY3VzdG9tID0gW107XG5cbiAgLy8gVGhlIHN5bWJvbCB1c2VkIHRvIHN0YXJ0IGEgbGluZSBjb21tZW50IGNoYW5nZXMgYmFzZWQgb24gdGhlIHRhcmdldFxuICAvLyBhcmNoaXRlY3R1cmUuXG4gIC8vIElmIG5vIGFyY2hpdGVjdHVyZSBpcyBwYXNlZCBpbiBcInBhcnNlckNvbmZpZ1wiIHRoZW4gb25seSBtdWx0aWxpbmVcbiAgLy8gY29tbWVudHMgd2lsbCBoYXZlIHN5bnRheCBzdXBwb3J0LlxuICB2YXIgbGluZUNvbW1lbnRTdGFydFN5bWJvbCA9IFwiXCI7XG5cbiAgLy8gVGhlc2UgZGlyZWN0aXZlcyBhcmUgYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50LlxuICAvLyBNYWNoaW5lIHNwZWNpZmljIGRpcmVjdGl2ZXMgc2hvdWxkIGdvIGluIHRoZWlyIHJlc3BlY3RpdmVcbiAgLy8gYXJjaGl0ZWN0dXJlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLlxuICAvLyBSZWZlcmVuY2U6XG4gIC8vIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9iaW51dGlscy9kb2NzL2FzL1BzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzXG4gIHZhciBkaXJlY3RpdmVzID0ge1xuICAgIFwiLmFib3J0XCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5hbGlnblwiIDogXCJidWlsdGluXCIsXG4gICAgXCIuYWx0bWFjcm9cIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmFzY2lpXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5hc2NpelwiIDogXCJidWlsdGluXCIsXG4gICAgXCIuYmFsaWduXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5iYWxpZ253XCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5iYWxpZ25sXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5idW5kbGVfYWxpZ25fbW9kZVwiIDogXCJidWlsdGluXCIsXG4gICAgXCIuYnVuZGxlX2xvY2tcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmJ1bmRsZV91bmxvY2tcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmJ5dGVcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmNmaV9zdGFydHByb2NcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmNvbW1cIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmRhdGFcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmRlZlwiIDogXCJidWlsdGluXCIsXG4gICAgXCIuZGVzY1wiIDogXCJidWlsdGluXCIsXG4gICAgXCIuZGltXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5kb3VibGVcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmVqZWN0XCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5lbHNlXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5lbHNlaWZcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmVuZFwiIDogXCJidWlsdGluXCIsXG4gICAgXCIuZW5kZWZcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmVuZGZ1bmNcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmVuZGlmXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5lcXVcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmVxdWl2XCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5lcXZcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmVyclwiIDogXCJidWlsdGluXCIsXG4gICAgXCIuZXJyb3JcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmV4aXRtXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5leHRlcm5cIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmZhaWxcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmZpbGVcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmZpbGxcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmZsb2F0XCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5mdW5jXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5nbG9iYWxcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmdudV9hdHRyaWJ1dGVcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmhpZGRlblwiIDogXCJidWlsdGluXCIsXG4gICAgXCIuaHdvcmRcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmlkZW50XCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5pZlwiIDogXCJidWlsdGluXCIsXG4gICAgXCIuaW5jYmluXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5pbmNsdWRlXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5pbnRcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmludGVybmFsXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5pcnBcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmlycGNcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmxjb21tXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5sZmxhZ3NcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmxpbmVcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmxpbmtvbmNlXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5saXN0XCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5sblwiIDogXCJidWlsdGluXCIsXG4gICAgXCIubG9jXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5sb2NfbWFya19sYWJlbHNcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLmxvY2FsXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5sb25nXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5tYWNyb1wiIDogXCJidWlsdGluXCIsXG4gICAgXCIubXJpXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5ub2FsdG1hY3JvXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5ub2xpc3RcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLm9jdGFcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLm9mZnNldFwiIDogXCJidWlsdGluXCIsXG4gICAgXCIub3JnXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5wMmFsaWduXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5wb3BzZWN0aW9uXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5wcmV2aW91c1wiIDogXCJidWlsdGluXCIsXG4gICAgXCIucHJpbnRcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnByb3RlY3RlZFwiIDogXCJidWlsdGluXCIsXG4gICAgXCIucHNpemVcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnB1cmdlbVwiIDogXCJidWlsdGluXCIsXG4gICAgXCIucHVzaHNlY3Rpb25cIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnF1YWRcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnJlbG9jXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5yZXB0XCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5zYnR0bFwiIDogXCJidWlsdGluXCIsXG4gICAgXCIuc2NsXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5zZWN0aW9uXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5zZXRcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnNob3J0XCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5zaW5nbGVcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnNpemVcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnNraXBcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnNsZWIxMjhcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnNwYWNlXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5zdGFiXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi5zdHJpbmdcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnN0cnVjdFwiIDogXCJidWlsdGluXCIsXG4gICAgXCIuc3Vic2VjdGlvblwiIDogXCJidWlsdGluXCIsXG4gICAgXCIuc3ltdmVyXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi50YWdcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnRleHRcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnRpdGxlXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi50eXBlXCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi51bGViMTI4XCIgOiBcImJ1aWx0aW5cIixcbiAgICBcIi52YWxcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnZlcnNpb25cIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLnZ0YWJsZV9lbnRyeVwiIDogXCJidWlsdGluXCIsXG4gICAgXCIudnRhYmxlX2luaGVyaXRcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLndhcm5pbmdcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLndlYWtcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLndlYWtyZWZcIiA6IFwiYnVpbHRpblwiLFxuICAgIFwiLndvcmRcIiA6IFwiYnVpbHRpblwiXG4gIH07XG5cbiAgdmFyIHJlZ2lzdGVycyA9IHt9O1xuXG4gIGZ1bmN0aW9uIHg4NihfcGFyc2VyQ29uZmlnKSB7XG4gICAgbGluZUNvbW1lbnRTdGFydFN5bWJvbCA9IFwiI1wiO1xuXG4gICAgcmVnaXN0ZXJzLmF4ICA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMuZWF4ID0gXCJ2YXJpYWJsZS0yXCI7XG4gICAgcmVnaXN0ZXJzLnJheCA9IFwidmFyaWFibGUtM1wiO1xuXG4gICAgcmVnaXN0ZXJzLmJ4ICA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMuZWJ4ID0gXCJ2YXJpYWJsZS0yXCI7XG4gICAgcmVnaXN0ZXJzLnJieCA9IFwidmFyaWFibGUtM1wiO1xuXG4gICAgcmVnaXN0ZXJzLmN4ICA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMuZWN4ID0gXCJ2YXJpYWJsZS0yXCI7XG4gICAgcmVnaXN0ZXJzLnJjeCA9IFwidmFyaWFibGUtM1wiO1xuXG4gICAgcmVnaXN0ZXJzLmR4ICA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMuZWR4ID0gXCJ2YXJpYWJsZS0yXCI7XG4gICAgcmVnaXN0ZXJzLnJkeCA9IFwidmFyaWFibGUtM1wiO1xuXG4gICAgcmVnaXN0ZXJzLnNpICA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMuZXNpID0gXCJ2YXJpYWJsZS0yXCI7XG4gICAgcmVnaXN0ZXJzLnJzaSA9IFwidmFyaWFibGUtM1wiO1xuXG4gICAgcmVnaXN0ZXJzLmRpICA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMuZWRpID0gXCJ2YXJpYWJsZS0yXCI7XG4gICAgcmVnaXN0ZXJzLnJkaSA9IFwidmFyaWFibGUtM1wiO1xuXG4gICAgcmVnaXN0ZXJzLnNwICA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMuZXNwID0gXCJ2YXJpYWJsZS0yXCI7XG4gICAgcmVnaXN0ZXJzLnJzcCA9IFwidmFyaWFibGUtM1wiO1xuXG4gICAgcmVnaXN0ZXJzLmJwICA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMuZWJwID0gXCJ2YXJpYWJsZS0yXCI7XG4gICAgcmVnaXN0ZXJzLnJicCA9IFwidmFyaWFibGUtM1wiO1xuXG4gICAgcmVnaXN0ZXJzLmlwICA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMuZWlwID0gXCJ2YXJpYWJsZS0yXCI7XG4gICAgcmVnaXN0ZXJzLnJpcCA9IFwidmFyaWFibGUtM1wiO1xuXG4gICAgcmVnaXN0ZXJzLmNzICA9IFwia2V5d29yZFwiO1xuICAgIHJlZ2lzdGVycy5kcyAgPSBcImtleXdvcmRcIjtcbiAgICByZWdpc3RlcnMuc3MgID0gXCJrZXl3b3JkXCI7XG4gICAgcmVnaXN0ZXJzLmVzICA9IFwia2V5d29yZFwiO1xuICAgIHJlZ2lzdGVycy5mcyAgPSBcImtleXdvcmRcIjtcbiAgICByZWdpc3RlcnMuZ3MgID0gXCJrZXl3b3JkXCI7XG4gIH1cblxuICBmdW5jdGlvbiBhcm12NihfcGFyc2VyQ29uZmlnKSB7XG4gICAgLy8gUmVmZXJlbmNlOlxuICAgIC8vIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5xcmMwMDAxbC9RUkMwMDAxX1VBTC5wZGZcbiAgICAvLyBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2MuZGRpMDMwMWgvRERJMDMwMUhfYXJtMTE3Nmp6ZnNfcjBwN190cm0ucGRmXG4gICAgbGluZUNvbW1lbnRTdGFydFN5bWJvbCA9IFwiQFwiO1xuICAgIGRpcmVjdGl2ZXMuc3ludGF4ID0gXCJidWlsdGluXCI7XG5cbiAgICByZWdpc3RlcnMucjAgID0gXCJ2YXJpYWJsZVwiO1xuICAgIHJlZ2lzdGVycy5yMSAgPSBcInZhcmlhYmxlXCI7XG4gICAgcmVnaXN0ZXJzLnIyICA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMucjMgID0gXCJ2YXJpYWJsZVwiO1xuICAgIHJlZ2lzdGVycy5yNCAgPSBcInZhcmlhYmxlXCI7XG4gICAgcmVnaXN0ZXJzLnI1ICA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMucjYgID0gXCJ2YXJpYWJsZVwiO1xuICAgIHJlZ2lzdGVycy5yNyAgPSBcInZhcmlhYmxlXCI7XG4gICAgcmVnaXN0ZXJzLnI4ICA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMucjkgID0gXCJ2YXJpYWJsZVwiO1xuICAgIHJlZ2lzdGVycy5yMTAgPSBcInZhcmlhYmxlXCI7XG4gICAgcmVnaXN0ZXJzLnIxMSA9IFwidmFyaWFibGVcIjtcbiAgICByZWdpc3RlcnMucjEyID0gXCJ2YXJpYWJsZVwiO1xuXG4gICAgcmVnaXN0ZXJzLnNwICA9IFwidmFyaWFibGUtMlwiO1xuICAgIHJlZ2lzdGVycy5sciAgPSBcInZhcmlhYmxlLTJcIjtcbiAgICByZWdpc3RlcnMucGMgID0gXCJ2YXJpYWJsZS0yXCI7XG4gICAgcmVnaXN0ZXJzLnIxMyA9IHJlZ2lzdGVycy5zcDtcbiAgICByZWdpc3RlcnMucjE0ID0gcmVnaXN0ZXJzLmxyO1xuICAgIHJlZ2lzdGVycy5yMTUgPSByZWdpc3RlcnMucGM7XG5cbiAgICBjdXN0b20ucHVzaChmdW5jdGlvbihjaCwgc3RyZWFtKSB7XG4gICAgICBpZiAoY2ggPT09ICcjJykge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1xcdy8pO1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBhcmNoID0gKHBhcnNlckNvbmZpZy5hcmNoaXRlY3R1cmUgfHwgXCJ4ODZcIikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGFyY2ggPT09IFwieDg2XCIpIHtcbiAgICB4ODYocGFyc2VyQ29uZmlnKTtcbiAgfSBlbHNlIGlmIChhcmNoID09PSBcImFybVwiIHx8IGFyY2ggPT09IFwiYXJtdjZcIikge1xuICAgIGFybXY2KHBhcnNlckNvbmZpZyk7XG4gIH1cblxuICBmdW5jdGlvbiBuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCBlbmQpIHtcbiAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0O1xuICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmIChuZXh0ID09PSBlbmQgJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT09IFwiXFxcXFwiO1xuICAgIH1cbiAgICByZXR1cm4gZXNjYXBlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsaWtlQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICBpZiAoY2ggPT09IFwiL1wiICYmIG1heWJlRW5kKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBtYXliZUVuZCA9IChjaCA9PT0gXCIqXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW5pemU6IG51bGxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHlsZSwgY3VyLCBjaCA9IHN0cmVhbS5uZXh0KCk7XG5cbiAgICAgIGlmIChjaCA9PT0gXCIvXCIpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBjbGlrZUNvbW1lbnQ7XG4gICAgICAgICAgcmV0dXJuIGNsaWtlQ29tbWVudChzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2ggPT09IGxpbmVDb21tZW50U3RhcnRTeW1ib2wpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICBuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCAnXCInKTtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaCA9PT0gJy4nKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXFx3Lyk7XG4gICAgICAgIGN1ciA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgc3R5bGUgPSBkaXJlY3RpdmVzW2N1cl07XG4gICAgICAgIHJldHVybiBzdHlsZSB8fCBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2ggPT09ICc9Jykge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1xcdy8pO1xuICAgICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgICAgcmV0dXJuIFwiYnJha2V0XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaCA9PT0gJ30nKSB7XG4gICAgICAgIHJldHVybiBcImJyYWtldFwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoL1xcZC8udGVzdChjaCkpIHtcbiAgICAgICAgaWYgKGNoID09PSBcIjBcIiAmJiBzdHJlYW0uZWF0KFwieFwiKSkge1xuICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvWzAtOWEtZkEtRl0vKTtcbiAgICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1xcZC8pO1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKC9cXHcvLnRlc3QoY2gpKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXFx3Lyk7XG4gICAgICAgIGlmIChzdHJlYW0uZWF0KFwiOlwiKSkge1xuICAgICAgICAgIHJldHVybiAndGFnJztcbiAgICAgICAgfVxuICAgICAgICBjdXIgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHN0eWxlID0gcmVnaXN0ZXJzW2N1cl07XG4gICAgICAgIHJldHVybiBzdHlsZSB8fCBudWxsO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1c3RvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdHlsZSA9IGN1c3RvbVtpXShjaCwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBsaW5lQ29tbWVudDogbGluZUNvbW1lbnRTdGFydFN5bWJvbCxcbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCIvKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCIqL1wiXG4gIH07XG59KTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vKlxuR2hlcmtpbiBtb2RlIC0gaHR0cDovL3d3dy5jdWtlcy5pbmZvL1xuUmVwb3J0IGJ1Z3MvaXNzdWVzIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RlbWlycm9yL0NvZGVNaXJyb3IvaXNzdWVzXG4qL1xuXG4vLyBGb2xsb3dpbmcgT2JqcyBmcm9tIEJyYWNrZXRzIGltcGxlbWVudGF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vdHJlZ3VzdGkvYnJhY2tldHMtZ2hlcmtpbi9ibG9iL21hc3Rlci9tYWluLmpzXG4vL3ZhciBRdW90ZXMgPSB7XG4vLyAgU0lOR0xFOiAxLFxuLy8gIERPVUJMRTogMlxuLy99O1xuXG4vL3ZhciByZWdleCA9IHtcbi8vICBrZXl3b3JkczogLyhGZWF0dXJlfCB7Mn0oU2NlbmFyaW98SW4gb3JkZXIgdG98QXN8SSl8IHs0fShHaXZlbnxXaGVufFRoZW58QW5kKSkvXG4vL307XG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZ2hlcmtpblwiLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZU51bWJlcjogMCxcbiAgICAgICAgdGFibGVIZWFkZXJMaW5lOiBmYWxzZSxcbiAgICAgICAgYWxsb3dGZWF0dXJlOiB0cnVlLFxuICAgICAgICBhbGxvd0JhY2tncm91bmQ6IGZhbHNlLFxuICAgICAgICBhbGxvd1NjZW5hcmlvOiBmYWxzZSxcbiAgICAgICAgYWxsb3dTdGVwczogZmFsc2UsXG4gICAgICAgIGFsbG93UGxhY2Vob2xkZXJzOiBmYWxzZSxcbiAgICAgICAgYWxsb3dNdWx0aWxpbmVBcmd1bWVudDogZmFsc2UsXG4gICAgICAgIGluTXVsdGlsaW5lU3RyaW5nOiBmYWxzZSxcbiAgICAgICAgaW5NdWx0aWxpbmVUYWJsZTogZmFsc2UsXG4gICAgICAgIGluS2V5d29yZExpbmU6IGZhbHNlXG4gICAgICB9O1xuICAgIH0sXG4gICAgdG9rZW46IGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgIHN0YXRlLmxpbmVOdW1iZXIrKztcbiAgICAgICAgc3RhdGUuaW5LZXl3b3JkTGluZSA9IGZhbHNlO1xuICAgICAgICBpZiAoc3RhdGUuaW5NdWx0aWxpbmVUYWJsZSkge1xuICAgICAgICAgICAgc3RhdGUudGFibGVIZWFkZXJMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXN0cmVhbS5tYXRjaCgvXFxzKlxcfC8sIGZhbHNlKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5hbGxvd011bHRpbGluZUFyZ3VtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgIHN0YXRlLmluTXVsdGlsaW5lVGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJlYW0uZWF0U3BhY2UoKTtcblxuICAgICAgaWYgKHN0YXRlLmFsbG93TXVsdGlsaW5lQXJndW1lbnQpIHtcblxuICAgICAgICAvLyBTVFJJTkdcbiAgICAgICAgaWYgKHN0YXRlLmluTXVsdGlsaW5lU3RyaW5nKSB7XG4gICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgnXCJcIlwiJykpIHtcbiAgICAgICAgICAgIHN0YXRlLmluTXVsdGlsaW5lU3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd011bHRpbGluZUFyZ3VtZW50ID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmVhbS5tYXRjaCgvLiovKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUQUJMRVxuICAgICAgICBpZiAoc3RhdGUuaW5NdWx0aWxpbmVUYWJsZSkge1xuICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1xcfFxccyovKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiYnJhY2tldFwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJlYW0ubWF0Y2goL1teXFx8XSovKTtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50YWJsZUhlYWRlckxpbmUgPyBcImhlYWRlclwiIDogXCJzdHJpbmdcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBERVRFQ1QgU1RBUlRcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgnXCJcIlwiJykpIHtcbiAgICAgICAgICAvLyBTdHJpbmdcbiAgICAgICAgICBzdGF0ZS5pbk11bHRpbGluZVN0cmluZyA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKFwifFwiKSkge1xuICAgICAgICAgIC8vIFRhYmxlXG4gICAgICAgICAgc3RhdGUuaW5NdWx0aWxpbmVUYWJsZSA9IHRydWU7XG4gICAgICAgICAgc3RhdGUudGFibGVIZWFkZXJMaW5lID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gXCJicmFja2V0XCI7XG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICAvLyBMSU5FIENPTU1FTlRcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goLyMuKi8pKSB7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcblxuICAgICAgLy8gVEFHXG4gICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5pbktleXdvcmRMaW5lICYmIHN0cmVhbS5tYXRjaCgvQFxcUysvKSkge1xuICAgICAgICByZXR1cm4gXCJ0YWdcIjtcblxuICAgICAgLy8gRkVBVFVSRVxuICAgICAgfSBlbHNlIGlmICghc3RhdGUuaW5LZXl3b3JkTGluZSAmJiBzdGF0ZS5hbGxvd0ZlYXR1cmUgJiYgc3RyZWFtLm1hdGNoKC8o5qmf6IO9fOWKn+iDvXzjg5XjgqPjg7zjg4Hjg6N86riw64qlfOC5guC4hOC4o+C4h+C4q+C4peC4seC4gXzguITguKfguLLguKHguKrguLLguKHguLLguKPguJZ84LiE4Lin4Liy4Lih4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4LiX4Liy4LiH4LiY4Li44Lij4LiB4Li04LiIfOCyueCzhuCymuCzjeCymuCys3zgsJfgsYHgsKPgsK7gsYF84Kiu4KmB4Ki54Ki+4KiC4Kim4Kiw4Ki+fOCoqOColeCotiDgqKjgqYHgqLngqL7gqLB84KiW4Ki+4Ki44KmA4KiF4KikfOCksOClguCkqiDgpLLgpYfgpJZ82YjZkNuM2pjar9uMfNiu2KfYtdmK2Kl816rXm9eV16DXlHzQpNGD0L3QutGG0ZbQvtC90LDQu3zQpNGD0L3QutGG0LjRj3zQpNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGCfNCk0YPQvdC60YbQuNC+0L3QsNC7fNKu0LfQtdC90YfTmdC70LXQutC70LXQu9C10Lp80KHQstC+0LnRgdGC0LLQvnzQntGB0L7QsdC40L3QsHzQnNOp0LzQutC40L3Qu9C10Lp80JzQvtCz0YPRm9C90L7RgdGCfM6bzrXOuc+Ezr/Phc+BzrPOr86xfM6Uz4XOvc6xz4TPjM+EzrfPhM6xfFfFgmHFm2Npd2/Fm8SHfFZsYXN0bm9zxaV8VHJhanRvfFTDrW5oIG7Eg25nfFNhdnlixJd8UHJldHR5IG11Y2h8UG/FvmlhZGF2a2F8UG/FvmFkYXZla3xQb3RyemViYSBiaXpuZXNvd2F8w5Z6ZWxsaWt8T3NvYmluYXxPbWluYWlzdXVzfE9tYWR1c3xPSCBIQUl8TW9ndcSHbm9zdHxNb2d1Y25vc3R8SmVsbGVtesWRfEh3w6Z0fEh3YWV0fEZ1bnppb25hbGl0w6B8RnVua3Rpb25hbGl0w6lpdHxGdW5rdGlvbmFsaXTDpHR8RnVua2NqYXxGdW5rY2lvbmFsbm9zdHxGdW5rY2lvbmFsaXTEgXRlfEZ1bmtjaWF8RnVuZ3NpfEZ1bmN0aW9uYWxpdGVpdHxGdW5jyJtpb25hbGl0YXRlfEZ1bmPFo2lvbmFsaXRhdGV8RnVuY3Rpb25hbGl0YXRlfEZ1bmNpb25hbGl0YXR8RnVuY2lvbmFsaWRhZGV8Rm9uY3Rpb25uYWxpdMOpfEZpdHVyfEbEq8SNYXxGZWF0dXJlfEVpZ2lubGVpa2l8RWdlbnNrYXB8RWdlbnNrYWJ8Q2FyYWN0ZXLDrXN0aWNhfENhcmFjdGVyaXN0aWNhfEJ1c2luZXNzIE5lZWR8QXNwZWt0fEFyd2VkZHxBaG95IG1hdGV5IXxBYmlsaXR5KTovKSkge1xuICAgICAgICBzdGF0ZS5hbGxvd1NjZW5hcmlvID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuYWxsb3dCYWNrZ3JvdW5kID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuYWxsb3dQbGFjZWhvbGRlcnMgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuYWxsb3dTdGVwcyA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5hbGxvd011bHRpbGluZUFyZ3VtZW50ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmluS2V5d29yZExpbmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG5cbiAgICAgIC8vIEJBQ0tHUk9VTkRcbiAgICAgIH0gZWxzZSBpZiAoIXN0YXRlLmluS2V5d29yZExpbmUgJiYgc3RhdGUuYWxsb3dCYWNrZ3JvdW5kICYmIHN0cmVhbS5tYXRjaCgvKOiDjOaZr3zrsLDqsr184LmB4LiZ4Lin4LiE4Li04LiUfOCyueCyv+CyqOCzjeCyqOCzhuCysuCzhnzgsKjgsYfgsKrgsKXgsY3gsK/gsIJ84Kiq4Ki/4Kib4KmL4KiV4KmcfOCkquClg+Ckt+CljeCkoOCkreClguCkruCkv3zYstmF24zZhtmHfNin2YTYrtmE2YHZitipfNeo16fXonzQotCw0YDQuNGFfNCf0YDQtdC00YvRgdGC0L7RgNC40Y980J/RgNC10LTQuNGB0YLQvtGA0LjRj3zQn9C+0LfQsNC00LjQvdCwfNCf0LXRgNC10LTRg9C80L7QstCwfNCe0YHQvdC+0LLQsHzQmtC+0L3RgtC10LrRgdGCfNCa0LXRgNC10Yh8zqXPgM+MzrLOsc64z4HOv3xaYcWCb8W8ZW5pYXxZb1xcLWhvXFwtaG98VGF1c3RhfFRhdXN0fFNpdHXEgWNpamF8UmVyZWZvbnN8UG96YWRpbmF8UG96YWRpZXxQb3phZMOtfE9zbm92YXxMYXRhciBCZWxha2FuZ3xLb250ZXh0fEtvbnRla3N0c3xLb250ZWtzdGFzfEtvbnRla3N0fEjDoXR0w6lyfEhhbm5lcmdyb25kfEdydW5kbGFnZXxHZcOnbWnFn3xGdW5kb3xGb25vfEZpcnN0IG9mZnxEaXMgaXMgd2hhdCB3ZW50IGRvd258RGFzYXJ8Q29udGV4dG98Q29udGV4dGV8Q29udGV4dHxDb250ZXN0b3xDZW7DoXJpbyBkZSBGdW5kb3xDZW5hcmlvIGRlIEZ1bmRvfENlZm5kaXJ8QuG7kWkgY+G6o25ofEJha2dydW5udXJ8QmFrZ3J1bm58QmFrZ3J1bmR8QmFnZ3J1bmR8QmFja2dyb3VuZHxCNHxBbnRlY2VkZW50c3xBbnRlY2VkZW50ZXN8w4ZyfEFlcnxBY2h0ZXJncm9uZCk6LykpIHtcbiAgICAgICAgc3RhdGUuYWxsb3dQbGFjZWhvbGRlcnMgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuYWxsb3dTdGVwcyA9IHRydWU7XG4gICAgICAgIHN0YXRlLmFsbG93QmFja2dyb3VuZCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5hbGxvd011bHRpbGluZUFyZ3VtZW50ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmluS2V5d29yZExpbmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG5cbiAgICAgIC8vIFNDRU5BUklPIE9VVExJTkVcbiAgICAgIH0gZWxzZSBpZiAoIXN0YXRlLmluS2V5d29yZExpbmUgJiYgc3RhdGUuYWxsb3dTY2VuYXJpbyAmJiBzdHJlYW0ubWF0Y2goLyjloLTmma/lpKfntrF85Zy65pmv5aSn57qyfOWKh+acrOWkp+e2sXzliafmnKzlpKfnurJ844OG44Oz44OX44OsfOOCt+ODiuODquOCquODhuODs+ODl+ODrOODvOODiHzjgrfjg4rjg6rjgqrjg4bjg7Pjg5fjg6x844K344OK44Oq44Kq44Ki44Km44OI44Op44Kk44OzfOyLnOuCmOumrOyYpCDqsJzsmpR84Liq4Lij4Li44Lib4LmA4Lir4LiV4Li44LiB4Liy4Lij4LiT4LmMfOC5guC4hOC4o+C4h+C4quC4o+C5ieC4suC4h+C4guC4reC4h+C5gOC4q+C4leC4uOC4geC4suC4o+C4k+C5jHzgsrXgsr/gsrXgsrDgsqPgs4Z84LCV4LCl4LCo4LCCfOCoquCon+ColeCopeCoviDgqLDgqYLgqKog4Kiw4KmH4KiW4Ki+fOCoquCon+ColeCopeCoviDgqKLgqL7gqILgqJrgqL584KSq4KSw4KS/4KSm4KWD4KS24KWN4KSvIOCksOClguCkquCksOClh+CkluCkvnzYs9mK2YbYp9ix2YrZiCDZhdiu2LfYt3zYp9mE2q/ZiNuMINiz2YbYp9ix24zZiHzXqteR16DXmdeqINeq16jXl9eZ16l80KHRhtC10L3QsNGA0LjQudC90YvSoyDRgtOp0LfQtdC70LXRiNC1fNCh0YbQtdC90LDRgNC40Lkg0YHRgtGA0YPQutGC0YPRgNCw0YHQuHzQodGC0YDRg9C60YLRg9GA0LAg0YHRhtC10L3QsNGA0ZbRjnzQodGC0YDRg9C60YLRg9GA0LAg0YHRhtC10L3QsNGA0LjRj3zQodGC0YDRg9C60YLRg9GA0LAg0YHRhtC10L3QsNGA0LjRmNCwfNCh0LrQuNGG0LB80KDQsNC80LrQsCDQvdCwINGB0YbQtdC90LDRgNC40Ll80JrQvtC90YbQtdC/0YJ8zqDOtc+BzrnOs8+BzrHPhs6uIM6jzrXOvc6xz4HOr86/z4V8V2hhcnJpbWVhbiBpc3xUZW1wbGF0ZSBTaXR1YWl8VGVtcGxhdGUgU2VuYXJpb3xUZW1wbGF0ZSBLZWFkYWFufFRhcGF1c2FpaGlvfFN6ZW5hcmlvZ3J1bmRyaXNzfFN6YWJsb24gc2NlbmFyaXVzemF8U3dhIGh3w6ZyIHN3YXxTd2EgaHdhZXIgc3dhfFN0cnVrdHVyYSBzY2VuYXJpamF8U3RydWN0dXLEgyBzY2VuYXJpdXxTdHJ1Y3R1cmEgc2NlbmFyaXV8U2tpY2F8U2tlbmFyaW8ga29uc2VwfFNoaXZlciBtZSB0aW1iZXJzfFNlbmFyeW8gdGFzbGHEn8SxfFNjaGVtYSBkZWxsbyBzY2VuYXJpb3xTY2VuYXJpb21hbGx8U2NlbmFyaW9tYWx8U2NlbmFyaW8gVGVtcGxhdGV8U2NlbmFyaW8gT3V0bGluZXxTY2VuYXJpbyBBbWxpbmVsbG9sfFNjZW7EgXJpanMgcMSTYyBwYXJhdWdhfFNjZW5hcmlqYXVzIMWhYWJsb25hc3xSZWNrb24gaXQncyBsaWtlfFJhYW1zdHNlbmFhcml1bXxQbGFuZyB2dW0gU3plbmFyaW98UGxhbiBkdSBTY8OpbmFyaW98UGxhbiBkdSBzY8OpbmFyaW98T3Nub3ZhIHNjw6luw6HFmWV8T3Nub3ZhIFNjZW7DoXJhfE7DocSNcnQgU2NlbsOhcnV8TsOhxI1ydCBTY8OpbsOhxZllfE7DocSNcnQgU2NlbsOhcmF8TUlTSFVOIFNSU0xZfE1lbmdnYXJpc2thbiBTZW5hcmlvfEzDvXNpbmcgRMOmbWF8TMO9c2luZyBBdGJ1csOwYXLDoXNhcnxLb250dXJvIGRlIGxhIHNjZW5hcm98S29uY2VwdHxLaHVuZyB0w6xuaCBodeG7kW5nfEtodW5nIGvhu4tjaCBi4bqjbnxGb3JnYXTDs2vDtm55diB2w6F6bGF0fEVzcXVlbWEgZG8gQ2Vuw6FyaW98RXNxdWVtYSBkbyBDZW5hcmlvfEVzcXVlbWEgZGVsIGVzY2VuYXJpb3xFc3F1ZW1hIGRlIGwnZXNjZW5hcml8RXNib3pvIGRvIGVzY2VuYXJpb3xEZWxpbmVhw6fDo28gZG8gQ2Vuw6FyaW98RGVsaW5lYWNhbyBkbyBDZW5hcmlvfEFsbCB5J2FsbHxBYnN0cmFrdCBTY2VuYXJpb3xBYnN0cmFjdCBTY2VuYXJpbyk6LykpIHtcbiAgICAgICAgc3RhdGUuYWxsb3dQbGFjZWhvbGRlcnMgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5hbGxvd1N0ZXBzID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuYWxsb3dNdWx0aWxpbmVBcmd1bWVudCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5pbktleXdvcmRMaW5lID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuXG4gICAgICAvLyBFWEFNUExFU1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5hbGxvd1NjZW5hcmlvICYmIHN0cmVhbS5tYXRjaCgvKOS+i+WtkHzkvot844K144Oz44OX44OrfOyYiHzguIrguLjguJTguILguK3guIfguYDguKvguJXguLjguIHguLLguKPguJPguYx84LiK4Li44LiU4LiC4Lit4LiH4LiV4Lix4Lin4Lit4Lii4LmI4Liy4LiHfOCyieCypuCyvuCyueCysOCyo+CzhuCyl+Cys+CzgXzgsIngsKbgsL7gsLngsLDgsKPgsLLgsYF84KiJ4Kim4Ki+4Ki54Kiw4Kio4Ki+4KiCfOCkieCkpuCkvuCkueCksOCko3zZhtmF2YjZhtmHINmH2Kd82KfZhdir2YTYqXzXk9eV15LXnteQ15XXqnzSrtGA0L3TmdC60LvTmdGAfNCh0YbQtdC90LDRgNC40ZjQuHzQn9GA0LjQvNC10YDRi3zQn9GA0LjQvNC10YDQuHzQn9GA0LjQutC70LDQtNC4fNCc0LjRgdC+0LvQu9Cw0YB80JzQuNGB0LDQu9C70LDRgHzOo861zr3OrM+BzrnOsXzOoM6xz4HOsc60zrXOr86zzrzOsc+EzrF8WW91J2xsIHdhbm5hfFZvb3JiZWVsZGVufFZhcmlhbnRhaXxUYXBhdWtzZXR8U2Ugw75lfFNlIHRoZXxTZSDDsGV8U2NlbmFyaW9zfFNjZW5hcmlqaXxTY2VuYXJpamFpfFByenlrxYJhZHl8UHJpbWplcml8UHJpbWVyaXxQxZnDrWtsYWR5fFByw61rbGFkeXxQaWVtxJNyaXxQw6lsZMOha3xQYXZ5emTFvmlhaXxQYXJhdWdzfMOWcm5la2xlcnxKdWh0dW1pZHxFeGVtcGxvc3xFeGVtcGxlc3xFeGVtcGxlfEV4ZW1wZWx8RVhBTVBMWnxFeGFtcGxlc3xFc2VtcGl8RW5naHJlaWZmdGlhdXxFa3plbXBsb2p8RWtzZW1wbGVyfEVqZW1wbG9zfEThu68gbGnhu4d1fERlYWQgbWVuIHRlbGwgbm8gdGFsZXN8RMOmbWl8Q29udG9ofENlbsOhcmlvc3xDZW5hcmlvc3xCZWlzcGlsbGVyfEJlaXNwaWVsZXxBdGJ1csOwYXLDoXNpcik6LykpIHtcbiAgICAgICAgc3RhdGUuYWxsb3dQbGFjZWhvbGRlcnMgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuYWxsb3dTdGVwcyA9IHRydWU7XG4gICAgICAgIHN0YXRlLmFsbG93QmFja2dyb3VuZCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5hbGxvd011bHRpbGluZUFyZ3VtZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuXG4gICAgICAvLyBTQ0VOQVJJT1xuICAgICAgfSBlbHNlIGlmICghc3RhdGUuaW5LZXl3b3JkTGluZSAmJiBzdGF0ZS5hbGxvd1NjZW5hcmlvICYmIHN0cmVhbS5tYXRjaCgvKOWgtOaZr3zlnLrmma985YqH5pysfOWJp+acrHzjgrfjg4rjg6rjgqp87Iuc64KY66as7JikfOC5gOC4q+C4leC4uOC4geC4suC4o+C4k+C5jHzgspXgsqXgsr7gsrjgsr7gsrDgsr7gsoLgsrZ84LC44LCo4LGN4LCo4LC/4LC14LGH4LC24LCCfOCoquCon+ColeCopeCovnzgpKrgpLDgpL/gpKbgpYPgpLbgpY3gpK982LPZitmG2KfYsdmK2Yh82LPZhtin2LHbjNmIfNeq16jXl9eZ16l80KHRhtC10L3QsNGA0ZbQuXzQodGG0LXQvdCw0YDQuNC+fNCh0YbQtdC90LDRgNC40Ll80J/RgNC40LzQtdGAfM6jzrXOvc6sz4HOuc6/fFTDrG5oIGh14buRbmd8VGhlIHRoaW5nIG9mIGl0IGlzfFRhcGF1c3xTemVuYXJpb3xTd2F8U3RzZW5hYXJpdW18U2tlbmFyaW98U2l0dWFpfFNlbmFyeW98U2VuYXJpb3xTY2VuYXJvfFNjZW5hcml1c3p8U2NlbmFyaXV8U2PDqW5hcmlvfFNjZW5hcmlvfFNjZW5hcmlqdXN8U2NlbsSBcmlqc3xTY2VuYXJpanxTY2VuYXJpZXxTY8OpbsOhxZl8U2NlbsOhcnxQcmltZXJ8TUlTSFVOfEvhu4tjaCBi4bqjbnxLZWFkYWFufEhlYXZlIHRvfEZvcmdhdMOza8O2bnl2fEVzY2VuYXJpb3xFc2NlbmFyaXxDZW7DoXJpb3xDZW5hcmlvfEF3d3csIGxvb2sgbWF0ZXxBdGJ1csOwYXLDoXMpOi8pKSB7XG4gICAgICAgIHN0YXRlLmFsbG93UGxhY2Vob2xkZXJzID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmFsbG93U3RlcHMgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5hbGxvd0JhY2tncm91bmQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuYWxsb3dNdWx0aWxpbmVBcmd1bWVudCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5pbktleXdvcmRMaW5lID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuXG4gICAgICAvLyBTVEVQU1xuICAgICAgfSBlbHNlIGlmICghc3RhdGUuaW5LZXl3b3JkTGluZSAmJiBzdGF0ZS5hbGxvd1N0ZXBzICYmIHN0cmVhbS5tYXRjaCgvKOmCo+m6vHzpgqPkuYh86ICM5LiUfOeVtnzlvZN85bm25LiUfOWQjOaZgnzlkIzml7Z85YmN5o+QfOWBh+iuvnzlgYfoqK185YGH5a6afOWBh+WmgnzkvYbmmK985L2G44GXfOS4puS4lHzjgoLjgZd844Gq44KJ44GwfOOBn+OBoOOBl3zjgZfjgYvjgZd844GL44GkfO2VmOyngOunjHzsobDqsbR866i87KCAfOunjOydvHzrp4zslb1864uofOq3uOumrOqzoHzqt7jrn6zrqbR84LmB4Lil4LiwIHzguYDguKHguLfguYjguK0gfOC5geC4leC5iCB84LiU4Lix4LiH4LiZ4Lix4LmJ4LiZIHzguIHguLPguKvguJnguJTguYPguKvguYkgfOCyuOCzjeCypeCyv+CypOCyv+Cyr+CyqOCzjeCyqOCzgSB84LKu4LKk4LON4LKk4LOBIHzgsqjgsr/gs5XgsqHgsr/gsqYgfOCyqOCyguCypOCysCB84LKG4LKm4LKw4LOGIHzgsK7gsLDgsL/gsK/gsYEgfOCwmuCxhuCwquCxjeCwquCwrOCwoeCwv+CwqOCwpuCwvyB84LCV4LC+4LCo4LC/IHzgsIgg4LCq4LCw4LC/4LC44LGN4LCl4LC/4LCk4LC/4LCy4LGLIHzgsIXgsKrgsY3gsKrgsYHgsKHgsYEgfOCoquCosCB84Kik4KimIHzgqJzgqYfgqJXgqLAgfOConOCov+CoteCph+CogiDgqJXgqL8gfOConOCopuCpi+CogiB84KiF4Kik4KmHIHzgpK/gpKbgpL8gfOCkquCksOCkqOCljeCkpOClgSB84KSq4KSwIHzgpKTgpKwgfOCkpOCkpuCkviB84KSk4KSl4KS+IHzgpJzgpKwgfOCkmuClguCkguCkleCkvyB84KSV4KS/4KSo4KWN4KSk4KWBIHzgpJXgpKbgpL4gfOCklOCksCB84KSF4KSX4KSwIHzZiCB82YfZhtqv2KfZhduMIHzZhdiq2YkgfNmE2YPZhiB82LnZhtiv2YXYpyB82KvZhSB82KjZgdix2LYgfNio2Kcg2YHYsdi2IHzYp9mF2KcgfNin2LDYp9mLIHzYotmG2q/Yp9mHIHzXm9eQ16nXqCB815XXktedIHzXkdeU15nXoNeq158gfNeQ15bXmSB815DXliB815DXkdecIHzQr9C60YnQviB80rrTmdC8IHzQo9C90LTQsCB80KLQvtC00ZYgfNCi0L7Qs9C00LAgfNCi0L4gfNCi0LDQutC20LUgfNCi0LAgfNCf0YPRgdGC0YwgfNCf0YDQuNC/0YPRgdGC0LjQvNC+LCDRidC+IHzQn9GA0LjQv9GD0YHRgtC40LzQviB80J7QvdC00LAgfNCd0L4gfNCd0LXRhdCw0LkgfNCd05nRgtC40pfTmdC005kgfNCb0LXQutC40L0gfNCb05nQutC40L0gfNCa0L7Qu9C4IHzQmtC+0LPQtNCwIHzQmtC+0LPQsNGC0L4gfNCa0LDQtNCwIHzQmtCw0LQgfNCaINGC0L7QvNGDINC20LUgfNCGIHzQmCB80JfQsNC00LDRgtC+IHzQl9Cw0LTQsNGC0LggfNCX0LDQtNCw0YLQtSB80JXRgdC70LggfNCU0L7Qv9GD0YHRgtC40LwgfNCU0LDQvdC+IHzQlNCw0LTQtdC90L4gfNCS05kgfNCS0LAgfNCR0LjRgNC+0LogfNOY0LzQvNCwIHzTmNC50YLQuNC6IHzTmNCz05nRgCB80JDQvNC80L4gfNCQ0LvQuCB80JDQu9C1IHzQkNCz0LDRgCB80JAg0YLQsNC60L7QtiB80JAgfM6kz4zPhM61IHzOjM+EzrHOvSB8zprOsc65IHzOlM61zrTOv868zq3Ovc6/z4UgfM6RzrvOu86sIHzDnnVyaCB8w55lZ2FyIHzDnmEgw75lIHzDnsOhIHzDnmEgfFphdGF0aSB8WmFrxYJhZGFqxIVjIHxaYWRhdG8gfFphZGF0ZSB8WmFkYW5vIHxaYWRhbmkgfFphZGFuIHxaYSBwxZllZHBva2xhZHUgfFphIHByZWRwb2tsYWR1IHxZb3VzZSBrbm93IHdoZW4geW91c2UgZ290IHxZb3VzZSBrbm93IGxpa2Ugd2hlbiB8WW5hIHxZZWFoIG5haCB8WSdrbm93IHxZIHxXdW4gfFd0ZWR5IHxXaGVuIHknYWxsIHxXaGVuIHxXZW5uIHxXRU4gfHdhbm4gfFZlIHxWw6AgfFVuZCB8VW4gfHVnZWhvbGwgfFRvbyByaWdodCB8VGh1cmggfFRow6wgfFRoZW4geSdhbGwgfFRoZW4gfFRoYSB0aGUgfFRoYSB8VGV0YXBpIHxUYXBpIHxUYWsgfFRhZGEgfFRhZCB8U3RlbCB8U29pdCB8U2lpcyB8yJhpIHzFnmkgfFNpIHxTZWQgfFNlIHxTw6UgfFF1YW5kbyB8UXVhbmQgfFF1YW4gfFByeWQgfFBvdG9tIHxQb2t1ZCB8UG9raWHEviB8UGVyw7IgfFBlcm8gfFBhayB8T3JheiB8T25kYSB8T25kIHxPbGV0ZXRhYW4gfE9nIHxPY2ggfE8gemFtYW4gfE5paW4gfE5oxrBuZyB8TsOkciB8TsOlciB8TXV0dGEgfE1lbiB8TWFzIHxNYWthIHxNYWpkIHxNYWrEhWMgfE1haXMgfE1hYXIgfG3DpCB8TWEgfExvcnNxdWUgfExvcnNxdSd8TG9nbyB8TGV0IGdvIGFuZCBoYXVsIHxLdW4gfEt1aWQgfEt1aSB8S2llZHkgfEtoaSB8S2V0aWthIHxLZW11ZGlhbiB8S2XEjyB8S2R5xb4gfEthaiB8S2FpIHxLYWRhIHxLYWQgfEplxbxlbGkgfEplxZtsaSB8SmEgfEl0J3MganVzdCB1bmJlbGlldmFibGUgfElyIHxJIENBTiBIQVogfEkgfEhhIHxHaXZ1biB8R2l2ZXQgfEdpdmVuIHknYWxsIHxHaXZlbiB8R2l0dCB8R2VnZXZlbiB8R2VnZWJlbiBzZWllbiB8R2VnZWJlbiBzZWkgfEdkeSB8R2FuZ3dheSEgfEZha2F0IHzDiXRhbnQgZG9ubsOpcyB8RXRhbnQgZG9ubsOpcyB8w4l0YW50IGRvbm7DqWVzIHxFdGFudCBkb25uw6llcyB8w4l0YW50IGRvbm7DqWUgfEV0YW50IGRvbm7DqWUgfMOJdGFudCBkb25uw6kgfEV0YW50IGRvbm7DqSB8RXQgfMOJcyB8RW50b25jZXMgfEVudMOzbiB8RW50w6NvIHxFbnRhbyB8RW4gfEXEn2VyIGtpIHxFZiB8RWVsZGFkZXMgfEUgfMOQdXJoIHxEdW90YSB8RHVuIHxEb25pdGHEtW8gfERvbmF0IHxEb25hZGEgfERvIHxEaXllbGltIGtpIHxEaWJlcmkgfERlbmdhbiB8RGVuIHlvdXNlIGdvdHRhIHxERU4gfERlIHxEYXRvIHxEYcibaSBmaWluZCB8RGHFo2kgZmlpbmQgfERhdGkgZmlpbmQgfERhdGkgfERhdGUgZmlpbmQgfERhdGUgfERhdGEgfERhdCBmaWluZCB8RGFyIHxEYW5uIHxkYW5uIHxEYW4gfERhZG9zIHxEYWRvIHxEYWRhcyB8RGFkYSB8w5BhIMOwZSB8w5BhIHxDdWFuZG8gfENobyB8Q2FuZG8gfEPDom5kIHxDYW5kIHxDYWwgfEJ1dCB5J2FsbCB8QnV0IGF0IHRoZSBlbmQgb2YgdGhlIGRheSBJIHJlY2tvbiB8QlVUIHxCdXQgfEJ1aCB8QmxpbWV5ISB8Qmnhur90IHxCZXQgfEJhZ2kgfEF5ZSB8YXdlciB8QXZhc3QhIHxBdHVuY2kgfEF0ZXNhIHxBdMOocyB8QXBhYmlsYSB8QW5yaGVnZWRpZyBhIHxBbmdlbm9tbWVuIHxBbmQgeSdhbGwgfEFuZCB8QU4gfEFuIHxhbiB8QW1pa29yIHxBbWVubnlpYmVuIHxBbWEgfEFscyB8QWxvcnMgfEFsbG9yYSB8QWxpIHxBbGVzaG9yZXMgfEFsZSB8QWtrb3IgfEFrIHxBZG90dCB8QWMgfEFiZXIgfEEgesOhcm92ZcWIIHxBIHRpZcW+IHxBIHRha3RpZcW+IHxBIHRha8OpIHxBIHxhIHw3IHxcXCogKS8pKSB7XG4gICAgICAgIHN0YXRlLmluU3RlcCA9IHRydWU7XG4gICAgICAgIHN0YXRlLmFsbG93UGxhY2Vob2xkZXJzID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuYWxsb3dNdWx0aWxpbmVBcmd1bWVudCA9IHRydWU7XG4gICAgICAgIHN0YXRlLmluS2V5d29yZExpbmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG5cbiAgICAgIC8vIElOTElORSBTVFJJTkdcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9cIlteXCJdKlwiPy8pKSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuXG4gICAgICAvLyBQTEFDRUhPTERFUlxuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5hbGxvd1BsYWNlaG9sZGVycyAmJiBzdHJlYW0ubWF0Y2goLzxbXj5dKj4/LykpIHtcbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcblxuICAgICAgLy8gRmFsbCB0aHJvdWdoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teQFwiPCNdLyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtZmVhdHVyZVwiLCBcImdoZXJraW5cIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJnb1wiLCBmdW5jdGlvbihjb25maWcpIHtcbiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDtcblxuICB2YXIga2V5d29yZHMgPSB7XG4gICAgXCJicmVha1wiOnRydWUsIFwiY2FzZVwiOnRydWUsIFwiY2hhblwiOnRydWUsIFwiY29uc3RcIjp0cnVlLCBcImNvbnRpbnVlXCI6dHJ1ZSxcbiAgICBcImRlZmF1bHRcIjp0cnVlLCBcImRlZmVyXCI6dHJ1ZSwgXCJlbHNlXCI6dHJ1ZSwgXCJmYWxsdGhyb3VnaFwiOnRydWUsIFwiZm9yXCI6dHJ1ZSxcbiAgICBcImZ1bmNcIjp0cnVlLCBcImdvXCI6dHJ1ZSwgXCJnb3RvXCI6dHJ1ZSwgXCJpZlwiOnRydWUsIFwiaW1wb3J0XCI6dHJ1ZSxcbiAgICBcImludGVyZmFjZVwiOnRydWUsIFwibWFwXCI6dHJ1ZSwgXCJwYWNrYWdlXCI6dHJ1ZSwgXCJyYW5nZVwiOnRydWUsIFwicmV0dXJuXCI6dHJ1ZSxcbiAgICBcInNlbGVjdFwiOnRydWUsIFwic3RydWN0XCI6dHJ1ZSwgXCJzd2l0Y2hcIjp0cnVlLCBcInR5cGVcIjp0cnVlLCBcInZhclwiOnRydWUsXG4gICAgXCJib29sXCI6dHJ1ZSwgXCJieXRlXCI6dHJ1ZSwgXCJjb21wbGV4NjRcIjp0cnVlLCBcImNvbXBsZXgxMjhcIjp0cnVlLFxuICAgIFwiZmxvYXQzMlwiOnRydWUsIFwiZmxvYXQ2NFwiOnRydWUsIFwiaW50OFwiOnRydWUsIFwiaW50MTZcIjp0cnVlLCBcImludDMyXCI6dHJ1ZSxcbiAgICBcImludDY0XCI6dHJ1ZSwgXCJzdHJpbmdcIjp0cnVlLCBcInVpbnQ4XCI6dHJ1ZSwgXCJ1aW50MTZcIjp0cnVlLCBcInVpbnQzMlwiOnRydWUsXG4gICAgXCJ1aW50NjRcIjp0cnVlLCBcImludFwiOnRydWUsIFwidWludFwiOnRydWUsIFwidWludHB0clwiOnRydWUsIFwiZXJyb3JcIjogdHJ1ZSxcbiAgICBcInJ1bmVcIjp0cnVlXG4gIH07XG5cbiAgdmFyIGF0b21zID0ge1xuICAgIFwidHJ1ZVwiOnRydWUsIFwiZmFsc2VcIjp0cnVlLCBcImlvdGFcIjp0cnVlLCBcIm5pbFwiOnRydWUsIFwiYXBwZW5kXCI6dHJ1ZSxcbiAgICBcImNhcFwiOnRydWUsIFwiY2xvc2VcIjp0cnVlLCBcImNvbXBsZXhcIjp0cnVlLCBcImNvcHlcIjp0cnVlLCBcImRlbGV0ZVwiOnRydWUsIFwiaW1hZ1wiOnRydWUsXG4gICAgXCJsZW5cIjp0cnVlLCBcIm1ha2VcIjp0cnVlLCBcIm5ld1wiOnRydWUsIFwicGFuaWNcIjp0cnVlLCBcInByaW50XCI6dHJ1ZSxcbiAgICBcInByaW50bG5cIjp0cnVlLCBcInJlYWxcIjp0cnVlLCBcInJlY292ZXJcIjp0cnVlXG4gIH07XG5cbiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXFwtKiZeJTo9PD4hfFxcL10vO1xuXG4gIHZhciBjdXJQdW5jO1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gJ1wiJyB8fCBjaCA9PSBcIidcIiB8fCBjaCA9PSBcImBcIikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmICgvW1xcZFxcLl0vLnRlc3QoY2gpKSB7XG4gICAgICBpZiAoY2ggPT0gXCIuXCIpIHtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eWzAtOV0rKFtlRV1bXFwtK10/WzAtOV0rKT8vKTtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIwXCIpIHtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eW3hYXVswLTlhLWZBLUZdKy8pIHx8IHN0cmVhbS5tYXRjaCgvXjBbMC03XSsvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmVhbS5tYXRjaCgvXlswLTldKlxcLj9bMC05XSooW2VFXVtcXC0rXT9bMC05XSspPy8pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgfVxuICAgIGlmICgvW1xcW1xcXXt9XFwoXFwpLDtcXDpcXC5dLy50ZXN0KGNoKSkge1xuICAgICAgY3VyUHVuYyA9IGNoO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChjaCA9PSBcIi9cIikge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50O1xuICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIvXCIpKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH1cbiAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfXFx4YTEtXFx1ZmZmZl0vKTtcbiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICBpZiAoa2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkge1xuICAgICAgaWYgKGN1ciA9PSBcImNhc2VcIiB8fCBjdXIgPT0gXCJkZWZhdWx0XCIpIGN1clB1bmMgPSBcImNhc2VcIjtcbiAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICB9XG4gICAgaWYgKGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImF0b21cIjtcbiAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7XG4gICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fVxuICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgcXVvdGUgIT0gXCJgXCIgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgfHwgIShlc2NhcGVkIHx8IHF1b3RlID09IFwiYFwiKSlcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7XG4gICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYgKGNoID09IFwiL1wiICYmIG1heWJlRW5kKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG1heWJlRW5kID0gKGNoID09IFwiKlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBhbGlnbiwgcHJldikge1xuICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDtcbiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYWxpZ24gPSBhbGlnbjtcbiAgICB0aGlzLnByZXYgPSBwcmV2O1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBjb2wsIHR5cGUpIHtcbiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLmluZGVudGVkLCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpO1xuICB9XG4gIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHtcbiAgICBpZiAoIXN0YXRlLmNvbnRleHQucHJldikgcmV0dXJuO1xuICAgIHZhciB0ID0gc3RhdGUuY29udGV4dC50eXBlO1xuICAgIGlmICh0ID09IFwiKVwiIHx8IHQgPT0gXCJdXCIgfHwgdCA9PSBcIn1cIilcbiAgICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDtcbiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjtcbiAgfVxuXG4gIC8vIEludGVyZmFjZVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW5pemU6IG51bGwsXG4gICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgXCJ0b3BcIiwgZmFsc2UpLFxuICAgICAgICBpbmRlbnRlZDogMCxcbiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWVcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDtcbiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlO1xuICAgICAgICBpZiAoY3R4LnR5cGUgPT0gXCJjYXNlXCIpIGN0eC50eXBlID0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgY3VyUHVuYyA9IG51bGw7XG4gICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChzdHlsZSA9PSBcImNvbW1lbnRcIikgcmV0dXJuIHN0eWxlO1xuICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlO1xuXG4gICAgICBpZiAoY3VyUHVuYyA9PSBcIntcIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCJ9XCIpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIltcIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCJdXCIpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIihcIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCIpXCIpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcImNhc2VcIikgY3R4LnR5cGUgPSBcImNhc2VcIjtcbiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCJ9XCIgJiYgY3R4LnR5cGUgPT0gXCJ9XCIpIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBjdHgudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UgJiYgc3RhdGUudG9rZW5pemUgIT0gbnVsbCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0LCBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTtcbiAgICAgIGlmIChjdHgudHlwZSA9PSBcImNhc2VcIiAmJiAvXig/OmNhc2V8ZGVmYXVsdClcXGIvLnRlc3QodGV4dEFmdGVyKSkge1xuICAgICAgICBzdGF0ZS5jb250ZXh0LnR5cGUgPSBcIn1cIjtcbiAgICAgICAgcmV0dXJuIGN0eC5pbmRlbnRlZDtcbiAgICAgIH1cbiAgICAgIHZhciBjbG9zaW5nID0gZmlyc3RDaGFyID09IGN0eC50eXBlO1xuICAgICAgaWYgKGN0eC5hbGlnbikgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTtcbiAgICAgIGVsc2UgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpO1xuICAgIH0sXG5cbiAgICBlbGVjdHJpY0NoYXJzOiBcInt9KTpcIixcbiAgICBjbG9zZUJyYWNrZXRzOiBcIigpW117fScnXFxcIlxcXCJgYFwiLFxuICAgIGZvbGQ6IFwiYnJhY2VcIixcbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCIvKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCIqL1wiLFxuICAgIGxpbmVDb21tZW50OiBcIi8vXCJcbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtZ29cIiwgXCJnb1wiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImdyb292eVwiLCBmdW5jdGlvbihjb25maWcpIHtcbiAgZnVuY3Rpb24gd29yZHMoc3RyKSB7XG4gICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdChcIiBcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuICB2YXIga2V5d29yZHMgPSB3b3JkcyhcbiAgICBcImFic3RyYWN0IGFzIGFzc2VydCBib29sZWFuIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlZiBkZWZhdWx0IFwiICtcbiAgICBcImRvIGRvdWJsZSBlbHNlIGVudW0gZXh0ZW5kcyBmaW5hbCBmaW5hbGx5IGZsb2F0IGZvciBnb3RvIGlmIGltcGxlbWVudHMgaW1wb3J0IGluIFwiICtcbiAgICBcImluc3RhbmNlb2YgaW50IGludGVyZmFjZSBsb25nIG5hdGl2ZSBuZXcgcGFja2FnZSBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmV0dXJuIFwiICtcbiAgICBcInNob3J0IHN0YXRpYyBzdHJpY3RmcCBzdXBlciBzd2l0Y2ggc3luY2hyb25pemVkIHRocmVhZHNhZmUgdGhyb3cgdGhyb3dzIHRyYWl0IHRyYW5zaWVudCBcIiArXG4gICAgXCJ0cnkgdm9pZCB2b2xhdGlsZSB3aGlsZVwiKTtcbiAgdmFyIGJsb2NrS2V5d29yZHMgPSB3b3JkcyhcImNhdGNoIGNsYXNzIGRlZiBkbyBlbHNlIGVudW0gZmluYWxseSBmb3IgaWYgaW50ZXJmYWNlIHN3aXRjaCB0cmFpdCB0cnkgd2hpbGVcIik7XG4gIHZhciBzdGFuZGFsb25lS2V5d29yZHMgPSB3b3JkcyhcInJldHVybiBicmVhayBjb250aW51ZVwiKTtcbiAgdmFyIGF0b21zID0gd29yZHMoXCJudWxsIHRydWUgZmFsc2UgdGhpc1wiKTtcblxuICB2YXIgY3VyUHVuYztcbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgIGlmIChjaCA9PSAnXCInIHx8IGNoID09IFwiJ1wiKSB7XG4gICAgICByZXR1cm4gc3RhcnRTdHJpbmcoY2gsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoL1tcXFtcXF17fVxcKFxcKSw7XFw6XFwuXS8udGVzdChjaCkpIHtcbiAgICAgIGN1clB1bmMgPSBjaDtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoL1xcZC8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcLl0vKTtcbiAgICAgIGlmIChzdHJlYW0uZWF0KC9lRS8pKSB7IHN0cmVhbS5lYXQoL1xcK1xcLS8pOyBzdHJlYW0uZWF0V2hpbGUoL1xcZC8pOyB9XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9XG4gICAgaWYgKGNoID09IFwiL1wiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIipcIikpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbkNvbW1lbnQpO1xuICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIvXCIpKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfVxuICAgICAgaWYgKGV4cGVjdEV4cHJlc3Npb24oc3RhdGUubGFzdFRva2VuLCBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0U3RyaW5nKGNoLCBzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoID09IFwiLVwiICYmIHN0cmVhbS5lYXQoXCI+XCIpKSB7XG4gICAgICBjdXJQdW5jID0gXCItPlwiO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICgvWytcXC0qJiU9PD4hP3xcXC9+XS8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvWytcXC0qJiU9PD58fl0vKTtcbiAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgfVxuICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9dLyk7XG4gICAgaWYgKGNoID09IFwiQFwiKSB7IHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9cXC5dLyk7IHJldHVybiBcIm1ldGFcIjsgfVxuICAgIGlmIChzdGF0ZS5sYXN0VG9rZW4gPT0gXCIuXCIpIHJldHVybiBcInByb3BlcnR5XCI7XG4gICAgaWYgKHN0cmVhbS5lYXQoXCI6XCIpKSB7IGN1clB1bmMgPSBcInByb3BsYWJlbFwiOyByZXR1cm4gXCJwcm9wZXJ0eVwiOyB9XG4gICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgaWYgKGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsgcmV0dXJuIFwiYXRvbVwiOyB9XG4gICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHtcbiAgICAgIGlmIChibG9ja0tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSBcIm5ld3N0YXRlbWVudFwiO1xuICAgICAgZWxzZSBpZiAoc3RhbmRhbG9uZUtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSBcInN0YW5kYWxvbmVcIjtcbiAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgfVxuICB0b2tlbkJhc2UuaXNCYXNlID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBzdGFydFN0cmluZyhxdW90ZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciB0cmlwbGVRdW90ZWQgPSBmYWxzZTtcbiAgICBpZiAocXVvdGUgIT0gXCIvXCIgJiYgc3RyZWFtLmVhdChxdW90ZSkpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KHF1b3RlKSkgdHJpcGxlUXVvdGVkID0gdHJ1ZTtcbiAgICAgIGVsc2UgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHQoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gIXRyaXBsZVF1b3RlZDtcbiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgICBpZiAoIXRyaXBsZVF1b3RlZCkgeyBicmVhazsgfVxuICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocXVvdGUgKyBxdW90ZSkpIHsgZW5kID0gdHJ1ZTsgYnJlYWs7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocXVvdGUgPT0gJ1wiJyAmJiBuZXh0ID09IFwiJFwiICYmICFlc2NhcGVkICYmIHN0cmVhbS5lYXQoXCJ7XCIpKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbkJhc2VVbnRpbEJyYWNlKCkpO1xuICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCkgc3RhdGUudG9rZW5pemUucG9wKCk7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9XG4gICAgc3RhdGUudG9rZW5pemUucHVzaCh0KTtcbiAgICByZXR1cm4gdChzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZVVudGlsQnJhY2UoKSB7XG4gICAgdmFyIGRlcHRoID0gMTtcbiAgICBmdW5jdGlvbiB0KHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0ucGVlaygpID09IFwifVwiKSB7XG4gICAgICAgIGRlcHRoLS07XG4gICAgICAgIGlmIChkZXB0aCA9PSAwKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplW3N0YXRlLnRva2VuaXplLmxlbmd0aC0xXShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdHJlYW0ucGVlaygpID09IFwie1wiKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICB0LmlzQmFzZSA9IHRydWU7XG4gICAgcmV0dXJuIHQ7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDtcbiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICBpZiAoY2ggPT0gXCIvXCIgJiYgbWF5YmVFbmQpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIqXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3RFeHByZXNzaW9uKGxhc3QsIG5ld2xpbmUpIHtcbiAgICByZXR1cm4gIWxhc3QgfHwgbGFzdCA9PSBcIm9wZXJhdG9yXCIgfHwgbGFzdCA9PSBcIi0+XCIgfHwgL1tcXC5cXFtcXHtcXCgsOzpdLy50ZXN0KGxhc3QpIHx8XG4gICAgICBsYXN0ID09IFwibmV3c3RhdGVtZW50XCIgfHwgbGFzdCA9PSBcImtleXdvcmRcIiB8fCBsYXN0ID09IFwicHJvcGxhYmVsXCIgfHxcbiAgICAgIChsYXN0ID09IFwic3RhbmRhbG9uZVwiICYmICFuZXdsaW5lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHtcbiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7XG4gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmFsaWduID0gYWxpZ247XG4gICAgdGhpcy5wcmV2ID0gcHJldjtcbiAgfVxuICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7XG4gICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZS5pbmRlbnRlZCwgY29sLCB0eXBlLCBudWxsLCBzdGF0ZS5jb250ZXh0KTtcbiAgfVxuICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7XG4gICAgdmFyIHQgPSBzdGF0ZS5jb250ZXh0LnR5cGU7XG4gICAgaWYgKHQgPT0gXCIpXCIgfHwgdCA9PSBcIl1cIiB8fCB0ID09IFwifVwiKVxuICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkO1xuICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICB9XG5cbiAgLy8gSW50ZXJmYWNlXG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbml6ZTogW3Rva2VuQmFzZV0sXG4gICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KChiYXNlY29sdW1uIHx8IDApIC0gY29uZmlnLmluZGVudFVuaXQsIDAsIFwidG9wXCIsIGZhbHNlKSxcbiAgICAgICAgaW5kZW50ZWQ6IDAsXG4gICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlLFxuICAgICAgICBsYXN0VG9rZW46IG51bGxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDtcbiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlO1xuICAgICAgICAvLyBBdXRvbWF0aWMgc2VtaWNvbG9uIGluc2VydGlvblxuICAgICAgICBpZiAoY3R4LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIiAmJiAhZXhwZWN0RXhwcmVzc2lvbihzdGF0ZS5sYXN0VG9rZW4sIHRydWUpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7IGN0eCA9IHN0YXRlLmNvbnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICBjdXJQdW5jID0gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplW3N0YXRlLnRva2VuaXplLmxlbmd0aC0xXShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChzdHlsZSA9PSBcImNvbW1lbnRcIikgcmV0dXJuIHN0eWxlO1xuICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlO1xuXG4gICAgICBpZiAoKGN1clB1bmMgPT0gXCI7XCIgfHwgY3VyUHVuYyA9PSBcIjpcIikgJiYgY3R4LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIikgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICAvLyBIYW5kbGUgaW5kZW50YXRpb24gZm9yIHt4IC0+IFxcbiAuLi4gfVxuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIi0+XCIgJiYgY3R4LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIiAmJiBjdHgucHJldi50eXBlID09IFwifVwiKSB7XG4gICAgICAgIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5jb250ZXh0LmFsaWduID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwie1wiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIn1cIik7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwiW1wiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIl1cIik7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwiKFwiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIilcIik7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwifVwiKSB7XG4gICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgaWYgKGN0eC50eXBlID09IFwifVwiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBjdHgudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICBlbHNlIGlmIChjdHgudHlwZSA9PSBcIn1cIiB8fCBjdHgudHlwZSA9PSBcInRvcFwiIHx8IChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiICYmIGN1clB1bmMgPT0gXCJuZXdzdGF0ZW1lbnRcIikpXG4gICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwic3RhdGVtZW50XCIpO1xuICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTtcbiAgICAgIHN0YXRlLmxhc3RUb2tlbiA9IGN1clB1bmMgfHwgc3R5bGU7XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSxcblxuICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikge1xuICAgICAgaWYgKCFzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0uaXNCYXNlKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBjdHggPSBzdGF0ZS5jb250ZXh0O1xuICAgICAgaWYgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIgJiYgIWV4cGVjdEV4cHJlc3Npb24oc3RhdGUubGFzdFRva2VuLCB0cnVlKSkgY3R4ID0gY3R4LnByZXY7XG4gICAgICB2YXIgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSBjdHgudHlwZTtcbiAgICAgIGlmIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSBcIntcIiA/IDAgOiBjb25maWcuaW5kZW50VW5pdCk7XG4gICAgICBlbHNlIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7XG4gICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBjb25maWcuaW5kZW50VW5pdCk7XG4gICAgfSxcblxuICAgIGVsZWN0cmljQ2hhcnM6IFwie31cIixcbiAgICBjbG9zZUJyYWNrZXRzOiB7dHJpcGxlczogXCInXFxcIlwifSxcbiAgICBmb2xkOiBcImJyYWNlXCIsXG4gICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiLypcIixcbiAgICBibG9ja0NvbW1lbnRFbmQ6IFwiKi9cIixcbiAgICBsaW5lQ29tbWVudDogXCIvL1wiXG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWdyb292eVwiLCBcImdyb292eVwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIHdvcmRPYmood29yZHMpIHtcbiAgdmFyIG8gPSB7fTtcbiAgZm9yICh2YXIgaSA9IDAsIGUgPSB3b3Jkcy5sZW5ndGg7IGkgPCBlOyArK2kpIG9bd29yZHNbaV1dID0gdHJ1ZTtcbiAgcmV0dXJuIG87XG59XG5cbnZhciBrZXl3b3JkTGlzdCA9IFtcbiAgXCJhbGlhc1wiLCBcImFuZFwiLCBcIkJFR0lOXCIsIFwiYmVnaW5cIiwgXCJicmVha1wiLCBcImNhc2VcIiwgXCJjbGFzc1wiLCBcImRlZlwiLCBcImRlZmluZWQ/XCIsIFwiZG9cIiwgXCJlbHNlXCIsXG4gIFwiZWxzaWZcIiwgXCJFTkRcIiwgXCJlbmRcIiwgXCJlbnN1cmVcIiwgXCJmYWxzZVwiLCBcImZvclwiLCBcImlmXCIsIFwiaW5cIiwgXCJtb2R1bGVcIiwgXCJuZXh0XCIsIFwibm90XCIsIFwib3JcIixcbiAgXCJyZWRvXCIsIFwicmVzY3VlXCIsIFwicmV0cnlcIiwgXCJyZXR1cm5cIiwgXCJzZWxmXCIsIFwic3VwZXJcIiwgXCJ0aGVuXCIsIFwidHJ1ZVwiLCBcInVuZGVmXCIsIFwidW5sZXNzXCIsXG4gIFwidW50aWxcIiwgXCJ3aGVuXCIsIFwid2hpbGVcIiwgXCJ5aWVsZFwiLCBcIm5pbFwiLCBcInJhaXNlXCIsIFwidGhyb3dcIiwgXCJjYXRjaFwiLCBcImZhaWxcIiwgXCJsb29wXCIsIFwiY2FsbGNjXCIsXG4gIFwiY2FsbGVyXCIsIFwibGFtYmRhXCIsIFwicHJvY1wiLCBcInB1YmxpY1wiLCBcInByb3RlY3RlZFwiLCBcInByaXZhdGVcIiwgXCJyZXF1aXJlXCIsIFwibG9hZFwiLFxuICBcInJlcXVpcmVfcmVsYXRpdmVcIiwgXCJleHRlbmRcIiwgXCJhdXRvbG9hZFwiLCBcIl9fRU5EX19cIiwgXCJfX0ZJTEVfX1wiLCBcIl9fTElORV9fXCIsIFwiX19kaXJfX1wiXG5dLCBrZXl3b3JkcyA9IHdvcmRPYmooa2V5d29yZExpc3QpO1xuXG52YXIgaW5kZW50V29yZHMgPSB3b3JkT2JqKFtcImRlZlwiLCBcImNsYXNzXCIsIFwiY2FzZVwiLCBcImZvclwiLCBcIndoaWxlXCIsIFwidW50aWxcIiwgXCJtb2R1bGVcIiwgXCJ0aGVuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcImNhdGNoXCIsIFwibG9vcFwiLCBcInByb2NcIiwgXCJiZWdpblwiXSk7XG52YXIgZGVkZW50V29yZHMgPSB3b3JkT2JqKFtcImVuZFwiLCBcInVudGlsXCJdKTtcbnZhciBvcGVuaW5nID0ge1wiW1wiOiBcIl1cIiwgXCJ7XCI6IFwifVwiLCBcIihcIjogXCIpXCJ9O1xudmFyIGNsb3NpbmcgPSB7XCJdXCI6IFwiW1wiLCBcIn1cIjogXCJ7XCIsIFwiKVwiOiBcIihcIn07XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInJ1YnlcIiwgZnVuY3Rpb24oY29uZmlnKSB7XG4gIHZhciBjdXJQdW5jO1xuXG4gIGZ1bmN0aW9uIGNoYWluKG5ld3Rvaywgc3RyZWFtLCBzdGF0ZSkge1xuICAgIHN0YXRlLnRva2VuaXplLnB1c2gobmV3dG9rKTtcbiAgICByZXR1cm4gbmV3dG9rKHN0cmVhbSwgc3RhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaChcIj1iZWdpblwiKSAmJiBzdHJlYW0uZW9sKCkpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplLnB1c2gocmVhZEJsb2NrQ29tbWVudCk7XG4gICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgfVxuICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKSwgbTtcbiAgICBpZiAoY2ggPT0gXCJgXCIgfHwgY2ggPT0gXCInXCIgfHwgY2ggPT0gJ1wiJykge1xuICAgICAgcmV0dXJuIGNoYWluKHJlYWRRdW90ZWQoY2gsIFwic3RyaW5nXCIsIGNoID09ICdcIicgfHwgY2ggPT0gXCJgXCIpLCBzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiL1wiKSB7XG4gICAgICBpZiAocmVnZXhwQWhlYWQoc3RyZWFtKSlcbiAgICAgICAgcmV0dXJuIGNoYWluKHJlYWRRdW90ZWQoY2gsIFwic3RyaW5nLTJcIiwgdHJ1ZSksIHN0cmVhbSwgc3RhdGUpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIlXCIpIHtcbiAgICAgIHZhciBzdHlsZSA9IFwic3RyaW5nXCIsIGVtYmVkID0gdHJ1ZTtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwic1wiKSkgc3R5bGUgPSBcImF0b21cIjtcbiAgICAgIGVsc2UgaWYgKHN0cmVhbS5lYXQoL1tXUV0vKSkgc3R5bGUgPSBcInN0cmluZ1wiO1xuICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgvW3JdLykpIHN0eWxlID0gXCJzdHJpbmctMlwiO1xuICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgvW3d4cV0vKSkgeyBzdHlsZSA9IFwic3RyaW5nXCI7IGVtYmVkID0gZmFsc2U7IH1cbiAgICAgIHZhciBkZWxpbSA9IHN0cmVhbS5lYXQoL1teXFx3XFxzPV0vKTtcbiAgICAgIGlmICghZGVsaW0pIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgICBpZiAob3BlbmluZy5wcm9wZXJ0eUlzRW51bWVyYWJsZShkZWxpbSkpIGRlbGltID0gb3BlbmluZ1tkZWxpbV07XG4gICAgICByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZChkZWxpbSwgc3R5bGUsIGVtYmVkLCB0cnVlKSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIiNcIikge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCI8XCIgJiYgKG0gPSBzdHJlYW0ubWF0Y2goL148KFstfl0pW1xcYFxcXCJcXCddPyhbYS16QS1aXz9dXFx3KilbXFxgXFxcIlxcJ10/KD86O3wkKS8pKSkge1xuICAgICAgcmV0dXJuIGNoYWluKHJlYWRIZXJlRG9jKG1bMl0sIG1bMV0pLCBzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiMFwiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcInhcIikpIHN0cmVhbS5lYXRXaGlsZSgvW1xcZGEtZkEtRl0vKTtcbiAgICAgIGVsc2UgaWYgKHN0cmVhbS5lYXQoXCJiXCIpKSBzdHJlYW0uZWF0V2hpbGUoL1swMV0vKTtcbiAgICAgIGVsc2Ugc3RyZWFtLmVhdFdoaWxlKC9bMC03XS8pO1xuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgfSBlbHNlIGlmICgvXFxkLy50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLm1hdGNoKC9eW1xcZF9dKig/OlxcLltcXGRfXSspPyg/OltlRV1bK1xcLV0/W1xcZF9dKyk/Lyk7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiP1wiKSB7XG4gICAgICB3aGlsZSAoc3RyZWFtLm1hdGNoKC9eXFxcXFtDTV0tLykpIHt9XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIlxcXFxcIikpIHN0cmVhbS5lYXRXaGlsZSgvXFx3Lyk7XG4gICAgICBlbHNlIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiOlwiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIidcIikpIHJldHVybiBjaGFpbihyZWFkUXVvdGVkKFwiJ1wiLCBcImF0b21cIiwgZmFsc2UpLCBzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChzdHJlYW0uZWF0KCdcIicpKSByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZCgnXCInLCBcImF0b21cIiwgdHJ1ZSksIHN0cmVhbSwgc3RhdGUpO1xuXG4gICAgICAvLyA6PiA6Pj4gOjwgOjw8IGFyZSB2YWxpZCBzeW1ib2xzXG4gICAgICBpZiAoc3RyZWFtLmVhdCgvW1xcPFxcPl0vKSkge1xuICAgICAgICBzdHJlYW0uZWF0KC9bXFw8XFw+XS8pO1xuICAgICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIDorIDotIDovIDoqIDp8IDomIDohIGFyZSB2YWxpZCBzeW1ib2xzXG4gICAgICBpZiAoc3RyZWFtLmVhdCgvW1xcK1xcLVxcKlxcL1xcJlxcfFxcOlxcIV0vKSkge1xuICAgICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFN5bWJvbHMgY2FuJ3Qgc3RhcnQgYnkgYSBkaWdpdFxuICAgICAgaWYgKHN0cmVhbS5lYXQoL1thLXpBLVokQF9cXHhhMS1cXHVmZmZmXS8pKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcdyRcXHhhMS1cXHVmZmZmXS8pO1xuICAgICAgICAvLyBPbmx5IG9uZSA/ICEgPSBpcyBhbGxvd2VkIGFuZCBvbmx5IGFzIHRoZSBsYXN0IGNoYXJhY3RlclxuICAgICAgICBzdHJlYW0uZWF0KC9bXFw/XFwhXFw9XS8pO1xuICAgICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCJAXCIgJiYgc3RyZWFtLm1hdGNoKC9eQD9bYS16QS1aX1xceGExLVxcdWZmZmZdLykpIHtcbiAgICAgIHN0cmVhbS5lYXQoXCJAXCIpO1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFx4YTEtXFx1ZmZmZl0vKTtcbiAgICAgIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiJFwiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdCgvW2EtekEtWl9dLykpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XS8pO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KC9cXGQvKSkge1xuICAgICAgICBzdHJlYW0uZWF0KC9cXGQvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7IC8vIE11c3QgYmUgYSBzcGVjaWFsIGdsb2JhbCBsaWtlICQ6IG9yICQhXG4gICAgICB9XG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZS0zXCI7XG4gICAgfSBlbHNlIGlmICgvW2EtekEtWl9cXHhhMS1cXHVmZmZmXS8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xceGExLVxcdWZmZmZdLyk7XG4gICAgICBzdHJlYW0uZWF0KC9bXFw/XFwhXS8pO1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCI6XCIpKSByZXR1cm4gXCJhdG9tXCI7XG4gICAgICByZXR1cm4gXCJpZGVudFwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCJ8XCIgJiYgKHN0YXRlLnZhckxpc3QgfHwgc3RhdGUubGFzdFRvayA9PSBcIntcIiB8fCBzdGF0ZS5sYXN0VG9rID09IFwiZG9cIikpIHtcbiAgICAgIGN1clB1bmMgPSBcInxcIjtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoL1tcXChcXClcXFtcXF17fVxcXFw7XS8udGVzdChjaCkpIHtcbiAgICAgIGN1clB1bmMgPSBjaDtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCItXCIgJiYgc3RyZWFtLmVhdChcIj5cIikpIHtcbiAgICAgIHJldHVybiBcImFycm93XCI7XG4gICAgfSBlbHNlIGlmICgvWz0rXFwtXFwvKjpcXC5eJTw+fnxdLy50ZXN0KGNoKSkge1xuICAgICAgdmFyIG1vcmUgPSBzdHJlYW0uZWF0V2hpbGUoL1s9K1xcLVxcLyo6XFwuXiU8Pn58XS8pO1xuICAgICAgaWYgKGNoID09IFwiLlwiICYmICFtb3JlKSBjdXJQdW5jID0gXCIuXCI7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWdleHBBaGVhZChzdHJlYW0pIHtcbiAgICB2YXIgc3RhcnQgPSBzdHJlYW0ucG9zLCBkZXB0aCA9IDAsIG5leHQsIGZvdW5kID0gZmFsc2UsIGVzY2FwZWQgPSBmYWxzZVxuICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICBpZiAoXCJbeyhcIi5pbmRleE9mKG5leHQpID4gLTEpIHtcbiAgICAgICAgICBkZXB0aCsrXG4gICAgICAgIH0gZWxzZSBpZiAoXCJdfSlcIi5pbmRleE9mKG5leHQpID4gLTEpIHtcbiAgICAgICAgICBkZXB0aC0tXG4gICAgICAgICAgaWYgKGRlcHRoIDwgMCkgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChuZXh0ID09IFwiL1wiICYmIGRlcHRoID09IDApIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWQgPSBuZXh0ID09IFwiXFxcXFwiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlc2NhcGVkID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgc3RyZWFtLmJhY2tVcChzdHJlYW0ucG9zIC0gc3RhcnQpXG4gICAgcmV0dXJuIGZvdW5kXG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkJhc2VVbnRpbEJyYWNlKGRlcHRoKSB7XG4gICAgaWYgKCFkZXB0aCkgZGVwdGggPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSBcIn1cIikge1xuICAgICAgICBpZiAoZGVwdGggPT0gMSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplLnBvcCgpO1xuICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoIC0gMV0gPSB0b2tlbkJhc2VVbnRpbEJyYWNlKGRlcHRoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLnBlZWsoKSA9PSBcIntcIikge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGggLSAxXSA9IHRva2VuQmFzZVVudGlsQnJhY2UoZGVwdGggKyAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB0b2tlbkJhc2VPbmNlKCkge1xuICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplLnBvcCgpO1xuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gcmVhZFF1b3RlZChxdW90ZSwgc3R5bGUsIGVtYmVkLCB1bmVzY2FwZWQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7XG5cbiAgICAgIGlmIChzdGF0ZS5jb250ZXh0LnR5cGUgPT09ICdyZWFkLXF1b3RlZC1wYXVzZWQnKSB7XG4gICAgICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG4gICAgICAgIHN0cmVhbS5lYXQoXCJ9XCIpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2ggPT0gcXVvdGUgJiYgKHVuZXNjYXBlZCB8fCAhZXNjYXBlZCkpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW1iZWQgJiYgY2ggPT0gXCIjXCIgJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLmVhdChcIntcIikpIHtcbiAgICAgICAgICAgIGlmIChxdW90ZSA9PSBcIn1cIikge1xuICAgICAgICAgICAgICBzdGF0ZS5jb250ZXh0ID0ge3ByZXY6IHN0YXRlLmNvbnRleHQsIHR5cGU6ICdyZWFkLXF1b3RlZC1wYXVzZWQnfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplLnB1c2godG9rZW5CYXNlVW50aWxCcmFjZSgpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoL1tAXFwkXS8udGVzdChzdHJlYW0ucGVlaygpKSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbkJhc2VPbmNlKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHJlYWRIZXJlRG9jKHBocmFzZSwgbWF5SW5kZW50KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChtYXlJbmRlbnQpIHN0cmVhbS5lYXRTcGFjZSgpXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHBocmFzZSkpIHN0YXRlLnRva2VuaXplLnBvcCgpO1xuICAgICAgZWxzZSBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHJlYWRCbG9ja0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKFwiPWVuZFwiKSAmJiBzdHJlYW0uZW9sKCkpXG4gICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTtcbiAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7dG9rZW5pemU6IFt0b2tlbkJhc2VdLFxuICAgICAgICAgICAgICBpbmRlbnRlZDogMCxcbiAgICAgICAgICAgICAgY29udGV4dDoge3R5cGU6IFwidG9wXCIsIGluZGVudGVkOiAtY29uZmlnLmluZGVudFVuaXR9LFxuICAgICAgICAgICAgICBjb250aW51ZWRMaW5lOiBmYWxzZSxcbiAgICAgICAgICAgICAgbGFzdFRvazogbnVsbCxcbiAgICAgICAgICAgICAgdmFyTGlzdDogZmFsc2V9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgY3VyUHVuYyA9IG51bGw7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdKHN0cmVhbSwgc3RhdGUpLCBrd3R5cGU7XG4gICAgICB2YXIgdGhpc1RvayA9IGN1clB1bmM7XG4gICAgICBpZiAoc3R5bGUgPT0gXCJpZGVudFwiKSB7XG4gICAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgICAgc3R5bGUgPSBzdGF0ZS5sYXN0VG9rID09IFwiLlwiID8gXCJwcm9wZXJ0eVwiXG4gICAgICAgICAgOiBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpKSA/IFwia2V5d29yZFwiXG4gICAgICAgICAgOiAvXltBLVpdLy50ZXN0KHdvcmQpID8gXCJ0YWdcIlxuICAgICAgICAgIDogKHN0YXRlLmxhc3RUb2sgPT0gXCJkZWZcIiB8fCBzdGF0ZS5sYXN0VG9rID09IFwiY2xhc3NcIiB8fCBzdGF0ZS52YXJMaXN0KSA/IFwiZGVmXCJcbiAgICAgICAgICA6IFwidmFyaWFibGVcIjtcbiAgICAgICAgaWYgKHN0eWxlID09IFwia2V5d29yZFwiKSB7XG4gICAgICAgICAgdGhpc1RvayA9IHdvcmQ7XG4gICAgICAgICAgaWYgKGluZGVudFdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSBrd3R5cGUgPSBcImluZGVudFwiO1xuICAgICAgICAgIGVsc2UgaWYgKGRlZGVudFdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSBrd3R5cGUgPSBcImRlZGVudFwiO1xuICAgICAgICAgIGVsc2UgaWYgKCh3b3JkID09IFwiaWZcIiB8fCB3b3JkID09IFwidW5sZXNzXCIpICYmIHN0cmVhbS5jb2x1bW4oKSA9PSBzdHJlYW0uaW5kZW50YXRpb24oKSlcbiAgICAgICAgICAgIGt3dHlwZSA9IFwiaW5kZW50XCI7XG4gICAgICAgICAgZWxzZSBpZiAod29yZCA9PSBcImRvXCIgJiYgc3RhdGUuY29udGV4dC5pbmRlbnRlZCA8IHN0YXRlLmluZGVudGVkKVxuICAgICAgICAgICAga3d0eXBlID0gXCJpbmRlbnRcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1clB1bmMgfHwgKHN0eWxlICYmIHN0eWxlICE9IFwiY29tbWVudFwiKSkgc3RhdGUubGFzdFRvayA9IHRoaXNUb2s7XG4gICAgICBpZiAoY3VyUHVuYyA9PSBcInxcIikgc3RhdGUudmFyTGlzdCA9ICFzdGF0ZS52YXJMaXN0O1xuXG4gICAgICBpZiAoa3d0eXBlID09IFwiaW5kZW50XCIgfHwgL1tcXChcXFtcXHtdLy50ZXN0KGN1clB1bmMpKVxuICAgICAgICBzdGF0ZS5jb250ZXh0ID0ge3ByZXY6IHN0YXRlLmNvbnRleHQsIHR5cGU6IGN1clB1bmMgfHwgc3R5bGUsIGluZGVudGVkOiBzdGF0ZS5pbmRlbnRlZH07XG4gICAgICBlbHNlIGlmICgoa3d0eXBlID09IFwiZGVkZW50XCIgfHwgL1tcXClcXF1cXH1dLy50ZXN0KGN1clB1bmMpKSAmJiBzdGF0ZS5jb250ZXh0LnByZXYpXG4gICAgICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG5cbiAgICAgIGlmIChzdHJlYW0uZW9sKCkpXG4gICAgICAgIHN0YXRlLmNvbnRpbnVlZExpbmUgPSAoY3VyUHVuYyA9PSBcIlxcXFxcIiB8fCBzdHlsZSA9PSBcIm9wZXJhdG9yXCIpO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0gIT0gdG9rZW5CYXNlKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApO1xuICAgICAgdmFyIGN0ID0gc3RhdGUuY29udGV4dDtcbiAgICAgIHZhciBjbG9zZWQgPSBjdC50eXBlID09IGNsb3NpbmdbZmlyc3RDaGFyXSB8fFxuICAgICAgICBjdC50eXBlID09IFwia2V5d29yZFwiICYmIC9eKD86ZW5kfHVudGlsfGVsc2V8ZWxzaWZ8d2hlbnxyZXNjdWUpXFxiLy50ZXN0KHRleHRBZnRlcik7XG4gICAgICByZXR1cm4gY3QuaW5kZW50ZWQgKyAoY2xvc2VkID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KSArXG4gICAgICAgIChzdGF0ZS5jb250aW51ZWRMaW5lID8gY29uZmlnLmluZGVudFVuaXQgOiAwKTtcbiAgICB9LFxuXG4gICAgZWxlY3RyaWNJbnB1dDogL15cXHMqKD86ZW5kfHJlc2N1ZXxlbHNpZnxlbHNlfFxcfSkkLyxcbiAgICBsaW5lQ29tbWVudDogXCIjXCIsXG4gICAgZm9sZDogXCJpbmRlbnRcIlxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1ydWJ5XCIsIFwicnVieVwiKTtcblxuQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImhpbnRXb3Jkc1wiLCBcInJ1YnlcIiwga2V5d29yZExpc3QpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi9odG1sbWl4ZWQvaHRtbG1peGVkXCIpLCByZXF1aXJlKFwiLi4vcnVieS9ydWJ5XCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIsIFwiLi4vaHRtbG1peGVkL2h0bWxtaXhlZFwiLCBcIi4uL3J1YnkvcnVieVwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG4gIC8vIGZ1bGwgaGFtbCBtb2RlLiBUaGlzIGhhbmRsZWQgZW1iZWRkZWQgcnVieSBhbmQgaHRtbCBmcmFnbWVudHMgdG9vXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcImhhbWxcIiwgZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgdmFyIGh0bWxNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywge25hbWU6IFwiaHRtbG1peGVkXCJ9KTtcbiAgICB2YXIgcnVieU1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcInJ1YnlcIik7XG5cbiAgICBmdW5jdGlvbiBydWJ5SW5RdW90ZShlbmRRdW90ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgICAgaWYgKGNoID09IGVuZFF1b3RlICYmIHN0YXRlLnJ1YnlTdGF0ZS50b2tlbml6ZS5sZW5ndGggPT0gMSkge1xuICAgICAgICAgIC8vIHN0ZXAgb3V0IG9mIHJ1YnkgY29udGV4dCBhcyBpdCBzZWVtcyB0byBjb21wbGV0ZSBwcm9jZXNzaW5nIGFsbCB0aGUgYnJhY2VzXG4gICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGh0bWw7XG4gICAgICAgICAgcmV0dXJuIFwiY2xvc2VBdHRyaWJ1dGVUYWdcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcnVieShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydWJ5KHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goXCItI1wiKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBydWJ5TW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLnJ1YnlTdGF0ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaHRtbChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY2ggPSBzdHJlYW0ucGVlaygpO1xuXG4gICAgICAvLyBoYW5kbGUgaGFtbCBkZWNsYXJhdGlvbnMuIEFsbCBkZWNsYXJhdGlvbnMgdGhhdCBjYW50IGJlIGhhbmRsZWQgaGVyZVxuICAgICAgLy8gd2lsbCBiZSBwYXNzZWQgdG8gaHRtbCBtb2RlXG4gICAgICBpZiAoc3RhdGUucHJldmlvdXNUb2tlbi5zdHlsZSA9PSBcImNvbW1lbnRcIiApIHtcbiAgICAgICAgaWYgKHN0YXRlLmluZGVudGVkID4gc3RhdGUucHJldmlvdXNUb2tlbi5pbmRlbnRlZCkge1xuICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgICByZXR1cm4gXCJjb21tZW50TGluZVwiO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5zdGFydE9mTGluZSkge1xuICAgICAgICBpZiAoY2ggPT0gXCIhXCIgJiYgc3RyZWFtLm1hdGNoKFwiISFcIikpIHtcbiAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eJVtcXHc6I1xcLl0rPS8pKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBydWJ5O1xuICAgICAgICAgIHJldHVybiBcImhhbWxUYWdcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL14lW1xcdzpdKy8pKSB7XG4gICAgICAgICAgcmV0dXJuIFwiaGFtbFRhZ1wiO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09IFwiL1wiICkge1xuICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlLnN0YXJ0T2ZMaW5lIHx8IHN0YXRlLnByZXZpb3VzVG9rZW4uc3R5bGUgPT0gXCJoYW1sVGFnXCIpIHtcbiAgICAgICAgaWYgKCBjaCA9PSBcIiNcIiB8fCBjaCA9PSBcIi5cIikge1xuICAgICAgICAgIHN0cmVhbS5tYXRjaCgvW1xcdy0jXFwuXSovKTtcbiAgICAgICAgICByZXR1cm4gXCJoYW1sQXR0cmlidXRlXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZG9ub3QgaGFuZGxlIC0tPiBhcyB2YWxpZCBydWJ5LCBtYWtlIGl0IEhUTUwgY2xvc2UgY29tbWVudCBpbnN0ZWFkXG4gICAgICBpZiAoc3RhdGUuc3RhcnRPZkxpbmUgJiYgIXN0cmVhbS5tYXRjaChcIi0tPlwiLCBmYWxzZSkgJiYgKGNoID09IFwiPVwiIHx8IGNoID09IFwiLVwiICkpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBydWJ5O1xuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5wcmV2aW91c1Rva2VuLnN0eWxlID09IFwiaGFtbFRhZ1wiIHx8XG4gICAgICAgICAgc3RhdGUucHJldmlvdXNUb2tlbi5zdHlsZSA9PSBcImNsb3NlQXR0cmlidXRlVGFnXCIgfHxcbiAgICAgICAgICBzdGF0ZS5wcmV2aW91c1Rva2VuLnN0eWxlID09IFwiaGFtbEF0dHJpYnV0ZVwiKSB7XG4gICAgICAgIGlmIChjaCA9PSBcIihcIikge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcnVieUluUXVvdGUoXCIpXCIpO1xuICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PSBcIntcIikge1xuICAgICAgICAgIGlmICghc3RyZWFtLm1hdGNoKC9eXFx7JS4qLykpIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcnVieUluUXVvdGUoXCJ9XCIpO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaHRtbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAvLyBkZWZhdWx0IHRvIGh0bWwgbW9kZVxuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBodG1sU3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoaHRtbE1vZGUpO1xuICAgICAgICB2YXIgcnVieVN0YXRlID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKHJ1YnlNb2RlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBodG1sU3RhdGU6IGh0bWxTdGF0ZSxcbiAgICAgICAgICBydWJ5U3RhdGU6IHJ1YnlTdGF0ZSxcbiAgICAgICAgICBpbmRlbnRlZDogMCxcbiAgICAgICAgICBwcmV2aW91c1Rva2VuOiB7IHN0eWxlOiBudWxsLCBpbmRlbnRlZDogMH0sXG4gICAgICAgICAgdG9rZW5pemU6IGh0bWxcbiAgICAgICAgfTtcbiAgICAgIH0sXG5cbiAgICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBodG1sU3RhdGUgOiBDb2RlTWlycm9yLmNvcHlTdGF0ZShodG1sTW9kZSwgc3RhdGUuaHRtbFN0YXRlKSxcbiAgICAgICAgICBydWJ5U3RhdGU6IENvZGVNaXJyb3IuY29weVN0YXRlKHJ1YnlNb2RlLCBzdGF0ZS5ydWJ5U3RhdGUpLFxuICAgICAgICAgIGluZGVudGVkOiBzdGF0ZS5pbmRlbnRlZCxcbiAgICAgICAgICBwcmV2aW91c1Rva2VuOiBzdGF0ZS5wcmV2aW91c1Rva2VuLFxuICAgICAgICAgIHRva2VuaXplOiBzdGF0ZS50b2tlbml6ZVxuICAgICAgICB9O1xuICAgICAgfSxcblxuICAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlO1xuICAgICAgICAvLyBkb250IHJlY29yZCBjb21tZW50IGxpbmUgYXMgd2Ugb25seSB3YW50IHRvIG1lYXN1cmUgY29tbWVudCBsaW5lIHdpdGhcbiAgICAgICAgLy8gdGhlIG9wZW5pbmcgY29tbWVudCBibG9ja1xuICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUgIT0gXCJjb21tZW50TGluZVwiKSB7XG4gICAgICAgICAgc3RhdGUucHJldmlvdXNUb2tlbiA9IHsgc3R5bGU6IHN0eWxlLCBpbmRlbnRlZDogc3RhdGUuaW5kZW50ZWQgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBjdXJyZW50IHN0YXRlIGlzIHJ1YnkgYW5kIHRoZSBwcmV2aW91cyB0b2tlbiBpcyBub3QgYCxgIHJlc2V0IHRoZVxuICAgICAgICAvLyB0b2tlbml6ZSB0byBodG1sXG4gICAgICAgIGlmIChzdHJlYW0uZW9sKCkgJiYgc3RhdGUudG9rZW5pemUgPT0gcnVieSkge1xuICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIGlmIChjaCAmJiBjaCAhPSBcIixcIikge1xuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBodG1sO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXByb2Nlc3Mgc29tZSBvZiB0aGUgc3BlY2lmaWMgc3R5bGUgdGFnIHdoZW4gZmluaXNoIHNldHRpbmcgcHJldmlvdXNUb2tlblxuICAgICAgICBpZiAoc3R5bGUgPT0gXCJoYW1sVGFnXCIpIHtcbiAgICAgICAgICBzdHlsZSA9IFwidGFnXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc3R5bGUgPT0gXCJjb21tZW50TGluZVwiKSB7XG4gICAgICAgICAgc3R5bGUgPSBcImNvbW1lbnRcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzdHlsZSA9PSBcImhhbWxBdHRyaWJ1dGVcIikge1xuICAgICAgICAgIHN0eWxlID0gXCJhdHRyaWJ1dGVcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzdHlsZSA9PSBcImNsb3NlQXR0cmlidXRlVGFnXCIpIHtcbiAgICAgICAgICBzdHlsZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFwiaHRtbG1peGVkXCIsIFwicnVieVwiKTtcblxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtaGFtbFwiLCBcImhhbWxcIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSwgcmVxdWlyZShcIi4uLy4uL2FkZG9uL21vZGUvc2ltcGxlXCIpLCByZXF1aXJlKFwiLi4vLi4vYWRkb24vbW9kZS9tdWx0aXBsZXhcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi8uLi9hZGRvbi9tb2RlL3NpbXBsZVwiLCBcIi4uLy4uL2FkZG9uL21vZGUvbXVsdGlwbGV4XCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZVNpbXBsZU1vZGUoXCJoYW5kbGViYXJzLXRhZ3NcIiwge1xuICAgIHN0YXJ0OiBbXG4gICAgICB7IHJlZ2V4OiAvXFx7XFx7XFx7LywgcHVzaDogXCJoYW5kbGViYXJzX3Jhd1wiLCB0b2tlbjogXCJ0YWdcIiB9LFxuICAgICAgeyByZWdleDogL1xce1xceyEtLS8sIHB1c2g6IFwiZGFzaF9jb21tZW50XCIsIHRva2VuOiBcImNvbW1lbnRcIiB9LFxuICAgICAgeyByZWdleDogL1xce1xceyEvLCAgIHB1c2g6IFwiY29tbWVudFwiLCB0b2tlbjogXCJjb21tZW50XCIgfSxcbiAgICAgIHsgcmVnZXg6IC9cXHtcXHsvLCAgICBwdXNoOiBcImhhbmRsZWJhcnNcIiwgdG9rZW46IFwidGFnXCIgfVxuICAgIF0sXG4gICAgaGFuZGxlYmFyc19yYXc6IFtcbiAgICAgIHsgcmVnZXg6IC9cXH1cXH1cXH0vLCBwb3A6IHRydWUsIHRva2VuOiBcInRhZ1wiIH0sXG4gICAgXSxcbiAgICBoYW5kbGViYXJzOiBbXG4gICAgICB7IHJlZ2V4OiAvXFx9XFx9LywgcG9wOiB0cnVlLCB0b2tlbjogXCJ0YWdcIiB9LFxuXG4gICAgICAvLyBEb3VibGUgYW5kIHNpbmdsZSBxdW90ZXNcbiAgICAgIHsgcmVnZXg6IC9cIig/OlteXFxcXFwiXXxcXFxcLikqXCI/LywgdG9rZW46IFwic3RyaW5nXCIgfSxcbiAgICAgIHsgcmVnZXg6IC8nKD86W15cXFxcJ118XFxcXC4pKic/LywgdG9rZW46IFwic3RyaW5nXCIgfSxcblxuICAgICAgLy8gSGFuZGxlYmFycyBrZXl3b3Jkc1xuICAgICAgeyByZWdleDogLz58WyNcXC9dKFtBLVphLXpfXVxcdyopLywgdG9rZW46IFwia2V5d29yZFwiIH0sXG4gICAgICB7IHJlZ2V4OiAvKD86ZWxzZXx0aGlzKVxcYi8sIHRva2VuOiBcImtleXdvcmRcIiB9LFxuXG4gICAgICAvLyBOdW1lcmFsXG4gICAgICB7IHJlZ2V4OiAvXFxkKy9pLCB0b2tlbjogXCJudW1iZXJcIiB9LFxuXG4gICAgICAvLyBBdG9tcyBsaWtlID0gYW5kIC5cbiAgICAgIHsgcmVnZXg6IC89fH58QHx0cnVlfGZhbHNlLywgdG9rZW46IFwiYXRvbVwiIH0sXG5cbiAgICAgIC8vIFBhdGhzXG4gICAgICB7IHJlZ2V4OiAvKD86XFwuXFwuXFwvKSooPzpbQS1aYS16X11bXFx3XFwuXSopKy8sIHRva2VuOiBcInZhcmlhYmxlLTJcIiB9XG4gICAgXSxcbiAgICBkYXNoX2NvbW1lbnQ6IFtcbiAgICAgIHsgcmVnZXg6IC8tLVxcfVxcfS8sIHBvcDogdHJ1ZSwgdG9rZW46IFwiY29tbWVudFwiIH0sXG5cbiAgICAgIC8vIENvbW1lbnRlZCBjb2RlXG4gICAgICB7IHJlZ2V4OiAvLi8sIHRva2VuOiBcImNvbW1lbnRcIn1cbiAgICBdLFxuICAgIGNvbW1lbnQ6IFtcbiAgICAgIHsgcmVnZXg6IC9cXH1cXH0vLCBwb3A6IHRydWUsIHRva2VuOiBcImNvbW1lbnRcIiB9LFxuICAgICAgeyByZWdleDogLy4vLCB0b2tlbjogXCJjb21tZW50XCIgfVxuICAgIF0sXG4gICAgbWV0YToge1xuICAgICAgYmxvY2tDb21tZW50U3RhcnQ6IFwie3stLVwiLFxuICAgICAgYmxvY2tDb21tZW50RW5kOiBcIi0tfX1cIlxuICAgIH1cbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiaGFuZGxlYmFyc1wiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykge1xuICAgIHZhciBoYW5kbGViYXJzID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJoYW5kbGViYXJzLXRhZ3NcIik7XG4gICAgaWYgKCFwYXJzZXJDb25maWcgfHwgIXBhcnNlckNvbmZpZy5iYXNlKSByZXR1cm4gaGFuZGxlYmFycztcbiAgICByZXR1cm4gQ29kZU1pcnJvci5tdWx0aXBsZXhpbmdNb2RlKFxuICAgICAgQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgcGFyc2VyQ29uZmlnLmJhc2UpLFxuICAgICAge29wZW46IFwie3tcIiwgY2xvc2U6IC9cXH1cXH1cXH0/LywgbW9kZTogaGFuZGxlYmFycywgcGFyc2VEZWxpbWl0ZXJzOiB0cnVlfVxuICAgICk7XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1oYW5kbGViYXJzLXRlbXBsYXRlXCIsIFwiaGFuZGxlYmFyc1wiKTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJoYXNrZWxsXCIsIGZ1bmN0aW9uKF9jb25maWcsIG1vZGVDb25maWcpIHtcblxuICBmdW5jdGlvbiBzd2l0Y2hTdGF0ZShzb3VyY2UsIHNldFN0YXRlLCBmKSB7XG4gICAgc2V0U3RhdGUoZik7XG4gICAgcmV0dXJuIGYoc291cmNlLCBzZXRTdGF0ZSk7XG4gIH1cblxuICAvLyBUaGVzZSBzaG91bGQgYWxsIGJlIFVuaWNvZGUgZXh0ZW5kZWQsIGFzIHBlciB0aGUgSGFza2VsbCAyMDEwIHJlcG9ydFxuICB2YXIgc21hbGxSRSA9IC9bYS16X10vO1xuICB2YXIgbGFyZ2VSRSA9IC9bQS1aXS87XG4gIHZhciBkaWdpdFJFID0gL1xcZC87XG4gIHZhciBoZXhpdFJFID0gL1swLTlBLUZhLWZdLztcbiAgdmFyIG9jdGl0UkUgPSAvWzAtN10vO1xuICB2YXIgaWRSRSA9IC9bYS16X0EtWjAtOSdcXHhhMS1cXHVmZmZmXS87XG4gIHZhciBzeW1ib2xSRSA9IC9bLSEjJCUmKisuXFwvPD0+P0BcXFxcXnx+Ol0vO1xuICB2YXIgc3BlY2lhbFJFID0gL1soKSw7W1xcXWB7fV0vO1xuICB2YXIgd2hpdGVDaGFyUkUgPSAvWyBcXHRcXHZcXGZdLzsgLy8gbmV3bGluZXMgYXJlIGhhbmRsZWQgaW4gdG9rZW5pemVyXG5cbiAgZnVuY3Rpb24gbm9ybWFsKHNvdXJjZSwgc2V0U3RhdGUpIHtcbiAgICBpZiAoc291cmNlLmVhdFdoaWxlKHdoaXRlQ2hhclJFKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGNoID0gc291cmNlLm5leHQoKTtcbiAgICBpZiAoc3BlY2lhbFJFLnRlc3QoY2gpKSB7XG4gICAgICBpZiAoY2ggPT0gJ3snICYmIHNvdXJjZS5lYXQoJy0nKSkge1xuICAgICAgICB2YXIgdCA9IFwiY29tbWVudFwiO1xuICAgICAgICBpZiAoc291cmNlLmVhdCgnIycpKSB7XG4gICAgICAgICAgdCA9IFwibWV0YVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzd2l0Y2hTdGF0ZShzb3VyY2UsIHNldFN0YXRlLCBuY29tbWVudCh0LCAxKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT0gJ1xcJycpIHtcbiAgICAgIGlmIChzb3VyY2UuZWF0KCdcXFxcJykpIHtcbiAgICAgICAgc291cmNlLm5leHQoKTsgIC8vIHNob3VsZCBoYW5kbGUgb3RoZXIgZXNjYXBlcyBoZXJlXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc291cmNlLm5leHQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2UuZWF0KCdcXCcnKSkge1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcInN0cmluZyBlcnJvclwiO1xuICAgIH1cblxuICAgIGlmIChjaCA9PSAnXCInKSB7XG4gICAgICByZXR1cm4gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgc3RyaW5nTGl0ZXJhbCk7XG4gICAgfVxuXG4gICAgaWYgKGxhcmdlUkUudGVzdChjaCkpIHtcbiAgICAgIHNvdXJjZS5lYXRXaGlsZShpZFJFKTtcbiAgICAgIGlmIChzb3VyY2UuZWF0KCcuJykpIHtcbiAgICAgICAgcmV0dXJuIFwicXVhbGlmaWVyXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgfVxuXG4gICAgaWYgKHNtYWxsUkUudGVzdChjaCkpIHtcbiAgICAgIHNvdXJjZS5lYXRXaGlsZShpZFJFKTtcbiAgICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gICAgfVxuXG4gICAgaWYgKGRpZ2l0UkUudGVzdChjaCkpIHtcbiAgICAgIGlmIChjaCA9PSAnMCcpIHtcbiAgICAgICAgaWYgKHNvdXJjZS5lYXQoL1t4WF0vKSkge1xuICAgICAgICAgIHNvdXJjZS5lYXRXaGlsZShoZXhpdFJFKTsgLy8gc2hvdWxkIHJlcXVpcmUgYXQgbGVhc3QgMVxuICAgICAgICAgIHJldHVybiBcImludGVnZXJcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc291cmNlLmVhdCgvW29PXS8pKSB7XG4gICAgICAgICAgc291cmNlLmVhdFdoaWxlKG9jdGl0UkUpOyAvLyBzaG91bGQgcmVxdWlyZSBhdCBsZWFzdCAxXG4gICAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNvdXJjZS5lYXRXaGlsZShkaWdpdFJFKTtcbiAgICAgIHZhciB0ID0gXCJudW1iZXJcIjtcbiAgICAgIGlmIChzb3VyY2UubWF0Y2goL15cXC5cXGQrLykpIHtcbiAgICAgICAgdCA9IFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgICBpZiAoc291cmNlLmVhdCgvW2VFXS8pKSB7XG4gICAgICAgIHQgPSBcIm51bWJlclwiO1xuICAgICAgICBzb3VyY2UuZWF0KC9bLStdLyk7XG4gICAgICAgIHNvdXJjZS5lYXRXaGlsZShkaWdpdFJFKTsgLy8gc2hvdWxkIHJlcXVpcmUgYXQgbGVhc3QgMVxuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gICAgfVxuXG4gICAgaWYgKGNoID09IFwiLlwiICYmIHNvdXJjZS5lYXQoXCIuXCIpKVxuICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuXG4gICAgaWYgKHN5bWJvbFJFLnRlc3QoY2gpKSB7XG4gICAgICBpZiAoY2ggPT0gJy0nICYmIHNvdXJjZS5lYXQoLy0vKSkge1xuICAgICAgICBzb3VyY2UuZWF0V2hpbGUoLy0vKTtcbiAgICAgICAgaWYgKCFzb3VyY2UuZWF0KHN5bWJvbFJFKSkge1xuICAgICAgICAgIHNvdXJjZS5za2lwVG9FbmQoKTtcbiAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciB0ID0gXCJ2YXJpYWJsZVwiO1xuICAgICAgaWYgKGNoID09ICc6Jykge1xuICAgICAgICB0ID0gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICB9XG4gICAgICBzb3VyY2UuZWF0V2hpbGUoc3ltYm9sUkUpO1xuICAgICAgcmV0dXJuIHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5jb21tZW50KHR5cGUsIG5lc3QpIHtcbiAgICBpZiAobmVzdCA9PSAwKSB7XG4gICAgICByZXR1cm4gbm9ybWFsO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24oc291cmNlLCBzZXRTdGF0ZSkge1xuICAgICAgdmFyIGN1cnJOZXN0ID0gbmVzdDtcbiAgICAgIHdoaWxlICghc291cmNlLmVvbCgpKSB7XG4gICAgICAgIHZhciBjaCA9IHNvdXJjZS5uZXh0KCk7XG4gICAgICAgIGlmIChjaCA9PSAneycgJiYgc291cmNlLmVhdCgnLScpKSB7XG4gICAgICAgICAgKytjdXJyTmVzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaCA9PSAnLScgJiYgc291cmNlLmVhdCgnfScpKSB7XG4gICAgICAgICAgLS1jdXJyTmVzdDtcbiAgICAgICAgICBpZiAoY3Vyck5lc3QgPT0gMCkge1xuICAgICAgICAgICAgc2V0U3RhdGUobm9ybWFsKTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0U3RhdGUobmNvbW1lbnQodHlwZSwgY3Vyck5lc3QpKTtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdMaXRlcmFsKHNvdXJjZSwgc2V0U3RhdGUpIHtcbiAgICB3aGlsZSAoIXNvdXJjZS5lb2woKSkge1xuICAgICAgdmFyIGNoID0gc291cmNlLm5leHQoKTtcbiAgICAgIGlmIChjaCA9PSAnXCInKSB7XG4gICAgICAgIHNldFN0YXRlKG5vcm1hbCk7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgaWYgKGNoID09ICdcXFxcJykge1xuICAgICAgICBpZiAoc291cmNlLmVvbCgpIHx8IHNvdXJjZS5lYXQod2hpdGVDaGFyUkUpKSB7XG4gICAgICAgICAgc2V0U3RhdGUoc3RyaW5nR2FwKTtcbiAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc291cmNlLmVhdCgnJicpKSB7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc291cmNlLm5leHQoKTsgLy8gc2hvdWxkIGhhbmRsZSBvdGhlciBlc2NhcGVzIGhlcmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzZXRTdGF0ZShub3JtYWwpO1xuICAgIHJldHVybiBcInN0cmluZyBlcnJvclwiO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RyaW5nR2FwKHNvdXJjZSwgc2V0U3RhdGUpIHtcbiAgICBpZiAoc291cmNlLmVhdCgnXFxcXCcpKSB7XG4gICAgICByZXR1cm4gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgc3RyaW5nTGl0ZXJhbCk7XG4gICAgfVxuICAgIHNvdXJjZS5uZXh0KCk7XG4gICAgc2V0U3RhdGUobm9ybWFsKTtcbiAgICByZXR1cm4gXCJlcnJvclwiO1xuICB9XG5cblxuICB2YXIgd2VsbEtub3duV29yZHMgPSAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIHdrdyA9IHt9O1xuICAgIGZ1bmN0aW9uIHNldFR5cGUodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgd2t3W2FyZ3VtZW50c1tpXV0gPSB0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBzZXRUeXBlKFwia2V5d29yZFwiKShcbiAgICAgIFwiY2FzZVwiLCBcImNsYXNzXCIsIFwiZGF0YVwiLCBcImRlZmF1bHRcIiwgXCJkZXJpdmluZ1wiLCBcImRvXCIsIFwiZWxzZVwiLCBcImZvcmVpZ25cIixcbiAgICAgIFwiaWZcIiwgXCJpbXBvcnRcIiwgXCJpblwiLCBcImluZml4XCIsIFwiaW5maXhsXCIsIFwiaW5maXhyXCIsIFwiaW5zdGFuY2VcIiwgXCJsZXRcIixcbiAgICAgIFwibW9kdWxlXCIsIFwibmV3dHlwZVwiLCBcIm9mXCIsIFwidGhlblwiLCBcInR5cGVcIiwgXCJ3aGVyZVwiLCBcIl9cIik7XG5cbiAgICBzZXRUeXBlKFwia2V5d29yZFwiKShcbiAgICAgIFwiXFwuXFwuXCIsIFwiOlwiLCBcIjo6XCIsIFwiPVwiLCBcIlxcXFxcIiwgXCI8LVwiLCBcIi0+XCIsIFwiQFwiLCBcIn5cIiwgXCI9PlwiKTtcblxuICAgIHNldFR5cGUoXCJidWlsdGluXCIpKFxuICAgICAgXCIhIVwiLCBcIiQhXCIsIFwiJFwiLCBcIiYmXCIsIFwiK1wiLCBcIisrXCIsIFwiLVwiLCBcIi5cIiwgXCIvXCIsIFwiLz1cIiwgXCI8XCIsIFwiPCpcIiwgXCI8PVwiLFxuICAgICAgXCI8JD5cIiwgXCI8Kj5cIiwgXCI9PDxcIiwgXCI9PVwiLCBcIj5cIiwgXCI+PVwiLCBcIj4+XCIsIFwiPj49XCIsIFwiXlwiLCBcIl5eXCIsIFwifHxcIiwgXCIqXCIsXG4gICAgICBcIio+XCIsIFwiKipcIik7XG5cbiAgICBzZXRUeXBlKFwiYnVpbHRpblwiKShcbiAgICAgIFwiQXBwbGljYXRpdmVcIiwgXCJCb29sXCIsIFwiQm91bmRlZFwiLCBcIkNoYXJcIiwgXCJEb3VibGVcIiwgXCJFUVwiLCBcIkVpdGhlclwiLCBcIkVudW1cIixcbiAgICAgIFwiRXFcIiwgXCJGYWxzZVwiLCBcIkZpbGVQYXRoXCIsIFwiRmxvYXRcIiwgXCJGbG9hdGluZ1wiLCBcIkZyYWN0aW9uYWxcIiwgXCJGdW5jdG9yXCIsXG4gICAgICBcIkdUXCIsIFwiSU9cIiwgXCJJT0Vycm9yXCIsIFwiSW50XCIsIFwiSW50ZWdlclwiLCBcIkludGVncmFsXCIsIFwiSnVzdFwiLCBcIkxUXCIsIFwiTGVmdFwiLFxuICAgICAgXCJNYXliZVwiLCBcIk1vbmFkXCIsIFwiTm90aGluZ1wiLCBcIk51bVwiLCBcIk9yZFwiLCBcIk9yZGVyaW5nXCIsIFwiUmF0aW9uYWxcIiwgXCJSZWFkXCIsXG4gICAgICBcIlJlYWRTXCIsIFwiUmVhbFwiLCBcIlJlYWxGbG9hdFwiLCBcIlJlYWxGcmFjXCIsIFwiUmlnaHRcIiwgXCJTaG93XCIsIFwiU2hvd1NcIixcbiAgICAgIFwiU3RyaW5nXCIsIFwiVHJ1ZVwiKTtcblxuICAgIHNldFR5cGUoXCJidWlsdGluXCIpKFxuICAgICAgXCJhYnNcIiwgXCJhY29zXCIsIFwiYWNvc2hcIiwgXCJhbGxcIiwgXCJhbmRcIiwgXCJhbnlcIiwgXCJhcHBlbmRGaWxlXCIsIFwiYXNUeXBlT2ZcIixcbiAgICAgIFwiYXNpblwiLCBcImFzaW5oXCIsIFwiYXRhblwiLCBcImF0YW4yXCIsIFwiYXRhbmhcIiwgXCJicmVha1wiLCBcImNhdGNoXCIsIFwiY2VpbGluZ1wiLFxuICAgICAgXCJjb21wYXJlXCIsIFwiY29uY2F0XCIsIFwiY29uY2F0TWFwXCIsIFwiY29uc3RcIiwgXCJjb3NcIiwgXCJjb3NoXCIsIFwiY3VycnlcIixcbiAgICAgIFwiY3ljbGVcIiwgXCJkZWNvZGVGbG9hdFwiLCBcImRpdlwiLCBcImRpdk1vZFwiLCBcImRyb3BcIiwgXCJkcm9wV2hpbGVcIiwgXCJlaXRoZXJcIixcbiAgICAgIFwiZWxlbVwiLCBcImVuY29kZUZsb2F0XCIsIFwiZW51bUZyb21cIiwgXCJlbnVtRnJvbVRoZW5cIiwgXCJlbnVtRnJvbVRoZW5Ub1wiLFxuICAgICAgXCJlbnVtRnJvbVRvXCIsIFwiZXJyb3JcIiwgXCJldmVuXCIsIFwiZXhwXCIsIFwiZXhwb25lbnRcIiwgXCJmYWlsXCIsIFwiZmlsdGVyXCIsXG4gICAgICBcImZsaXBcIiwgXCJmbG9hdERpZ2l0c1wiLCBcImZsb2F0UmFkaXhcIiwgXCJmbG9hdFJhbmdlXCIsIFwiZmxvb3JcIiwgXCJmbWFwXCIsXG4gICAgICBcImZvbGRsXCIsIFwiZm9sZGwxXCIsIFwiZm9sZHJcIiwgXCJmb2xkcjFcIiwgXCJmcm9tRW51bVwiLCBcImZyb21JbnRlZ2VyXCIsXG4gICAgICBcImZyb21JbnRlZ3JhbFwiLCBcImZyb21SYXRpb25hbFwiLCBcImZzdFwiLCBcImdjZFwiLCBcImdldENoYXJcIiwgXCJnZXRDb250ZW50c1wiLFxuICAgICAgXCJnZXRMaW5lXCIsIFwiaGVhZFwiLCBcImlkXCIsIFwiaW5pdFwiLCBcImludGVyYWN0XCIsIFwiaW9FcnJvclwiLCBcImlzRGVub3JtYWxpemVkXCIsXG4gICAgICBcImlzSUVFRVwiLCBcImlzSW5maW5pdGVcIiwgXCJpc05hTlwiLCBcImlzTmVnYXRpdmVaZXJvXCIsIFwiaXRlcmF0ZVwiLCBcImxhc3RcIixcbiAgICAgIFwibGNtXCIsIFwibGVuZ3RoXCIsIFwibGV4XCIsIFwibGluZXNcIiwgXCJsb2dcIiwgXCJsb2dCYXNlXCIsIFwibG9va3VwXCIsIFwibWFwXCIsXG4gICAgICBcIm1hcE1cIiwgXCJtYXBNX1wiLCBcIm1heFwiLCBcIm1heEJvdW5kXCIsIFwibWF4aW11bVwiLCBcIm1heWJlXCIsIFwibWluXCIsIFwibWluQm91bmRcIixcbiAgICAgIFwibWluaW11bVwiLCBcIm1vZFwiLCBcIm5lZ2F0ZVwiLCBcIm5vdFwiLCBcIm5vdEVsZW1cIiwgXCJudWxsXCIsIFwib2RkXCIsIFwib3JcIixcbiAgICAgIFwib3RoZXJ3aXNlXCIsIFwicGlcIiwgXCJwcmVkXCIsIFwicHJpbnRcIiwgXCJwcm9kdWN0XCIsIFwicHJvcGVyRnJhY3Rpb25cIiwgXCJwdXJlXCIsXG4gICAgICBcInB1dENoYXJcIiwgXCJwdXRTdHJcIiwgXCJwdXRTdHJMblwiLCBcInF1b3RcIiwgXCJxdW90UmVtXCIsIFwicmVhZFwiLCBcInJlYWRGaWxlXCIsXG4gICAgICBcInJlYWRJT1wiLCBcInJlYWRMaXN0XCIsIFwicmVhZExuXCIsIFwicmVhZFBhcmVuXCIsIFwicmVhZHNcIiwgXCJyZWFkc1ByZWNcIixcbiAgICAgIFwicmVhbFRvRnJhY1wiLCBcInJlY2lwXCIsIFwicmVtXCIsIFwicmVwZWF0XCIsIFwicmVwbGljYXRlXCIsIFwicmV0dXJuXCIsIFwicmV2ZXJzZVwiLFxuICAgICAgXCJyb3VuZFwiLCBcInNjYWxlRmxvYXRcIiwgXCJzY2FubFwiLCBcInNjYW5sMVwiLCBcInNjYW5yXCIsIFwic2NhbnIxXCIsIFwic2VxXCIsXG4gICAgICBcInNlcXVlbmNlXCIsIFwic2VxdWVuY2VfXCIsIFwic2hvd1wiLCBcInNob3dDaGFyXCIsIFwic2hvd0xpc3RcIiwgXCJzaG93UGFyZW5cIixcbiAgICAgIFwic2hvd1N0cmluZ1wiLCBcInNob3dzXCIsIFwic2hvd3NQcmVjXCIsIFwic2lnbmlmaWNhbmRcIiwgXCJzaWdudW1cIiwgXCJzaW5cIixcbiAgICAgIFwic2luaFwiLCBcInNuZFwiLCBcInNwYW5cIiwgXCJzcGxpdEF0XCIsIFwic3FydFwiLCBcInN1YnRyYWN0XCIsIFwic3VjY1wiLCBcInN1bVwiLFxuICAgICAgXCJ0YWlsXCIsIFwidGFrZVwiLCBcInRha2VXaGlsZVwiLCBcInRhblwiLCBcInRhbmhcIiwgXCJ0b0VudW1cIiwgXCJ0b0ludGVnZXJcIixcbiAgICAgIFwidG9SYXRpb25hbFwiLCBcInRydW5jYXRlXCIsIFwidW5jdXJyeVwiLCBcInVuZGVmaW5lZFwiLCBcInVubGluZXNcIiwgXCJ1bnRpbFwiLFxuICAgICAgXCJ1bndvcmRzXCIsIFwidW56aXBcIiwgXCJ1bnppcDNcIiwgXCJ1c2VyRXJyb3JcIiwgXCJ3b3Jkc1wiLCBcIndyaXRlRmlsZVwiLCBcInppcFwiLFxuICAgICAgXCJ6aXAzXCIsIFwiemlwV2l0aFwiLCBcInppcFdpdGgzXCIpO1xuXG4gICAgdmFyIG92ZXJyaWRlID0gbW9kZUNvbmZpZy5vdmVycmlkZUtleXdvcmRzO1xuICAgIGlmIChvdmVycmlkZSkgZm9yICh2YXIgd29yZCBpbiBvdmVycmlkZSkgaWYgKG92ZXJyaWRlLmhhc093blByb3BlcnR5KHdvcmQpKVxuICAgICAgd2t3W3dvcmRdID0gb3ZlcnJpZGVbd29yZF07XG5cbiAgICByZXR1cm4gd2t3O1xuICB9KSgpO1xuXG5cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpICB7IHJldHVybiB7IGY6IG5vcm1hbCB9OyB9LFxuICAgIGNvcHlTdGF0ZTogIGZ1bmN0aW9uIChzKSB7IHJldHVybiB7IGY6IHMuZiB9OyB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciB0ID0gc3RhdGUuZihzdHJlYW0sIGZ1bmN0aW9uKHMpIHsgc3RhdGUuZiA9IHM7IH0pO1xuICAgICAgdmFyIHcgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgICAgcmV0dXJuIHdlbGxLbm93bldvcmRzLmhhc093blByb3BlcnR5KHcpID8gd2VsbEtub3duV29yZHNbd10gOiB0O1xuICAgIH0sXG5cbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCJ7LVwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCItfVwiLFxuICAgIGxpbmVDb21tZW50OiBcIi0tXCJcbiAgfTtcblxufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1oYXNrZWxsXCIsIFwiaGFza2VsbFwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24gKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSwgcmVxdWlyZShcIi4uL2hhc2tlbGwvaGFza2VsbFwiKSlcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIsIFwiLi4vaGFza2VsbC9oYXNrZWxsXCJdLCBtb2QpXG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcilcbn0pKGZ1bmN0aW9uIChDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiXG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiaGFza2VsbC1saXRlcmF0ZVwiLCBmdW5jdGlvbiAoY29uZmlnLCBwYXJzZXJDb25maWcpIHtcbiAgICB2YXIgYmFzZU1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAocGFyc2VyQ29uZmlnICYmIHBhcnNlckNvbmZpZy5iYXNlKSB8fCBcImhhc2tlbGxcIilcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW5Db2RlOiBmYWxzZSxcbiAgICAgICAgICBiYXNlU3RhdGU6IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShiYXNlTW9kZSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLmluQ29kZSA9IHN0cmVhbS5lYXQoXCI+XCIpKVxuICAgICAgICAgICAgcmV0dXJuIFwibWV0YVwiXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmluQ29kZSkge1xuICAgICAgICAgIHJldHVybiBiYXNlTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmJhc2VTdGF0ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKClcbiAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlubmVyTW9kZTogZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5pbkNvZGUgPyB7c3RhdGU6IHN0YXRlLmJhc2VTdGF0ZSwgbW9kZTogYmFzZU1vZGV9IDogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSwgXCJoYXNrZWxsXCIpXG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWxpdGVyYXRlLWhhc2tlbGxcIiwgXCJoYXNrZWxsLWxpdGVyYXRlXCIpXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiaGF4ZVwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykge1xuICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0O1xuXG4gIC8vIFRva2VuaXplclxuXG4gIGZ1bmN0aW9uIGt3KHR5cGUpIHtyZXR1cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiBcImtleXdvcmRcIn07fVxuICB2YXIgQSA9IGt3KFwia2V5d29yZCBhXCIpLCBCID0ga3coXCJrZXl3b3JkIGJcIiksIEMgPSBrdyhcImtleXdvcmQgY1wiKTtcbiAgdmFyIG9wZXJhdG9yID0ga3coXCJvcGVyYXRvclwiKSwgYXRvbSA9IHt0eXBlOiBcImF0b21cIiwgc3R5bGU6IFwiYXRvbVwifSwgYXR0cmlidXRlID0ge3R5cGU6XCJhdHRyaWJ1dGVcIiwgc3R5bGU6IFwiYXR0cmlidXRlXCJ9O1xuICB2YXIgdHlwZSA9IGt3KFwidHlwZWRlZlwiKTtcbiAgdmFyIGtleXdvcmRzID0ge1xuICAgIFwiaWZcIjogQSwgXCJ3aGlsZVwiOiBBLCBcImVsc2VcIjogQiwgXCJkb1wiOiBCLCBcInRyeVwiOiBCLFxuICAgIFwicmV0dXJuXCI6IEMsIFwiYnJlYWtcIjogQywgXCJjb250aW51ZVwiOiBDLCBcIm5ld1wiOiBDLCBcInRocm93XCI6IEMsXG4gICAgXCJ2YXJcIjoga3coXCJ2YXJcIiksIFwiaW5saW5lXCI6YXR0cmlidXRlLCBcInN0YXRpY1wiOiBhdHRyaWJ1dGUsIFwidXNpbmdcIjprdyhcImltcG9ydFwiKSxcbiAgICBcInB1YmxpY1wiOiBhdHRyaWJ1dGUsIFwicHJpdmF0ZVwiOiBhdHRyaWJ1dGUsIFwiY2FzdFwiOiBrdyhcImNhc3RcIiksIFwiaW1wb3J0XCI6IGt3KFwiaW1wb3J0XCIpLCBcIm1hY3JvXCI6IGt3KFwibWFjcm9cIiksXG4gICAgXCJmdW5jdGlvblwiOiBrdyhcImZ1bmN0aW9uXCIpLCBcImNhdGNoXCI6IGt3KFwiY2F0Y2hcIiksIFwidW50eXBlZFwiOiBrdyhcInVudHlwZWRcIiksIFwiY2FsbGJhY2tcIjoga3coXCJjYlwiKSxcbiAgICBcImZvclwiOiBrdyhcImZvclwiKSwgXCJzd2l0Y2hcIjoga3coXCJzd2l0Y2hcIiksIFwiY2FzZVwiOiBrdyhcImNhc2VcIiksIFwiZGVmYXVsdFwiOiBrdyhcImRlZmF1bHRcIiksXG4gICAgXCJpblwiOiBvcGVyYXRvciwgXCJuZXZlclwiOiBrdyhcInByb3BlcnR5X2FjY2Vzc1wiKSwgXCJ0cmFjZVwiOmt3KFwidHJhY2VcIiksXG4gICAgXCJjbGFzc1wiOiB0eXBlLCBcImFic3RyYWN0XCI6dHlwZSwgXCJlbnVtXCI6dHlwZSwgXCJpbnRlcmZhY2VcIjp0eXBlLCBcInR5cGVkZWZcIjp0eXBlLCBcImV4dGVuZHNcIjp0eXBlLCBcImltcGxlbWVudHNcIjp0eXBlLCBcImR5bmFtaWNcIjp0eXBlLFxuICAgIFwidHJ1ZVwiOiBhdG9tLCBcImZhbHNlXCI6IGF0b20sIFwibnVsbFwiOiBhdG9tXG4gIH07XG5cbiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXFwtKiYlPTw+IT98XS87XG5cbiAgZnVuY3Rpb24gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgZikge1xuICAgIHN0YXRlLnRva2VuaXplID0gZjtcbiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvVW5lc2NhcGVkKHN0cmVhbSwgZW5kKSB7XG4gICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dDtcbiAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICBpZiAobmV4dCA9PSBlbmQgJiYgIWVzY2FwZWQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gXCJcXFxcXCI7XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlZCBhcyBzY3JhdGNoIHZhcmlhYmxlcyB0byBjb21tdW5pY2F0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aG91dFxuICAvLyBjb25zaW5nIHVwIHRvbnMgb2Ygb2JqZWN0cy5cbiAgdmFyIHR5cGUsIGNvbnRlbnQ7XG4gIGZ1bmN0aW9uIHJldCh0cCwgc3R5bGUsIGNvbnQpIHtcbiAgICB0eXBlID0gdHA7IGNvbnRlbnQgPSBjb250O1xuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhheGVUb2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKGNoID09ICdcIicgfHwgY2ggPT0gXCInXCIpIHtcbiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBoYXhlVG9rZW5TdHJpbmcoY2gpKTtcbiAgICB9IGVsc2UgaWYgKC9bXFxbXFxde31cXChcXCksO1xcOlxcLl0vLnRlc3QoY2gpKSB7XG4gICAgICByZXR1cm4gcmV0KGNoKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiMFwiICYmIHN0cmVhbS5lYXQoL3gvaSkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcZGEtZl0vaSk7XG4gICAgICByZXR1cm4gcmV0KFwibnVtYmVyXCIsIFwibnVtYmVyXCIpO1xuICAgIH0gZWxzZSBpZiAoL1xcZC8udGVzdChjaCkgfHwgY2ggPT0gXCItXCIgJiYgc3RyZWFtLmVhdCgvXFxkLykpIHtcbiAgICAgIHN0cmVhbS5tYXRjaCgvXlxcZCooPzpcXC5cXGQqKD8hXFwuKSk/KD86W2VFXVsrXFwtXT9cXGQrKT8vKTtcbiAgICAgIHJldHVybiByZXQoXCJudW1iZXJcIiwgXCJudW1iZXJcIik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5yZUFsbG93ZWQgJiYgKGNoID09IFwiflwiICYmIHN0cmVhbS5lYXQoL1xcLy8pKSkge1xuICAgICAgdG9VbmVzY2FwZWQoc3RyZWFtLCBcIi9cIik7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tnaW1zdV0vKTtcbiAgICAgIHJldHVybiByZXQoXCJyZWdleHBcIiwgXCJzdHJpbmctMlwiKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiL1wiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIipcIikpIHtcbiAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIGhheGVUb2tlbkNvbW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KFwiL1wiKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiByZXQoXCJjb21tZW50XCIsIFwiY29tbWVudFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7XG4gICAgICAgIHJldHVybiByZXQoXCJvcGVyYXRvclwiLCBudWxsLCBzdHJlYW0uY3VycmVudCgpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09IFwiI1wiKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIHJldChcImNvbmRpdGlvbmFsXCIsIFwibWV0YVwiKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiQFwiKSB7XG4gICAgICBzdHJlYW0uZWF0KC86Lyk7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdfXS8pO1xuICAgICAgcmV0dXJuIHJldCAoXCJtZXRhZGF0YVwiLCBcIm1ldGFcIik7XG4gICAgfSBlbHNlIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTtcbiAgICAgIHJldHVybiByZXQoXCJvcGVyYXRvclwiLCBudWxsLCBzdHJlYW0uY3VycmVudCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHdvcmQ7XG4gICAgICBpZigvW0EtWl0vLnRlc3QoY2gpKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd188Pl0vKTtcbiAgICAgICAgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgICAgIHJldHVybiByZXQoXCJ0eXBlXCIsIFwidmFyaWFibGUtM1wiLCB3b3JkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd19dLyk7XG4gICAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwga25vd24gPSBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSAmJiBrZXl3b3Jkc1t3b3JkXTtcbiAgICAgICAgcmV0dXJuIChrbm93biAmJiBzdGF0ZS5rd0FsbG93ZWQpID8gcmV0KGtub3duLnR5cGUsIGtub3duLnN0eWxlLCB3b3JkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHJldChcInZhcmlhYmxlXCIsIFwidmFyaWFibGVcIiwgd29yZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGF4ZVRva2VuU3RyaW5nKHF1b3RlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmICh0b1VuZXNjYXBlZChzdHJlYW0sIHF1b3RlKSlcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBoYXhlVG9rZW5CYXNlO1xuICAgICAgcmV0dXJuIHJldChcInN0cmluZ1wiLCBcInN0cmluZ1wiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaGF4ZVRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIi9cIiAmJiBtYXliZUVuZCkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGhheGVUb2tlbkJhc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIqXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0KFwiY29tbWVudFwiLCBcImNvbW1lbnRcIik7XG4gIH1cblxuICAvLyBQYXJzZXJcblxuICB2YXIgYXRvbWljVHlwZXMgPSB7XCJhdG9tXCI6IHRydWUsIFwibnVtYmVyXCI6IHRydWUsIFwidmFyaWFibGVcIjogdHJ1ZSwgXCJzdHJpbmdcIjogdHJ1ZSwgXCJyZWdleHBcIjogdHJ1ZX07XG5cbiAgZnVuY3Rpb24gSGF4ZUxleGljYWwoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYsIGluZm8pIHtcbiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7XG4gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByZXYgPSBwcmV2O1xuICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgaWYgKGFsaWduICE9IG51bGwpIHRoaXMuYWxpZ24gPSBhbGlnbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluU2NvcGUoc3RhdGUsIHZhcm5hbWUpIHtcbiAgICBmb3IgKHZhciB2ID0gc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KVxuICAgICAgaWYgKHYubmFtZSA9PSB2YXJuYW1lKSByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlSGF4ZShzdGF0ZSwgc3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSkge1xuICAgIHZhciBjYyA9IHN0YXRlLmNjO1xuICAgIC8vIENvbW11bmljYXRlIG91ciBjb250ZXh0IHRvIHRoZSBjb21iaW5hdG9ycy5cbiAgICAvLyAoTGVzcyB3YXN0ZWZ1bCB0aGFuIGNvbnNpbmcgdXAgYSBodW5kcmVkIGNsb3N1cmVzIG9uIGV2ZXJ5IGNhbGwuKVxuICAgIGN4LnN0YXRlID0gc3RhdGU7IGN4LnN0cmVhbSA9IHN0cmVhbTsgY3gubWFya2VkID0gbnVsbCwgY3guY2MgPSBjYztcblxuICAgIGlmICghc3RhdGUubGV4aWNhbC5oYXNPd25Qcm9wZXJ0eShcImFsaWduXCIpKVxuICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IHRydWU7XG5cbiAgICB3aGlsZSh0cnVlKSB7XG4gICAgICB2YXIgY29tYmluYXRvciA9IGNjLmxlbmd0aCA/IGNjLnBvcCgpIDogc3RhdGVtZW50O1xuICAgICAgaWYgKGNvbWJpbmF0b3IodHlwZSwgY29udGVudCkpIHtcbiAgICAgICAgd2hpbGUoY2MubGVuZ3RoICYmIGNjW2NjLmxlbmd0aCAtIDFdLmxleClcbiAgICAgICAgICBjYy5wb3AoKSgpO1xuICAgICAgICBpZiAoY3gubWFya2VkKSByZXR1cm4gY3gubWFya2VkO1xuICAgICAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgJiYgaW5TY29wZShzdGF0ZSwgY29udGVudCkpIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICAgICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmIGltcG9ydGVkKHN0YXRlLCBjb250ZW50KSkgcmV0dXJuIFwidmFyaWFibGUtM1wiO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW1wb3J0ZWQoc3RhdGUsIHR5cGVuYW1lKSB7XG4gICAgaWYgKC9bYS16XS8udGVzdCh0eXBlbmFtZS5jaGFyQXQoMCkpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBsZW4gPSBzdGF0ZS5pbXBvcnRlZHR5cGVzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaTxsZW47IGkrKylcbiAgICAgIGlmKHN0YXRlLmltcG9ydGVkdHlwZXNbaV09PXR5cGVuYW1lKSByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyaW1wb3J0KGltcG9ydG5hbWUpIHtcbiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTtcbiAgICBmb3IgKHZhciB0ID0gc3RhdGUuaW1wb3J0ZWR0eXBlczsgdDsgdCA9IHQubmV4dClcbiAgICAgIGlmKHQubmFtZSA9PSBpbXBvcnRuYW1lKSByZXR1cm47XG4gICAgc3RhdGUuaW1wb3J0ZWR0eXBlcyA9IHsgbmFtZTogaW1wb3J0bmFtZSwgbmV4dDogc3RhdGUuaW1wb3J0ZWR0eXBlcyB9O1xuICB9XG4gIC8vIENvbWJpbmF0b3IgdXRpbHNcblxuICB2YXIgY3ggPSB7c3RhdGU6IG51bGwsIGNvbHVtbjogbnVsbCwgbWFya2VkOiBudWxsLCBjYzogbnVsbH07XG4gIGZ1bmN0aW9uIHBhc3MoKSB7XG4gICAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3guY2MucHVzaChhcmd1bWVudHNbaV0pO1xuICB9XG4gIGZ1bmN0aW9uIGNvbnQoKSB7XG4gICAgcGFzcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIGluTGlzdChuYW1lLCBsaXN0KSB7XG4gICAgZm9yICh2YXIgdiA9IGxpc3Q7IHY7IHYgPSB2Lm5leHQpXG4gICAgICBpZiAodi5uYW1lID09IG5hbWUpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmdW5jdGlvbiByZWdpc3Rlcih2YXJuYW1lKSB7XG4gICAgdmFyIHN0YXRlID0gY3guc3RhdGU7XG4gICAgaWYgKHN0YXRlLmNvbnRleHQpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwiZGVmXCI7XG4gICAgICBpZiAoaW5MaXN0KHZhcm5hbWUsIHN0YXRlLmxvY2FsVmFycykpIHJldHVybjtcbiAgICAgIHN0YXRlLmxvY2FsVmFycyA9IHtuYW1lOiB2YXJuYW1lLCBuZXh0OiBzdGF0ZS5sb2NhbFZhcnN9O1xuICAgIH0gZWxzZSBpZiAoc3RhdGUuZ2xvYmFsVmFycykge1xuICAgICAgaWYgKGluTGlzdCh2YXJuYW1lLCBzdGF0ZS5nbG9iYWxWYXJzKSkgcmV0dXJuO1xuICAgICAgc3RhdGUuZ2xvYmFsVmFycyA9IHtuYW1lOiB2YXJuYW1lLCBuZXh0OiBzdGF0ZS5nbG9iYWxWYXJzfTtcbiAgICB9XG4gIH1cblxuICAvLyBDb21iaW5hdG9yc1xuXG4gIHZhciBkZWZhdWx0VmFycyA9IHtuYW1lOiBcInRoaXNcIiwgbmV4dDogbnVsbH07XG4gIGZ1bmN0aW9uIHB1c2hjb250ZXh0KCkge1xuICAgIGlmICghY3guc3RhdGUuY29udGV4dCkgY3guc3RhdGUubG9jYWxWYXJzID0gZGVmYXVsdFZhcnM7XG4gICAgY3guc3RhdGUuY29udGV4dCA9IHtwcmV2OiBjeC5zdGF0ZS5jb250ZXh0LCB2YXJzOiBjeC5zdGF0ZS5sb2NhbFZhcnN9O1xuICB9XG4gIGZ1bmN0aW9uIHBvcGNvbnRleHQoKSB7XG4gICAgY3guc3RhdGUubG9jYWxWYXJzID0gY3guc3RhdGUuY29udGV4dC52YXJzO1xuICAgIGN4LnN0YXRlLmNvbnRleHQgPSBjeC5zdGF0ZS5jb250ZXh0LnByZXY7XG4gIH1cbiAgcG9wY29udGV4dC5sZXggPSB0cnVlO1xuICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGluZm8pIHtcbiAgICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTtcbiAgICAgIHN0YXRlLmxleGljYWwgPSBuZXcgSGF4ZUxleGljYWwoc3RhdGUuaW5kZW50ZWQsIGN4LnN0cmVhbS5jb2x1bW4oKSwgdHlwZSwgbnVsbCwgc3RhdGUubGV4aWNhbCwgaW5mbyk7XG4gICAgfTtcbiAgICByZXN1bHQubGV4ID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGZ1bmN0aW9uIHBvcGxleCgpIHtcbiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTtcbiAgICBpZiAoc3RhdGUubGV4aWNhbC5wcmV2KSB7XG4gICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09IFwiKVwiKVxuICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7XG4gICAgICBzdGF0ZS5sZXhpY2FsID0gc3RhdGUubGV4aWNhbC5wcmV2O1xuICAgIH1cbiAgfVxuICBwb3BsZXgubGV4ID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBleHBlY3Qod2FudGVkKSB7XG4gICAgZnVuY3Rpb24gZih0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PSB3YW50ZWQpIHJldHVybiBjb250KCk7XG4gICAgICBlbHNlIGlmICh3YW50ZWQgPT0gXCI7XCIpIHJldHVybiBwYXNzKCk7XG4gICAgICBlbHNlIHJldHVybiBjb250KGYpO1xuICAgIH1cbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRlbWVudCh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJAXCIpIHJldHVybiBjb250KG1ldGFkZWYpO1xuICAgIGlmICh0eXBlID09IFwidmFyXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJ2YXJkZWZcIiksIHZhcmRlZjEsIGV4cGVjdChcIjtcIiksIHBvcGxleCk7XG4gICAgaWYgKHR5cGUgPT0gXCJrZXl3b3JkIGFcIikgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIGV4cHJlc3Npb24sIHN0YXRlbWVudCwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImtleXdvcmQgYlwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgc3RhdGVtZW50LCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gY29udChwdXNobGV4KFwifVwiKSwgcHVzaGNvbnRleHQsIGJsb2NrLCBwb3BsZXgsIHBvcGNvbnRleHQpO1xuICAgIGlmICh0eXBlID09IFwiO1wiKSByZXR1cm4gY29udCgpO1xuICAgIGlmICh0eXBlID09IFwiYXR0cmlidXRlXCIpIHJldHVybiBjb250KG1heWJlYXR0cmlidXRlKTtcbiAgICBpZiAodHlwZSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTtcbiAgICBpZiAodHlwZSA9PSBcImZvclwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgZXhwZWN0KFwiKFwiKSwgcHVzaGxleChcIilcIiksIGZvcnNwZWMxLCBleHBlY3QoXCIpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BsZXgsIHN0YXRlbWVudCwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJzdGF0XCIpLCBtYXliZWxhYmVsKTtcbiAgICBpZiAodHlwZSA9PSBcInN3aXRjaFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgZXhwcmVzc2lvbiwgcHVzaGxleChcIn1cIiwgXCJzd2l0Y2hcIiksIGV4cGVjdChcIntcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBwb3BsZXgsIHBvcGxleCk7XG4gICAgaWYgKHR5cGUgPT0gXCJjYXNlXCIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdChcIjpcIikpO1xuICAgIGlmICh0eXBlID09IFwiZGVmYXVsdFwiKSByZXR1cm4gY29udChleHBlY3QoXCI6XCIpKTtcbiAgICBpZiAodHlwZSA9PSBcImNhdGNoXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBwdXNoY29udGV4dCwgZXhwZWN0KFwiKFwiKSwgZnVuYXJnLCBleHBlY3QoXCIpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCwgcG9wbGV4LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAodHlwZSA9PSBcImltcG9ydFwiKSByZXR1cm4gY29udChpbXBvcnRkZWYsIGV4cGVjdChcIjtcIikpO1xuICAgIGlmICh0eXBlID09IFwidHlwZWRlZlwiKSByZXR1cm4gY29udCh0eXBlZGVmKTtcbiAgICByZXR1cm4gcGFzcyhwdXNobGV4KFwic3RhdFwiKSwgZXhwcmVzc2lvbiwgZXhwZWN0KFwiO1wiKSwgcG9wbGV4KTtcbiAgfVxuICBmdW5jdGlvbiBleHByZXNzaW9uKHR5cGUpIHtcbiAgICBpZiAoYXRvbWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBjb250KG1heWJlb3BlcmF0b3IpO1xuICAgIGlmICh0eXBlID09IFwidHlwZVwiICkgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvcik7XG4gICAgaWYgKHR5cGUgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gY29udChmdW5jdGlvbmRlZik7XG4gICAgaWYgKHR5cGUgPT0gXCJrZXl3b3JkIGNcIikgcmV0dXJuIGNvbnQobWF5YmVleHByZXNzaW9uKTtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIilcIiksIG1heWJlZXhwcmVzc2lvbiwgZXhwZWN0KFwiKVwiKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTtcbiAgICBpZiAodHlwZSA9PSBcIm9wZXJhdG9yXCIpIHJldHVybiBjb250KGV4cHJlc3Npb24pO1xuICAgIGlmICh0eXBlID09IFwiW1wiKSByZXR1cm4gY29udChwdXNobGV4KFwiXVwiKSwgY29tbWFzZXAobWF5YmVleHByZXNzaW9uLCBcIl1cIiksIHBvcGxleCwgbWF5YmVvcGVyYXRvcik7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJ9XCIpLCBjb21tYXNlcChvYmpwcm9wLCBcIn1cIiksIHBvcGxleCwgbWF5YmVvcGVyYXRvcik7XG4gICAgcmV0dXJuIGNvbnQoKTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZWV4cHJlc3Npb24odHlwZSkge1xuICAgIGlmICh0eXBlLm1hdGNoKC9bO1xcfVxcKVxcXSxdLykpIHJldHVybiBwYXNzKCk7XG4gICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbik7XG4gIH1cblxuICBmdW5jdGlvbiBtYXliZW9wZXJhdG9yKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJvcGVyYXRvclwiICYmIC9cXCtcXCt8LS0vLnRlc3QodmFsdWUpKSByZXR1cm4gY29udChtYXliZW9wZXJhdG9yKTtcbiAgICBpZiAodHlwZSA9PSBcIm9wZXJhdG9yXCIgfHwgdHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7XG4gICAgaWYgKHR5cGUgPT0gXCI7XCIpIHJldHVybjtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIilcIiksIGNvbW1hc2VwKGV4cHJlc3Npb24sIFwiKVwiKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTtcbiAgICBpZiAodHlwZSA9PSBcIi5cIikgcmV0dXJuIGNvbnQocHJvcGVydHksIG1heWJlb3BlcmF0b3IpO1xuICAgIGlmICh0eXBlID09IFwiW1wiKSByZXR1cm4gY29udChwdXNobGV4KFwiXVwiKSwgZXhwcmVzc2lvbiwgZXhwZWN0KFwiXVwiKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1heWJlYXR0cmlidXRlKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcImF0dHJpYnV0ZVwiKSByZXR1cm4gY29udChtYXliZWF0dHJpYnV0ZSk7XG4gICAgaWYgKHR5cGUgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gY29udChmdW5jdGlvbmRlZik7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJcIikgcmV0dXJuIGNvbnQodmFyZGVmMSk7XG4gIH1cblxuICBmdW5jdGlvbiBtZXRhZGVmKHR5cGUpIHtcbiAgICBpZih0eXBlID09IFwiOlwiKSByZXR1cm4gY29udChtZXRhZGVmKTtcbiAgICBpZih0eXBlID09IFwidmFyaWFibGVcIikgcmV0dXJuIGNvbnQobWV0YWRlZik7XG4gICAgaWYodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIilcIiksIGNvbW1hc2VwKG1ldGFhcmdzLCBcIilcIiksIHBvcGxleCwgc3RhdGVtZW50KTtcbiAgfVxuICBmdW5jdGlvbiBtZXRhYXJncyh0eXBlKSB7XG4gICAgaWYodHlwZSA9PSBcInZhcmlhYmxlXCIpIHJldHVybiBjb250KCk7XG4gIH1cblxuICBmdW5jdGlvbiBpbXBvcnRkZWYgKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYodHlwZSA9PSBcInZhcmlhYmxlXCIgJiYgL1tBLVpdLy50ZXN0KHZhbHVlLmNoYXJBdCgwKSkpIHsgcmVnaXN0ZXJpbXBvcnQodmFsdWUpOyByZXR1cm4gY29udCgpOyB9XG4gICAgZWxzZSBpZih0eXBlID09IFwidmFyaWFibGVcIiB8fCB0eXBlID09IFwicHJvcGVydHlcIiB8fCB0eXBlID09IFwiLlwiIHx8IHZhbHVlID09IFwiKlwiKSByZXR1cm4gY29udChpbXBvcnRkZWYpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHlwZWRlZiAodHlwZSwgdmFsdWUpXG4gIHtcbiAgICBpZih0eXBlID09IFwidmFyaWFibGVcIiAmJiAvW0EtWl0vLnRlc3QodmFsdWUuY2hhckF0KDApKSkgeyByZWdpc3RlcmltcG9ydCh2YWx1ZSk7IHJldHVybiBjb250KCk7IH1cbiAgICBlbHNlIGlmICh0eXBlID09IFwidHlwZVwiICYmIC9bQS1aXS8udGVzdCh2YWx1ZS5jaGFyQXQoMCkpKSB7IHJldHVybiBjb250KCk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1heWJlbGFiZWwodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwiOlwiKSByZXR1cm4gY29udChwb3BsZXgsIHN0YXRlbWVudCk7XG4gICAgcmV0dXJuIHBhc3MobWF5YmVvcGVyYXRvciwgZXhwZWN0KFwiO1wiKSwgcG9wbGV4KTtcbiAgfVxuICBmdW5jdGlvbiBwcm9wZXJ0eSh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7Y3gubWFya2VkID0gXCJwcm9wZXJ0eVwiOyByZXR1cm4gY29udCgpO31cbiAgfVxuICBmdW5jdGlvbiBvYmpwcm9wKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIGN4Lm1hcmtlZCA9IFwicHJvcGVydHlcIjtcbiAgICBpZiAoYXRvbWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBjb250KGV4cGVjdChcIjpcIiksIGV4cHJlc3Npb24pO1xuICB9XG4gIGZ1bmN0aW9uIGNvbW1hc2VwKHdoYXQsIGVuZCkge1xuICAgIGZ1bmN0aW9uIHByb2NlZWQodHlwZSkge1xuICAgICAgaWYgKHR5cGUgPT0gXCIsXCIpIHJldHVybiBjb250KHdoYXQsIHByb2NlZWQpO1xuICAgICAgaWYgKHR5cGUgPT0gZW5kKSByZXR1cm4gY29udCgpO1xuICAgICAgcmV0dXJuIGNvbnQoZXhwZWN0KGVuZCkpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24odHlwZSkge1xuICAgICAgaWYgKHR5cGUgPT0gZW5kKSByZXR1cm4gY29udCgpO1xuICAgICAgZWxzZSByZXR1cm4gcGFzcyh3aGF0LCBwcm9jZWVkKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGJsb2NrKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIn1cIikgcmV0dXJuIGNvbnQoKTtcbiAgICByZXR1cm4gcGFzcyhzdGF0ZW1lbnQsIGJsb2NrKTtcbiAgfVxuICBmdW5jdGlvbiB2YXJkZWYxKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKXtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KHR5cGV1c2UsIHZhcmRlZjIpO31cbiAgICByZXR1cm4gY29udCgpO1xuICB9XG4gIGZ1bmN0aW9uIHZhcmRlZjIodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCI9XCIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIHZhcmRlZjIpO1xuICAgIGlmICh0eXBlID09IFwiLFwiKSByZXR1cm4gY29udCh2YXJkZWYxKTtcbiAgfVxuICBmdW5jdGlvbiBmb3JzcGVjMSh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikge1xuICAgICAgcmVnaXN0ZXIodmFsdWUpO1xuICAgICAgcmV0dXJuIGNvbnQoZm9yaW4sIGV4cHJlc3Npb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYXNzKClcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZm9yaW4oX3R5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiaW5cIikgcmV0dXJuIGNvbnQoKTtcbiAgfVxuICBmdW5jdGlvbiBmdW5jdGlvbmRlZih0eXBlLCB2YWx1ZSkge1xuICAgIC8vZnVuY3Rpb24gbmFtZXMgc3RhcnRpbmcgd2l0aCB1cHBlci1jYXNlIGxldHRlcnMgYXJlIHJlY29nbmlzZWQgYXMgdHlwZXMsIHNvIGNsdWRnaW5nIHRoZW0gdG9nZXRoZXIgaGVyZS5cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgfHwgdHlwZSA9PSBcInR5cGVcIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO31cbiAgICBpZiAodmFsdWUgPT0gXCJuZXdcIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiKVwiKSwgcHVzaGNvbnRleHQsIGNvbW1hc2VwKGZ1bmFyZywgXCIpXCIpLCBwb3BsZXgsIHR5cGV1c2UsIHN0YXRlbWVudCwgcG9wY29udGV4dCk7XG4gIH1cbiAgZnVuY3Rpb24gdHlwZXVzZSh0eXBlKSB7XG4gICAgaWYodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQodHlwZXN0cmluZyk7XG4gIH1cbiAgZnVuY3Rpb24gdHlwZXN0cmluZyh0eXBlKSB7XG4gICAgaWYodHlwZSA9PSBcInR5cGVcIikgcmV0dXJuIGNvbnQoKTtcbiAgICBpZih0eXBlID09IFwidmFyaWFibGVcIikgcmV0dXJuIGNvbnQoKTtcbiAgICBpZih0eXBlID09IFwie1wiKSByZXR1cm4gY29udChwdXNobGV4KFwifVwiKSwgY29tbWFzZXAodHlwZXByb3AsIFwifVwiKSwgcG9wbGV4KTtcbiAgfVxuICBmdW5jdGlvbiB0eXBlcHJvcCh0eXBlKSB7XG4gICAgaWYodHlwZSA9PSBcInZhcmlhYmxlXCIpIHJldHVybiBjb250KHR5cGV1c2UpO1xuICB9XG4gIGZ1bmN0aW9uIGZ1bmFyZyh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQodHlwZXVzZSk7fVxuICB9XG5cbiAgLy8gSW50ZXJmYWNlXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikge1xuICAgICAgdmFyIGRlZmF1bHR0eXBlcyA9IFtcIkludFwiLCBcIkZsb2F0XCIsIFwiU3RyaW5nXCIsIFwiVm9pZFwiLCBcIlN0ZFwiLCBcIkJvb2xcIiwgXCJEeW5hbWljXCIsIFwiQXJyYXlcIl07XG4gICAgICB2YXIgc3RhdGUgPSB7XG4gICAgICAgIHRva2VuaXplOiBoYXhlVG9rZW5CYXNlLFxuICAgICAgICByZUFsbG93ZWQ6IHRydWUsXG4gICAgICAgIGt3QWxsb3dlZDogdHJ1ZSxcbiAgICAgICAgY2M6IFtdLFxuICAgICAgICBsZXhpY2FsOiBuZXcgSGF4ZUxleGljYWwoKGJhc2Vjb2x1bW4gfHwgMCkgLSBpbmRlbnRVbml0LCAwLCBcImJsb2NrXCIsIGZhbHNlKSxcbiAgICAgICAgbG9jYWxWYXJzOiBwYXJzZXJDb25maWcubG9jYWxWYXJzLFxuICAgICAgICBpbXBvcnRlZHR5cGVzOiBkZWZhdWx0dHlwZXMsXG4gICAgICAgIGNvbnRleHQ6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnMgJiYge3ZhcnM6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnN9LFxuICAgICAgICBpbmRlbnRlZDogMFxuICAgICAgfTtcbiAgICAgIGlmIChwYXJzZXJDb25maWcuZ2xvYmFsVmFycyAmJiB0eXBlb2YgcGFyc2VyQ29uZmlnLmdsb2JhbFZhcnMgPT0gXCJvYmplY3RcIilcbiAgICAgICAgc3RhdGUuZ2xvYmFsVmFycyA9IHBhcnNlckNvbmZpZy5nbG9iYWxWYXJzO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoXCJhbGlnblwiKSlcbiAgICAgICAgICBzdGF0ZS5sZXhpY2FsLmFsaWduID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBpZiAodHlwZSA9PSBcImNvbW1lbnRcIikgcmV0dXJuIHN0eWxlO1xuICAgICAgc3RhdGUucmVBbGxvd2VkID0gISEodHlwZSA9PSBcIm9wZXJhdG9yXCIgfHwgdHlwZSA9PSBcImtleXdvcmQgY1wiIHx8IHR5cGUubWF0Y2goL15bXFxbe31cXCgsOzpdJC8pKTtcbiAgICAgIHN0YXRlLmt3QWxsb3dlZCA9IHR5cGUgIT0gJy4nO1xuICAgICAgcmV0dXJuIHBhcnNlSGF4ZShzdGF0ZSwgc3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSk7XG4gICAgfSxcblxuICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikge1xuICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IGhheGVUb2tlbkJhc2UpIHJldHVybiAwO1xuICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBsZXhpY2FsID0gc3RhdGUubGV4aWNhbDtcbiAgICAgIGlmIChsZXhpY2FsLnR5cGUgPT0gXCJzdGF0XCIgJiYgZmlyc3RDaGFyID09IFwifVwiKSBsZXhpY2FsID0gbGV4aWNhbC5wcmV2O1xuICAgICAgdmFyIHR5cGUgPSBsZXhpY2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTtcbiAgICAgIGlmICh0eXBlID09IFwidmFyZGVmXCIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgNDtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJmb3JtXCIgJiYgZmlyc3RDaGFyID09IFwie1wiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZDtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJzdGF0XCIgfHwgdHlwZSA9PSBcImZvcm1cIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyBpbmRlbnRVbml0O1xuICAgICAgZWxzZSBpZiAobGV4aWNhbC5pbmZvID09IFwic3dpdGNoXCIgJiYgIWNsb3NpbmcpXG4gICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKC9eKD86Y2FzZXxkZWZhdWx0KVxcYi8udGVzdCh0ZXh0QWZ0ZXIpID8gaW5kZW50VW5pdCA6IDIgKiBpbmRlbnRVbml0KTtcbiAgICAgIGVsc2UgaWYgKGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpO1xuICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpO1xuICAgIH0sXG5cbiAgICBlbGVjdHJpY0NoYXJzOiBcInt9XCIsXG4gICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiLypcIixcbiAgICBibG9ja0NvbW1lbnRFbmQ6IFwiKi9cIixcbiAgICBsaW5lQ29tbWVudDogXCIvL1wiXG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWhheGVcIiwgXCJoYXhlXCIpO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJoeG1sXCIsIGZ1bmN0aW9uICgpIHtcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlZmluZTogZmFsc2UsXG4gICAgICAgIGluU3RyaW5nOiBmYWxzZVxuICAgICAgfTtcbiAgICB9LFxuICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgIHZhciBzb2wgPSBzdHJlYW0uc29sKCk7XG5cbiAgICAgIC8vLyogY29tbWVudHMgKi9cbiAgICAgIGlmIChjaCA9PSBcIiNcIikge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH1cbiAgICAgIGlmIChzb2wgJiYgY2ggPT0gXCItXCIpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gXCJ2YXJpYWJsZS0yXCI7XG5cbiAgICAgICAgc3RyZWFtLmVhdCgvLS8pO1xuXG4gICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09IFwiLVwiKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdCgvLS8pO1xuICAgICAgICAgIHN0eWxlID0gXCJrZXl3b3JkIGFcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09IFwiRFwiKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdCgvW0RdLyk7XG4gICAgICAgICAgc3R5bGUgPSBcImtleXdvcmQgY1wiO1xuICAgICAgICAgIHN0YXRlLmRlZmluZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tBLVpdL2kpO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7XG5cbiAgICAgIGlmIChzdGF0ZS5pblN0cmluZyA9PSBmYWxzZSAmJiBjaCA9PSBcIidcIikge1xuICAgICAgICBzdGF0ZS5pblN0cmluZyA9IHRydWU7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5pblN0cmluZyA9PSB0cnVlKSB7XG4gICAgICAgIGlmIChzdHJlYW0uc2tpcFRvKFwiJ1wiKSkge1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gXCInXCIpIHtcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIHN0YXRlLmluU3RyaW5nID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH1cblxuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgbGluZUNvbW1lbnQ6IFwiI1wiXG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWh4bWxcIiwgXCJoeG1sXCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi9odG1sbWl4ZWQvaHRtbG1peGVkXCIpLFxuICAgICAgICByZXF1aXJlKFwiLi4vLi4vYWRkb24vbW9kZS9tdWx0aXBsZXhcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi9odG1sbWl4ZWQvaHRtbG1peGVkXCIsXG4gICAgICAgICAgICBcIi4uLy4uL2FkZG9uL21vZGUvbXVsdGlwbGV4XCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJodG1sZW1iZWRkZWRcIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHtcbiAgICB2YXIgY2xvc2VDb21tZW50ID0gcGFyc2VyQ29uZmlnLmNsb3NlQ29tbWVudCB8fCBcIi0tJT5cIlxuICAgIHJldHVybiBDb2RlTWlycm9yLm11bHRpcGxleGluZ01vZGUoQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJodG1sbWl4ZWRcIiksIHtcbiAgICAgIG9wZW46IHBhcnNlckNvbmZpZy5vcGVuQ29tbWVudCB8fCBcIjwlLS1cIixcbiAgICAgIGNsb3NlOiBjbG9zZUNvbW1lbnQsXG4gICAgICBkZWxpbVN0eWxlOiBcImNvbW1lbnRcIixcbiAgICAgIG1vZGU6IHt0b2tlbjogZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG8oY2xvc2VDb21tZW50KSB8fCBzdHJlYW0uc2tpcFRvRW5kKClcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiXG4gICAgICB9fVxuICAgIH0sIHtcbiAgICAgIG9wZW46IHBhcnNlckNvbmZpZy5vcGVuIHx8IHBhcnNlckNvbmZpZy5zY3JpcHRTdGFydFJlZ2V4IHx8IFwiPCVcIixcbiAgICAgIGNsb3NlOiBwYXJzZXJDb25maWcuY2xvc2UgfHwgcGFyc2VyQ29uZmlnLnNjcmlwdEVuZFJlZ2V4IHx8IFwiJT5cIixcbiAgICAgIG1vZGU6IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHBhcnNlckNvbmZpZy5zY3JpcHRpbmdNb2RlU3BlYylcbiAgICB9KTtcbiAgfSwgXCJodG1sbWl4ZWRcIik7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24veC1lanNcIiwge25hbWU6IFwiaHRtbGVtYmVkZGVkXCIsIHNjcmlwdGluZ01vZGVTcGVjOlwiamF2YXNjcmlwdFwifSk7XG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3gtYXNweFwiLCB7bmFtZTogXCJodG1sZW1iZWRkZWRcIiwgc2NyaXB0aW5nTW9kZVNwZWM6XCJ0ZXh0L3gtY3NoYXJwXCJ9KTtcbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24veC1qc3BcIiwge25hbWU6IFwiaHRtbGVtYmVkZGVkXCIsIHNjcmlwdGluZ01vZGVTcGVjOlwidGV4dC94LWphdmFcIn0pO1xuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi94LWVyYlwiLCB7bmFtZTogXCJodG1sZW1iZWRkZWRcIiwgc2NyaXB0aW5nTW9kZVNwZWM6XCJydWJ5XCJ9KTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJodHRwXCIsIGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBmYWlsRmlyc3RMaW5lKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgc3RhdGUuY3VyID0gaGVhZGVyO1xuICAgIHJldHVybiBcImVycm9yXCI7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXkhUVFBcXC9cXGRcXC5cXGQvKSkge1xuICAgICAgc3RhdGUuY3VyID0gcmVzcG9uc2VTdGF0dXNDb2RlO1xuICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eW0EtWl0rLykgJiYgL1sgXFx0XS8udGVzdChzdHJlYW0ucGVlaygpKSkge1xuICAgICAgc3RhdGUuY3VyID0gcmVxdWVzdFBhdGg7XG4gICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWlsRmlyc3RMaW5lKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3BvbnNlU3RhdHVzQ29kZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNvZGUgPSBzdHJlYW0ubWF0Y2goL15cXGQrLyk7XG4gICAgaWYgKCFjb2RlKSByZXR1cm4gZmFpbEZpcnN0TGluZShzdHJlYW0sIHN0YXRlKTtcblxuICAgIHN0YXRlLmN1ciA9IHJlc3BvbnNlU3RhdHVzVGV4dDtcbiAgICB2YXIgc3RhdHVzID0gTnVtYmVyKGNvZGVbMF0pO1xuICAgIGlmIChzdGF0dXMgPj0gMTAwICYmIHN0YXR1cyA8IDIwMCkge1xuICAgICAgcmV0dXJuIFwicG9zaXRpdmUgaW5mb3JtYXRpb25hbFwiO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDApIHtcbiAgICAgIHJldHVybiBcInBvc2l0aXZlIHN1Y2Nlc3NcIjtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cyA+PSAzMDAgJiYgc3RhdHVzIDwgNDAwKSB7XG4gICAgICByZXR1cm4gXCJwb3NpdGl2ZSByZWRpcmVjdFwiO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzID49IDQwMCAmJiBzdGF0dXMgPCA1MDApIHtcbiAgICAgIHJldHVybiBcIm5lZ2F0aXZlIGNsaWVudC1lcnJvclwiO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzID49IDUwMCAmJiBzdGF0dXMgPCA2MDApIHtcbiAgICAgIHJldHVybiBcIm5lZ2F0aXZlIHNlcnZlci1lcnJvclwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3BvbnNlU3RhdHVzVGV4dChzdHJlYW0sIHN0YXRlKSB7XG4gICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgIHN0YXRlLmN1ciA9IGhlYWRlcjtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcXVlc3RQYXRoKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBzdHJlYW0uZWF0V2hpbGUoL1xcUy8pO1xuICAgIHN0YXRlLmN1ciA9IHJlcXVlc3RQcm90b2NvbDtcbiAgICByZXR1cm4gXCJzdHJpbmctMlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVxdWVzdFByb3RvY29sKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eSFRUUFxcL1xcZFxcLlxcZCQvKSkge1xuICAgICAgc3RhdGUuY3VyID0gaGVhZGVyO1xuICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFpbEZpcnN0TGluZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoZWFkZXIoc3RyZWFtKSB7XG4gICAgaWYgKHN0cmVhbS5zb2woKSAmJiAhc3RyZWFtLmVhdCgvWyBcXHRdLykpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14uKj86LykpIHtcbiAgICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBib2R5KHN0cmVhbSkge1xuICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBjdXIgPSBzdGF0ZS5jdXI7XG4gICAgICBpZiAoY3VyICE9IGhlYWRlciAmJiBjdXIgIT0gYm9keSAmJiBzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gY3VyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBibGFua0xpbmU6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICBzdGF0ZS5jdXIgPSBib2R5O1xuICAgIH0sXG5cbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7Y3VyOiBzdGFydH07XG4gICAgfVxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcIm1lc3NhZ2UvaHR0cFwiLCBcImh0dHBcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgZnVuY3Rpb24gd29yZFJlZ2V4cCh3b3Jkcykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKCdeKCgnICsgd29yZHMuam9pbignKXwoJykgKyAnKSlcXFxcYicsICdpJyk7XG4gIH07XG5cbiAgdmFyIGJ1aWx0aW5BcnJheSA9IFtcbiAgICAnYV9jb3JyZWxhdGUnLCAnYWJzJywgJ2Fjb3MnLCAnYWRhcHRfaGlzdF9lcXVhbCcsICdhbG9nJyxcbiAgICAnYWxvZzInLCAnYWxvZzEwJywgJ2Ftb2ViYScsICdhbm5vdGF0ZScsICdhcHBfdXNlcl9kaXInLFxuICAgICdhcHBfdXNlcl9kaXJfcXVlcnknLCAnYXJnX3ByZXNlbnQnLCAnYXJyYXlfZXF1YWwnLCAnYXJyYXlfaW5kaWNlcycsXG4gICAgJ2Fycm93JywgJ2FzY2lpX3RlbXBsYXRlJywgJ2FzaW4nLCAnYXNzb2MnLCAnYXRhbicsXG4gICAgJ2F4aXMnLCAnYXhpcycsICdiYW5kcGFzc19maWx0ZXInLCAnYmFuZHJlamVjdF9maWx0ZXInLCAnYmFycGxvdCcsXG4gICAgJ2Jhcl9wbG90JywgJ2Jlc2VsaScsICdiZXNlbGonLCAnYmVzZWxrJywgJ2Jlc2VseScsXG4gICAgJ2JldGEnLCAnYmlnaW50ZWdlcicsICdiaWxpbmVhcicsICdiaW5fZGF0ZScsICdiaW5hcnlfdGVtcGxhdGUnLFxuICAgICdiaW5kZ2VuJywgJ2Jpbm9taWFsJywgJ2JpdF9mZnMnLCAnYml0X3BvcHVsYXRpb24nLCAnYmxhc19heHB5JyxcbiAgICAnYmxrX2NvbicsICdib29sYXJyJywgJ2Jvb2xlYW4nLCAnYm94cGxvdCcsICdib3hfY3Vyc29yJyxcbiAgICAnYnJlYWtwb2ludCcsICdicm95ZGVuJywgJ2J1YmJsZXBsb3QnLCAnYnV0dGVyd29ydGgnLCAnYnl0YXJyJyxcbiAgICAnYnl0ZScsICdieXRlb3JkZXInLCAnYnl0c2NsJywgJ2NfY29ycmVsYXRlJywgJ2NhbGVuZGFyJyxcbiAgICAnY2FsZGF0JywgJ2NhbGxfZXh0ZXJuYWwnLCAnY2FsbF9mdW5jdGlvbicsICdjYWxsX21ldGhvZCcsXG4gICAgJ2NhbGxfcHJvY2VkdXJlJywgJ2Nhbm55JywgJ2NhdGNoJywgJ2NkJywgJ2NkZicsICdjZWlsJyxcbiAgICAnY2hlYnlzaGV2JywgJ2NoZWNrX21hdGgnLCAnY2hpc3FyX2N2ZicsICdjaGlzcXJfcGRmJywgJ2Nob2xkYycsXG4gICAgJ2Nob2xzb2wnLCAnY2luZGdlbicsICdjaXJfM3BudCcsICdjbGlwYm9hcmQnLCAnY2xvc2UnLFxuICAgICdjbHVzdF93dHMnLCAnY2x1c3RlcicsICdjbHVzdGVyX3RyZWUnLCAnY215a19jb252ZXJ0JywgJ2NvZGVfY292ZXJhZ2UnLFxuICAgICdjb2xvcl9jb252ZXJ0JywgJ2NvbG9yX2V4Y2hhbmdlJywgJ2NvbG9yX3F1YW4nLCAnY29sb3JfcmFuZ2VfbWFwJyxcbiAgICAnY29sb3JiYXInLCAnY29sb3JpemVfc2FtcGxlJywgJ2NvbG9ybWFwX2FwcGxpY2FibGUnLFxuICAgICdjb2xvcm1hcF9ncmFkaWVudCcsICdjb2xvcm1hcF9yb3RhdGlvbicsICdjb2xvcnRhYmxlJyxcbiAgICAnY29tZml0JywgJ2NvbW1hbmRfbGluZV9hcmdzJywgJ2NvbW1vbicsICdjb21waWxlX29wdCcsICdjb21wbGV4JyxcbiAgICAnY29tcGxleGFycicsICdjb21wbGV4cm91bmQnLCAnY29tcHV0ZV9tZXNoX25vcm1hbHMnLCAnY29uZCcsICdjb25ncmlkJyxcbiAgICAnY29uaicsICdjb25zdHJhaW5lZF9taW4nLCAnY29udG91cicsICdjb250b3VyJywgJ2NvbnZlcnRfY29vcmQnLFxuICAgICdjb252b2wnLCAnY29udm9sX2ZmdCcsICdjb29yZDJ0bzMnLCAnY29weV9sdW4nLCAnY29ycmVsYXRlJyxcbiAgICAnY29zJywgJ2Nvc2gnLCAnY3B1JywgJ2NyYW1lcicsICdjcmVhdGVib3hwbG90ZGF0YScsXG4gICAgJ2NyZWF0ZV9jdXJzb3InLCAnY3JlYXRlX3N0cnVjdCcsICdjcmVhdGVfdmlldycsICdjcm9zc3AnLCAnY3J2bGVuZ3RoJyxcbiAgICAnY3RfbHVtaW5hbmNlJywgJ2N0aV90ZXN0JywgJ2N1cnNvcicsICdjdXJ2ZWZpdCcsICdjdl9jb29yZCcsXG4gICAgJ2N2dHRvYm0nLCAnY3dfYW5pbWF0ZScsICdjd19hbmltYXRlX2dldHAnLCAnY3dfYW5pbWF0ZV9sb2FkJyxcbiAgICAnY3dfYW5pbWF0ZV9ydW4nLCAnY3dfYXJjYmFsbCcsICdjd19iZ3JvdXAnLCAnY3dfY2xyX2luZGV4JyxcbiAgICAnY3dfY29sb3JzZWwnLCAnY3dfZGVmcm9pJywgJ2N3X2ZpZWxkJywgJ2N3X2ZpbGVzZWwnLCAnY3dfZm9ybScsXG4gICAgJ2N3X2ZzbGlkZXInLCAnY3dfbGlnaHRfZWRpdG9yJywgJ2N3X2xpZ2h0X2VkaXRvcl9nZXQnLFxuICAgICdjd19saWdodF9lZGl0b3Jfc2V0JywgJ2N3X29yaWVudCcsICdjd19wYWxldHRlX2VkaXRvcicsXG4gICAgJ2N3X3BhbGV0dGVfZWRpdG9yX2dldCcsICdjd19wYWxldHRlX2VkaXRvcl9zZXQnLCAnY3dfcGRtZW51JyxcbiAgICAnY3dfcmdic2xpZGVyJywgJ2N3X3RtcGwnLCAnY3dfem9vbScsICdkYl9leGlzdHMnLFxuICAgICdkYmxhcnInLCAnZGNpbmRnZW4nLCAnZGNvbXBsZXgnLCAnZGNvbXBsZXhhcnInLCAnZGVmaW5lX2tleScsXG4gICAgJ2RlZmluZV9tc2dibGsnLCAnZGVmaW5lX21zZ2Jsa19mcm9tX2ZpbGUnLCAnZGVmcm9pJywgJ2RlZnN5c3YnLFxuICAgICdkZWx2YXInLCAnZGVuZHJvX3Bsb3QnLCAnZGVuZHJvZ3JhbScsICdkZXJpdicsICdkZXJpdnNpZycsXG4gICAgJ2RldGVybScsICdkZXZpY2UnLCAnZGZwbWluJywgJ2RpYWdfbWF0cml4JywgJ2RpYWxvZ19kYmNvbm5lY3QnLFxuICAgICdkaWFsb2dfbWVzc2FnZScsICdkaWFsb2dfcGlja2ZpbGUnLCAnZGlhbG9nX3ByaW50ZXJzZXR1cCcsXG4gICAgJ2RpYWxvZ19wcmludGpvYicsICdkaWFsb2dfcmVhZF9pbWFnZScsXG4gICAgJ2RpYWxvZ193cml0ZV9pbWFnZScsICdkaWN0aW9uYXJ5JywgJ2RpZ2l0YWxfZmlsdGVyJywgJ2RpbGF0ZScsICdkaW5kZ2VuJyxcbiAgICAnZGlzc29sdmUnLCAnZGlzdCcsICdkaXN0YW5jZV9tZWFzdXJlJywgJ2RsbV9sb2FkJywgJ2RsbV9yZWdpc3RlcicsXG4gICAgJ2RvY19saWJyYXJ5JywgJ2RvdWJsZScsICdkcmF3X3JvaScsICdlZGdlX2RvZycsICdlZm9udCcsXG4gICAgJ2VpZ2VucWwnLCAnZWlnZW52ZWMnLCAnZWxsaXBzZScsICdlbG1oZXMnLCAnZW1ib3NzJyxcbiAgICAnZW1wdHknLCAnZW5hYmxlX3N5c3J0bicsICdlb2YnLCAnZW9zJywgJ2VyYXNlJyxcbiAgICAnZXJmJywgJ2VyZmMnLCAnZXJmY3gnLCAnZXJvZGUnLCAnZXJyb3JwbG90JyxcbiAgICAnZXJycGxvdCcsICdlc3RpbWF0b3JfZmlsdGVyJywgJ2V4ZWN1dGUnLCAnZXhpdCcsICdleHAnLFxuICAgICdleHBhbmQnLCAnZXhwYW5kX3BhdGgnLCAnZXhwaW50JywgJ2V4dHJhYycsICdleHRyYWN0X3NsaWNlJyxcbiAgICAnZl9jdmYnLCAnZl9wZGYnLCAnZmFjdG9yaWFsJywgJ2ZmdCcsICdmaWxlX2Jhc2VuYW1lJyxcbiAgICAnZmlsZV9jaG1vZCcsICdmaWxlX2NvcHknLCAnZmlsZV9kZWxldGUnLCAnZmlsZV9kaXJuYW1lJyxcbiAgICAnZmlsZV9leHBhbmRfcGF0aCcsICdmaWxlX2d1bnppcCcsICdmaWxlX2d6aXAnLCAnZmlsZV9pbmZvJyxcbiAgICAnZmlsZV9saW5lcycsICdmaWxlX2xpbmsnLCAnZmlsZV9ta2RpcicsICdmaWxlX21vdmUnLFxuICAgICdmaWxlX3BvbGxfaW5wdXQnLCAnZmlsZV9yZWFkbGluaycsICdmaWxlX3NhbWUnLFxuICAgICdmaWxlX3NlYXJjaCcsICdmaWxlX3RhcicsICdmaWxlX3Rlc3QnLCAnZmlsZV91bnRhcicsICdmaWxlX3VuemlwJyxcbiAgICAnZmlsZV93aGljaCcsICdmaWxlX3ppcCcsICdmaWxlcGF0aCcsICdmaW5kZ2VuJywgJ2Zpbml0ZScsXG4gICAgJ2ZpeCcsICdmbGljaycsICdmbG9hdCcsICdmbG9vcicsICdmbG93MycsXG4gICAgJ2ZsdGFycicsICdmbHVzaCcsICdmb3JtYXRfYXhpc192YWx1ZXMnLCAnZm9yd2FyZF9mdW5jdGlvbicsICdmcmVlX2x1bicsXG4gICAgJ2ZzdGF0JywgJ2Z1bHN0cicsICdmdW5jdCcsICdmdW5jdGlvbicsICdmdl90ZXN0JyxcbiAgICAnZnhfcm9vdCcsICdmel9yb290cycsICdnYW1tYScsICdnYW1tYV9jdCcsICdnYXVzc19jdmYnLFxuICAgICdnYXVzc19wZGYnLCAnZ2F1c3Nfc21vb3RoJywgJ2dhdXNzMmRmaXQnLCAnZ2F1c3NmaXQnLFxuICAgICdnYXVzc2lhbl9mdW5jdGlvbicsICdnYXVzc2ludCcsICdnZXRfZHJpdmVfbGlzdCcsICdnZXRfZHhmX29iamVjdHMnLFxuICAgICdnZXRfa2JyZCcsICdnZXRfbG9naW5faW5mbycsXG4gICAgJ2dldF9sdW4nLCAnZ2V0X3NjcmVlbl9zaXplJywgJ2dldGVudicsICdnZXR3aW5kb3dzJywgJ2dyZWcyanVsJyxcbiAgICAnZ3JpYicsICdncmlkX2lucHV0JywgJ2dyaWRfdHBzJywgJ2dyaWQzJywgJ2dyaWRkYXRhJyxcbiAgICAnZ3NfaXRlcicsICdoX2VxX2N0JywgJ2hfZXFfaW50JywgJ2hhbm5pbmcnLCAnaGFzaCcsXG4gICAgJ2hkZicsICdoZGY1JywgJ2hlYXBfZnJlZScsICdoZWFwX2djJywgJ2hlYXBfbm9zYXZlJyxcbiAgICAnaGVhcF9yZWZjb3VudCcsICdoZWFwX3NhdmUnLCAnaGVscCcsICdoaWxiZXJ0JywgJ2hpc3RfMmQnLFxuICAgICdoaXN0X2VxdWFsJywgJ2hpc3RvZ3JhbScsICdobHMnLCAnaG91Z2gnLCAnaHFyJyxcbiAgICAnaHN2JywgJ2kxOG5fbXVsdGlieXRldG91dGY4JyxcbiAgICAnaTE4bl9tdWx0aWJ5dGV0b3dpZGVjaGFyJywgJ2kxOG5fdXRmOHRvbXVsdGlieXRlJyxcbiAgICAnaTE4bl93aWRlY2hhcnRvbXVsdGlieXRlJyxcbiAgICAnaWJldGEnLCAnaWNvbnRvdXInLCAnaWNvbnZlcnRjb29yZCcsICdpZGVsZXRlJywgJ2lkZW50aXR5JyxcbiAgICAnaWRsX2Jhc2U2NCcsICdpZGxfY29udGFpbmVyJywgJ2lkbF92YWxpZG5hbWUnLFxuICAgICdpZGxleGJyX2Fzc2lzdGFudCcsICdpZGxpdHN5c19jcmVhdGV0b29sJyxcbiAgICAnaWRsdW5pdCcsICdpZWxsaXBzZScsICdpZ2FtbWEnLCAnaWdldGN1cnJlbnQnLCAnaWdldGRhdGEnLFxuICAgICdpZ2V0aWQnLCAnaWdldHByb3BlcnR5JywgJ2lpbWFnZScsICdpbWFnZScsICdpbWFnZV9jb250JyxcbiAgICAnaW1hZ2Vfc3RhdGlzdGljcycsICdpbWFnZV90aHJlc2hvbGQnLCAnaW1hZ2luYXJ5JywgJ2ltYXAnLCAnaW5kZ2VuJyxcbiAgICAnaW50XzJkJywgJ2ludF8zZCcsICdpbnRfdGFidWxhdGVkJywgJ2ludGFycicsICdpbnRlcnBvbCcsXG4gICAgJ2ludGVycG9sYXRlJywgJ2ludGVydmFsX3ZvbHVtZScsICdpbnZlcnQnLCAnaW9jdGwnLCAnaW9wZW4nLFxuICAgICdpcl9maWx0ZXInLCAnaXBsb3QnLCAnaXBvbHlnb24nLCAnaXBvbHlsaW5lJywgJ2lwdXRkYXRhJyxcbiAgICAnaXJlZ2lzdGVyJywgJ2lyZXNldCcsICdpcmVzb2x2ZScsICdpcm90YXRlJywgJ2lzYScsXG4gICAgJ2lzYXZlJywgJ2lzY2FsZScsICdpc2V0Y3VycmVudCcsICdpc2V0cHJvcGVydHknLCAnaXNoZnQnLFxuICAgICdpc29jb250b3VyJywgJ2lzb3N1cmZhY2UnLCAnaXN1cmZhY2UnLCAnaXRleHQnLCAnaXRyYW5zbGF0ZScsXG4gICAgJ2l2ZWN0b3InLCAnaXZvbHVtZScsICdpem9vbScsICdqb3VybmFsJywgJ2pzb25fcGFyc2UnLFxuICAgICdqc29uX3NlcmlhbGl6ZScsICdqdWwyZ3JlZycsICdqdWxkYXknLCAna2V5d29yZF9zZXQnLCAna3JpZzJkJyxcbiAgICAna3VydG9zaXMnLCAna3dfdGVzdCcsICdsNjRpbmRnZW4nLCAnbGFfY2hvbGRjJywgJ2xhX2Nob2xtcHJvdmUnLFxuICAgICdsYV9jaG9sc29sJywgJ2xhX2RldGVybScsICdsYV9laWdlbnByb2JsZW0nLCAnbGFfZWlnZW5xbCcsICdsYV9laWdlbnZlYycsXG4gICAgJ2xhX2VsbWhlcycsICdsYV9nbV9saW5lYXJfbW9kZWwnLCAnbGFfaHFyJywgJ2xhX2ludmVydCcsXG4gICAgJ2xhX2xlYXN0X3NxdWFyZV9lcXVhbGl0eScsICdsYV9sZWFzdF9zcXVhcmVzJywgJ2xhX2xpbmVhcl9lcXVhdGlvbicsXG4gICAgJ2xhX2x1ZGMnLCAnbGFfbHVtcHJvdmUnLCAnbGFfbHVzb2wnLFxuICAgICdsYV9zdmQnLCAnbGFfdHJpZGMnLCAnbGFfdHJpbXByb3ZlJywgJ2xhX3RyaXFsJywgJ2xhX3RyaXJlZCcsXG4gICAgJ2xhX3RyaXNvbCcsICdsYWJlbF9kYXRlJywgJ2xhYmVsX3JlZ2lvbicsICdsYWRmaXQnLCAnbGFndWVycmUnLFxuICAgICdsYW1iZGEnLCAnbGFtYmRhcCcsICdsYW1iZXJ0dycsICdsYXBsYWNpYW4nLCAnbGVhc3Rfc3F1YXJlc19maWx0ZXInLFxuICAgICdsZWVmaWx0JywgJ2xlZ2VuZCcsICdsZWdlbmRyZScsICdsaW5iY2cnLCAnbGluZGdlbicsXG4gICAgJ2xpbmZpdCcsICdsaW5raW1hZ2UnLCAnbGlzdCcsICdsbF9hcmNfZGlzdGFuY2UnLCAnbG1maXQnLFxuICAgICdsbWdyJywgJ2xuZ2FtbWEnLCAnbG5wX3Rlc3QnLCAnbG9hZGN0JywgJ2xvY2FsZV9nZXQnLFxuICAgICdsb2dpY2FsX2FuZCcsICdsb2dpY2FsX29yJywgJ2xvZ2ljYWxfdHJ1ZScsICdsb242NGFycicsICdsb25hcnInLFxuICAgICdsb25nJywgJ2xvbmc2NCcsICdsc29kZScsICdsdV9jb21wbGV4JywgJ2x1ZGMnLFxuICAgICdsdW1wcm92ZScsICdsdXNvbCcsICdtX2NvcnJlbGF0ZScsICdtYWNoYXInLCAnbWFrZV9hcnJheScsXG4gICAgJ21ha2VfZGxsJywgJ21ha2VfcnQnLCAnbWFwJywgJ21hcGNvbnRpbmVudHMnLCAnbWFwZ3JpZCcsXG4gICAgJ21hcF8ycG9pbnRzJywgJ21hcF9jb250aW5lbnRzJywgJ21hcF9ncmlkJywgJ21hcF9pbWFnZScsICdtYXBfcGF0Y2gnLFxuICAgICdtYXBfcHJval9mb3J3YXJkJywgJ21hcF9wcm9qX2ltYWdlJywgJ21hcF9wcm9qX2luZm8nLFxuICAgICdtYXBfcHJval9pbml0JywgJ21hcF9wcm9qX2ludmVyc2UnLFxuICAgICdtYXBfc2V0JywgJ21hdHJpeF9tdWx0aXBseScsICdtYXRyaXhfcG93ZXInLCAnbWF4JywgJ21kX3Rlc3QnLFxuICAgICdtZWFuJywgJ21lYW5hYnNkZXYnLCAnbWVhbl9maWx0ZXInLCAnbWVkaWFuJywgJ21lbW9yeScsXG4gICAgJ21lc2hfY2xpcCcsICdtZXNoX2RlY2ltYXRlJywgJ21lc2hfaXNzb2xpZCcsXG4gICAgJ21lc2hfbWVyZ2UnLCAnbWVzaF9udW10cmlhbmdsZXMnLFxuICAgICdtZXNoX29iaicsICdtZXNoX3Ntb290aCcsICdtZXNoX3N1cmZhY2VhcmVhJyxcbiAgICAnbWVzaF92YWxpZGF0ZScsICdtZXNoX3ZvbHVtZScsXG4gICAgJ21lc3NhZ2UnLCAnbWluJywgJ21pbl9jdXJ2ZV9zdXJmJywgJ21rX2h0bWxfaGVscCcsICdtb2RpZnljdCcsXG4gICAgJ21vbWVudCcsICdtb3JwaF9jbG9zZScsICdtb3JwaF9kaXN0YW5jZScsXG4gICAgJ21vcnBoX2dyYWRpZW50JywgJ21vcnBoX2hpdG9ybWlzcycsXG4gICAgJ21vcnBoX29wZW4nLCAnbW9ycGhfdGhpbicsICdtb3JwaF90b3BoYXQnLCAnbXVsdGknLCAnbl9lbGVtZW50cycsXG4gICAgJ25fcGFyYW1zJywgJ25fdGFncycsICduY2RmJywgJ25ld3RvbicsICdub2lzZV9odXJsJyxcbiAgICAnbm9pc2VfcGljaycsICdub2lzZV9zY2F0dGVyJywgJ25vaXNlX3NsdXInLCAnbm9ybScsICdvYmpfY2xhc3MnLFxuICAgICdvYmpfZGVzdHJveScsICdvYmpfaGFzbWV0aG9kJywgJ29ial9pc2EnLCAnb2JqX25ldycsICdvYmpfdmFsaWQnLFxuICAgICdvYmphcnInLCAnb25fZXJyb3InLCAnb25faW9lcnJvcicsICdvbmxpbmVfaGVscCcsICdvcGVucicsXG4gICAgJ29wZW51JywgJ29wZW53JywgJ29wbG90JywgJ29wbG90ZXJyJywgJ29yZGVyZWRoYXNoJyxcbiAgICAncF9jb3JyZWxhdGUnLCAncGFyc2VfdXJsJywgJ3BhcnRpY2xlX3RyYWNlJywgJ3BhdGhfY2FjaGUnLCAncGF0aF9zZXAnLFxuICAgICdwY29tcCcsICdwbG90JywgJ3Bsb3QzZCcsICdwbG90JywgJ3Bsb3RfM2Rib3gnLFxuICAgICdwbG90X2ZpZWxkJywgJ3Bsb3RlcnInLCAncGxvdHMnLCAncG9sYXJfY29udG91cicsICdwb2xhcl9zdXJmYWNlJyxcbiAgICAncG9seWZpbGwnLCAncG9seXNoYWRlJywgJ3BudF9saW5lJywgJ3BvaW50X2x1bicsICdwb2xhcnBsb3QnLFxuICAgICdwb2x5JywgJ3BvbHlfMmQnLCAncG9seV9hcmVhJywgJ3BvbHlfZml0JywgJ3BvbHlmaWxsdicsXG4gICAgJ3BvbHlnb24nLCAncG9seWxpbmUnLCAncG9seXdhcnAnLCAncG9wZCcsICdwb3dlbGwnLFxuICAgICdwcmVmX2NvbW1pdCcsICdwcmVmX2dldCcsICdwcmVmX3NldCcsICdwcmV3aXR0JywgJ3ByaW1lcycsXG4gICAgJ3ByaW50JywgJ3ByaW50ZicsICdwcmludGQnLCAncHJvJywgJ3Byb2R1Y3QnLFxuICAgICdwcm9maWxlJywgJ3Byb2ZpbGVyJywgJ3Byb2ZpbGVzJywgJ3Byb2plY3Rfdm9sJywgJ3BzX3Nob3dfZm9udHMnLFxuICAgICdwc2FmbScsICdwc2V1ZG8nLCAncHRyX2ZyZWUnLCAncHRyX25ldycsICdwdHJfdmFsaWQnLFxuICAgICdwdHJhcnInLCAncHVzaGQnLCAncWdyaWQzJywgJ3FodWxsJywgJ3Fyb21iJyxcbiAgICAncXJvbW8nLCAncXNpbXAnLCAncXVlcnlfKicsICdxdWVyeV9hc2NpaScsICdxdWVyeV9ibXAnLFxuICAgICdxdWVyeV9jc3YnLCAncXVlcnlfZGljb20nLCAncXVlcnlfZ2lmJywgJ3F1ZXJ5X2ltYWdlJywgJ3F1ZXJ5X2pwZWcnLFxuICAgICdxdWVyeV9qcGVnMjAwMCcsICdxdWVyeV9tcnNpZCcsICdxdWVyeV9waWN0JywgJ3F1ZXJ5X3BuZycsICdxdWVyeV9wcG0nLFxuICAgICdxdWVyeV9zcmYnLCAncXVlcnlfdGlmZicsICdxdWVyeV92aWRlbycsICdxdWVyeV93YXYnLCAncl9jb3JyZWxhdGUnLFxuICAgICdyX3Rlc3QnLCAncmFkb24nLCAncmFuZG9tbicsICdyYW5kb211JywgJ3JhbmtzJyxcbiAgICAncmRwaXgnLCAncmVhZCcsICdyZWFkZicsICdyZWFkX2FzY2lpJywgJ3JlYWRfYmluYXJ5JyxcbiAgICAncmVhZF9ibXAnLCAncmVhZF9jc3YnLCAncmVhZF9kaWNvbScsICdyZWFkX2dpZicsICdyZWFkX2ltYWdlJyxcbiAgICAncmVhZF9pbnRlcmZpbGUnLCAncmVhZF9qcGVnJywgJ3JlYWRfanBlZzIwMDAnLCAncmVhZF9tcnNpZCcsICdyZWFkX3BpY3QnLFxuICAgICdyZWFkX3BuZycsICdyZWFkX3BwbScsICdyZWFkX3NwcicsICdyZWFkX3NyZicsICdyZWFkX3N5bGsnLFxuICAgICdyZWFkX3RpZmYnLCAncmVhZF92aWRlbycsICdyZWFkX3dhdicsICdyZWFkX3dhdmUnLCAncmVhZF94MTFfYml0bWFwJyxcbiAgICAncmVhZF94d2QnLCAncmVhZHMnLCAncmVhZHUnLCAncmVhbF9wYXJ0JywgJ3JlYmluJyxcbiAgICAncmVjYWxsX2NvbW1hbmRzJywgJ3JlY29uMycsICdyZWR1Y2VfY29sb3JzJywgJ3JlZm9ybScsICdyZWdpb25fZ3JvdycsXG4gICAgJ3JlZ2lzdGVyX2N1cnNvcicsICdyZWdyZXNzJywgJ3JlcGxpY2F0ZScsXG4gICAgJ3JlcGxpY2F0ZV9pbnBsYWNlJywgJ3Jlc29sdmVfYWxsJyxcbiAgICAncmVzb2x2ZV9yb3V0aW5lJywgJ3Jlc3RvcmUnLCAncmV0YWxsJywgJ3JldHVybicsICdyZXZlcnNlJyxcbiAgICAncms0JywgJ3JvYmVydHMnLCAncm90JywgJ3JvdGF0ZScsICdyb3VuZCcsXG4gICAgJ3JvdXRpbmVfZmlsZXBhdGgnLCAncm91dGluZV9pbmZvJywgJ3JzX3Rlc3QnLCAnc190ZXN0JywgJ3NhdmUnLFxuICAgICdzYXZnb2wnLCAnc2NhbGUzJywgJ3NjYWxlM2QnLCAnc2NhdHRlcnBsb3QnLCAnc2NhdHRlcnBsb3QzZCcsXG4gICAgJ3Njb3BlX2xldmVsJywgJ3Njb3BlX3RyYWNlYmFjaycsICdzY29wZV92YXJmZXRjaCcsXG4gICAgJ3Njb3BlX3Zhcm5hbWUnLCAnc2VhcmNoMmQnLFxuICAgICdzZWFyY2gzZCcsICdzZW1fY3JlYXRlJywgJ3NlbV9kZWxldGUnLCAnc2VtX2xvY2snLCAnc2VtX3JlbGVhc2UnLFxuICAgICdzZXRfcGxvdCcsICdzZXRfc2hhZGluZycsICdzZXRlbnYnLCAnc2ZpdCcsICdzaGFkZV9zdXJmJyxcbiAgICAnc2hhZGVfc3VyZl9pcnInLCAnc2hhZGVfdm9sdW1lJywgJ3NoaWZ0JywgJ3NoaWZ0X2RpZmYnLCAnc2htZGVidWcnLFxuICAgICdzaG1tYXAnLCAnc2htdW5tYXAnLCAnc2htdmFyJywgJ3Nob3czJywgJ3Nob3dmb250JyxcbiAgICAnc2lnbnVtJywgJ3NpbXBsZXgnLCAnc2luJywgJ3NpbmRnZW4nLCAnc2luaCcsXG4gICAgJ3NpemUnLCAnc2tld25lc3MnLCAnc2tpcF9sdW4nLCAnc2xpY2VyMycsICdzbGlkZV9pbWFnZScsXG4gICAgJ3Ntb290aCcsICdzb2JlbCcsICdzb2NrZXQnLCAnc29ydCcsICdzcGF3bicsXG4gICAgJ3NwaF80cG50JywgJ3NwaF9zY2F0JywgJ3NwaGVyX2hhcm0nLCAnc3BsX2luaXQnLCAnc3BsX2ludGVycCcsXG4gICAgJ3NwbGluZScsICdzcGxpbmVfcCcsICdzcHJzYWInLCAnc3Byc2F4JywgJ3NwcnNpbicsXG4gICAgJ3NwcnN0cCcsICdzcXJ0JywgJ3N0YW5kYXJkaXplJywgJ3N0ZGRldicsICdzdG9wJyxcbiAgICAnc3RyYXJyJywgJ3N0cmNtcCcsICdzdHJjb21wcmVzcycsICdzdHJlYW1saW5lJywgJ3N0cmVhbWxpbmUnLFxuICAgICdzdHJlZ2V4JywgJ3N0cmV0Y2gnLCAnc3RyaW5nJywgJ3N0cmpvaW4nLCAnc3RybGVuJyxcbiAgICAnc3RybG93Y2FzZScsICdzdHJtYXRjaCcsICdzdHJtZXNzYWdlJywgJ3N0cm1pZCcsICdzdHJwb3MnLFxuICAgICdzdHJwdXQnLCAnc3Ryc3BsaXQnLCAnc3RydHJpbScsICdzdHJ1Y3RfYXNzaWduJywgJ3N0cnVjdF9oaWRlJyxcbiAgICAnc3RydXBjYXNlJywgJ3N1cmZhY2UnLCAnc3VyZmFjZScsICdzdXJmcicsICdzdmRjJyxcbiAgICAnc3ZkZml0JywgJ3N2c29sJywgJ3N3YXBfZW5kaWFuJywgJ3N3YXBfZW5kaWFuX2lucGxhY2UnLCAnc3ltYm9sJyxcbiAgICAnc3lzdGltZScsICd0X2N2ZicsICd0X3BkZicsICd0M2QnLCAndGFnX25hbWVzJyxcbiAgICAndGFuJywgJ3RhbmgnLCAndGVrX2NvbG9yJywgJ3RlbXBvcmFyeScsICd0ZXJtaW5hbF9zaXplJyxcbiAgICAndGV0cmFfY2xpcCcsICd0ZXRyYV9zdXJmYWNlJywgJ3RldHJhX3ZvbHVtZScsICd0ZXh0JywgJ3RoaW4nLFxuICAgICd0aHJlYWQnLCAndGhyZWVkJywgJ3RpYycsICd0aW1lX3Rlc3QyJywgJ3RpbWVnZW4nLFxuICAgICd0aW1lcicsICd0aW1lc3RhbXAnLCAndGltZXN0YW1wdG92YWx1ZXMnLCAndG1fdGVzdCcsICd0b2MnLFxuICAgICd0b3RhbCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAndHJpX3N1cmYnLCAndHJpYW5ndWxhdGUnLFxuICAgICd0cmlncmlkJywgJ3RyaXFsJywgJ3RyaXJlZCcsICd0cmlzb2wnLCAndHJ1bmNhdGVfbHVuJyxcbiAgICAndHNfY29lZicsICd0c19kaWZmJywgJ3RzX2ZjYXN0JywgJ3RzX3Ntb290aCcsICd0dicsXG4gICAgJ3R2Y3JzJywgJ3R2bGN0JywgJ3R2cmQnLCAndHZzY2wnLCAndHlwZW5hbWUnLFxuICAgICd1aW5kZ2VuJywgJ3VpbnQnLCAndWludGFycicsICd1bDY0aW5kZ2VuJywgJ3VsaW5kZ2VuJyxcbiAgICAndWxvbjY0YXJyJywgJ3Vsb25hcnInLCAndWxvbmcnLCAndWxvbmc2NCcsICd1bmlxJyxcbiAgICAndW5zaGFycF9tYXNrJywgJ3VzZXJzeW0nLCAndmFsdWVfbG9jYXRlJywgJ3ZhcmlhbmNlJywgJ3ZlY3RvcicsXG4gICAgJ3ZlY3Rvcl9maWVsZCcsICd2ZWwnLCAndmVsb3ZlY3QnLCAndmVydF90M2QnLCAndm9pZ3QnLFxuICAgICd2b2x1bWUnLCAndm9yb25vaScsICd2b3hlbF9wcm9qJywgJ3dhaXQnLCAnd2FycF90cmknLFxuICAgICd3YXRlcnNoZWQnLCAnd2RlbGV0ZScsICd3Zl9kcmF3JywgJ3doZXJlJywgJ3dpZGdldF9iYXNlJyxcbiAgICAnd2lkZ2V0X2J1dHRvbicsICd3aWRnZXRfY29tYm9ib3gnLCAnd2lkZ2V0X2NvbnRyb2wnLFxuICAgICd3aWRnZXRfZGlzcGxheWNvbnRleHRtZW51JywgJ3dpZGdldF9kcmF3JyxcbiAgICAnd2lkZ2V0X2Ryb3BsaXN0JywgJ3dpZGdldF9ldmVudCcsICd3aWRnZXRfaW5mbycsXG4gICAgJ3dpZGdldF9sYWJlbCcsICd3aWRnZXRfbGlzdCcsXG4gICAgJ3dpZGdldF9wcm9wZXJ0eXNoZWV0JywgJ3dpZGdldF9zbGlkZXInLCAnd2lkZ2V0X3RhYicsXG4gICAgJ3dpZGdldF90YWJsZScsICd3aWRnZXRfdGV4dCcsXG4gICAgJ3dpZGdldF90cmVlJywgJ3dpZGdldF90cmVlX21vdmUnLCAnd2lkZ2V0X3dpbmRvdycsXG4gICAgJ3dpZW5lcl9maWx0ZXInLCAnd2luZG93JyxcbiAgICAnd2luZG93JywgJ3dyaXRlX2JtcCcsICd3cml0ZV9jc3YnLCAnd3JpdGVfZ2lmJywgJ3dyaXRlX2ltYWdlJyxcbiAgICAnd3JpdGVfanBlZycsICd3cml0ZV9qcGVnMjAwMCcsICd3cml0ZV9ucmlmJywgJ3dyaXRlX3BpY3QnLCAnd3JpdGVfcG5nJyxcbiAgICAnd3JpdGVfcHBtJywgJ3dyaXRlX3NwcicsICd3cml0ZV9zcmYnLCAnd3JpdGVfc3lsaycsICd3cml0ZV90aWZmJyxcbiAgICAnd3JpdGVfdmlkZW8nLCAnd3JpdGVfd2F2JywgJ3dyaXRlX3dhdmUnLCAnd3JpdGV1JywgJ3dzZXQnLFxuICAgICd3c2hvdycsICd3dG4nLCAnd3ZfYXBwbGV0JywgJ3d2X2N3dCcsICd3dl9jd193YXZlbGV0JyxcbiAgICAnd3ZfZGVub2lzZScsICd3dl9kd3QnLCAnd3ZfZm5fY29pZmxldCcsXG4gICAgJ3d2X2ZuX2RhdWJlY2hpZXMnLCAnd3ZfZm5fZ2F1c3NpYW4nLFxuICAgICd3dl9mbl9oYWFyJywgJ3d2X2ZuX21vcmxldCcsICd3dl9mbl9wYXVsJyxcbiAgICAnd3ZfZm5fc3ltbGV0JywgJ3d2X2ltcG9ydF9kYXRhJyxcbiAgICAnd3ZfaW1wb3J0X3dhdmVsZXQnLCAnd3ZfcGxvdDNkX3dwcycsICd3dl9wbG90X211bHRpcmVzJyxcbiAgICAnd3ZfcHd0JywgJ3d2X3Rvb2xfZGVub2lzZScsXG4gICAgJ3hibV9lZGl0JywgJ3hkaXNwbGF5ZmlsZScsICd4ZHhmJywgJ3hmb250JywgJ3hpbnRlcmFuaW1hdGUnLFxuICAgICd4bG9hZGN0JywgJ3htYW5hZ2VyJywgJ3htbmdfdG1wbCcsICd4bXRvb2wnLCAneG9ianZpZXcnLFxuICAgICd4b2Jqdmlld19yb3RhdGUnLCAneG9ianZpZXdfd3JpdGVfaW1hZ2UnLFxuICAgICd4cGFsZXR0ZScsICd4cGNvbG9yJywgJ3hwbG90M2QnLFxuICAgICd4cmVnaXN0ZXJlZCcsICd4cm9pJywgJ3hzcV90ZXN0JywgJ3hzdXJmYWNlJywgJ3h2YXJlZGl0JyxcbiAgICAneHZvbHVtZScsICd4dm9sdW1lX3JvdGF0ZScsICd4dm9sdW1lX3dyaXRlX2ltYWdlJyxcbiAgICAneHlvdXRzJywgJ3psaWJfY29tcHJlc3MnLCAnemxpYl91bmNvbXByZXNzJywgJ3pvb20nLCAnem9vbV8yNCdcbiAgXTtcbiAgdmFyIGJ1aWx0aW5zID0gd29yZFJlZ2V4cChidWlsdGluQXJyYXkpO1xuXG4gIHZhciBrZXl3b3JkQXJyYXkgPSBbXG4gICAgJ2JlZ2luJywgJ2VuZCcsICdlbmRjYXNlJywgJ2VuZGZvcicsXG4gICAgJ2VuZHdoaWxlJywgJ2VuZGlmJywgJ2VuZHJlcCcsICdlbmRmb3JlYWNoJyxcbiAgICAnYnJlYWsnLCAnY2FzZScsICdjb250aW51ZScsICdmb3InLFxuICAgICdmb3JlYWNoJywgJ2dvdG8nLCAnaWYnLCAndGhlbicsICdlbHNlJyxcbiAgICAncmVwZWF0JywgJ3VudGlsJywgJ3N3aXRjaCcsICd3aGlsZScsXG4gICAgJ2RvJywgJ3BybycsICdmdW5jdGlvbidcbiAgXTtcbiAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChrZXl3b3JkQXJyYXkpO1xuXG4gIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJoaW50V29yZHNcIiwgXCJpZGxcIiwgYnVpbHRpbkFycmF5LmNvbmNhdChrZXl3b3JkQXJyYXkpKTtcblxuICB2YXIgaWRlbnRpZmllcnMgPSBuZXcgUmVnRXhwKCdeW19hLXpcXHhhMS1cXHVmZmZmXVtfYS16MC05XFx4YTEtXFx1ZmZmZl0qJywgJ2knKTtcblxuICB2YXIgc2luZ2xlT3BlcmF0b3JzID0gL1srXFwtKiY9PD5cXC9AI34kXS87XG4gIHZhciBib29sT3BlcmF0b3JzID0gbmV3IFJlZ0V4cCgnKGFuZHxvcnxlcXxsdHxsZXxndHxnZXxuZXxub3QpJywgJ2knKTtcblxuICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtKSB7XG4gICAgLy8gd2hpdGVzcGFjZXNcbiAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuXG4gICAgLy8gSGFuZGxlIG9uZSBsaW5lIENvbW1lbnRzXG4gICAgaWYgKHN0cmVhbS5tYXRjaCgnOycpKSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gJ2NvbW1lbnQnO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBOdW1iZXIgTGl0ZXJhbHNcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eWzAtOVxcListXS8sIGZhbHNlKSkge1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlsrLV0/MHhbMC05YS1mQS1GXSsvKSlcbiAgICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlsrLV0/XFxkKlxcLlxcZCsoW0VlRGRdWystXT9cXGQrKT8vKSlcbiAgICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlsrLV0/XFxkKyhbRWVEZF1bKy1dP1xcZCspPy8pKVxuICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIFN0cmluZ3NcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXCIoW15cIl18KFwiXCIpKSpcIi8pKSB7IHJldHVybiAnc3RyaW5nJzsgfVxuICAgIGlmIChzdHJlYW0ubWF0Y2goL14nKFteJ118KCcnKSkqJy8pKSB7IHJldHVybiAnc3RyaW5nJzsgfVxuXG4gICAgLy8gSGFuZGxlIHdvcmRzXG4gICAgaWYgKHN0cmVhbS5tYXRjaChrZXl3b3JkcykpIHsgcmV0dXJuICdrZXl3b3JkJzsgfVxuICAgIGlmIChzdHJlYW0ubWF0Y2goYnVpbHRpbnMpKSB7IHJldHVybiAnYnVpbHRpbic7IH1cbiAgICBpZiAoc3RyZWFtLm1hdGNoKGlkZW50aWZpZXJzKSkgeyByZXR1cm4gJ3ZhcmlhYmxlJzsgfVxuXG4gICAgaWYgKHN0cmVhbS5tYXRjaChzaW5nbGVPcGVyYXRvcnMpIHx8IHN0cmVhbS5tYXRjaChib29sT3BlcmF0b3JzKSkge1xuICAgICAgcmV0dXJuICdvcGVyYXRvcic7IH1cblxuICAgIC8vIEhhbmRsZSBub24tZGV0ZWN0ZWQgaXRlbXNcbiAgICBzdHJlYW0ubmV4dCgpO1xuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgnaWRsJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIHRva2VuQmFzZShzdHJlYW0pO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LWlkbCcsICdpZGwnKTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiamluamEyXCIsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXl3b3JkcyA9IFtcImFuZFwiLCBcImFzXCIsIFwiYmxvY2tcIiwgXCJlbmRibG9ja1wiLCBcImJ5XCIsIFwiY3ljbGVcIiwgXCJkZWJ1Z1wiLCBcImVsc2VcIiwgXCJlbGlmXCIsXG4gICAgICBcImV4dGVuZHNcIiwgXCJmaWx0ZXJcIiwgXCJlbmRmaWx0ZXJcIiwgXCJmaXJzdG9mXCIsIFwiZm9yXCIsXG4gICAgICBcImVuZGZvclwiLCBcImlmXCIsIFwiZW5kaWZcIiwgXCJpZmNoYW5nZWRcIiwgXCJlbmRpZmNoYW5nZWRcIixcbiAgICAgIFwiaWZlcXVhbFwiLCBcImVuZGlmZXF1YWxcIiwgXCJpZm5vdGVxdWFsXCIsXG4gICAgICBcImVuZGlmbm90ZXF1YWxcIiwgXCJpblwiLCBcImluY2x1ZGVcIiwgXCJsb2FkXCIsIFwibm90XCIsIFwibm93XCIsIFwib3JcIixcbiAgICAgIFwicGFyc2VkXCIsIFwicmVncm91cFwiLCBcInJldmVyc2VkXCIsIFwic3BhY2VsZXNzXCIsXG4gICAgICBcImVuZHNwYWNlbGVzc1wiLCBcInNzaVwiLCBcInRlbXBsYXRldGFnXCIsIFwib3BlbmJsb2NrXCIsXG4gICAgICBcImNsb3NlYmxvY2tcIiwgXCJvcGVudmFyaWFibGVcIiwgXCJjbG9zZXZhcmlhYmxlXCIsXG4gICAgICBcIm9wZW5icmFjZVwiLCBcImNsb3NlYnJhY2VcIiwgXCJvcGVuY29tbWVudFwiLFxuICAgICAgXCJjbG9zZWNvbW1lbnRcIiwgXCJ3aWR0aHJhdGlvXCIsIFwidXJsXCIsIFwid2l0aFwiLCBcImVuZHdpdGhcIixcbiAgICAgIFwiZ2V0X2N1cnJlbnRfbGFuZ3VhZ2VcIiwgXCJ0cmFuc1wiLCBcImVuZHRyYW5zXCIsIFwibm9vcFwiLCBcImJsb2NrdHJhbnNcIixcbiAgICAgIFwiZW5kYmxvY2t0cmFuc1wiLCBcImdldF9hdmFpbGFibGVfbGFuZ3VhZ2VzXCIsXG4gICAgICBcImdldF9jdXJyZW50X2xhbmd1YWdlX2JpZGlcIiwgXCJwbHVyYWxcIl0sXG4gICAgb3BlcmF0b3IgPSAvXlsrXFwtKiYlPTw+IT98fl5dLyxcbiAgICBzaWduID0gL15bOlxcW1xcKFxce10vLFxuICAgIGF0b20gPSBbXCJ0cnVlXCIsIFwiZmFsc2VcIl0sXG4gICAgbnVtYmVyID0gL14oXFxkWytcXC1cXCpcXC9dKT9cXGQrKFxcLlxcZCspPy87XG5cbiAgICBrZXl3b3JkcyA9IG5ldyBSZWdFeHAoXCIoKFwiICsga2V5d29yZHMuam9pbihcIil8KFwiKSArIFwiKSlcXFxcYlwiKTtcbiAgICBhdG9tID0gbmV3IFJlZ0V4cChcIigoXCIgKyBhdG9tLmpvaW4oXCIpfChcIikgKyBcIikpXFxcXGJcIik7XG5cbiAgICBmdW5jdGlvbiB0b2tlbkJhc2UgKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7XG5cbiAgICAgIC8vQ29tbWVudFxuICAgICAgaWYgKHN0YXRlLmluY29tbWVudCkge1xuICAgICAgICBpZighc3RyZWFtLnNraXBUbyhcIiN9XCIpKSB7XG4gICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXFwjfH0vKTtcbiAgICAgICAgICBzdGF0ZS5pbmNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAvL1RhZ1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5pbnRhZykge1xuICAgICAgICAvL0FmdGVyIG9wZXJhdG9yXG4gICAgICAgIGlmKHN0YXRlLm9wZXJhdG9yKSB7XG4gICAgICAgICAgc3RhdGUub3BlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICBpZihzdHJlYW0ubWF0Y2goYXRvbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoc3RyZWFtLm1hdGNoKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL0FmdGVyIHNpZ25cbiAgICAgICAgaWYoc3RhdGUuc2lnbikge1xuICAgICAgICAgIHN0YXRlLnNpZ24gPSBmYWxzZTtcbiAgICAgICAgICBpZihzdHJlYW0ubWF0Y2goYXRvbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoc3RyZWFtLm1hdGNoKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHN0YXRlLmluc3RyaW5nKSB7XG4gICAgICAgICAgaWYoY2ggPT0gc3RhdGUuaW5zdHJpbmcpIHtcbiAgICAgICAgICAgIHN0YXRlLmluc3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICAgIH0gZWxzZSBpZihjaCA9PSBcIidcIiB8fCBjaCA9PSAnXCInKSB7XG4gICAgICAgICAgc3RhdGUuaW5zdHJpbmcgPSBjaDtcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgICB9IGVsc2UgaWYoc3RyZWFtLm1hdGNoKHN0YXRlLmludGFnICsgXCJ9XCIpIHx8IHN0cmVhbS5lYXQoXCItXCIpICYmIHN0cmVhbS5tYXRjaChzdGF0ZS5pbnRhZyArIFwifVwiKSkge1xuICAgICAgICAgIHN0YXRlLmludGFnID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICAgIH0gZWxzZSBpZihzdHJlYW0ubWF0Y2gob3BlcmF0b3IpKSB7XG4gICAgICAgICAgc3RhdGUub3BlcmF0b3IgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgICAgIH0gZWxzZSBpZihzdHJlYW0ubWF0Y2goc2lnbikpIHtcbiAgICAgICAgICBzdGF0ZS5zaWduID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZihzdHJlYW0uZWF0KFwiIFwiKSB8fCBzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgICAgIGlmKHN0cmVhbS5tYXRjaChrZXl3b3JkcykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoc3RyZWFtLm1hdGNoKGF0b20pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHN0cmVhbS5tYXRjaChudW1iZXIpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcIntcIikpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCIjXCIpKSB7XG4gICAgICAgICAgc3RhdGUuaW5jb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICBpZighc3RyZWFtLnNraXBUbyhcIiN9XCIpKSB7XG4gICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXFwjfH0vKTtcbiAgICAgICAgICAgIHN0YXRlLmluY29tbWVudCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAgIC8vT3BlbiB0YWdcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9IHN0cmVhbS5lYXQoL1xce3wlLykpIHtcbiAgICAgICAgICAvL0NhY2hlIGNsb3NlIHRhZ1xuICAgICAgICAgIHN0YXRlLmludGFnID0gY2g7XG4gICAgICAgICAgaWYoY2ggPT0gXCJ7XCIpIHtcbiAgICAgICAgICAgIHN0YXRlLmludGFnID0gXCJ9XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0cmVhbS5lYXQoXCItXCIpO1xuICAgICAgICAgIHJldHVybiBcInRhZ1wiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2V9O1xuICAgICAgfSxcbiAgICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9LFxuICAgICAgYmxvY2tDb21tZW50U3RhcnQ6IFwieyNcIixcbiAgICAgIGJsb2NrQ29tbWVudEVuZDogXCIjfVwiXG4gICAgfTtcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC9qaW5qYTJcIiwgXCJqaW5qYTJcIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi94bWwveG1sXCIpLCByZXF1aXJlKFwiLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0XCIpKVxuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi94bWwveG1sXCIsIFwiLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0XCJdLCBtb2QpXG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcilcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCJcblxuICAvLyBEZXB0aCBtZWFucyB0aGUgYW1vdW50IG9mIG9wZW4gYnJhY2VzIGluIEpTIGNvbnRleHQsIGluIFhNTFxuICAvLyBjb250ZXh0IDAgbWVhbnMgbm90IGluIHRhZywgMSBtZWFucyBpbiB0YWcsIGFuZCAyIG1lYW5zIGluIHRhZ1xuICAvLyBhbmQganMgYmxvY2sgY29tbWVudC5cbiAgZnVuY3Rpb24gQ29udGV4dChzdGF0ZSwgbW9kZSwgZGVwdGgsIHByZXYpIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7IHRoaXMubW9kZSA9IG1vZGU7IHRoaXMuZGVwdGggPSBkZXB0aDsgdGhpcy5wcmV2ID0gcHJldlxuICB9XG5cbiAgZnVuY3Rpb24gY29weUNvbnRleHQoY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgQ29udGV4dChDb2RlTWlycm9yLmNvcHlTdGF0ZShjb250ZXh0Lm1vZGUsIGNvbnRleHQuc3RhdGUpLFxuICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVwdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJldiAmJiBjb3B5Q29udGV4dChjb250ZXh0LnByZXYpKVxuICB9XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwianN4XCIsIGZ1bmN0aW9uKGNvbmZpZywgbW9kZUNvbmZpZykge1xuICAgIHZhciB4bWxNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywge25hbWU6IFwieG1sXCIsIGFsbG93TWlzc2luZzogdHJ1ZSwgbXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZzogZmFsc2UsIGFsbG93TWlzc2luZ1RhZ05hbWU6IHRydWV9KVxuICAgIHZhciBqc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBtb2RlQ29uZmlnICYmIG1vZGVDb25maWcuYmFzZSB8fCBcImphdmFzY3JpcHRcIilcblxuICAgIGZ1bmN0aW9uIGZsYXRYTUxJbmRlbnQoc3RhdGUpIHtcbiAgICAgIHZhciB0YWdOYW1lID0gc3RhdGUudGFnTmFtZVxuICAgICAgc3RhdGUudGFnTmFtZSA9IG51bGxcbiAgICAgIHZhciByZXN1bHQgPSB4bWxNb2RlLmluZGVudChzdGF0ZSwgXCJcIiwgXCJcIilcbiAgICAgIHN0YXRlLnRhZ05hbWUgPSB0YWdOYW1lXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW4oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLmNvbnRleHQubW9kZSA9PSB4bWxNb2RlKVxuICAgICAgICByZXR1cm4geG1sVG9rZW4oc3RyZWFtLCBzdGF0ZSwgc3RhdGUuY29udGV4dClcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGpzVG9rZW4oc3RyZWFtLCBzdGF0ZSwgc3RhdGUuY29udGV4dClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB4bWxUb2tlbihzdHJlYW0sIHN0YXRlLCBjeCkge1xuICAgICAgaWYgKGN4LmRlcHRoID09IDIpIHsgLy8gSW5zaWRlIGEgSlMgLyogKi8gY29tbWVudFxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLio/XFwqXFwvLykpIGN4LmRlcHRoID0gMVxuICAgICAgICBlbHNlIHN0cmVhbS5za2lwVG9FbmQoKVxuICAgICAgICByZXR1cm4gXCJjb21tZW50XCJcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gXCJ7XCIpIHtcbiAgICAgICAgeG1sTW9kZS5za2lwQXR0cmlidXRlKGN4LnN0YXRlKVxuXG4gICAgICAgIHZhciBpbmRlbnQgPSBmbGF0WE1MSW5kZW50KGN4LnN0YXRlKSwgeG1sQ29udGV4dCA9IGN4LnN0YXRlLmNvbnRleHRcbiAgICAgICAgLy8gSWYgSlMgc3RhcnRzIG9uIHNhbWUgbGluZSBhcyB0YWdcbiAgICAgICAgaWYgKHhtbENvbnRleHQgJiYgc3RyZWFtLm1hdGNoKC9eW14+XSo+XFxzKiQvLCBmYWxzZSkpIHtcbiAgICAgICAgICB3aGlsZSAoeG1sQ29udGV4dC5wcmV2ICYmICF4bWxDb250ZXh0LnN0YXJ0T2ZMaW5lKVxuICAgICAgICAgICAgeG1sQ29udGV4dCA9IHhtbENvbnRleHQucHJldlxuICAgICAgICAgIC8vIElmIHRhZyBzdGFydHMgdGhlIGxpbmUsIHVzZSBYTUwgaW5kZW50YXRpb24gbGV2ZWxcbiAgICAgICAgICBpZiAoeG1sQ29udGV4dC5zdGFydE9mTGluZSkgaW5kZW50IC09IGNvbmZpZy5pbmRlbnRVbml0XG4gICAgICAgICAgLy8gRWxzZSB1c2UgSlMgaW5kZW50YXRpb24gbGV2ZWxcbiAgICAgICAgICBlbHNlIGlmIChjeC5wcmV2LnN0YXRlLmxleGljYWwpIGluZGVudCA9IGN4LnByZXYuc3RhdGUubGV4aWNhbC5pbmRlbnRlZFxuICAgICAgICAvLyBFbHNlIGlmIGluc2lkZSBvZiB0YWdcbiAgICAgICAgfSBlbHNlIGlmIChjeC5kZXB0aCA9PSAxKSB7XG4gICAgICAgICAgaW5kZW50ICs9IGNvbmZpZy5pbmRlbnRVbml0XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoQ29kZU1pcnJvci5zdGFydFN0YXRlKGpzTW9kZSwgaW5kZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzTW9kZSwgMCwgc3RhdGUuY29udGV4dClcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgaWYgKGN4LmRlcHRoID09IDEpIHsgLy8gSW5zaWRlIG9mIHRhZ1xuICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSBcIjxcIikgeyAvLyBUYWcgaW5zaWRlIG9mIHRhZ1xuICAgICAgICAgIHhtbE1vZGUuc2tpcEF0dHJpYnV0ZShjeC5zdGF0ZSlcbiAgICAgICAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoQ29kZU1pcnJvci5zdGFydFN0YXRlKHhtbE1vZGUsIGZsYXRYTUxJbmRlbnQoY3guc3RhdGUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sTW9kZSwgMCwgc3RhdGUuY29udGV4dClcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChcIi8vXCIpKSB7XG4gICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpXG4gICAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiXG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKFwiLypcIikpIHtcbiAgICAgICAgICBjeC5kZXB0aCA9IDJcbiAgICAgICAgICByZXR1cm4gdG9rZW4oc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc3R5bGUgPSB4bWxNb2RlLnRva2VuKHN0cmVhbSwgY3guc3RhdGUpLCBjdXIgPSBzdHJlYW0uY3VycmVudCgpLCBzdG9wXG4gICAgICBpZiAoL1xcYnRhZ1xcYi8udGVzdChzdHlsZSkpIHtcbiAgICAgICAgaWYgKC8+JC8udGVzdChjdXIpKSB7XG4gICAgICAgICAgaWYgKGN4LnN0YXRlLmNvbnRleHQpIGN4LmRlcHRoID0gMFxuICAgICAgICAgIGVsc2Ugc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldlxuICAgICAgICB9IGVsc2UgaWYgKC9ePC8udGVzdChjdXIpKSB7XG4gICAgICAgICAgY3guZGVwdGggPSAxXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0eWxlICYmIChzdG9wID0gY3VyLmluZGV4T2YoXCJ7XCIpKSA+IC0xKSB7XG4gICAgICAgIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCAtIHN0b3ApXG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGVcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBqc1Rva2VuKHN0cmVhbSwgc3RhdGUsIGN4KSB7XG4gICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSBcIjxcIiAmJiBqc01vZGUuZXhwcmVzc2lvbkFsbG93ZWQoc3RyZWFtLCBjeC5zdGF0ZSkpIHtcbiAgICAgICAganNNb2RlLnNraXBFeHByZXNzaW9uKGN4LnN0YXRlKVxuICAgICAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoQ29kZU1pcnJvci5zdGFydFN0YXRlKHhtbE1vZGUsIGpzTW9kZS5pbmRlbnQoY3guc3RhdGUsIFwiXCIsIFwiXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbE1vZGUsIDAsIHN0YXRlLmNvbnRleHQpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHZhciBzdHlsZSA9IGpzTW9kZS50b2tlbihzdHJlYW0sIGN4LnN0YXRlKVxuICAgICAgaWYgKCFzdHlsZSAmJiBjeC5kZXB0aCAhPSBudWxsKSB7XG4gICAgICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpXG4gICAgICAgIGlmIChjdXIgPT0gXCJ7XCIpIHtcbiAgICAgICAgICBjeC5kZXB0aCsrXG4gICAgICAgIH0gZWxzZSBpZiAoY3VyID09IFwifVwiKSB7XG4gICAgICAgICAgaWYgKC0tY3guZGVwdGggPT0gMCkgc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGVcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7Y29udGV4dDogbmV3IENvbnRleHQoQ29kZU1pcnJvci5zdGFydFN0YXRlKGpzTW9kZSksIGpzTW9kZSl9XG4gICAgICB9LFxuXG4gICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICAgIHJldHVybiB7Y29udGV4dDogY29weUNvbnRleHQoc3RhdGUuY29udGV4dCl9XG4gICAgICB9LFxuXG4gICAgICB0b2tlbjogdG9rZW4sXG5cbiAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlciwgZnVsbExpbmUpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQubW9kZS5pbmRlbnQoc3RhdGUuY29udGV4dC5zdGF0ZSwgdGV4dEFmdGVyLCBmdWxsTGluZSlcbiAgICAgIH0sXG5cbiAgICAgIGlubmVyTW9kZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLmNvbnRleHRcbiAgICAgIH1cbiAgICB9XG4gIH0sIFwieG1sXCIsIFwiamF2YXNjcmlwdFwiKVxuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvanN4XCIsIFwianN4XCIpXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvdHlwZXNjcmlwdC1qc3hcIiwge25hbWU6IFwianN4XCIsIGJhc2U6IHtuYW1lOiBcImphdmFzY3JpcHRcIiwgdHlwZXNjcmlwdDogdHJ1ZX19KVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImp1bGlhXCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZikge1xuICBmdW5jdGlvbiB3b3JkUmVnZXhwKHdvcmRzLCBlbmQpIHtcbiAgICBpZiAodHlwZW9mIGVuZCA9PT0gXCJ1bmRlZmluZWRcIikgeyBlbmQgPSBcIlxcXFxiXCI7IH1cbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oKFwiICsgd29yZHMuam9pbihcIil8KFwiKSArIFwiKSlcIiArIGVuZCk7XG4gIH1cblxuICB2YXIgb2N0Q2hhciA9IFwiXFxcXFxcXFxbMC03XXsxLDN9XCI7XG4gIHZhciBoZXhDaGFyID0gXCJcXFxcXFxcXHhbQS1GYS1mMC05XXsxLDJ9XCI7XG4gIHZhciBzQ2hhciA9IFwiXFxcXFxcXFxbYWJlZm5ydHYwJT8nXFxcIlxcXFxcXFxcXVwiO1xuICB2YXIgdUNoYXIgPSBcIihbXlxcXFx1MDAyN1xcXFx1MDA1Q1xcXFx1RDgwMC1cXFxcdURGRkZdfFtcXFxcdUQ4MDAtXFxcXHVERkZGXVtcXFxcdURDMDAtXFxcXHVERkZGXSlcIjtcblxuICB2YXIgb3BlcmF0b3JzID0gcGFyc2VyQ29uZi5vcGVyYXRvcnMgfHwgd29yZFJlZ2V4cChbXG4gICAgICAgIFwiWzw+XTpcIiwgXCJbPD49XT1cIiwgXCI8PD0/XCIsIFwiPj4+Pz0/XCIsIFwiPT5cIiwgXCItPlwiLCBcIlxcXFwvXFxcXC9cIixcbiAgICAgICAgXCJbXFxcXFxcXFwlKitcXFxcLTw+IT1cXFxcL158JlxcXFx1MDBGN1xcXFx1MjJCQl09P1wiLCBcIlxcXFw/XCIsIFwiXFxcXCRcIiwgXCJ+XCIsIFwiOlwiLFxuICAgICAgICBcIlxcXFx1MDBEN1wiLCBcIlxcXFx1MjIwOFwiLCBcIlxcXFx1MjIwOVwiLCBcIlxcXFx1MjIwQlwiLCBcIlxcXFx1MjIwQ1wiLCBcIlxcXFx1MjIxOFwiLFxuICAgICAgICBcIlxcXFx1MjIxQVwiLCBcIlxcXFx1MjIxQlwiLCBcIlxcXFx1MjIyOVwiLCBcIlxcXFx1MjIyQVwiLCBcIlxcXFx1MjI2MFwiLCBcIlxcXFx1MjI2NFwiLFxuICAgICAgICBcIlxcXFx1MjI2NVwiLCBcIlxcXFx1MjI4NlwiLCBcIlxcXFx1MjI4OFwiLCBcIlxcXFx1MjI4QVwiLCBcIlxcXFx1MjJDNVwiLFxuICAgICAgICBcIlxcXFxiKGlufGlzYSlcXFxcYig/IVxcLj9cXFxcKClcIl0sIFwiXCIpO1xuICB2YXIgZGVsaW1pdGVycyA9IHBhcnNlckNvbmYuZGVsaW1pdGVycyB8fCAvXls7LCgpW1xcXXt9XS87XG4gIHZhciBpZGVudGlmaWVycyA9IHBhcnNlckNvbmYuaWRlbnRpZmllcnMgfHxcbiAgICAgICAgL15bX0EtWmEtelxcdTAwQTEtXFx1MjIxN1xcdTIyMTktXFx1RkZGRl1bXFx3XFx1MDBBMS1cXHUyMjE3XFx1MjIxOS1cXHVGRkZGXSohKi87XG5cbiAgdmFyIGNoYXJzID0gd29yZFJlZ2V4cChbb2N0Q2hhciwgaGV4Q2hhciwgc0NoYXIsIHVDaGFyXSwgXCInXCIpO1xuXG4gIHZhciBvcGVuZXJzTGlzdCA9IFtcImJlZ2luXCIsIFwiZnVuY3Rpb25cIiwgXCJ0eXBlXCIsIFwic3RydWN0XCIsIFwiaW1tdXRhYmxlXCIsIFwibGV0XCIsXG4gICAgICAgIFwibWFjcm9cIiwgXCJmb3JcIiwgXCJ3aGlsZVwiLCBcInF1b3RlXCIsIFwiaWZcIiwgXCJlbHNlXCIsIFwiZWxzZWlmXCIsIFwidHJ5XCIsXG4gICAgICAgIFwiZmluYWxseVwiLCBcImNhdGNoXCIsIFwiZG9cIl07XG5cbiAgdmFyIGNsb3NlcnNMaXN0ID0gW1wiZW5kXCIsIFwiZWxzZVwiLCBcImVsc2VpZlwiLCBcImNhdGNoXCIsIFwiZmluYWxseVwiXTtcblxuICB2YXIga2V5d29yZHNMaXN0ID0gW1wiaWZcIiwgXCJlbHNlXCIsIFwiZWxzZWlmXCIsIFwid2hpbGVcIiwgXCJmb3JcIiwgXCJiZWdpblwiLCBcImxldFwiLFxuICAgICAgICBcImVuZFwiLCBcImRvXCIsIFwidHJ5XCIsIFwiY2F0Y2hcIiwgXCJmaW5hbGx5XCIsIFwicmV0dXJuXCIsIFwiYnJlYWtcIiwgXCJjb250aW51ZVwiLFxuICAgICAgICBcImdsb2JhbFwiLCBcImxvY2FsXCIsIFwiY29uc3RcIiwgXCJleHBvcnRcIiwgXCJpbXBvcnRcIiwgXCJpbXBvcnRhbGxcIiwgXCJ1c2luZ1wiLFxuICAgICAgICBcImZ1bmN0aW9uXCIsIFwid2hlcmVcIiwgXCJtYWNyb1wiLCBcIm1vZHVsZVwiLCBcImJhcmVtb2R1bGVcIiwgXCJzdHJ1Y3RcIiwgXCJ0eXBlXCIsXG4gICAgICAgIFwibXV0YWJsZVwiLCBcImltbXV0YWJsZVwiLCBcInF1b3RlXCIsIFwidHlwZWFsaWFzXCIsIFwiYWJzdHJhY3RcIiwgXCJwcmltaXRpdmVcIixcbiAgICAgICAgXCJiaXRzdHlwZVwiXTtcblxuICB2YXIgYnVpbHRpbnNMaXN0ID0gW1widHJ1ZVwiLCBcImZhbHNlXCIsIFwibm90aGluZ1wiLCBcIk5hTlwiLCBcIkluZlwiXTtcblxuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiaGludFdvcmRzXCIsIFwianVsaWFcIiwga2V5d29yZHNMaXN0LmNvbmNhdChidWlsdGluc0xpc3QpKTtcblxuICB2YXIgb3BlbmVycyA9IHdvcmRSZWdleHAob3BlbmVyc0xpc3QpO1xuICB2YXIgY2xvc2VycyA9IHdvcmRSZWdleHAoY2xvc2Vyc0xpc3QpO1xuICB2YXIga2V5d29yZHMgPSB3b3JkUmVnZXhwKGtleXdvcmRzTGlzdCk7XG4gIHZhciBidWlsdGlucyA9IHdvcmRSZWdleHAoYnVpbHRpbnNMaXN0KTtcblxuICB2YXIgbWFjcm8gPSAvXkBbX0EtWmEtel1bXFx3XSovO1xuICB2YXIgc3ltYm9sID0gL146W19BLVphLXpcXHUwMEExLVxcdUZGRkZdW1xcd1xcdTAwQTEtXFx1RkZGRl0qISovO1xuICB2YXIgc3RyaW5nUHJlZml4ZXMgPSAvXihgfChbX0EtWmEtelxcdTAwQTEtXFx1RkZGRl0qXCIoXCJcIik/KSkvO1xuXG4gIGZ1bmN0aW9uIGluQXJyYXkoc3RhdGUpIHtcbiAgICByZXR1cm4gKHN0YXRlLm5lc3RlZEFycmF5cyA+IDApO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5HZW5lcmF0b3Ioc3RhdGUpIHtcbiAgICByZXR1cm4gKHN0YXRlLm5lc3RlZEdlbmVyYXRvcnMgPiAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGN1cnJlbnRTY29wZShzdGF0ZSwgbikge1xuICAgIGlmICh0eXBlb2YobikgPT09IFwidW5kZWZpbmVkXCIpIHsgbiA9IDA7IH1cbiAgICBpZiAoc3RhdGUuc2NvcGVzLmxlbmd0aCA8PSBuKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlLnNjb3Blc1tzdGF0ZS5zY29wZXMubGVuZ3RoIC0gKG4gKyAxKV07XG4gIH1cblxuICAvLyB0b2tlbml6ZXJzXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgLy8gSGFuZGxlIG11bHRpbGluZSBjb21tZW50c1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL14jPS8sIGZhbHNlKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQ7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNjb3BlIGNoYW5nZXNcbiAgICB2YXIgbGVhdmluZ0V4cHIgPSBzdGF0ZS5sZWF2aW5nRXhwcjtcbiAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICBsZWF2aW5nRXhwciA9IGZhbHNlO1xuICAgIH1cbiAgICBzdGF0ZS5sZWF2aW5nRXhwciA9IGZhbHNlO1xuXG4gICAgaWYgKGxlYXZpbmdFeHByKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eJysvKSkge1xuICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHJlYW0ubWF0Y2goL1xcLns0LH0vKSkge1xuICAgICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXFwuezEsM30vKSkge1xuICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICB9XG5cbiAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7XG5cbiAgICAvLyBIYW5kbGUgc2luZ2xlIGxpbmUgY29tbWVudHNcbiAgICBpZiAoY2ggPT09ICcjJykge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJ1snKSB7XG4gICAgICBzdGF0ZS5zY29wZXMucHVzaCgnWycpO1xuICAgICAgc3RhdGUubmVzdGVkQXJyYXlzKys7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAnKCcpIHtcbiAgICAgIHN0YXRlLnNjb3Blcy5wdXNoKCcoJyk7XG4gICAgICBzdGF0ZS5uZXN0ZWRHZW5lcmF0b3JzKys7XG4gICAgfVxuXG4gICAgaWYgKGluQXJyYXkoc3RhdGUpICYmIGNoID09PSAnXScpIHtcbiAgICAgIHdoaWxlIChzdGF0ZS5zY29wZXMubGVuZ3RoICYmIGN1cnJlbnRTY29wZShzdGF0ZSkgIT09IFwiW1wiKSB7IHN0YXRlLnNjb3Blcy5wb3AoKTsgfVxuICAgICAgc3RhdGUuc2NvcGVzLnBvcCgpO1xuICAgICAgc3RhdGUubmVzdGVkQXJyYXlzLS07XG4gICAgICBzdGF0ZS5sZWF2aW5nRXhwciA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGluR2VuZXJhdG9yKHN0YXRlKSAmJiBjaCA9PT0gJyknKSB7XG4gICAgICB3aGlsZSAoc3RhdGUuc2NvcGVzLmxlbmd0aCAmJiBjdXJyZW50U2NvcGUoc3RhdGUpICE9PSBcIihcIikgeyBzdGF0ZS5zY29wZXMucG9wKCk7IH1cbiAgICAgIHN0YXRlLnNjb3Blcy5wb3AoKTtcbiAgICAgIHN0YXRlLm5lc3RlZEdlbmVyYXRvcnMtLTtcbiAgICAgIHN0YXRlLmxlYXZpbmdFeHByID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaW5BcnJheShzdGF0ZSkpIHtcbiAgICAgIGlmIChzdGF0ZS5sYXN0VG9rZW4gPT0gXCJlbmRcIiAmJiBzdHJlYW0ubWF0Y2goL146LykpIHtcbiAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15lbmQvKSkge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbWF0Y2g7XG4gICAgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKG9wZW5lcnMsIGZhbHNlKSkge1xuICAgICAgc3RhdGUuc2NvcGVzLnB1c2gobWF0Y2hbMF0pO1xuICAgIH1cblxuICAgIGlmIChzdHJlYW0ubWF0Y2goY2xvc2VycywgZmFsc2UpKSB7XG4gICAgICBzdGF0ZS5zY29wZXMucG9wKCk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHR5cGUgYW5ub3RhdGlvbnNcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eOjooPyFbOlxcJF0pLykpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Bbm5vdGF0aW9uO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzeW1ib2xzXG4gICAgaWYgKCFsZWF2aW5nRXhwciAmJiBzdHJlYW0ubWF0Y2goc3ltYm9sKSB8fFxuICAgICAgICBzdHJlYW0ubWF0Y2goLzooWzw+XTp8PDw9P3w+Pj4/PT98LT58XFwvXFwvfFxcLnsyLDN9fFtcXC5cXFxcJSorXFwtPD4hXFwvXnwmXT0/fFt+XFw/XFwkXSkvKSkge1xuICAgICAgcmV0dXJuIFwiYnVpbHRpblwiO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwYXJhbWV0cmljIHR5cGVzXG4gICAgLy9pZiAoc3RyZWFtLm1hdGNoKC9ee1tefV0qfSg/PVxcKCkvKSkge1xuICAgIC8vICByZXR1cm4gXCJidWlsdGluXCI7XG4gICAgLy99XG5cbiAgICAvLyBIYW5kbGUgb3BlcmF0b3JzIGFuZCBEZWxpbWl0ZXJzXG4gICAgaWYgKHN0cmVhbS5tYXRjaChvcGVyYXRvcnMpKSB7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBOdW1iZXIgTGl0ZXJhbHNcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFwuP1xcZC8sIGZhbHNlKSkge1xuICAgICAgdmFyIGltTWF0Y2hlciA9IFJlZ0V4cCgvXmltXFxiLyk7XG4gICAgICB2YXIgbnVtYmVyTGl0ZXJhbCA9IGZhbHNlO1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjB4XFwuWzAtOWEtZl9dK3BbXFwrXFwtXT9bX1xcZF0rL2kpKSB7IG51bWJlckxpdGVyYWwgPSB0cnVlOyB9XG4gICAgICAvLyBJbnRlZ2Vyc1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjB4WzAtOWEtZl9dKy9pKSkgeyBudW1iZXJMaXRlcmFsID0gdHJ1ZTsgfSAvLyBIZXhcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14wYlswMV9dKy9pKSkgeyBudW1iZXJMaXRlcmFsID0gdHJ1ZTsgfSAvLyBCaW5hcnlcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14wb1swLTdfXSsvaSkpIHsgbnVtYmVyTGl0ZXJhbCA9IHRydWU7IH0gLy8gT2N0YWxcbiAgICAgIC8vIEZsb2F0c1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXig/Oig/OlxcZFtfXFxkXSopP1xcLig/IVxcLikoPzpcXGRbX1xcZF0qKT98XFxkW19cXGRdKlxcLig/IVxcLikoPzpcXGRbX1xcZF0qKSk/KFtFZWZdW1xcK1xcLV0/W19cXGRdKyk/L2kpKSB7IG51bWJlckxpdGVyYWwgPSB0cnVlOyB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFxkW19cXGRdKihlW1xcK1xcLV0/XFxkKyk/L2kpKSB7IG51bWJlckxpdGVyYWwgPSB0cnVlOyB9IC8vIERlY2ltYWxcbiAgICAgIGlmIChudW1iZXJMaXRlcmFsKSB7XG4gICAgICAgICAgLy8gSW50ZWdlciBsaXRlcmFscyBtYXkgYmUgXCJsb25nXCJcbiAgICAgICAgICBzdHJlYW0ubWF0Y2goaW1NYXRjaGVyKTtcbiAgICAgICAgICBzdGF0ZS5sZWF2aW5nRXhwciA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIENoYXJzXG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXicvKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNoYXI7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIFN0cmluZ3NcbiAgICBpZiAoc3RyZWFtLm1hdGNoKHN0cmluZ1ByZWZpeGVzKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZ0ZhY3Rvcnkoc3RyZWFtLmN1cnJlbnQoKSk7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHN0cmVhbS5tYXRjaChtYWNybykpIHtcbiAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICB9XG5cbiAgICBpZiAoc3RyZWFtLm1hdGNoKGRlbGltaXRlcnMpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzKSkge1xuICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgIH1cblxuICAgIGlmIChzdHJlYW0ubWF0Y2goYnVpbHRpbnMpKSB7XG4gICAgICByZXR1cm4gXCJidWlsdGluXCI7XG4gICAgfVxuXG4gICAgdmFyIGlzRGVmaW5pdGlvbiA9IHN0YXRlLmlzRGVmaW5pdGlvbiB8fCBzdGF0ZS5sYXN0VG9rZW4gPT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmxhc3RUb2tlbiA9PSBcIm1hY3JvXCIgfHwgc3RhdGUubGFzdFRva2VuID09IFwidHlwZVwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmxhc3RUb2tlbiA9PSBcInN0cnVjdFwiIHx8IHN0YXRlLmxhc3RUb2tlbiA9PSBcImltbXV0YWJsZVwiO1xuXG4gICAgaWYgKHN0cmVhbS5tYXRjaChpZGVudGlmaWVycykpIHtcbiAgICAgIGlmIChpc0RlZmluaXRpb24pIHtcbiAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICcuJykge1xuICAgICAgICAgIHN0YXRlLmlzRGVmaW5pdGlvbiA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5pc0RlZmluaXRpb24gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIFwiZGVmXCI7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKHtbXn1dKn0pKlxcKC8sIGZhbHNlKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ2FsbE9yRGVmO1xuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBzdGF0ZS5sZWF2aW5nRXhwciA9IHRydWU7XG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBub24tZGV0ZWN0ZWQgaXRlbXNcbiAgICBzdHJlYW0ubmV4dCgpO1xuICAgIHJldHVybiBcImVycm9yXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkNhbGxPckRlZihzdHJlYW0sIHN0YXRlKSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIG1hdGNoID0gc3RyZWFtLm1hdGNoKC9eKFxcKFxccyopLyksIGNoYXJzQWR2YW5jZWQgPSAwO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGlmIChzdGF0ZS5maXJzdFBhcmVuUG9zIDwgMClcbiAgICAgICAgICBzdGF0ZS5maXJzdFBhcmVuUG9zID0gc3RhdGUuc2NvcGVzLmxlbmd0aDtcbiAgICAgICAgc3RhdGUuc2NvcGVzLnB1c2goJygnKTtcbiAgICAgICAgY2hhcnNBZHZhbmNlZCArPSBtYXRjaFsxXS5sZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudFNjb3BlKHN0YXRlKSA9PSAnKCcgJiYgc3RyZWFtLm1hdGNoKC9eXFwpLykpIHtcbiAgICAgICAgc3RhdGUuc2NvcGVzLnBvcCgpO1xuICAgICAgICBjaGFyc0FkdmFuY2VkICs9IDE7XG4gICAgICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoIDw9IHN0YXRlLmZpcnN0UGFyZW5Qb3MpIHtcbiAgICAgICAgICB2YXIgaXNEZWZpbml0aW9uID0gc3RyZWFtLm1hdGNoKC9eKFxccyp3aGVyZVxccytbXlxccz1dKykqXFxzKj89KD8hPSkvLCBmYWxzZSk7XG4gICAgICAgICAgc3RyZWFtLmJhY2tVcChjaGFyc0FkdmFuY2VkKTtcbiAgICAgICAgICBzdGF0ZS5maXJzdFBhcmVuUG9zID0gLTE7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgICAgaWYgKGlzRGVmaW5pdGlvbilcbiAgICAgICAgICAgIHJldHVybiBcImRlZlwiO1xuICAgICAgICAgIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVW5mb3J0dW5hdGVseSBqYXZhc2NyaXB0IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlsaW5lIHN0cmluZ3MsIHNvIHdlIGhhdmVcbiAgICAgIC8vIHRvIHVuZG8gYW55dGhpbmcgZG9uZSB1cHRvIGhlcmUgaWYgYSBmdW5jdGlvbiBjYWxsIG9yIGRlZmluaXRpb24gc3BsaXRzXG4gICAgICAvLyBvdmVyIHR3byBvciBtb3JlIGxpbmVzLlxuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXiQvZywgZmFsc2UpKSB7XG4gICAgICAgIHN0cmVhbS5iYWNrVXAoY2hhcnNBZHZhbmNlZCk7XG4gICAgICAgIHdoaWxlIChzdGF0ZS5zY29wZXMubGVuZ3RoID4gc3RhdGUuZmlyc3RQYXJlblBvcylcbiAgICAgICAgICBzdGF0ZS5zY29wZXMucG9wKCk7XG4gICAgICAgIHN0YXRlLmZpcnN0UGFyZW5Qb3MgPSAtMTtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgICAgIH1cbiAgICAgIGlmICghc3RyZWFtLm1hdGNoKC9eW14oKV0rLykpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQW5ub3RhdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgc3RyZWFtLm1hdGNoKC8uKj8oPz0sfDt8e3x9fFxcKHxcXCl8PXwkfFxccykvKTtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eey8pKSB7XG4gICAgICBzdGF0ZS5uZXN0ZWRQYXJhbWV0ZXJzKys7XG4gICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL159LykgJiYgc3RhdGUubmVzdGVkUGFyYW1ldGVycyA+IDApIHtcbiAgICAgIHN0YXRlLm5lc3RlZFBhcmFtZXRlcnMtLTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLm5lc3RlZFBhcmFtZXRlcnMgPiAwKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goLy4qPyg/PXt8fSkvKSB8fCBzdHJlYW0ubmV4dCgpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUubmVzdGVkUGFyYW1ldGVycyA9PSAwKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICB9XG4gICAgcmV0dXJuIFwiYnVpbHRpblwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eIz0vKSkge1xuICAgICAgc3RhdGUubmVzdGVkQ29tbWVudHMrKztcbiAgICB9XG4gICAgaWYgKCFzdHJlYW0ubWF0Y2goLy4qPyg/PSgjPXw9IykpLykpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICB9XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXj0jLykpIHtcbiAgICAgIHN0YXRlLm5lc3RlZENvbW1lbnRzLS07XG4gICAgICBpZiAoc3RhdGUubmVzdGVkQ29tbWVudHMgPT0gMClcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgfVxuICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ2hhcihzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGlzQ2hhciA9IGZhbHNlLCBtYXRjaDtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKGNoYXJzKSkge1xuICAgICAgaXNDaGFyID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKC9cXFxcdShbYS1mMC05XXsxLDR9KSg/PScpL2kpKSB7XG4gICAgICB2YXIgdmFsdWUgPSBwYXJzZUludChtYXRjaFsxXSwgMTYpO1xuICAgICAgaWYgKHZhbHVlIDw9IDU1Mjk1IHx8IHZhbHVlID49IDU3MzQ0KSB7IC8vIChVKzAsVStEN0ZGKSwgKFUrRTAwMCxVK0ZGRkYpXG4gICAgICAgIGlzQ2hhciA9IHRydWU7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtYXRjaCA9IHN0cmVhbS5tYXRjaCgvXFxcXFUoW0EtRmEtZjAtOV17NSw4fSkoPz0nKS8pKSB7XG4gICAgICB2YXIgdmFsdWUgPSBwYXJzZUludChtYXRjaFsxXSwgMTYpO1xuICAgICAgaWYgKHZhbHVlIDw9IDExMTQxMTEpIHsgLy8gVSsxMEZGRkZcbiAgICAgICAgaXNDaGFyID0gdHJ1ZTtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhcikge1xuICAgICAgc3RhdGUubGVhdmluZ0V4cHIgPSB0cnVlO1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9XG4gICAgaWYgKCFzdHJlYW0ubWF0Y2goL15bXiddKyg/PScpLykpIHsgc3RyZWFtLnNraXBUb0VuZCgpOyB9XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXicvKSkgeyBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsgfVxuICAgIHJldHVybiBcImVycm9yXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblN0cmluZ0ZhY3RvcnkoZGVsaW1pdGVyKSB7XG4gICAgaWYgKGRlbGltaXRlci5zdWJzdHIoLTMpID09PSAnXCJcIlwiJykge1xuICAgICAgZGVsaW1pdGVyID0gJ1wiXCJcIic7XG4gICAgfSBlbHNlIGlmIChkZWxpbWl0ZXIuc3Vic3RyKC0xKSA9PT0gJ1wiJykge1xuICAgICAgZGVsaW1pdGVyID0gJ1wiJztcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoJ1xcXFwnKSkge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goZGVsaW1pdGVyKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgc3RhdGUubGVhdmluZ0V4cHIgPSB0cnVlO1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmVhbS5lYXQoL1tgXCJdLyk7XG4gICAgICB9XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1teXFxcXGBcIl0vKTtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW5TdHJpbmc7XG4gIH1cblxuICB2YXIgZXh0ZXJuYWwgPSB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLFxuICAgICAgICBzY29wZXM6IFtdLFxuICAgICAgICBsYXN0VG9rZW46IG51bGwsXG4gICAgICAgIGxlYXZpbmdFeHByOiBmYWxzZSxcbiAgICAgICAgaXNEZWZpbml0aW9uOiBmYWxzZSxcbiAgICAgICAgbmVzdGVkQXJyYXlzOiAwLFxuICAgICAgICBuZXN0ZWRDb21tZW50czogMCxcbiAgICAgICAgbmVzdGVkR2VuZXJhdG9yczogMCxcbiAgICAgICAgbmVzdGVkUGFyYW1ldGVyczogMCxcbiAgICAgICAgZmlyc3RQYXJlblBvczogLTFcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIHZhciBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTtcblxuICAgICAgaWYgKGN1cnJlbnQgJiYgc3R5bGUpIHtcbiAgICAgICAgc3RhdGUubGFzdFRva2VuID0gY3VycmVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIHZhciBkZWx0YSA9IDA7XG4gICAgICBpZiAoIHRleHRBZnRlciA9PT0gJ10nIHx8IHRleHRBZnRlciA9PT0gJyknIHx8IC9eZW5kXFxiLy50ZXN0KHRleHRBZnRlcikgfHxcbiAgICAgICAgICAgL15lbHNlLy50ZXN0KHRleHRBZnRlcikgfHwgL15jYXRjaFxcYi8udGVzdCh0ZXh0QWZ0ZXIpIHx8IC9eZWxzZWlmXFxiLy50ZXN0KHRleHRBZnRlcikgfHxcbiAgICAgICAgICAgL15maW5hbGx5Ly50ZXN0KHRleHRBZnRlcikgKSB7XG4gICAgICAgIGRlbHRhID0gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHN0YXRlLnNjb3Blcy5sZW5ndGggKyBkZWx0YSkgKiBjb25maWcuaW5kZW50VW5pdDtcbiAgICB9LFxuXG4gICAgZWxlY3RyaWNJbnB1dDogL1xcYihlbmR8ZWxzZXxjYXRjaHxmaW5hbGx5KVxcYi8sXG4gICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiIz1cIixcbiAgICBibG9ja0NvbW1lbnRFbmQ6IFwiPSNcIixcbiAgICBsaW5lQ29tbWVudDogXCIjXCIsXG4gICAgY2xvc2VCcmFja2V0czogXCIoKVtde31cXFwiXFxcIlwiLFxuICAgIGZvbGQ6IFwiaW5kZW50XCJcbiAgfTtcbiAgcmV0dXJuIGV4dGVybmFsO1xufSk7XG5cblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWp1bGlhXCIsIFwianVsaWFcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLyoqXG4gKiBMaW5rIHRvIHRoZSBwcm9qZWN0J3MgR2l0SHViIHBhZ2U6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZHVyYWxvZy9Db2RlTWlycm9yXG4gKi9cblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCdsaXZlc2NyaXB0JywgZnVuY3Rpb24oKXtcbiAgICB2YXIgdG9rZW5CYXNlID0gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIG5leHRfcnVsZSA9IHN0YXRlLm5leHQgfHwgXCJzdGFydFwiO1xuICAgICAgaWYgKG5leHRfcnVsZSkge1xuICAgICAgICBzdGF0ZS5uZXh0ID0gc3RhdGUubmV4dDtcbiAgICAgICAgdmFyIG5yID0gUnVsZXNbbmV4dF9ydWxlXTtcbiAgICAgICAgaWYgKG5yLnNwbGljZSkge1xuICAgICAgICAgIGZvciAodmFyIGkkID0gMDsgaSQgPCBuci5sZW5ndGg7ICsraSQpIHtcbiAgICAgICAgICAgIHZhciByID0gbnJbaSRdO1xuICAgICAgICAgICAgaWYgKHIucmVnZXggJiYgc3RyZWFtLm1hdGNoKHIucmVnZXgpKSB7XG4gICAgICAgICAgICAgIHN0YXRlLm5leHQgPSByLm5leHQgfHwgc3RhdGUubmV4dDtcbiAgICAgICAgICAgICAgcmV0dXJuIHIudG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChyID0gUnVsZXNbbmV4dF9ydWxlXSkpIHtcbiAgICAgICAgICBpZiAoci5yZWdleCAmJiBzdHJlYW0ubWF0Y2goci5yZWdleCkpIHtcbiAgICAgICAgICAgIHN0YXRlLm5leHQgPSByLm5leHQ7XG4gICAgICAgICAgICByZXR1cm4gci50b2tlbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIHJldHVybiAnZXJyb3InO1xuICAgIH07XG4gICAgdmFyIGV4dGVybmFsID0ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuZXh0OiAnc3RhcnQnLFxuICAgICAgICAgIGxhc3RUb2tlbjoge3N0eWxlOiBudWxsLCBpbmRlbnQ6IDAsIGNvbnRlbnQ6IFwiXCJ9XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpe1xuICAgICAgICB3aGlsZSAoc3RyZWFtLnBvcyA9PSBzdHJlYW0uc3RhcnQpXG4gICAgICAgICAgdmFyIHN0eWxlID0gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICBzdGF0ZS5sYXN0VG9rZW4gPSB7XG4gICAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICAgIGluZGVudDogc3RyZWFtLmluZGVudGF0aW9uKCksXG4gICAgICAgICAgY29udGVudDogc3RyZWFtLmN1cnJlbnQoKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc3R5bGUucmVwbGFjZSgvXFwuL2csICcgJyk7XG4gICAgICB9LFxuICAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSl7XG4gICAgICAgIHZhciBpbmRlbnRhdGlvbiA9IHN0YXRlLmxhc3RUb2tlbi5pbmRlbnQ7XG4gICAgICAgIGlmIChzdGF0ZS5sYXN0VG9rZW4uY29udGVudC5tYXRjaChpbmRlbnRlcikpIHtcbiAgICAgICAgICBpbmRlbnRhdGlvbiArPSAyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmRlbnRhdGlvbjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBleHRlcm5hbDtcbiAgfSk7XG5cbiAgdmFyIGlkZW50aWZpZXIgPSAnKD8hW1xcXFxkXFxcXHNdKVskXFxcXHdcXFxceEFBLVxcXFx1RkZEQ10oPzooPyFcXFxccylbJFxcXFx3XFxcXHhBQS1cXFxcdUZGRENdfC1bQS1aYS16XSkqJztcbiAgdmFyIGluZGVudGVyID0gUmVnRXhwKCcoPzpbKHtbPTpdfFstfl0+fFxcXFxiKD86ZSg/OmxzZXx4cG9ydCl8ZCg/Om98ZWZhdWx0KXx0KD86cnl8aGVuKXxmaW5hbGx5fGltcG9ydCg/OlxcXFxzKmFsbCk/fGNvbnN0fHZhcnxsZXR8bmV3fGNhdGNoKD86XFxcXHMqJyArIGlkZW50aWZpZXIgKyAnKT8pKVxcXFxzKiQnKTtcbiAgdmFyIGtleXdvcmRlbmQgPSAnKD8hWyRcXFxcd118LVtBLVphLXpdfFxcXFxzKjooPyFbOj1dKSknO1xuICB2YXIgc3RyaW5nZmlsbCA9IHtcbiAgICB0b2tlbjogJ3N0cmluZycsXG4gICAgcmVnZXg6ICcuKydcbiAgfTtcbiAgdmFyIFJ1bGVzID0ge1xuICAgIHN0YXJ0OiBbXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnY29tbWVudC5kb2MnLFxuICAgICAgICByZWdleDogJy9cXFxcKicsXG4gICAgICAgIG5leHQ6ICdjb21tZW50J1xuICAgICAgfSwge1xuICAgICAgICB0b2tlbjogJ2NvbW1lbnQnLFxuICAgICAgICByZWdleDogJyMuKidcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICdrZXl3b3JkJyxcbiAgICAgICAgcmVnZXg6ICcoPzp0KD86aCg/OmlzfHJvd3xlbil8cnl8eXBlb2YhPyl8Yyg/Om9uKD86dGludWV8c3QpfGEoPzpzZXx0Y2gpfGxhc3MpfGkoPzpuKD86c3RhbmNlb2YpP3xtcCg/Om9ydCg/OlxcXFxzK2FsbCk/fGxlbWVudHMpfFtmc10pfGQoPzplKD86ZmF1bHR8bGV0ZXxidWdnZXIpfG8pfGYoPzpvcig/OlxcXFxzK293bik/fGluYWxseXx1bmN0aW9uKXxzKD86dXBlcnx3aXRjaCl8ZSg/OmxzZXx4KD86dGVuZHN8cG9ydCl8dmFsKXxhKD86bmR8cmd1bWVudHMpfG4oPzpld3xvdCl8dW4oPzpsZXNzfHRpbCl8dyg/OmhpbGV8aXRoKXxvW2ZyXXxyZXR1cm58YnJlYWt8bGV0fHZhcnxsb29wKScgKyBrZXl3b3JkZW5kXG4gICAgICB9LCB7XG4gICAgICAgIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UnLFxuICAgICAgICByZWdleDogJyg/OnRydWV8ZmFsc2V8eWVzfG5vfG9ufG9mZnxudWxsfHZvaWR8dW5kZWZpbmVkKScgKyBrZXl3b3JkZW5kXG4gICAgICB9LCB7XG4gICAgICAgIHRva2VuOiAnaW52YWxpZC5pbGxlZ2FsJyxcbiAgICAgICAgcmVnZXg6ICcoPzpwKD86YWNrYWdlfHIoPzppdmF0ZXxvdGVjdGVkKXx1YmxpYyl8aSg/Om1wbGVtZW50c3xudGVyZmFjZSl8ZW51bXxzdGF0aWN8eWllbGQpJyArIGtleXdvcmRlbmRcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICdsYW5ndWFnZS5zdXBwb3J0LmNsYXNzJyxcbiAgICAgICAgcmVnZXg6ICcoPzpSKD86ZSg/OmdFeHB8ZmVyZW5jZUVycm9yKXxhbmdlRXJyb3IpfFMoPzp0cmluZ3x5bnRheEVycm9yKXxFKD86cnJvcnx2YWxFcnJvcil8QXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufE51bWJlcnxPYmplY3R8VHlwZUVycm9yfFVSSUVycm9yKScgKyBrZXl3b3JkZW5kXG4gICAgICB9LCB7XG4gICAgICAgIHRva2VuOiAnbGFuZ3VhZ2Uuc3VwcG9ydC5mdW5jdGlvbicsXG4gICAgICAgIHJlZ2V4OiAnKD86aXMoPzpOYU58RmluaXRlKXxwYXJzZSg/OkludHxGbG9hdCl8TWF0aHxKU09OfCg/OmVufGRlKWNvZGVVUkkoPzpDb21wb25lbnQpPyknICsga2V5d29yZGVuZFxuICAgICAgfSwge1xuICAgICAgICB0b2tlbjogJ3ZhcmlhYmxlLmxhbmd1YWdlJyxcbiAgICAgICAgcmVnZXg6ICcoPzp0KD86aGF0fGlsfG8pfGYoPzpyb218YWxsdGhyb3VnaCl8aXR8Ynl8ZSknICsga2V5d29yZGVuZFxuICAgICAgfSwge1xuICAgICAgICB0b2tlbjogJ2lkZW50aWZpZXInLFxuICAgICAgICByZWdleDogaWRlbnRpZmllciArICdcXFxccyo6KD8hWzo9XSknXG4gICAgICB9LCB7XG4gICAgICAgIHRva2VuOiAndmFyaWFibGUnLFxuICAgICAgICByZWdleDogaWRlbnRpZmllclxuICAgICAgfSwge1xuICAgICAgICB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3InLFxuICAgICAgICByZWdleDogJyg/OlxcXFwuezN9fFxcXFxzK1xcXFw/KSdcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICdrZXl3b3JkLnZhcmlhYmxlJyxcbiAgICAgICAgcmVnZXg6ICcoPzpAK3w6OnxcXFxcLlxcXFwuKScsXG4gICAgICAgIG5leHQ6ICdrZXknXG4gICAgICB9LCB7XG4gICAgICAgIHRva2VuOiAna2V5d29yZC5vcGVyYXRvcicsXG4gICAgICAgIHJlZ2V4OiAnXFxcXC5cXFxccyonLFxuICAgICAgICBuZXh0OiAna2V5J1xuICAgICAgfSwge1xuICAgICAgICB0b2tlbjogJ3N0cmluZycsXG4gICAgICAgIHJlZ2V4OiAnXFxcXFxcXFxcXFxcU1teXFxcXHMsOyl9XFxcXF1dKidcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICdzdHJpbmcuZG9jJyxcbiAgICAgICAgcmVnZXg6ICdcXCdcXCdcXCcnLFxuICAgICAgICBuZXh0OiAncWRvYydcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICdzdHJpbmcuZG9jJyxcbiAgICAgICAgcmVnZXg6ICdcIlwiXCInLFxuICAgICAgICBuZXh0OiAncXFkb2MnXG4gICAgICB9LCB7XG4gICAgICAgIHRva2VuOiAnc3RyaW5nJyxcbiAgICAgICAgcmVnZXg6ICdcXCcnLFxuICAgICAgICBuZXh0OiAncXN0cmluZydcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICdzdHJpbmcnLFxuICAgICAgICByZWdleDogJ1wiJyxcbiAgICAgICAgbmV4dDogJ3Fxc3RyaW5nJ1xuICAgICAgfSwge1xuICAgICAgICB0b2tlbjogJ3N0cmluZycsXG4gICAgICAgIHJlZ2V4OiAnYCcsXG4gICAgICAgIG5leHQ6ICdqcydcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICdzdHJpbmcnLFxuICAgICAgICByZWdleDogJzxcXFxcWycsXG4gICAgICAgIG5leHQ6ICd3b3JkcydcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICdzdHJpbmcucmVnZXgnLFxuICAgICAgICByZWdleDogJy8vJyxcbiAgICAgICAgbmV4dDogJ2hlcmVnZXgnXG4gICAgICB9LCB7XG4gICAgICAgIHRva2VuOiAnc3RyaW5nLnJlZ2V4JyxcbiAgICAgICAgcmVnZXg6ICdcXFxcLyg/OlteW1xcXFwvXFxcXG5cXFxcXFxcXF0qKD86KD86XFxcXFxcXFwufFxcXFxbW15cXFxcXVxcXFxuXFxcXFxcXFxdKig/OlxcXFxcXFxcLlteXFxcXF1cXFxcblxcXFxcXFxcXSopKlxcXFxdKVteW1xcXFwvXFxcXG5cXFxcXFxcXF0qKSopXFxcXC9bZ2lteSRdezAsNH0nLFxuICAgICAgICBuZXh0OiAna2V5J1xuICAgICAgfSwge1xuICAgICAgICB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMnLFxuICAgICAgICByZWdleDogJyg/OjB4W1xcXFxkYS1mQS1GXVtcXFxcZGEtZkEtRl9dKnwoPzpbMi05XXxbMTJdXFxcXGR8M1swLTZdKXJbXFxcXGRhLXpBLVpdW1xcXFxkYS16QS1aX10qfCg/OlxcXFxkW1xcXFxkX10qKD86XFxcXC5cXFxcZFtcXFxcZF9dKik/fFxcXFwuXFxcXGRbXFxcXGRfXSopKD86ZVsrLV0/XFxcXGRbXFxcXGRfXSopP1tcXFxcdyRdKiknXG4gICAgICB9LCB7XG4gICAgICAgIHRva2VuOiAnbHBhcmVuJyxcbiAgICAgICAgcmVnZXg6ICdbKHtbXSdcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICdycGFyZW4nLFxuICAgICAgICByZWdleDogJ1spfVxcXFxdXScsXG4gICAgICAgIG5leHQ6ICdrZXknXG4gICAgICB9LCB7XG4gICAgICAgIHRva2VuOiAna2V5d29yZC5vcGVyYXRvcicsXG4gICAgICAgIHJlZ2V4OiAnXFxcXFMrJ1xuICAgICAgfSwge1xuICAgICAgICB0b2tlbjogJ3RleHQnLFxuICAgICAgICByZWdleDogJ1xcXFxzKydcbiAgICAgIH1cbiAgICBdLFxuICAgIGhlcmVnZXg6IFtcbiAgICAgIHtcbiAgICAgICAgdG9rZW46ICdzdHJpbmcucmVnZXgnLFxuICAgICAgICByZWdleDogJy4qPy8vW2dpbXkkP117MCw0fScsXG4gICAgICAgIG5leHQ6ICdzdGFydCdcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICdzdHJpbmcucmVnZXgnLFxuICAgICAgICByZWdleDogJ1xcXFxzKiN7J1xuICAgICAgfSwge1xuICAgICAgICB0b2tlbjogJ2NvbW1lbnQucmVnZXgnLFxuICAgICAgICByZWdleDogJ1xcXFxzKyg/OiMuKik/J1xuICAgICAgfSwge1xuICAgICAgICB0b2tlbjogJ3N0cmluZy5yZWdleCcsXG4gICAgICAgIHJlZ2V4OiAnXFxcXFMrJ1xuICAgICAgfVxuICAgIF0sXG4gICAga2V5OiBbXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAna2V5d29yZC5vcGVyYXRvcicsXG4gICAgICAgIHJlZ2V4OiAnWy4/QCFdKydcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICdpZGVudGlmaWVyJyxcbiAgICAgICAgcmVnZXg6IGlkZW50aWZpZXIsXG4gICAgICAgIG5leHQ6ICdzdGFydCdcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICd0ZXh0JyxcbiAgICAgICAgcmVnZXg6ICcnLFxuICAgICAgICBuZXh0OiAnc3RhcnQnXG4gICAgICB9XG4gICAgXSxcbiAgICBjb21tZW50OiBbXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnY29tbWVudC5kb2MnLFxuICAgICAgICByZWdleDogJy4qP1xcXFwqLycsXG4gICAgICAgIG5leHQ6ICdzdGFydCdcbiAgICAgIH0sIHtcbiAgICAgICAgdG9rZW46ICdjb21tZW50LmRvYycsXG4gICAgICAgIHJlZ2V4OiAnLisnXG4gICAgICB9XG4gICAgXSxcbiAgICBxZG9jOiBbXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnc3RyaW5nJyxcbiAgICAgICAgcmVnZXg6IFwiLio/JycnXCIsXG4gICAgICAgIG5leHQ6ICdrZXknXG4gICAgICB9LCBzdHJpbmdmaWxsXG4gICAgXSxcbiAgICBxcWRvYzogW1xuICAgICAge1xuICAgICAgICB0b2tlbjogJ3N0cmluZycsXG4gICAgICAgIHJlZ2V4OiAnLio/XCJcIlwiJyxcbiAgICAgICAgbmV4dDogJ2tleSdcbiAgICAgIH0sIHN0cmluZ2ZpbGxcbiAgICBdLFxuICAgIHFzdHJpbmc6IFtcbiAgICAgIHtcbiAgICAgICAgdG9rZW46ICdzdHJpbmcnLFxuICAgICAgICByZWdleDogJ1teXFxcXFxcXFxcXCddKig/OlxcXFxcXFxcLlteXFxcXFxcXFxcXCddKikqXFwnJyxcbiAgICAgICAgbmV4dDogJ2tleSdcbiAgICAgIH0sIHN0cmluZ2ZpbGxcbiAgICBdLFxuICAgIHFxc3RyaW5nOiBbXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnc3RyaW5nJyxcbiAgICAgICAgcmVnZXg6ICdbXlxcXFxcXFxcXCJdKig/OlxcXFxcXFxcLlteXFxcXFxcXFxcIl0qKSpcIicsXG4gICAgICAgIG5leHQ6ICdrZXknXG4gICAgICB9LCBzdHJpbmdmaWxsXG4gICAgXSxcbiAgICBqczogW1xuICAgICAge1xuICAgICAgICB0b2tlbjogJ3N0cmluZycsXG4gICAgICAgIHJlZ2V4OiAnW15cXFxcXFxcXGBdKig/OlxcXFxcXFxcLlteXFxcXFxcXFxgXSopKmAnLFxuICAgICAgICBuZXh0OiAna2V5J1xuICAgICAgfSwgc3RyaW5nZmlsbFxuICAgIF0sXG4gICAgd29yZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdG9rZW46ICdzdHJpbmcnLFxuICAgICAgICByZWdleDogJy4qP1xcXFxdPicsXG4gICAgICAgIG5leHQ6ICdrZXknXG4gICAgICB9LCBzdHJpbmdmaWxsXG4gICAgXVxuICB9O1xuICBmb3IgKHZhciBpZHggaW4gUnVsZXMpIHtcbiAgICB2YXIgciA9IFJ1bGVzW2lkeF07XG4gICAgaWYgKHIuc3BsaWNlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gci5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICB2YXIgcnIgPSByW2ldO1xuICAgICAgICBpZiAodHlwZW9mIHJyLnJlZ2V4ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIFJ1bGVzW2lkeF1baV0ucmVnZXggPSBuZXcgUmVnRXhwKCdeJyArIHJyLnJlZ2V4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJyLnJlZ2V4ID09PSAnc3RyaW5nJykge1xuICAgICAgUnVsZXNbaWR4XS5yZWdleCA9IG5ldyBSZWdFeHAoJ14nICsgci5yZWdleCk7XG4gICAgfVxuICB9XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCd0ZXh0L3gtbGl2ZXNjcmlwdCcsICdsaXZlc2NyaXB0Jyk7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLy8gTFVBIG1vZGUuIFBvcnRlZCB0byBDb2RlTWlycm9yIDIgZnJvbSBGcmFuY2lzemVrIFdhd3J6YWsnc1xuLy8gQ29kZU1pcnJvciAxIG1vZGUuXG4vLyBoaWdobGlnaHRzIGtleXdvcmRzLCBzdHJpbmdzLCBjb21tZW50cyAobm8gbGV2ZWxpbmcgc3VwcG9ydGVkISAoXCJbPT1bXCIpKSwgdG9rZW5zLCBiYXNpYyBpbmRlbnRpbmdcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJsdWFcIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHtcbiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDtcblxuICBmdW5jdGlvbiBwcmVmaXhSRSh3b3Jkcykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgd29yZHMuam9pbihcInxcIikgKyBcIilcIiwgXCJpXCIpO1xuICB9XG4gIGZ1bmN0aW9uIHdvcmRSRSh3b3Jkcykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgd29yZHMuam9pbihcInxcIikgKyBcIikkXCIsIFwiaVwiKTtcbiAgfVxuICB2YXIgc3BlY2lhbHMgPSB3b3JkUkUocGFyc2VyQ29uZmlnLnNwZWNpYWxzIHx8IFtdKTtcblxuICAvLyBsb25nIGxpc3Qgb2Ygc3RhbmRhcmQgZnVuY3Rpb25zIGZyb20gbHVhIG1hbnVhbFxuICB2YXIgYnVpbHRpbnMgPSB3b3JkUkUoW1xuICAgIFwiX0dcIixcIl9WRVJTSU9OXCIsXCJhc3NlcnRcIixcImNvbGxlY3RnYXJiYWdlXCIsXCJkb2ZpbGVcIixcImVycm9yXCIsXCJnZXRmZW52XCIsXCJnZXRtZXRhdGFibGVcIixcImlwYWlyc1wiLFwibG9hZFwiLFxuICAgIFwibG9hZGZpbGVcIixcImxvYWRzdHJpbmdcIixcIm1vZHVsZVwiLFwibmV4dFwiLFwicGFpcnNcIixcInBjYWxsXCIsXCJwcmludFwiLFwicmF3ZXF1YWxcIixcInJhd2dldFwiLFwicmF3c2V0XCIsXCJyZXF1aXJlXCIsXG4gICAgXCJzZWxlY3RcIixcInNldGZlbnZcIixcInNldG1ldGF0YWJsZVwiLFwidG9udW1iZXJcIixcInRvc3RyaW5nXCIsXCJ0eXBlXCIsXCJ1bnBhY2tcIixcInhwY2FsbFwiLFxuXG4gICAgXCJjb3JvdXRpbmUuY3JlYXRlXCIsXCJjb3JvdXRpbmUucmVzdW1lXCIsXCJjb3JvdXRpbmUucnVubmluZ1wiLFwiY29yb3V0aW5lLnN0YXR1c1wiLFwiY29yb3V0aW5lLndyYXBcIixcImNvcm91dGluZS55aWVsZFwiLFxuXG4gICAgXCJkZWJ1Zy5kZWJ1Z1wiLFwiZGVidWcuZ2V0ZmVudlwiLFwiZGVidWcuZ2V0aG9va1wiLFwiZGVidWcuZ2V0aW5mb1wiLFwiZGVidWcuZ2V0bG9jYWxcIixcImRlYnVnLmdldG1ldGF0YWJsZVwiLFxuICAgIFwiZGVidWcuZ2V0cmVnaXN0cnlcIixcImRlYnVnLmdldHVwdmFsdWVcIixcImRlYnVnLnNldGZlbnZcIixcImRlYnVnLnNldGhvb2tcIixcImRlYnVnLnNldGxvY2FsXCIsXCJkZWJ1Zy5zZXRtZXRhdGFibGVcIixcbiAgICBcImRlYnVnLnNldHVwdmFsdWVcIixcImRlYnVnLnRyYWNlYmFja1wiLFxuXG4gICAgXCJjbG9zZVwiLFwiZmx1c2hcIixcImxpbmVzXCIsXCJyZWFkXCIsXCJzZWVrXCIsXCJzZXR2YnVmXCIsXCJ3cml0ZVwiLFxuXG4gICAgXCJpby5jbG9zZVwiLFwiaW8uZmx1c2hcIixcImlvLmlucHV0XCIsXCJpby5saW5lc1wiLFwiaW8ub3BlblwiLFwiaW8ub3V0cHV0XCIsXCJpby5wb3BlblwiLFwiaW8ucmVhZFwiLFwiaW8uc3RkZXJyXCIsXCJpby5zdGRpblwiLFxuICAgIFwiaW8uc3Rkb3V0XCIsXCJpby50bXBmaWxlXCIsXCJpby50eXBlXCIsXCJpby53cml0ZVwiLFxuXG4gICAgXCJtYXRoLmFic1wiLFwibWF0aC5hY29zXCIsXCJtYXRoLmFzaW5cIixcIm1hdGguYXRhblwiLFwibWF0aC5hdGFuMlwiLFwibWF0aC5jZWlsXCIsXCJtYXRoLmNvc1wiLFwibWF0aC5jb3NoXCIsXCJtYXRoLmRlZ1wiLFxuICAgIFwibWF0aC5leHBcIixcIm1hdGguZmxvb3JcIixcIm1hdGguZm1vZFwiLFwibWF0aC5mcmV4cFwiLFwibWF0aC5odWdlXCIsXCJtYXRoLmxkZXhwXCIsXCJtYXRoLmxvZ1wiLFwibWF0aC5sb2cxMFwiLFwibWF0aC5tYXhcIixcbiAgICBcIm1hdGgubWluXCIsXCJtYXRoLm1vZGZcIixcIm1hdGgucGlcIixcIm1hdGgucG93XCIsXCJtYXRoLnJhZFwiLFwibWF0aC5yYW5kb21cIixcIm1hdGgucmFuZG9tc2VlZFwiLFwibWF0aC5zaW5cIixcIm1hdGguc2luaFwiLFxuICAgIFwibWF0aC5zcXJ0XCIsXCJtYXRoLnRhblwiLFwibWF0aC50YW5oXCIsXG5cbiAgICBcIm9zLmNsb2NrXCIsXCJvcy5kYXRlXCIsXCJvcy5kaWZmdGltZVwiLFwib3MuZXhlY3V0ZVwiLFwib3MuZXhpdFwiLFwib3MuZ2V0ZW52XCIsXCJvcy5yZW1vdmVcIixcIm9zLnJlbmFtZVwiLFwib3Muc2V0bG9jYWxlXCIsXG4gICAgXCJvcy50aW1lXCIsXCJvcy50bXBuYW1lXCIsXG5cbiAgICBcInBhY2thZ2UuY3BhdGhcIixcInBhY2thZ2UubG9hZGVkXCIsXCJwYWNrYWdlLmxvYWRlcnNcIixcInBhY2thZ2UubG9hZGxpYlwiLFwicGFja2FnZS5wYXRoXCIsXCJwYWNrYWdlLnByZWxvYWRcIixcbiAgICBcInBhY2thZ2Uuc2VlYWxsXCIsXG5cbiAgICBcInN0cmluZy5ieXRlXCIsXCJzdHJpbmcuY2hhclwiLFwic3RyaW5nLmR1bXBcIixcInN0cmluZy5maW5kXCIsXCJzdHJpbmcuZm9ybWF0XCIsXCJzdHJpbmcuZ21hdGNoXCIsXCJzdHJpbmcuZ3N1YlwiLFxuICAgIFwic3RyaW5nLmxlblwiLFwic3RyaW5nLmxvd2VyXCIsXCJzdHJpbmcubWF0Y2hcIixcInN0cmluZy5yZXBcIixcInN0cmluZy5yZXZlcnNlXCIsXCJzdHJpbmcuc3ViXCIsXCJzdHJpbmcudXBwZXJcIixcblxuICAgIFwidGFibGUuY29uY2F0XCIsXCJ0YWJsZS5pbnNlcnRcIixcInRhYmxlLm1heG5cIixcInRhYmxlLnJlbW92ZVwiLFwidGFibGUuc29ydFwiXG4gIF0pO1xuICB2YXIga2V5d29yZHMgPSB3b3JkUkUoW1wiYW5kXCIsXCJicmVha1wiLFwiZWxzZWlmXCIsXCJmYWxzZVwiLFwibmlsXCIsXCJub3RcIixcIm9yXCIsXCJyZXR1cm5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICBcInRydWVcIixcImZ1bmN0aW9uXCIsIFwiZW5kXCIsIFwiaWZcIiwgXCJ0aGVuXCIsIFwiZWxzZVwiLCBcImRvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aGlsZVwiLCBcInJlcGVhdFwiLCBcInVudGlsXCIsIFwiZm9yXCIsIFwiaW5cIiwgXCJsb2NhbFwiIF0pO1xuXG4gIHZhciBpbmRlbnRUb2tlbnMgPSB3b3JkUkUoW1wiZnVuY3Rpb25cIiwgXCJpZlwiLFwicmVwZWF0XCIsXCJkb1wiLCBcIlxcXFwoXCIsIFwie1wiXSk7XG4gIHZhciBkZWRlbnRUb2tlbnMgPSB3b3JkUkUoW1wiZW5kXCIsIFwidW50aWxcIiwgXCJcXFxcKVwiLCBcIn1cIl0pO1xuICB2YXIgZGVkZW50UGFydGlhbCA9IHByZWZpeFJFKFtcImVuZFwiLCBcInVudGlsXCIsIFwiXFxcXClcIiwgXCJ9XCIsIFwiZWxzZVwiLCBcImVsc2VpZlwiXSk7XG5cbiAgZnVuY3Rpb24gcmVhZEJyYWNrZXQoc3RyZWFtKSB7XG4gICAgdmFyIGxldmVsID0gMDtcbiAgICB3aGlsZSAoc3RyZWFtLmVhdChcIj1cIikpICsrbGV2ZWw7XG4gICAgc3RyZWFtLmVhdChcIltcIik7XG4gICAgcmV0dXJuIGxldmVsO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgIGlmIChjaCA9PSBcIi1cIiAmJiBzdHJlYW0uZWF0KFwiLVwiKSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCJbXCIpICYmIHN0cmVhbS5lYXQoXCJbXCIpKVxuICAgICAgICByZXR1cm4gKHN0YXRlLmN1ciA9IGJyYWNrZXRlZChyZWFkQnJhY2tldChzdHJlYW0pLCBcImNvbW1lbnRcIikpKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgIH1cbiAgICBpZiAoY2ggPT0gXCJcXFwiXCIgfHwgY2ggPT0gXCInXCIpXG4gICAgICByZXR1cm4gKHN0YXRlLmN1ciA9IHN0cmluZyhjaCkpKHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmIChjaCA9PSBcIltcIiAmJiAvW1xcWz1dLy50ZXN0KHN0cmVhbS5wZWVrKCkpKVxuICAgICAgcmV0dXJuIChzdGF0ZS5jdXIgPSBicmFja2V0ZWQocmVhZEJyYWNrZXQoc3RyZWFtKSwgXCJzdHJpbmdcIikpKHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmICgvXFxkLy50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3LiVdLyk7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9XG4gICAgaWYgKC9bXFx3X10vLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXFxcXFwtXy5dLyk7XG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJyYWNrZXRlZChsZXZlbCwgc3R5bGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGN1cmxldiA9IG51bGwsIGNoO1xuICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGN1cmxldiA9PSBudWxsKSB7aWYgKGNoID09IFwiXVwiKSBjdXJsZXYgPSAwO31cbiAgICAgICAgZWxzZSBpZiAoY2ggPT0gXCI9XCIpICsrY3VybGV2O1xuICAgICAgICBlbHNlIGlmIChjaCA9PSBcIl1cIiAmJiBjdXJsZXYgPT0gbGV2ZWwpIHsgc3RhdGUuY3VyID0gbm9ybWFsOyBicmVhazsgfVxuICAgICAgICBlbHNlIGN1cmxldiA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmluZyhxdW90ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBjaDtcbiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkgYnJlYWs7XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmICghZXNjYXBlZCkgc3RhdGUuY3VyID0gbm9ybWFsO1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbCkge1xuICAgICAgcmV0dXJuIHtiYXNlY29sOiBiYXNlY29sIHx8IDAsIGluZGVudERlcHRoOiAwLCBjdXI6IG5vcm1hbH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgdmFyIHN0eWxlID0gc3RhdGUuY3VyKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgICAgaWYgKHN0eWxlID09IFwidmFyaWFibGVcIikge1xuICAgICAgICBpZiAoa2V5d29yZHMudGVzdCh3b3JkKSkgc3R5bGUgPSBcImtleXdvcmRcIjtcbiAgICAgICAgZWxzZSBpZiAoYnVpbHRpbnMudGVzdCh3b3JkKSkgc3R5bGUgPSBcImJ1aWx0aW5cIjtcbiAgICAgICAgZWxzZSBpZiAoc3BlY2lhbHMudGVzdCh3b3JkKSkgc3R5bGUgPSBcInZhcmlhYmxlLTJcIjtcbiAgICAgIH1cbiAgICAgIGlmICgoc3R5bGUgIT0gXCJjb21tZW50XCIpICYmIChzdHlsZSAhPSBcInN0cmluZ1wiKSl7XG4gICAgICAgIGlmIChpbmRlbnRUb2tlbnMudGVzdCh3b3JkKSkgKytzdGF0ZS5pbmRlbnREZXB0aDtcbiAgICAgICAgZWxzZSBpZiAoZGVkZW50VG9rZW5zLnRlc3Qod29yZCkpIC0tc3RhdGUuaW5kZW50RGVwdGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSxcblxuICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikge1xuICAgICAgdmFyIGNsb3NpbmcgPSBkZWRlbnRQYXJ0aWFsLnRlc3QodGV4dEFmdGVyKTtcbiAgICAgIHJldHVybiBzdGF0ZS5iYXNlY29sICsgaW5kZW50VW5pdCAqIChzdGF0ZS5pbmRlbnREZXB0aCAtIChjbG9zaW5nID8gMSA6IDApKTtcbiAgICB9LFxuXG4gICAgbGluZUNvbW1lbnQ6IFwiLS1cIixcbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCItLVtbXCIsXG4gICAgYmxvY2tDb21tZW50RW5kOiBcIl1dXCJcbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtbHVhXCIsIFwibHVhXCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8vIE1hdGhlbWF0aWNhIG1vZGUgY29weXJpZ2h0IChjKSAyMDE1IGJ5IENhbGluIEJhcmJhdFxuLy8gQmFzZWQgb24gY29kZSBieSBQYXRyaWNrIFNjaGVpYmUgKGhhbGlydXRhbilcbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2hhbGlydXRhbi9NYXRoZW1hdGljYS1Tb3VyY2UtSGlnaGxpZ2h0aW5nL3RyZWUvbWFzdGVyL3NyYy9sYW5nLW1tYS5qc1xuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgnbWF0aGVtYXRpY2EnLCBmdW5jdGlvbihfY29uZmlnLCBfcGFyc2VyQ29uZmlnKSB7XG5cbiAgLy8gdXNlZCBwYXR0ZXJuIGJ1aWxkaW5nIGJsb2Nrc1xuICB2YXIgSWRlbnRpZmllciA9ICdbYS16QS1aXFxcXCRdW2EtekEtWjAtOVxcXFwkXSonO1xuICB2YXIgcEJhc2UgICAgICA9IFwiKD86XFxcXGQrKVwiO1xuICB2YXIgcEZsb2F0ICAgICA9IFwiKD86XFxcXC5cXFxcZCt8XFxcXGQrXFxcXC5cXFxcZCp8XFxcXGQrKVwiO1xuICB2YXIgcEZsb2F0QmFzZSA9IFwiKD86XFxcXC5cXFxcdyt8XFxcXHcrXFxcXC5cXFxcdyp8XFxcXHcrKVwiO1xuICB2YXIgcFByZWNpc2lvbiA9IFwiKD86YCg/OmA/XCIrcEZsb2F0K1wiKT8pXCI7XG5cbiAgLy8gcmVndWxhciBleHByZXNzaW9uc1xuICB2YXIgcmVCYXNlRm9ybSAgICAgICAgPSBuZXcgUmVnRXhwKCcoPzonK3BCYXNlKycoPzpcXFxcXlxcXFxeJytwRmxvYXRCYXNlK3BQcmVjaXNpb24rJz8oPzpcXFxcKlxcXFxeWystXT9cXFxcZCspPykpJyk7XG4gIHZhciByZUZsb2F0Rm9ybSAgICAgICA9IG5ldyBSZWdFeHAoJyg/OicgKyBwRmxvYXQgKyBwUHJlY2lzaW9uICsgJz8oPzpcXFxcKlxcXFxeWystXT9cXFxcZCspPyknKTtcbiAgdmFyIHJlSWRJbkNvbnRleHQgICAgID0gbmV3IFJlZ0V4cCgnKD86YD8pKD86JyArIElkZW50aWZpZXIgKyAnKSg/OmAoPzonICsgSWRlbnRpZmllciArICcpKSooPzpgPyknKTtcblxuICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaDtcblxuICAgIC8vIGdldCBuZXh0IGNoYXJhY3RlclxuICAgIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgIC8vIHN0cmluZ1xuICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZztcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG5cbiAgICAvLyBjb21tZW50XG4gICAgaWYgKGNoID09PSAnKCcpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KCcqJykpIHtcbiAgICAgICAgc3RhdGUuY29tbWVudExldmVsKys7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50O1xuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ28gYmFjayBvbmUgY2hhcmFjdGVyXG4gICAgc3RyZWFtLmJhY2tVcCgxKTtcblxuICAgIC8vIGxvb2sgZm9yIG51bWJlcnNcbiAgICAvLyBOdW1iZXJzIGluIGEgYmFzZWZvcm1cbiAgICBpZiAoc3RyZWFtLm1hdGNoKHJlQmFzZUZvcm0sIHRydWUsIGZhbHNlKSkge1xuICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgIH1cblxuICAgIC8vIE1hdGhlbWF0aWNhIG51bWJlcnMuIEZsb2F0cyAoMS4yLCAuMiwgMS4pIGNhbiBoYXZlIG9wdGlvbmFsbHkgYSBwcmVjaXNpb24gKGBmbG9hdCkgb3IgYW4gYWNjdXJhY3kgZGVmaW5pdGlvblxuICAgIC8vIChgYGZsb2F0KS4gTm90ZTogd2hpbGUgMS4yYCBpcyBwb3NzaWJsZSAxLjJgYCBpcyBub3QuIEF0IHRoZSBlbmQgYW4gZXhwb25lbnQgKGZsb2F0Kl4rMTIpIGNhbiBmb2xsb3cuXG4gICAgaWYgKHN0cmVhbS5tYXRjaChyZUZsb2F0Rm9ybSwgdHJ1ZSwgZmFsc2UpKSB7XG4gICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgfVxuXG4gICAgLyogSW5bMjNdIGFuZCBPdXRbMzRdICovXG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvKD86SW58T3V0KVxcW1swLTldKlxcXS8sIHRydWUsIGZhbHNlKSkge1xuICAgICAgcmV0dXJuICdhdG9tJztcbiAgICB9XG5cbiAgICAvLyB1c2FnZVxuICAgIGlmIChzdHJlYW0ubWF0Y2goLyhbYS16QS1aXFwkXVthLXpBLVowLTlcXCRdKig/OmBbYS16QS1aMC05XFwkXSspKjo6dXNhZ2UpLywgdHJ1ZSwgZmFsc2UpKSB7XG4gICAgICByZXR1cm4gJ21ldGEnO1xuICAgIH1cblxuICAgIC8vIG1lc3NhZ2VcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC8oW2EtekEtWlxcJF1bYS16QS1aMC05XFwkXSooPzpgW2EtekEtWjAtOVxcJF0rKSo6OlthLXpBLVpcXCRdW2EtekEtWjAtOVxcJF0qKTo/LywgdHJ1ZSwgZmFsc2UpKSB7XG4gICAgICByZXR1cm4gJ3N0cmluZy0yJztcbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ha2VzIGEgbG9vay1haGVhZCBtYXRjaCBmb3Igc29tZXRoaW5nIGxpa2UgdmFyaWFibGU6e19JbnRlZ2VyfVxuICAgIC8vIHRoZSBtYXRjaCBpcyB0aGVuIGZvcndhcmRlZCB0byB0aGUgbW1hLXBhdHRlcm5zIHRva2VuaXplci5cbiAgICBpZiAoc3RyZWFtLm1hdGNoKC8oW2EtekEtWlxcJF1bYS16QS1aMC05XFwkXSpcXHMqOikoPzooPzpbYS16QS1aXFwkXVthLXpBLVowLTlcXCRdKil8KD86W146PT5+QFxcXlxcJlxcKlxcKVxcW1xcXSdcXD8sXFx8XSkpLiovLCB0cnVlLCBmYWxzZSkpIHtcbiAgICAgIHJldHVybiAndmFyaWFibGUtMic7XG4gICAgfVxuXG4gICAgLy8gY2F0Y2ggdmFyaWFibGVzIHdoaWNoIGFyZSB1c2VkIHRvZ2V0aGVyIHdpdGggQmxhbmsgKF8pLCBCbGFua1NlcXVlbmNlIChfXykgb3IgQmxhbmtOdWxsU2VxdWVuY2UgKF9fXylcbiAgICAvLyBDYW5ub3Qgc3RhcnQgd2l0aCBhIG51bWJlciwgYnV0IGNhbiBoYXZlIG51bWJlcnMgYXQgYW55IG90aGVyIHBvc2l0aW9uLiBFeGFtcGxlc1xuICAgIC8vIGJsdWJfX0ludGVnZXIsIGExXywgYjM0X0ludGVnZXIzMlxuICAgIGlmIChzdHJlYW0ubWF0Y2goL1thLXpBLVpcXCRdW2EtekEtWjAtOVxcJF0qXytbYS16QS1aXFwkXVthLXpBLVowLTlcXCRdKi8sIHRydWUsIGZhbHNlKSkge1xuICAgICAgcmV0dXJuICd2YXJpYWJsZS0yJztcbiAgICB9XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvW2EtekEtWlxcJF1bYS16QS1aMC05XFwkXSpfKy8sIHRydWUsIGZhbHNlKSkge1xuICAgICAgcmV0dXJuICd2YXJpYWJsZS0yJztcbiAgICB9XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXytbYS16QS1aXFwkXVthLXpBLVowLTlcXCRdKi8sIHRydWUsIGZhbHNlKSkge1xuICAgICAgcmV0dXJuICd2YXJpYWJsZS0yJztcbiAgICB9XG5cbiAgICAvLyBOYW1lZCBjaGFyYWN0ZXJzIGluIE1hdGhlbWF0aWNhLCBsaWtlIFxcW0dhbW1hXS5cbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXFxcXFxbW2EtekEtWlxcJF1bYS16QS1aMC05XFwkXSpcXF0vLCB0cnVlLCBmYWxzZSkpIHtcbiAgICAgIHJldHVybiAndmFyaWFibGUtMyc7XG4gICAgfVxuXG4gICAgLy8gTWF0Y2ggYWxsIGJyYWNlcyBzZXBhcmF0ZWx5XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvKD86XFxbfFxcXXx7fH18XFwofFxcKSkvLCB0cnVlLCBmYWxzZSkpIHtcbiAgICAgIHJldHVybiAnYnJhY2tldCc7XG4gICAgfVxuXG4gICAgLy8gQ2F0Y2ggU2xvdHMgKCMsICMjLCAjMywgIyM5IGFuZCB0aGUgVjEwIG5hbWVkIHNsb3RzICNuYW1lKS4gSSBoYXZlIG5ldmVyIHNlZW4gc29tZW9uZSB1c2luZyBtb3JlIHRoYW4gb25lIGRpZ2l0IGFmdGVyICMsIHNvIHdlIG1hdGNoXG4gICAgLy8gb25seSBvbmUuXG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvKD86I1thLXpBLVpcXCRdW2EtekEtWjAtOVxcJF0qfCMrWzAtOV0/KS8sIHRydWUsIGZhbHNlKSkge1xuICAgICAgcmV0dXJuICd2YXJpYWJsZS0yJztcbiAgICB9XG5cbiAgICAvLyBMaXRlcmFscyBsaWtlIHZhcmlhYmxlcywga2V5d29yZHMsIGZ1bmN0aW9uc1xuICAgIGlmIChzdHJlYW0ubWF0Y2gocmVJZEluQ29udGV4dCwgdHJ1ZSwgZmFsc2UpKSB7XG4gICAgICByZXR1cm4gJ2tleXdvcmQnO1xuICAgIH1cblxuICAgIC8vIG9wZXJhdG9ycy4gTm90ZSB0aGF0IG9wZXJhdG9ycyBsaWtlIEBAIG9yIC87IGFyZSBtYXRjaGVkIHNlcGFyYXRlbHkgZm9yIGVhY2ggc3ltYm9sLlxuICAgIGlmIChzdHJlYW0ubWF0Y2goLyg/OlxcXFx8XFwrfFxcLXxcXCp8XFwvfCx8O3xcXC58OnxAfH58PXw+fDx8JnxcXHx8X3xgfCd8XFxefFxcP3whfCUpLywgdHJ1ZSwgZmFsc2UpKSB7XG4gICAgICByZXR1cm4gJ29wZXJhdG9yJztcbiAgICB9XG5cbiAgICAvLyBldmVyeXRoaW5nIGVsc2UgaXMgYW4gZXJyb3JcbiAgICBzdHJlYW0ubmV4dCgpOyAvLyBhZHZhbmNlIHRoZSBzdHJlYW0uXG4gICAgcmV0dXJuICdlcnJvcic7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIG5leHQsIGVuZCA9IGZhbHNlLCBlc2NhcGVkID0gZmFsc2U7XG4gICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgaWYgKG5leHQgPT09ICdcIicgJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgZW5kID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PT0gJ1xcXFwnO1xuICAgIH1cbiAgICBpZiAoZW5kICYmICFlc2NhcGVkKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICB9XG4gICAgcmV0dXJuICdzdHJpbmcnO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIHByZXYsIG5leHQ7XG4gICAgd2hpbGUoc3RhdGUuY29tbWVudExldmVsID4gMCAmJiAobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmIChwcmV2ID09PSAnKCcgJiYgbmV4dCA9PT0gJyonKSBzdGF0ZS5jb21tZW50TGV2ZWwrKztcbiAgICAgIGlmIChwcmV2ID09PSAnKicgJiYgbmV4dCA9PT0gJyknKSBzdGF0ZS5jb21tZW50TGV2ZWwtLTtcbiAgICAgIHByZXYgPSBuZXh0O1xuICAgIH1cbiAgICBpZiAoc3RhdGUuY29tbWVudExldmVsIDw9IDApIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgIH1cbiAgICByZXR1cm4gJ2NvbW1lbnQnO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtyZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsIGNvbW1lbnRMZXZlbDogMH07fSxcbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9LFxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIigqXCIsXG4gICAgYmxvY2tDb21tZW50RW5kOiBcIiopXCJcbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoJ3RleHQveC1tYXRoZW1hdGljYScsIHtcbiAgbmFtZTogJ21hdGhlbWF0aWNhJ1xufSk7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgcmZjMjgyMiA9IFtcbiAgXCJGcm9tXCIsIFwiU2VuZGVyXCIsIFwiUmVwbHktVG9cIiwgXCJUb1wiLCBcIkNjXCIsIFwiQmNjXCIsIFwiTWVzc2FnZS1JRFwiLFxuICBcIkluLVJlcGx5LVRvXCIsIFwiUmVmZXJlbmNlc1wiLCBcIlJlc2VudC1Gcm9tXCIsIFwiUmVzZW50LVNlbmRlclwiLCBcIlJlc2VudC1Ub1wiLFxuICBcIlJlc2VudC1DY1wiLCBcIlJlc2VudC1CY2NcIiwgXCJSZXNlbnQtTWVzc2FnZS1JRFwiLCBcIlJldHVybi1QYXRoXCIsIFwiUmVjZWl2ZWRcIlxuXTtcbnZhciByZmMyODIyTm9FbWFpbCA9IFtcbiAgXCJEYXRlXCIsIFwiU3ViamVjdFwiLCBcIkNvbW1lbnRzXCIsIFwiS2V5d29yZHNcIiwgXCJSZXNlbnQtRGF0ZVwiXG5dO1xuXG5Db2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiaGludFdvcmRzXCIsIFwibWJveFwiLCByZmMyODIyLmNvbmNhdChyZmMyODIyTm9FbWFpbCkpO1xuXG52YXIgd2hpdGVzcGFjZSA9IC9eWyBcXHRdLztcbnZhciBzZXBhcmF0b3IgPSAvXkZyb20gLzsgLy8gU2VlIFJGQyA0MTU1XG52YXIgcmZjMjgyMkhlYWRlciA9IG5ldyBSZWdFeHAoXCJeKFwiICsgcmZjMjgyMi5qb2luKFwifFwiKSArIFwiKTogXCIpO1xudmFyIHJmYzI4MjJIZWFkZXJOb0VtYWlsID0gbmV3IFJlZ0V4cChcIl4oXCIgKyByZmMyODIyTm9FbWFpbC5qb2luKFwifFwiKSArIFwiKTogXCIpO1xudmFyIGhlYWRlciA9IC9eW146XSs6LzsgLy8gT3B0aW9uYWwgZmllbGRzIGRlZmluZWQgaW4gUkZDIDI4MjJcbnZhciBlbWFpbCA9IC9eW14gXStAW14gXSsvO1xudmFyIHVudGlsRW1haWwgPSAvXi4qPyg/PVteIF0rP0BbXiBdKykvO1xudmFyIGJyYWNrZXRlZEVtYWlsID0gL148Lio/Pi87XG52YXIgdW50aWxCcmFja2V0ZWRFbWFpbCA9IC9eLio/KD89PC4qPikvO1xuXG5mdW5jdGlvbiBzdHlsZUZvckhlYWRlcihoZWFkZXIpIHtcbiAgaWYgKGhlYWRlciA9PT0gXCJTdWJqZWN0XCIpIHJldHVybiBcImhlYWRlclwiO1xuICByZXR1cm4gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gcmVhZFRva2VuKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgIC8vIEZyb20gbGFzdCBsaW5lXG4gICAgc3RhdGUuaW5TZXBhcmF0b3IgPSBmYWxzZTtcbiAgICBpZiAoc3RhdGUuaW5IZWFkZXIgJiYgc3RyZWFtLm1hdGNoKHdoaXRlc3BhY2UpKSB7XG4gICAgICAvLyBIZWFkZXIgZm9sZGluZ1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmluSGVhZGVyID0gZmFsc2U7XG4gICAgICBzdGF0ZS5oZWFkZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChzdHJlYW0ubWF0Y2goc2VwYXJhdG9yKSkge1xuICAgICAgc3RhdGUuaW5IZWFkZXJzID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmluU2VwYXJhdG9yID0gdHJ1ZTtcbiAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2g7XG4gICAgdmFyIGVtYWlsUGVybWl0dGVkID0gZmFsc2U7XG4gICAgaWYgKChtYXRjaCA9IHN0cmVhbS5tYXRjaChyZmMyODIySGVhZGVyTm9FbWFpbCkpIHx8XG4gICAgICAgIChlbWFpbFBlcm1pdHRlZCA9IHRydWUpICYmIChtYXRjaCA9IHN0cmVhbS5tYXRjaChyZmMyODIySGVhZGVyKSkpIHtcbiAgICAgIHN0YXRlLmluSGVhZGVycyA9IHRydWU7XG4gICAgICBzdGF0ZS5pbkhlYWRlciA9IHRydWU7XG4gICAgICBzdGF0ZS5lbWFpbFBlcm1pdHRlZCA9IGVtYWlsUGVybWl0dGVkO1xuICAgICAgc3RhdGUuaGVhZGVyID0gbWF0Y2hbMV07XG4gICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgfVxuXG4gICAgLy8gVXNlIHZpbSdzIGhldXJpc3RpY3M6IHJlY29nbml6ZSBjdXN0b20gaGVhZGVycyBvbmx5IGlmIHRoZSBsaW5lIGlzIGluIGFcbiAgICAvLyBibG9jayBvZiBsZWdpdGltYXRlIGhlYWRlcnMuXG4gICAgaWYgKHN0YXRlLmluSGVhZGVycyAmJiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2goaGVhZGVyKSkpIHtcbiAgICAgIHN0YXRlLmluSGVhZGVyID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVtYWlsUGVybWl0dGVkID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmhlYWRlciA9IG1hdGNoWzFdO1xuICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgIH1cblxuICAgIHN0YXRlLmluSGVhZGVycyA9IGZhbHNlO1xuICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChzdGF0ZS5pblNlcGFyYXRvcikge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goZW1haWwpKSByZXR1cm4gXCJsaW5rXCI7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCh1bnRpbEVtYWlsKSkgcmV0dXJuIFwiYXRvbVwiO1xuICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICByZXR1cm4gXCJhdG9tXCI7XG4gIH1cblxuICBpZiAoc3RhdGUuaW5IZWFkZXIpIHtcbiAgICB2YXIgc3R5bGUgPSBzdHlsZUZvckhlYWRlcihzdGF0ZS5oZWFkZXIpO1xuXG4gICAgaWYgKHN0YXRlLmVtYWlsUGVybWl0dGVkKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKGJyYWNrZXRlZEVtYWlsKSkgcmV0dXJuIHN0eWxlICsgXCIgbGlua1wiO1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCh1bnRpbEJyYWNrZXRlZEVtYWlsKSkgcmV0dXJuIHN0eWxlO1xuICAgIH1cbiAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbiAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICByZXR1cm4gbnVsbDtcbn07XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcIm1ib3hcIiwgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBJcyBpbiBhIG1ib3ggc2VwYXJhdG9yXG4gICAgICAgIGluU2VwYXJhdG9yOiBmYWxzZSxcbiAgICAgICAgLy8gSXMgaW4gYSBtYWlsIGhlYWRlclxuICAgICAgICBpbkhlYWRlcjogZmFsc2UsXG4gICAgICAgIC8vIElmIGJyYWNrZXRlZCBlbWFpbCBpcyBwZXJtaXR0ZWQuIE9ubHkgYXBwbGljYWJsZSB3aGVuIGluSGVhZGVyXG4gICAgICAgIGVtYWlsUGVybWl0dGVkOiBmYWxzZSxcbiAgICAgICAgLy8gTmFtZSBvZiBjdXJyZW50IGhlYWRlclxuICAgICAgICBoZWFkZXI6IG51bGwsXG4gICAgICAgIC8vIElzIGluIGEgcmVnaW9uIG9mIG1haWwgaGVhZGVyc1xuICAgICAgICBpbkhlYWRlcnM6IGZhbHNlXG4gICAgICB9O1xuICAgIH0sXG4gICAgdG9rZW46IHJlYWRUb2tlbixcbiAgICBibGFua0xpbmU6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICBzdGF0ZS5pbkhlYWRlcnMgPSBzdGF0ZS5pblNlcGFyYXRvciA9IHN0YXRlLmluSGVhZGVyID0gZmFsc2U7XG4gICAgfVxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL21ib3hcIiwgXCJtYm94XCIpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vL21JUkMgbW9kZSBieSBGb3JkX0xhd25tb3dlciA6OiBCYXNlZCBvbiBWZWxvY2l0eSBtb2RlIGJ5IFN0ZXZlIE8nSGFyYVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvbWlyY1wiLCBcIm1pcmNcIik7XG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJtaXJjXCIsIGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBwYXJzZVdvcmRzKHN0cikge1xuICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoXCIgXCIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgdmFyIHNwZWNpYWxzID0gcGFyc2VXb3JkcyhcIiQhICQkICQmICQ/ICQrICRhYm9vayAkYWJzICRhY3RpdmUgJGFjdGl2ZWNpZCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkYWN0aXZld2lkICRhZGRyZXNzICRhZGR0b2sgJGFnZW50ICRhZ2VudG5hbWUgJGFnZW50c3RhdCAkYWdlbnR2ZXIgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJGFsaWFzICRhbmQgJGFuaWNrICRhbnNpMm1pcmMgJGFvcCAkYXBwYWN0aXZlICRhcHBzdGF0ZSAkYXNjICRhc2N0aW1lIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiRhc2luICRhdGFuICRhdm9pY2UgJGF3YXkgJGF3YXltc2cgJGF3YXl0aW1lICRiYW5tYXNrICRiYXNlICRiZmluZCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkYmlub2ZmICRiaXRvbiAkYm5pY2sgJGJ2YXIgJGJ5dGVzICRjYWxjICRjYiAkY2QgJGNlaWwgJGNoYW4gJGNoYW5tb2RlcyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkY2hhbnR5cGVzICRjaGF0ICRjaHIgJGNpZCAkY2xldmVsICRjbGljayAkY21kYm94ICRjbWRsaW5lICRjbmljayAkY29sb3IgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJGNvbSAkY29tY2FsbCAkY29tY2hhbiAkY29tZXJyICRjb21wYWN0ICRjb21wcmVzcyAkY29tdmFsICRjb3MgJGNvdW50IFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiRjciAkY3JjICRjcmVxICRjcmxmICRjdGltZSAkY3RpbWVyICRjdHJsZW50ZXIgJGRhdGUgJGRheSAkZGF5bGlnaHQgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJGRidWggJGRidXcgJGRjY2lnbm9yZSAkZGNjcG9ydCAkZGRlICRkZGVuYW1lICRkZWJ1ZyAkZGVjb2RlICRkZWNvbXByZXNzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiRkZWx0b2sgJGRldmVudCAkZGlhbG9nICRkaWQgJGRpZHJlZyAkZGlkdG9rICRkaWR3bSAkZGlzayAkZGxldmVsICRkbGwgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJGRsbGNhbGwgJGRuYW1lICRkbnMgJGR1cmF0aW9uICRlYmVlcHMgJGVkaXRib3ggJGVtYWlsYWRkciAkZW5jb2RlICRlcnJvciBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkZXZhbCAkZXZlbnQgJGV4aXN0ICRmZW9mICRmZXJyICRmZ2V0YyAkZmlsZSAkZmlsZW5hbWUgJGZpbHRlcmVkICRmaW5kZGlyIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiRmaW5kZGlybiAkZmluZGZpbGUgJGZpbmRmaWxlbiAkZmluZHRvayAkZmxpbmUgJGZsb29yICRmb3BlbiAkZnJlYWQgJGZzZXJ2ZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkZnVsbGFkZHJlc3MgJGZ1bGxkYXRlICRmdWxsbmFtZSAkZnVsbHNjcmVlbiAkZ2V0ICRnZXRkaXIgJGdldGRvdCAkZ2V0dG9rICRnbXQgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJGdyb3VwICRoYWx0ZWQgJGhhc2ggJGhlaWdodCAkaGZpbmQgJGhnZXQgJGhpZ2hsaWdodCAkaG5pY2sgJGhvdGxpbmUgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJGhvdGxpbmVwb3MgJGlhbCAkaWFsY2hhbiAkaWJsICRpZGxlICRpZWwgJGlmbWF0Y2ggJGlnbm9yZSAkaWlmICRpaWwgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJGluZWxpcHNlICRpbmkgJGlubWlkaSAkaW5wYXN0ZSAkaW5wb2x5ICRpbnB1dCAkaW5yZWN0ICRpbnJvdW5kcmVjdCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkaW5zb25nICRpbnN0b2sgJGludCAkaW53YXZlICRpcCAkaXNhbGlhcyAkaXNiaXQgJGlzZGRlICRpc2RpciAkaXNmaWxlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiRpc2lkICRpc2xvd2VyICRpc3RvayAkaXN1cHBlciAka2V5Y2hhciAka2V5cnB0ICRrZXl2YWwgJGtuaWNrICRsYWN0aXZlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiRsYWN0aXZlY2lkICRsYWN0aXZld2lkICRsZWZ0ICRsZW4gJGxldmVsICRsZiAkbGluZSAkbGluZXMgJGxpbmsgJGxvY2sgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJGxvY2sgJGxvY2tlZCAkbG9nICRsb2dzdGFtcCAkbG9nc3RhbXBmbXQgJGxvbmdmbiAkbG9uZ2lwICRsb3dlciAkbHRpbWVyIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiRtYWRkcmVzcyAkbWFzayAkbWF0Y2hrZXkgJG1hdGNodG9rICRtZDUgJG1lICRtZW51ICRtZW51YmFyICRtZW51Y29udGV4dCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkbWVudXR5cGUgJG1pZCAkbWlkZGlyICRtaXJjZGlyICRtaXJjZXhlICRtaXJjaW5pICRta2xvZ2ZuICRtbmljayAkbW9kZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkbW9kZWZpcnN0ICRtb2RlbGFzdCAkbW9kZXNwbCAkbW91c2UgJG1zZmlsZSAkbmV0d29yayAkbmV3bmljayAkbmljayAkbm9maWxlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiRub3BhdGggJG5vcXQgJG5vdCAkbm90YWdzICRub3RpZnkgJG51bGwgJG51bWVyaWMgJG51bW9rICRvbGluZSAkb25wb2x5IFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiRvcG5pY2sgJG9yICRvcmQgJG9zICRwYXNzaXZlZGNjICRwaWMgJHBsYXkgJHBuaWNrICRwb3J0ICRwb3J0YWJsZSAkcG9ydGZyZWUgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJHBvcyAkcHJlZml4ICRwcm9wICRwcm90ZWN0ICRwdXR0b2sgJHF0ICRxdWVyeSAkcmFuZCAkciAkcmF3bXNnICRyZWFkICRyZWFkb21vIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiRyZWFkbiAkcmVnZXggJHJlZ21sICRyZWdzdWIgJHJlZ3N1YmV4ICRyZW1vdmUgJHJlbXRvayAkcmVwbGFjZSAkcmVwbGFjZXggXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJHJlcHRvayAkcmVzdWx0ICRyZ2IgJHJpZ2h0ICRyb3VuZCAkc2NpZCAkc2NvbiAkc2NyaXB0ICRzY3JpcHRkaXIgJHNjcmlwdGxpbmUgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJHNkaXIgJHNlbmQgJHNlcnZlciAkc2VydmVyaXAgJHNmaWxlICRzaGExICRzaG9ydGZuICRzaG93ICRzaWduYWwgJHNpbiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkc2l0ZSAkc2xpbmUgJHNuaWNrICRzbmlja3MgJHNub3RpZnkgJHNvY2sgJHNvY2ticiAkc29ja2VyciAkc29ja25hbWUgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJHNvcnR0b2sgJHNvdW5kICRzcXJ0ICRzc2wgJHNyZXEgJHNzbHJlYWR5ICRzdGF0dXMgJHN0cmlwICRzdHIgJHN0cmlwcGVkIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiRzeWxlICRzdWJtZW51ICRzd2l0Y2hiYXIgJHRhbiAkdGFyZ2V0ICR0aWNrcyAkdGltZSAkdGltZXIgJHRpbWVzdGFtcCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkdGltZXN0YW1wZm10ICR0aW1lem9uZSAkdGlwICR0aXRsZWJhciAkdG9vbGJhciAkdHJlZWJhciAkdHJ1c3QgJHVsZXZlbCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkdWxpc3QgJHVwcGVyICR1cHRpbWUgJHVybCAkdXNlcm1vZGUgJHYxICR2MiAkdmFyICR2Y21kICR2Y21kc3RhdCAkdmNtZHZlciBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkdmVyc2lvbiAkdm5pY2sgJHZvbCAkd2lkICR3aWR0aCAkd2lsZHNpdGUgJHdpbGR0b2sgJHdpbmRvdyAkd3JhcCAkeG9yXCIpO1xuICB2YXIga2V5d29yZHMgPSBwYXJzZVdvcmRzKFwiYWJvb2sgYWppbnZpdGUgYWxpYXMgYWxpbmUgYW1lIGFtc2cgYW5pY2sgYW9wIGF1c2VyIGF1dG9qb2luIGF2b2ljZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhd2F5IGJhY2tncm91bmQgYmFuIGJjb3B5IGJlZXAgYnJlYWQgYnJlYWsgYnJlcGxhY2UgYnNldCBidHJ1bmMgYnVuc2V0IGJ3cml0ZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFubmVsIGNsZWFyIGNsZWFyYWxsIGNsaW5lIGNsaXBib2FyZCBjbG9zZSBjbmljayBjb2xvciBjb21jbG9zZSBjb21vcGVuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbXJlZyBjb250aW51ZSBjb3B5IGNyZXEgY3RjcHJlcGx5IGN0Y3BzIGRjYyBkY2NzZXJ2ZXIgZGRlIGRkZXNlcnZlciBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWJ1ZyBkZWMgZGVzY3JpYmUgZGlhbG9nIGRpZCBkaWR0b2sgZGlzYWJsZSBkaXNjb25uZWN0IGRsZXZlbCBkbGluZSBkbGwgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG5zIGRxd2luZG93IGRyYXdjb3B5IGRyYXdkb3QgZHJhd2ZpbGwgZHJhd2xpbmUgZHJhd3BpYyBkcmF3cmVjdCBkcmF3cmVwbGFjZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmF3cm90IGRyYXdzYXZlIGRyYXdzY3JvbGwgZHJhd3RleHQgZWJlZXBzIGVjaG8gZWRpdGJveCBlbWFpbGFkZHIgZW5hYmxlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImV2ZW50cyBleGl0IGZjbG9zZSBmaWx0ZXIgZmluZHRleHQgZmluZ2VyIGZpcmV3YWxsIGZsYXNoIGZsaXN0IGZsb29kIGZsdXNoIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZsdXNoaW5pIGZvbnQgZm9wZW4gZnNlZWsgZnNlbmQgZnNlcnZlIGZ1bGxuYW1lIGZ3cml0ZSBnaGlkZSBnbG9hZCBnbW92ZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb3B0cyBnb3RvIGdwbGF5IGdwb2ludCBncXJlcSBncm91cHMgZ3Nob3cgZ3NpemUgZ3N0b3AgZ3RhbGsgZ3VubG9hZCBoYWRkIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhbHQgaGFsdGRlZiBoZGVjIGhkZWwgaGVscCBoZnJlZSBoaW5jIGhsb2FkIGhtYWtlIGhvcCBoc2F2ZSBpYWwgaWFsY2xlYXIgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWFsbWFyayBpZGVudGQgaWYgaWdub3JlIGlsaW5lIGluYyBpbnZpdGUgaXVzZXIgam9pbiBraWNrIGxpbmVzZXAgbGlua3MgbGlzdCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsb2FkIGxvYWRidWYgbG9jYWxpbmZvIGxvZyBtZGkgbWUgbWVudWJhciBta2RpciBtbmljayBtb2RlIG1zZyBuaWNrIG5vb3Agbm90aWNlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5vdGlmeSBvbXNnIG9ub3RpY2UgcGFydCBwYXJ0YWxsIHBkY2MgcGVyZm9ybSBwbGF5IHBsYXljdHJsIHBvcCBwcm90ZWN0IHB2b2ljZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJxbWUgcW1zZyBxdWVyeSBxdWVyeW4gcXVpdCByYXcgcmVsb2FkIHJlbWluaSByZW1vdGUgcmVtb3ZlIHJlbmFtZSByZW53aW4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVzZXRlcnJvciByZXNldGlkbGUgcmV0dXJuIHJsZXZlbCBybGluZSBybWRpciBydW4gcnVzZXIgc2F2ZSBzYXZlYnVmIHNhdmVpbmkgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2F5IHNjaWQgc2NvbiBzZXJ2ZXIgc2V0IHNob3dtaXJjIHNpZ25hbSBzbGluZSBzb2NrYWNjZXB0IHNvY2tjbG9zZSBzb2NrbGlzdCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2NrbGlzdGVuIHNvY2ttYXJrIHNvY2tvcGVuIHNvY2twYXVzZSBzb2NrcmVhZCBzb2NrcmVuYW1lIHNvY2t1ZHAgc29ja3dyaXRlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvdW5kIHNwZWFrIHNwbGF5IHNyZXEgc3RyaXAgc3dpdGNoYmFyIHRpbWVyIHRpbWVzdGFtcCB0aXRsZWJhciB0bmljayB0b2tlbml6ZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b29sYmFyIHRvcGljIHRyYXkgdHJlZWJhciB1bGlzdCB1bmxvYWQgdW5zZXQgdW5zZXRhbGwgdXBkYXRlbmwgdXJsIHV3aG8gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFyIHZjYWRkIHZjbWQgdmNyZW0gdm9sIHdoaWxlIHdob2lzIHdpbmRvdyB3aW5oZWxwIHdyaXRlIHdyaXRlaW50IGlmIGlzYWxudW0gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNhbHBoYSBpc2FvcCBpc2F2b2ljZSBpc2JhbiBpc2NoYW4gaXNob3AgaXNpZ25vcmUgaXNpbiBpc2luY3MgaXNsZXR0ZXIgaXNsb3dlciBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpc25vdGlmeSBpc251bSBpc29uIGlzb3AgaXNwcm90ZWN0IGlzcmVnIGlzdXBwZXIgaXN2b2ljZSBpc3dtIGlzd21jcyBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbHNlaWYgZWxzZSBnb3RvIG1lbnUgbmlja2xpc3Qgc3RhdHVzIHRpdGxlIGljb24gc2l6ZSBvcHRpb24gdGV4dCBlZGl0IFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvbiBjaGVjayByYWRpbyBib3ggc2Nyb2xsIGxpc3QgY29tYm8gbGluayB0YWIgaXRlbVwiKTtcbiAgdmFyIGZ1bmN0aW9ucyA9IHBhcnNlV29yZHMoXCJpZiBlbHNlaWYgZWxzZSBhbmQgbm90IG9yIGVxIG5lIGluIG5pIGZvciBmb3JlYWNoIHdoaWxlIHN3aXRjaFwiKTtcbiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXFwtKiYlPTw+IT9eXFwvXFx8XS87XG4gIGZ1bmN0aW9uIGNoYWluKHN0cmVhbSwgc3RhdGUsIGYpIHtcbiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7XG4gICAgcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgYmVmb3JlUGFyYW1zID0gc3RhdGUuYmVmb3JlUGFyYW1zO1xuICAgIHN0YXRlLmJlZm9yZVBhcmFtcyA9IGZhbHNlO1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKC9bXFxbXFxde31cXChcXCksXFwuXS8udGVzdChjaCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIihcIiAmJiBiZWZvcmVQYXJhbXMpIHN0YXRlLmluUGFyYW1zID0gdHJ1ZTtcbiAgICAgIGVsc2UgaWYgKGNoID09IFwiKVwiKSBzdGF0ZS5pblBhcmFtcyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKC9cXGQvLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5dLyk7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2ggPT0gXCJcXFxcXCIpIHtcbiAgICAgIHN0cmVhbS5lYXQoXCJcXFxcXCIpO1xuICAgICAgc3RyZWFtLmVhdCgvLi8pO1xuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoID09IFwiL1wiICYmIHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5Db21tZW50KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2ggPT0gXCI7XCIgJiYgc3RyZWFtLm1hdGNoKC8gKlxcKCAqXFwoLykpIHtcbiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblVucGFyc2VkKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2ggPT0gXCI7XCIgJiYgIXN0YXRlLmluUGFyYW1zKSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoID09ICdcIicpIHtcbiAgICAgIHN0cmVhbS5lYXQoL1wiLyk7XG4gICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoID09IFwiJFwiKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1skX2EtejAtOUEtWlxcLjpdLyk7XG4gICAgICBpZiAoc3BlY2lhbHMgJiYgc3BlY2lhbHMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc3RhdGUuYmVmb3JlUGFyYW1zID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFwiYnVpbHRpblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChjaCA9PSBcIiVcIikge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXixcXHMoKV0vKTtcbiAgICAgIHN0YXRlLmJlZm9yZVBhcmFtcyA9IHRydWU7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF97fV0vKTtcbiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKVxuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICBpZiAoZnVuY3Rpb25zICYmIGZ1bmN0aW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSkge1xuICAgICAgICBzdGF0ZS5iZWZvcmVQYXJhbXMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7XG4gICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYgKGNoID09IFwiL1wiICYmIG1heWJlRW5kKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG1heWJlRW5kID0gKGNoID09IFwiKlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG4gIGZ1bmN0aW9uIHRva2VuVW5wYXJzZWQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBtYXliZUVuZCA9IDAsIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIjtcIiAmJiBtYXliZUVuZCA9PSAyKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PSBcIilcIilcbiAgICAgICAgbWF5YmVFbmQrKztcbiAgICAgIGVsc2UgaWYgKGNoICE9IFwiIFwiKVxuICAgICAgICBtYXliZUVuZCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBcIm1ldGFcIjtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSxcbiAgICAgICAgYmVmb3JlUGFyYW1zOiBmYWxzZSxcbiAgICAgICAgaW5QYXJhbXM6IGZhbHNlXG4gICAgICB9O1xuICAgIH0sXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9O1xufSk7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoJ21sbGlrZScsIGZ1bmN0aW9uKF9jb25maWcsIHBhcnNlckNvbmZpZykge1xuICB2YXIgd29yZHMgPSB7XG4gICAgJ2FzJzogJ2tleXdvcmQnLFxuICAgICdkbyc6ICdrZXl3b3JkJyxcbiAgICAnZWxzZSc6ICdrZXl3b3JkJyxcbiAgICAnZW5kJzogJ2tleXdvcmQnLFxuICAgICdleGNlcHRpb24nOiAna2V5d29yZCcsXG4gICAgJ2Z1bic6ICdrZXl3b3JkJyxcbiAgICAnZnVuY3Rvcic6ICdrZXl3b3JkJyxcbiAgICAnaWYnOiAna2V5d29yZCcsXG4gICAgJ2luJzogJ2tleXdvcmQnLFxuICAgICdpbmNsdWRlJzogJ2tleXdvcmQnLFxuICAgICdsZXQnOiAna2V5d29yZCcsXG4gICAgJ29mJzogJ2tleXdvcmQnLFxuICAgICdvcGVuJzogJ2tleXdvcmQnLFxuICAgICdyZWMnOiAna2V5d29yZCcsXG4gICAgJ3N0cnVjdCc6ICdrZXl3b3JkJyxcbiAgICAndGhlbic6ICdrZXl3b3JkJyxcbiAgICAndHlwZSc6ICdrZXl3b3JkJyxcbiAgICAndmFsJzogJ2tleXdvcmQnLFxuICAgICd3aGlsZSc6ICdrZXl3b3JkJyxcbiAgICAnd2l0aCc6ICdrZXl3b3JkJ1xuICB9O1xuXG4gIHZhciBleHRyYVdvcmRzID0gcGFyc2VyQ29uZmlnLmV4dHJhV29yZHMgfHwge307XG4gIGZvciAodmFyIHByb3AgaW4gZXh0cmFXb3Jkcykge1xuICAgIGlmIChleHRyYVdvcmRzLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICB3b3Jkc1twcm9wXSA9IHBhcnNlckNvbmZpZy5leHRyYVdvcmRzW3Byb3BdO1xuICAgIH1cbiAgfVxuICB2YXIgaGludFdvcmRzID0gW107XG4gIGZvciAodmFyIGsgaW4gd29yZHMpIHsgaGludFdvcmRzLnB1c2goayk7IH1cbiAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImhpbnRXb3Jkc1wiLCBcIm1sbGlrZVwiLCBoaW50V29yZHMpO1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZztcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KCd8JykpIHtcbiAgICAgICAgc3RhdGUubG9uZ1N0cmluZyA9IHRydWU7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Mb25nU3RyaW5nO1xuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaCA9PT0gJygnKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdCgnKicpKSB7XG4gICAgICAgIHN0YXRlLmNvbW1lbnRMZXZlbCsrO1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2ggPT09ICd+JyB8fCBjaCA9PT0gJz8nKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1xcdy8pO1xuICAgICAgcmV0dXJuICd2YXJpYWJsZS0yJztcbiAgICB9XG4gICAgaWYgKGNoID09PSAnYCcpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXFx3Lyk7XG4gICAgICByZXR1cm4gJ3F1b3RlJztcbiAgICB9XG4gICAgaWYgKGNoID09PSAnLycgJiYgcGFyc2VyQ29uZmlnLnNsYXNoQ29tbWVudHMgJiYgc3RyZWFtLmVhdCgnLycpKSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gJ2NvbW1lbnQnO1xuICAgIH1cbiAgICBpZiAoL1xcZC8udGVzdChjaCkpIHtcbiAgICAgIGlmIChjaCA9PT0gJzAnICYmIHN0cmVhbS5lYXQoL1tiQl0vKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1swMV0vKTtcbiAgICAgIH0gaWYgKGNoID09PSAnMCcgJiYgc3RyZWFtLmVhdCgvW3hYXS8pKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvWzAtOWEtZkEtRl0vKVxuICAgICAgfSBpZiAoY2ggPT09ICcwJyAmJiBzdHJlYW0uZWF0KC9bb09dLykpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bMC03XS8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFxkX10vKTtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoJy4nKSkge1xuICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcZF0vKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyZWFtLmVhdCgvW2VFXS8pKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFxkXFwtK10vKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgIH1cbiAgICBpZiAoIC9bK1xcLSomJT08PiE/fEBcXC5+Ol0vLnRlc3QoY2gpKSB7XG4gICAgICByZXR1cm4gJ29wZXJhdG9yJztcbiAgICB9XG4gICAgaWYgKC9bXFx3XFx4YTEtXFx1ZmZmZl0vLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXHhhMS1cXHVmZmZmXS8pO1xuICAgICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgICByZXR1cm4gd29yZHMuaGFzT3duUHJvcGVydHkoY3VyKSA/IHdvcmRzW2N1cl0gOiAndmFyaWFibGUnO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBuZXh0LCBlbmQgPSBmYWxzZSwgZXNjYXBlZCA9IGZhbHNlO1xuICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmIChuZXh0ID09PSAnXCInICYmICFlc2NhcGVkKSB7XG4gICAgICAgIGVuZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT09ICdcXFxcJztcbiAgICB9XG4gICAgaWYgKGVuZCAmJiAhZXNjYXBlZCkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgfVxuICAgIHJldHVybiAnc3RyaW5nJztcbiAgfTtcblxuICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBwcmV2LCBuZXh0O1xuICAgIHdoaWxlKHN0YXRlLmNvbW1lbnRMZXZlbCA+IDAgJiYgKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICBpZiAocHJldiA9PT0gJygnICYmIG5leHQgPT09ICcqJykgc3RhdGUuY29tbWVudExldmVsKys7XG4gICAgICBpZiAocHJldiA9PT0gJyonICYmIG5leHQgPT09ICcpJykgc3RhdGUuY29tbWVudExldmVsLS07XG4gICAgICBwcmV2ID0gbmV4dDtcbiAgICB9XG4gICAgaWYgKHN0YXRlLmNvbW1lbnRMZXZlbCA8PSAwKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICB9XG4gICAgcmV0dXJuICdjb21tZW50JztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuTG9uZ1N0cmluZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIHByZXYsIG5leHQ7XG4gICAgd2hpbGUgKHN0YXRlLmxvbmdTdHJpbmcgJiYgKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICBpZiAocHJldiA9PT0gJ3wnICYmIG5leHQgPT09ICd9Jykgc3RhdGUubG9uZ1N0cmluZyA9IGZhbHNlO1xuICAgICAgcHJldiA9IG5leHQ7XG4gICAgfVxuICAgIGlmICghc3RhdGUubG9uZ1N0cmluZykge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgfVxuICAgIHJldHVybiAnc3RyaW5nJztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7cmV0dXJuIHt0b2tlbml6ZTogdG9rZW5CYXNlLCBjb21tZW50TGV2ZWw6IDAsIGxvbmdTdHJpbmc6IGZhbHNlfTt9LFxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCIoKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCIqKVwiLFxuICAgIGxpbmVDb21tZW50OiBwYXJzZXJDb25maWcuc2xhc2hDb21tZW50cyA/IFwiLy9cIiA6IG51bGxcbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoJ3RleHQveC1vY2FtbCcsIHtcbiAgbmFtZTogJ21sbGlrZScsXG4gIGV4dHJhV29yZHM6IHtcbiAgICAnYW5kJzogJ2tleXdvcmQnLFxuICAgICdhc3NlcnQnOiAna2V5d29yZCcsXG4gICAgJ2JlZ2luJzogJ2tleXdvcmQnLFxuICAgICdjbGFzcyc6ICdrZXl3b3JkJyxcbiAgICAnY29uc3RyYWludCc6ICdrZXl3b3JkJyxcbiAgICAnZG9uZSc6ICdrZXl3b3JkJyxcbiAgICAnZG93bnRvJzogJ2tleXdvcmQnLFxuICAgICdleHRlcm5hbCc6ICdrZXl3b3JkJyxcbiAgICAnZnVuY3Rpb24nOiAna2V5d29yZCcsXG4gICAgJ2luaXRpYWxpemVyJzogJ2tleXdvcmQnLFxuICAgICdsYXp5JzogJ2tleXdvcmQnLFxuICAgICdtYXRjaCc6ICdrZXl3b3JkJyxcbiAgICAnbWV0aG9kJzogJ2tleXdvcmQnLFxuICAgICdtb2R1bGUnOiAna2V5d29yZCcsXG4gICAgJ211dGFibGUnOiAna2V5d29yZCcsXG4gICAgJ25ldyc6ICdrZXl3b3JkJyxcbiAgICAnbm9ucmVjJzogJ2tleXdvcmQnLFxuICAgICdvYmplY3QnOiAna2V5d29yZCcsXG4gICAgJ3ByaXZhdGUnOiAna2V5d29yZCcsXG4gICAgJ3NpZyc6ICdrZXl3b3JkJyxcbiAgICAndG8nOiAna2V5d29yZCcsXG4gICAgJ3RyeSc6ICdrZXl3b3JkJyxcbiAgICAndmFsdWUnOiAna2V5d29yZCcsXG4gICAgJ3ZpcnR1YWwnOiAna2V5d29yZCcsXG4gICAgJ3doZW4nOiAna2V5d29yZCcsXG5cbiAgICAvLyBidWlsdGluc1xuICAgICdyYWlzZSc6ICdidWlsdGluJyxcbiAgICAnZmFpbHdpdGgnOiAnYnVpbHRpbicsXG4gICAgJ3RydWUnOiAnYnVpbHRpbicsXG4gICAgJ2ZhbHNlJzogJ2J1aWx0aW4nLFxuXG4gICAgLy8gUGVydmFzaXZlcyBidWlsdGluc1xuICAgICdhc3InOiAnYnVpbHRpbicsXG4gICAgJ2xhbmQnOiAnYnVpbHRpbicsXG4gICAgJ2xvcic6ICdidWlsdGluJyxcbiAgICAnbHNsJzogJ2J1aWx0aW4nLFxuICAgICdsc3InOiAnYnVpbHRpbicsXG4gICAgJ2x4b3InOiAnYnVpbHRpbicsXG4gICAgJ21vZCc6ICdidWlsdGluJyxcbiAgICAnb3InOiAnYnVpbHRpbicsXG5cbiAgICAvLyBNb3JlIFBlcnZhc2l2ZXNcbiAgICAncmFpc2Vfbm90cmFjZSc6ICdidWlsdGluJyxcbiAgICAndHJhY2UnOiAnYnVpbHRpbicsXG4gICAgJ2V4aXQnOiAnYnVpbHRpbicsXG4gICAgJ3ByaW50X3N0cmluZyc6ICdidWlsdGluJyxcbiAgICAncHJpbnRfZW5kbGluZSc6ICdidWlsdGluJyxcblxuICAgICAnaW50JzogJ3R5cGUnLFxuICAgICAnZmxvYXQnOiAndHlwZScsXG4gICAgICdib29sJzogJ3R5cGUnLFxuICAgICAnY2hhcic6ICd0eXBlJyxcbiAgICAgJ3N0cmluZyc6ICd0eXBlJyxcbiAgICAgJ3VuaXQnOiAndHlwZScsXG5cbiAgICAgLy8gTW9kdWxlc1xuICAgICAnTGlzdCc6ICdidWlsdGluJ1xuICB9XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKCd0ZXh0L3gtZnNoYXJwJywge1xuICBuYW1lOiAnbWxsaWtlJyxcbiAgZXh0cmFXb3Jkczoge1xuICAgICdhYnN0cmFjdCc6ICdrZXl3b3JkJyxcbiAgICAnYXNzZXJ0JzogJ2tleXdvcmQnLFxuICAgICdiYXNlJzogJ2tleXdvcmQnLFxuICAgICdiZWdpbic6ICdrZXl3b3JkJyxcbiAgICAnY2xhc3MnOiAna2V5d29yZCcsXG4gICAgJ2RlZmF1bHQnOiAna2V5d29yZCcsXG4gICAgJ2RlbGVnYXRlJzogJ2tleXdvcmQnLFxuICAgICdkbyEnOiAna2V5d29yZCcsXG4gICAgJ2RvbmUnOiAna2V5d29yZCcsXG4gICAgJ2Rvd25jYXN0JzogJ2tleXdvcmQnLFxuICAgICdkb3dudG8nOiAna2V5d29yZCcsXG4gICAgJ2VsaWYnOiAna2V5d29yZCcsXG4gICAgJ2V4dGVybic6ICdrZXl3b3JkJyxcbiAgICAnZmluYWxseSc6ICdrZXl3b3JkJyxcbiAgICAnZm9yJzogJ2tleXdvcmQnLFxuICAgICdmdW5jdGlvbic6ICdrZXl3b3JkJyxcbiAgICAnZ2xvYmFsJzogJ2tleXdvcmQnLFxuICAgICdpbmhlcml0JzogJ2tleXdvcmQnLFxuICAgICdpbmxpbmUnOiAna2V5d29yZCcsXG4gICAgJ2ludGVyZmFjZSc6ICdrZXl3b3JkJyxcbiAgICAnaW50ZXJuYWwnOiAna2V5d29yZCcsXG4gICAgJ2xhenknOiAna2V5d29yZCcsXG4gICAgJ2xldCEnOiAna2V5d29yZCcsXG4gICAgJ21hdGNoJzogJ2tleXdvcmQnLFxuICAgICdtZW1iZXInOiAna2V5d29yZCcsXG4gICAgJ21vZHVsZSc6ICdrZXl3b3JkJyxcbiAgICAnbXV0YWJsZSc6ICdrZXl3b3JkJyxcbiAgICAnbmFtZXNwYWNlJzogJ2tleXdvcmQnLFxuICAgICduZXcnOiAna2V5d29yZCcsXG4gICAgJ251bGwnOiAna2V5d29yZCcsXG4gICAgJ292ZXJyaWRlJzogJ2tleXdvcmQnLFxuICAgICdwcml2YXRlJzogJ2tleXdvcmQnLFxuICAgICdwdWJsaWMnOiAna2V5d29yZCcsXG4gICAgJ3JldHVybiEnOiAna2V5d29yZCcsXG4gICAgJ3JldHVybic6ICdrZXl3b3JkJyxcbiAgICAnc2VsZWN0JzogJ2tleXdvcmQnLFxuICAgICdzdGF0aWMnOiAna2V5d29yZCcsXG4gICAgJ3RvJzogJ2tleXdvcmQnLFxuICAgICd0cnknOiAna2V5d29yZCcsXG4gICAgJ3VwY2FzdCc6ICdrZXl3b3JkJyxcbiAgICAndXNlISc6ICdrZXl3b3JkJyxcbiAgICAndXNlJzogJ2tleXdvcmQnLFxuICAgICd2b2lkJzogJ2tleXdvcmQnLFxuICAgICd3aGVuJzogJ2tleXdvcmQnLFxuICAgICd5aWVsZCEnOiAna2V5d29yZCcsXG4gICAgJ3lpZWxkJzogJ2tleXdvcmQnLFxuXG4gICAgLy8gUmVzZXJ2ZWQgd29yZHNcbiAgICAnYXRvbWljJzogJ2tleXdvcmQnLFxuICAgICdicmVhayc6ICdrZXl3b3JkJyxcbiAgICAnY2hlY2tlZCc6ICdrZXl3b3JkJyxcbiAgICAnY29tcG9uZW50JzogJ2tleXdvcmQnLFxuICAgICdjb25zdCc6ICdrZXl3b3JkJyxcbiAgICAnY29uc3RyYWludCc6ICdrZXl3b3JkJyxcbiAgICAnY29uc3RydWN0b3InOiAna2V5d29yZCcsXG4gICAgJ2NvbnRpbnVlJzogJ2tleXdvcmQnLFxuICAgICdlYWdlcic6ICdrZXl3b3JkJyxcbiAgICAnZXZlbnQnOiAna2V5d29yZCcsXG4gICAgJ2V4dGVybmFsJzogJ2tleXdvcmQnLFxuICAgICdmaXhlZCc6ICdrZXl3b3JkJyxcbiAgICAnbWV0aG9kJzogJ2tleXdvcmQnLFxuICAgICdtaXhpbic6ICdrZXl3b3JkJyxcbiAgICAnb2JqZWN0JzogJ2tleXdvcmQnLFxuICAgICdwYXJhbGxlbCc6ICdrZXl3b3JkJyxcbiAgICAncHJvY2Vzcyc6ICdrZXl3b3JkJyxcbiAgICAncHJvdGVjdGVkJzogJ2tleXdvcmQnLFxuICAgICdwdXJlJzogJ2tleXdvcmQnLFxuICAgICdzZWFsZWQnOiAna2V5d29yZCcsXG4gICAgJ3RhaWxjYWxsJzogJ2tleXdvcmQnLFxuICAgICd0cmFpdCc6ICdrZXl3b3JkJyxcbiAgICAndmlydHVhbCc6ICdrZXl3b3JkJyxcbiAgICAndm9sYXRpbGUnOiAna2V5d29yZCcsXG5cbiAgICAvLyBidWlsdGluc1xuICAgICdMaXN0JzogJ2J1aWx0aW4nLFxuICAgICdTZXEnOiAnYnVpbHRpbicsXG4gICAgJ01hcCc6ICdidWlsdGluJyxcbiAgICAnU2V0JzogJ2J1aWx0aW4nLFxuICAgICdPcHRpb24nOiAnYnVpbHRpbicsXG4gICAgJ2ludCc6ICdidWlsdGluJyxcbiAgICAnc3RyaW5nJzogJ2J1aWx0aW4nLFxuICAgICdub3QnOiAnYnVpbHRpbicsXG4gICAgJ3RydWUnOiAnYnVpbHRpbicsXG4gICAgJ2ZhbHNlJzogJ2J1aWx0aW4nLFxuXG4gICAgJ3JhaXNlJzogJ2J1aWx0aW4nLFxuICAgICdmYWlsd2l0aCc6ICdidWlsdGluJ1xuICB9LFxuICBzbGFzaENvbW1lbnRzOiB0cnVlXG59KTtcblxuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoJ3RleHQveC1zbWwnLCB7XG4gIG5hbWU6ICdtbGxpa2UnLFxuICBleHRyYVdvcmRzOiB7XG4gICAgJ2Fic3R5cGUnOiAna2V5d29yZCcsXG4gICAgJ2FuZCc6ICdrZXl3b3JkJyxcbiAgICAnYW5kYWxzbyc6ICdrZXl3b3JkJyxcbiAgICAnY2FzZSc6ICdrZXl3b3JkJyxcbiAgICAnZGF0YXR5cGUnOiAna2V5d29yZCcsXG4gICAgJ2ZuJzogJ2tleXdvcmQnLFxuICAgICdoYW5kbGUnOiAna2V5d29yZCcsXG4gICAgJ2luZml4JzogJ2tleXdvcmQnLFxuICAgICdpbmZpeHInOiAna2V5d29yZCcsXG4gICAgJ2xvY2FsJzogJ2tleXdvcmQnLFxuICAgICdub25maXgnOiAna2V5d29yZCcsXG4gICAgJ29wJzogJ2tleXdvcmQnLFxuICAgICdvcmVsc2UnOiAna2V5d29yZCcsXG4gICAgJ3JhaXNlJzogJ2tleXdvcmQnLFxuICAgICd3aXRodHlwZSc6ICdrZXl3b3JkJyxcbiAgICAnZXF0eXBlJzogJ2tleXdvcmQnLFxuICAgICdzaGFyaW5nJzogJ2tleXdvcmQnLFxuICAgICdzaWcnOiAna2V5d29yZCcsXG4gICAgJ3NpZ25hdHVyZSc6ICdrZXl3b3JkJyxcbiAgICAnc3RydWN0dXJlJzogJ2tleXdvcmQnLFxuICAgICd3aGVyZSc6ICdrZXl3b3JkJyxcbiAgICAndHJ1ZSc6ICdrZXl3b3JkJyxcbiAgICAnZmFsc2UnOiAna2V5d29yZCcsXG5cbiAgICAvLyB0eXBlc1xuICAgICdpbnQnOiAnYnVpbHRpbicsXG4gICAgJ3JlYWwnOiAnYnVpbHRpbicsXG4gICAgJ3N0cmluZyc6ICdidWlsdGluJyxcbiAgICAnY2hhcic6ICdidWlsdGluJyxcbiAgICAnYm9vbCc6ICdidWlsdGluJ1xuICB9LFxuICBzbGFzaENvbW1lbnRzOiB0cnVlXG59KTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vLyBNb2RlbGljYSBzdXBwb3J0IGZvciBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IExlbm5hcnQgT2NoZWxcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pXG5cbihmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcIm1vZGVsaWNhXCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7XG5cbiAgICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0O1xuICAgIHZhciBrZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5rZXl3b3JkcyB8fCB7fTtcbiAgICB2YXIgYnVpbHRpbiA9IHBhcnNlckNvbmZpZy5idWlsdGluIHx8IHt9O1xuICAgIHZhciBhdG9tcyA9IHBhcnNlckNvbmZpZy5hdG9tcyB8fCB7fTtcblxuICAgIHZhciBpc1NpbmdsZU9wZXJhdG9yQ2hhciA9IC9bOz1cXCg6XFwpLHt9Lio8PitcXC1cXC9eXFxbXFxdXS87XG4gICAgdmFyIGlzRG91YmxlT3BlcmF0b3JDaGFyID0gLyg6PXw8PXw+PXw9PXw8PnxcXC5cXCt8XFwuXFwtfFxcLlxcKnxcXC5cXC98XFwuXFxeKS87XG4gICAgdmFyIGlzRGlnaXQgPSAvWzAtOV0vO1xuICAgIHZhciBpc05vbkRpZ2l0ID0gL1tfYS16QS1aXS87XG5cbiAgICBmdW5jdGlvbiB0b2tlbkxpbmVDb21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlbkJsb2NrQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7XG4gICAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICAgIGlmIChtYXliZUVuZCAmJiBjaCA9PSBcIi9cIikge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBtYXliZUVuZCA9IChjaCA9PSBcIipcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7XG4gICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2ggPT0gJ1wiJyAmJiAhZXNjYXBlZCkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgICAgICBzdGF0ZS5zb2wgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gXCJcXFxcXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRva2VuSWRlbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzRGlnaXQpO1xuICAgICAgd2hpbGUgKHN0cmVhbS5lYXQoaXNEaWdpdCkgfHwgc3RyZWFtLmVhdChpc05vbkRpZ2l0KSkgeyB9XG5cblxuICAgICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7XG5cbiAgICAgIGlmKHN0YXRlLnNvbCAmJiAoY3VyID09IFwicGFja2FnZVwiIHx8IGN1ciA9PSBcIm1vZGVsXCIgfHwgY3VyID09IFwid2hlblwiIHx8IGN1ciA9PSBcImNvbm5lY3RvclwiKSkgc3RhdGUubGV2ZWwrKztcbiAgICAgIGVsc2UgaWYoc3RhdGUuc29sICYmIGN1ciA9PSBcImVuZFwiICYmIHN0YXRlLmxldmVsID4gMCkgc3RhdGUubGV2ZWwtLTtcblxuICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgc3RhdGUuc29sID0gZmFsc2U7XG5cbiAgICAgIGlmIChrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICBlbHNlIGlmIChidWlsdGluLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgICAgIGVsc2UgaWYgKGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImF0b21cIjtcbiAgICAgIGVsc2UgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlblFJZGVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB3aGlsZSAoc3RyZWFtLmVhdCgvW14nXS8pKSB7IH1cblxuICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgc3RhdGUuc29sID0gZmFsc2U7XG5cbiAgICAgIGlmKHN0cmVhbS5lYXQoXCInXCIpKVxuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRva2VuVW5zaWduZWROdWJlcihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoaXNEaWdpdCk7XG4gICAgICBpZiAoc3RyZWFtLmVhdCgnLicpKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc0RpZ2l0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0uZWF0KCdlJykgfHwgc3RyZWFtLmVhdCgnRScpKSB7XG4gICAgICAgIGlmICghc3RyZWFtLmVhdCgnLScpKVxuICAgICAgICAgIHN0cmVhbS5lYXQoJysnKTtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzRGlnaXQpO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICBzdGF0ZS5zb2wgPSBmYWxzZTtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH1cblxuICAgIC8vIEludGVyZmFjZVxuICAgIHJldHVybiB7XG4gICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b2tlbml6ZTogbnVsbCxcbiAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICBzb2w6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH0sXG5cbiAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGlmKHN0YXRlLnRva2VuaXplICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgICBzdGF0ZS5zb2wgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV0hJVEVTUEFDRVxuICAgICAgICBpZihzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG5cbiAgICAgICAgLy8gTElORUNPTU1FTlRcbiAgICAgICAgaWYoY2ggPT0gJy8nICYmIHN0cmVhbS5lYXQoJy8nKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5MaW5lQ29tbWVudDtcbiAgICAgICAgfVxuICAgICAgICAvLyBCTE9DS0NPTU1FTlRcbiAgICAgICAgZWxzZSBpZihjaCA9PSAnLycgJiYgc3RyZWFtLmVhdCgnKicpKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJsb2NrQ29tbWVudDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUV08gU1lNQk9MIFRPS0VOU1xuICAgICAgICBlbHNlIGlmKGlzRG91YmxlT3BlcmF0b3JDaGFyLnRlc3QoY2grc3RyZWFtLnBlZWsoKSkpIHtcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNJTkdMRSBTWU1CT0wgVE9LRU5TXG4gICAgICAgIGVsc2UgaWYoaXNTaW5nbGVPcGVyYXRvckNoYXIudGVzdChjaCkpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJREVOVFxuICAgICAgICBlbHNlIGlmKGlzTm9uRGlnaXQudGVzdChjaCkpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuSWRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUS1JREVOVFxuICAgICAgICBlbHNlIGlmKGNoID09IFwiJ1wiICYmIHN0cmVhbS5wZWVrKCkgJiYgc3RyZWFtLnBlZWsoKSAhPSBcIidcIikge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5RSWRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU1RSSU5HXG4gICAgICAgIGVsc2UgaWYoY2ggPT0gJ1wiJykge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVU5TSUdORURfTlVCRVJcbiAgICAgICAgZWxzZSBpZihpc0RpZ2l0LnRlc3QoY2gpKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblVuc2lnbmVkTnViZXI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRVJST1JcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9LFxuXG4gICAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IG51bGwpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc3RhdGUubGV2ZWw7XG4gICAgICAgIGlmKC8oYWxnb3JpdGhtKS8udGVzdCh0ZXh0QWZ0ZXIpKSBsZXZlbC0tO1xuICAgICAgICBpZigvKGVxdWF0aW9uKS8udGVzdCh0ZXh0QWZ0ZXIpKSBsZXZlbC0tO1xuICAgICAgICBpZigvKGluaXRpYWwgYWxnb3JpdGhtKS8udGVzdCh0ZXh0QWZ0ZXIpKSBsZXZlbC0tO1xuICAgICAgICBpZigvKGluaXRpYWwgZXF1YXRpb24pLy50ZXN0KHRleHRBZnRlcikpIGxldmVsLS07XG4gICAgICAgIGlmKC8oZW5kKS8udGVzdCh0ZXh0QWZ0ZXIpKSBsZXZlbC0tO1xuXG4gICAgICAgIGlmKGxldmVsID4gMClcbiAgICAgICAgICByZXR1cm4gaW5kZW50VW5pdCpsZXZlbDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgfSxcblxuICAgICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiLypcIixcbiAgICAgIGJsb2NrQ29tbWVudEVuZDogXCIqL1wiLFxuICAgICAgbGluZUNvbW1lbnQ6IFwiLy9cIlxuICAgIH07XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHdvcmRzKHN0cikge1xuICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoXCIgXCIpO1xuICAgIGZvciAodmFyIGk9MDsgaTx3b3Jkcy5sZW5ndGg7ICsraSlcbiAgICAgIG9ialt3b3Jkc1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgbW9kZWxpY2FLZXl3b3JkcyA9IFwiYWxnb3JpdGhtIGFuZCBhbm5vdGF0aW9uIGFzc2VydCBibG9jayBicmVhayBjbGFzcyBjb25uZWN0IGNvbm5lY3RvciBjb25zdGFudCBjb25zdHJhaW5lZGJ5IGRlciBkaXNjcmV0ZSBlYWNoIGVsc2UgZWxzZWlmIGVsc2V3aGVuIGVuY2Fwc3VsYXRlZCBlbmQgZW51bWVyYXRpb24gZXF1YXRpb24gZXhwYW5kYWJsZSBleHRlbmRzIGV4dGVybmFsIGZhbHNlIGZpbmFsIGZsb3cgZm9yIGZ1bmN0aW9uIGlmIGltcG9ydCBpbXB1cmUgaW4gaW5pdGlhbCBpbm5lciBpbnB1dCBsb29wIG1vZGVsIG5vdCBvcGVyYXRvciBvciBvdXRlciBvdXRwdXQgcGFja2FnZSBwYXJhbWV0ZXIgcGFydGlhbCBwcm90ZWN0ZWQgcHVibGljIHB1cmUgcmVjb3JkIHJlZGVjbGFyZSByZXBsYWNlYWJsZSByZXR1cm4gc3RyZWFtIHRoZW4gdHJ1ZSB0eXBlIHdoZW4gd2hpbGUgd2l0aGluXCI7XG4gIHZhciBtb2RlbGljYUJ1aWx0aW4gPSBcImFicyBhY29zIGFjdHVhbFN0cmVhbSBhc2luIGF0YW4gYXRhbjIgY2FyZGluYWxpdHkgY2VpbCBjb3MgY29zaCBkZWxheSBkaXYgZWRnZSBleHAgZmxvb3IgZ2V0SW5zdGFuY2VOYW1lIGhvbW90b3B5IGluU3RyZWFtIGludGVnZXIgbG9nIGxvZzEwIG1vZCBwcmUgcmVpbml0IHJlbSBzZW1pTGluZWFyIHNpZ24gc2luIHNpbmggc3BhdGlhbERpc3RyaWJ1dGlvbiBzcXJ0IHRhbiB0YW5oXCI7XG4gIHZhciBtb2RlbGljYUF0b21zID0gXCJSZWFsIEJvb2xlYW4gSW50ZWdlciBTdHJpbmdcIjtcblxuICBmdW5jdGlvbiBkZWYobWltZXMsIG1vZGUpIHtcbiAgICBpZiAodHlwZW9mIG1pbWVzID09IFwic3RyaW5nXCIpXG4gICAgICBtaW1lcyA9IFttaW1lc107XG5cbiAgICB2YXIgd29yZHMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGFkZChvYmopIHtcbiAgICAgIGlmIChvYmopXG4gICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKVxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpXG4gICAgICAgICAgICB3b3Jkcy5wdXNoKHByb3ApO1xuICAgIH1cblxuICAgIGFkZChtb2RlLmtleXdvcmRzKTtcbiAgICBhZGQobW9kZS5idWlsdGluKTtcbiAgICBhZGQobW9kZS5hdG9tcyk7XG5cbiAgICBpZiAod29yZHMubGVuZ3RoKSB7XG4gICAgICBtb2RlLmhlbHBlclR5cGUgPSBtaW1lc1swXTtcbiAgICAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJoaW50V29yZHNcIiwgbWltZXNbMF0sIHdvcmRzKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpPTA7IGk8bWltZXMubGVuZ3RoOyArK2kpXG4gICAgICBDb2RlTWlycm9yLmRlZmluZU1JTUUobWltZXNbaV0sIG1vZGUpO1xuICB9XG5cbiAgZGVmKFtcInRleHQveC1tb2RlbGljYVwiXSwge1xuICAgIG5hbWU6IFwibW9kZWxpY2FcIixcbiAgICBrZXl3b3Jkczogd29yZHMobW9kZWxpY2FLZXl3b3JkcyksXG4gICAgYnVpbHRpbjogd29yZHMobW9kZWxpY2FCdWlsdGluKSxcbiAgICBhdG9tczogd29yZHMobW9kZWxpY2FBdG9tcylcbiAgfSk7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8vIG1vZGUocykgZm9yIHRoZSBzZXF1ZW5jZSBjaGFydCBkc2wncyBtc2NnZW4sIHjDuSBhbmQgbXNnZW5ueVxuLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbXNjZ2VuLCBzZWUgdGhlIHNpdGUgb2YgdGhlIG9yaWdpbmFsIGF1dGhvcjpcbi8vIGh0dHA6Ly93d3cubWN0ZXJuYW4ubWUudWsvbXNjZ2VuXG4vL1xuLy8gVGhpcyBtb2RlIGZvciBtc2NnZW4gYW5kIHRoZSB0d28gZGVyaXZhdGl2ZSBsYW5ndWFnZXMgd2VyZVxuLy8gb3JpZ2luYWxseSBtYWRlIGZvciB1c2UgaW4gdGhlIG1zY2dlbl9qcyBpbnRlcnByZXRlclxuLy8gKGh0dHBzOi8vc3ZlcndlaWouZ2l0aHViLmlvL21zY2dlbl9qcylcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAoIHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKS8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKCB0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKS8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZS8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgbGFuZ3VhZ2VzID0ge1xuICAgIG1zY2dlbjoge1xuICAgICAgXCJrZXl3b3Jkc1wiIDogW1wibXNjXCJdLFxuICAgICAgXCJvcHRpb25zXCIgOiBbXCJoc2NhbGVcIiwgXCJ3aWR0aFwiLCBcImFyY2dyYWRpZW50XCIsIFwid29yZHdyYXBhcmNzXCJdLFxuICAgICAgXCJjb25zdGFudHNcIiA6IFtcInRydWVcIiwgXCJmYWxzZVwiLCBcIm9uXCIsIFwib2ZmXCJdLFxuICAgICAgXCJhdHRyaWJ1dGVzXCIgOiBbXCJsYWJlbFwiLCBcImlkdXJsXCIsIFwiaWRcIiwgXCJ1cmxcIiwgXCJsaW5lY29sb3JcIiwgXCJsaW5lY29sb3VyXCIsIFwidGV4dGNvbG9yXCIsIFwidGV4dGNvbG91clwiLCBcInRleHRiZ2NvbG9yXCIsIFwidGV4dGJnY29sb3VyXCIsIFwiYXJjbGluZWNvbG9yXCIsIFwiYXJjbGluZWNvbG91clwiLCBcImFyY3RleHRjb2xvclwiLCBcImFyY3RleHRjb2xvdXJcIiwgXCJhcmN0ZXh0Ymdjb2xvclwiLCBcImFyY3RleHRiZ2NvbG91clwiLCBcImFyY3NraXBcIl0sXG4gICAgICBcImJyYWNrZXRzXCIgOiBbXCJcXFxce1wiLCBcIlxcXFx9XCJdLCAvLyBbIGFuZCAgXSBhcmUgYnJhY2tldHMgdG9vLCBidXQgdGhlc2UgZ2V0IGhhbmRsZWQgaW4gd2l0aCBsaXN0c1xuICAgICAgXCJhcmNzV29yZHNcIiA6IFtcIm5vdGVcIiwgXCJhYm94XCIsIFwicmJveFwiLCBcImJveFwiXSxcbiAgICAgIFwiYXJjc090aGVyc1wiIDogW1wiXFxcXHxcXFxcfFxcXFx8XCIsIFwiXFxcXC5cXFxcLlxcXFwuXCIsIFwiLS0tXCIsIFwiLS1cIiwgXCI8LT5cIiwgXCI9PVwiLCBcIjw8PT4+XCIsIFwiPD0+XCIsIFwiXFxcXC5cXFxcLlwiLCBcIjw8Pj5cIiwgXCI6OlwiLCBcIjw6PlwiLCBcIi0+XCIsIFwiPT4+XCIsIFwiPT5cIiwgXCI+PlwiLCBcIjo+XCIsIFwiPC1cIiwgXCI8PD1cIiwgXCI8PVwiLCBcIjw8XCIsIFwiPDpcIiwgXCJ4LVwiLCBcIi14XCJdLFxuICAgICAgXCJzaW5nbGVjb21tZW50XCIgOiBbXCIvL1wiLCBcIiNcIl0sXG4gICAgICBcIm9wZXJhdG9yc1wiIDogW1wiPVwiXVxuICAgIH0sXG4gICAgeHU6IHtcbiAgICAgIFwia2V5d29yZHNcIiA6IFtcIm1zY1wiLCBcInh1XCJdLFxuICAgICAgXCJvcHRpb25zXCIgOiBbXCJoc2NhbGVcIiwgXCJ3aWR0aFwiLCBcImFyY2dyYWRpZW50XCIsIFwid29yZHdyYXBhcmNzXCIsIFwid29yZHdyYXBlbnRpdGllc1wiLCBcIndhdGVybWFya1wiXSxcbiAgICAgIFwiY29uc3RhbnRzXCIgOiBbXCJ0cnVlXCIsIFwiZmFsc2VcIiwgXCJvblwiLCBcIm9mZlwiLCBcImF1dG9cIl0sXG4gICAgICBcImF0dHJpYnV0ZXNcIiA6IFtcImxhYmVsXCIsIFwiaWR1cmxcIiwgXCJpZFwiLCBcInVybFwiLCBcImxpbmVjb2xvclwiLCBcImxpbmVjb2xvdXJcIiwgXCJ0ZXh0Y29sb3JcIiwgXCJ0ZXh0Y29sb3VyXCIsIFwidGV4dGJnY29sb3JcIiwgXCJ0ZXh0Ymdjb2xvdXJcIiwgXCJhcmNsaW5lY29sb3JcIiwgXCJhcmNsaW5lY29sb3VyXCIsIFwiYXJjdGV4dGNvbG9yXCIsIFwiYXJjdGV4dGNvbG91clwiLCBcImFyY3RleHRiZ2NvbG9yXCIsIFwiYXJjdGV4dGJnY29sb3VyXCIsIFwiYXJjc2tpcFwiLCBcInRpdGxlXCIsIFwiZGVhY3RpdmF0ZVwiLCBcImFjdGl2YXRlXCIsIFwiYWN0aXZhdGlvblwiXSxcbiAgICAgIFwiYnJhY2tldHNcIiA6IFtcIlxcXFx7XCIsIFwiXFxcXH1cIl0sICAvLyBbIGFuZCAgXSBhcmUgYnJhY2tldHMgdG9vLCBidXQgdGhlc2UgZ2V0IGhhbmRsZWQgaW4gd2l0aCBsaXN0c1xuICAgICAgXCJhcmNzV29yZHNcIiA6IFtcIm5vdGVcIiwgXCJhYm94XCIsIFwicmJveFwiLCBcImJveFwiLCBcImFsdFwiLCBcImVsc2VcIiwgXCJvcHRcIiwgXCJicmVha1wiLCBcInBhclwiLCBcInNlcVwiLCBcInN0cmljdFwiLCBcIm5lZ1wiLCBcImNyaXRpY2FsXCIsIFwiaWdub3JlXCIsIFwiY29uc2lkZXJcIiwgXCJhc3NlcnRcIiwgXCJsb29wXCIsIFwicmVmXCIsIFwiZXhjXCJdLFxuICAgICAgXCJhcmNzT3RoZXJzXCIgOiBbXCJcXFxcfFxcXFx8XFxcXHxcIiwgXCJcXFxcLlxcXFwuXFxcXC5cIiwgXCItLS1cIiwgXCItLVwiLCBcIjwtPlwiLCBcIj09XCIsIFwiPDw9Pj5cIiwgXCI8PT5cIiwgXCJcXFxcLlxcXFwuXCIsIFwiPDw+PlwiLCBcIjo6XCIsIFwiPDo+XCIsIFwiLT5cIiwgXCI9Pj5cIiwgXCI9PlwiLCBcIj4+XCIsIFwiOj5cIiwgXCI8LVwiLCBcIjw8PVwiLCBcIjw9XCIsIFwiPDxcIiwgXCI8OlwiLCBcIngtXCIsIFwiLXhcIl0sXG4gICAgICBcInNpbmdsZWNvbW1lbnRcIiA6IFtcIi8vXCIsIFwiI1wiXSxcbiAgICAgIFwib3BlcmF0b3JzXCIgOiBbXCI9XCJdXG4gICAgfSxcbiAgICBtc2dlbm55OiB7XG4gICAgICBcImtleXdvcmRzXCIgOiBudWxsLFxuICAgICAgXCJvcHRpb25zXCIgOiBbXCJoc2NhbGVcIiwgXCJ3aWR0aFwiLCBcImFyY2dyYWRpZW50XCIsIFwid29yZHdyYXBhcmNzXCIsIFwid29yZHdyYXBlbnRpdGllc1wiLCBcIndhdGVybWFya1wiXSxcbiAgICAgIFwiY29uc3RhbnRzXCIgOiBbXCJ0cnVlXCIsIFwiZmFsc2VcIiwgXCJvblwiLCBcIm9mZlwiLCBcImF1dG9cIl0sXG4gICAgICBcImF0dHJpYnV0ZXNcIiA6IG51bGwsXG4gICAgICBcImJyYWNrZXRzXCIgOiBbXCJcXFxce1wiLCBcIlxcXFx9XCJdLFxuICAgICAgXCJhcmNzV29yZHNcIiA6IFtcIm5vdGVcIiwgXCJhYm94XCIsIFwicmJveFwiLCBcImJveFwiLCBcImFsdFwiLCBcImVsc2VcIiwgXCJvcHRcIiwgXCJicmVha1wiLCBcInBhclwiLCBcInNlcVwiLCBcInN0cmljdFwiLCBcIm5lZ1wiLCBcImNyaXRpY2FsXCIsIFwiaWdub3JlXCIsIFwiY29uc2lkZXJcIiwgXCJhc3NlcnRcIiwgXCJsb29wXCIsIFwicmVmXCIsIFwiZXhjXCJdLFxuICAgICAgXCJhcmNzT3RoZXJzXCIgOiBbXCJcXFxcfFxcXFx8XFxcXHxcIiwgXCJcXFxcLlxcXFwuXFxcXC5cIiwgXCItLS1cIiwgXCItLVwiLCBcIjwtPlwiLCBcIj09XCIsIFwiPDw9Pj5cIiwgXCI8PT5cIiwgXCJcXFxcLlxcXFwuXCIsIFwiPDw+PlwiLCBcIjo6XCIsIFwiPDo+XCIsIFwiLT5cIiwgXCI9Pj5cIiwgXCI9PlwiLCBcIj4+XCIsIFwiOj5cIiwgXCI8LVwiLCBcIjw8PVwiLCBcIjw9XCIsIFwiPDxcIiwgXCI8OlwiLCBcIngtXCIsIFwiLXhcIl0sXG4gICAgICBcInNpbmdsZWNvbW1lbnRcIiA6IFtcIi8vXCIsIFwiI1wiXSxcbiAgICAgIFwib3BlcmF0b3JzXCIgOiBbXCI9XCJdXG4gICAgfVxuICB9XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwibXNjZ2VuXCIsIGZ1bmN0aW9uKF8sIG1vZGVDb25maWcpIHtcbiAgICB2YXIgbGFuZ3VhZ2UgPSBsYW5ndWFnZXNbbW9kZUNvbmZpZyAmJiBtb2RlQ29uZmlnLmxhbmd1YWdlIHx8IFwibXNjZ2VuXCJdXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0U3RhdGU6IHN0YXJ0U3RhdGVGbixcbiAgICAgIGNvcHlTdGF0ZTogY29weVN0YXRlRm4sXG4gICAgICB0b2tlbjogcHJvZHVjZVRva2VuRnVuY3Rpb24obGFuZ3VhZ2UpLFxuICAgICAgbGluZUNvbW1lbnQgOiBcIiNcIixcbiAgICAgIGJsb2NrQ29tbWVudFN0YXJ0IDogXCIvKlwiLFxuICAgICAgYmxvY2tDb21tZW50RW5kIDogXCIqL1wiXG4gICAgfTtcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LW1zY2dlblwiLCBcIm1zY2dlblwiKTtcbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXh1XCIsIHtuYW1lOiBcIm1zY2dlblwiLCBsYW5ndWFnZTogXCJ4dVwifSk7XG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1tc2dlbm55XCIsIHtuYW1lOiBcIm1zY2dlblwiLCBsYW5ndWFnZTogXCJtc2dlbm55XCJ9KTtcblxuICBmdW5jdGlvbiB3b3JkUmVnZXhwQm91bmRhcnkocFdvcmRzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJcXFxcYihcIiArIHBXb3Jkcy5qb2luKFwifFwiKSArIFwiKVxcXFxiXCIsIFwiaVwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdvcmRSZWdleHAocFdvcmRzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXCIgKyBwV29yZHMuam9pbihcInxcIikgKyBcIilcIiwgXCJpXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRTdGF0ZUZuKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbkNvbW1lbnQgOiBmYWxzZSxcbiAgICAgIGluU3RyaW5nIDogZmFsc2UsXG4gICAgICBpbkF0dHJpYnV0ZUxpc3QgOiBmYWxzZSxcbiAgICAgIGluU2NyaXB0IDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY29weVN0YXRlRm4ocFN0YXRlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluQ29tbWVudCA6IHBTdGF0ZS5pbkNvbW1lbnQsXG4gICAgICBpblN0cmluZyA6IHBTdGF0ZS5pblN0cmluZyxcbiAgICAgIGluQXR0cmlidXRlTGlzdCA6IHBTdGF0ZS5pbkF0dHJpYnV0ZUxpc3QsXG4gICAgICBpblNjcmlwdCA6IHBTdGF0ZS5pblNjcmlwdFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwcm9kdWNlVG9rZW5GdW5jdGlvbihwQ29uZmlnKSB7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ocFN0cmVhbSwgcFN0YXRlKSB7XG4gICAgICBpZiAocFN0cmVhbS5tYXRjaCh3b3JkUmVnZXhwKHBDb25maWcuYnJhY2tldHMpLCB0cnVlLCB0cnVlKSkge1xuICAgICAgICByZXR1cm4gXCJicmFja2V0XCI7XG4gICAgICB9XG4gICAgICAvKiBjb21tZW50cyAqL1xuICAgICAgaWYgKCFwU3RhdGUuaW5Db21tZW50KSB7XG4gICAgICAgIGlmIChwU3RyZWFtLm1hdGNoKC9cXC9cXCpbXlxcKlxcL10qLywgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgICAgICBwU3RhdGUuaW5Db21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBTdHJlYW0ubWF0Y2god29yZFJlZ2V4cChwQ29uZmlnLnNpbmdsZWNvbW1lbnQpLCB0cnVlLCB0cnVlKSkge1xuICAgICAgICAgIHBTdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocFN0YXRlLmluQ29tbWVudCkge1xuICAgICAgICBpZiAocFN0cmVhbS5tYXRjaCgvW15cXCpcXC9dKlxcKlxcLy8sIHRydWUsIHRydWUpKVxuICAgICAgICAgIHBTdGF0ZS5pbkNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHBTdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH1cbiAgICAgIC8qIHN0cmluZ3MgKi9cbiAgICAgIGlmICghcFN0YXRlLmluU3RyaW5nICYmIHBTdHJlYW0ubWF0Y2goL1xcXCIoXFxcXFxcXCJ8W15cXFwiXSkqLywgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgICAgcFN0YXRlLmluU3RyaW5nID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAocFN0YXRlLmluU3RyaW5nKSB7XG4gICAgICAgIGlmIChwU3RyZWFtLm1hdGNoKC9bXlxcXCJdKlxcXCIvLCB0cnVlLCB0cnVlKSlcbiAgICAgICAgICBwU3RhdGUuaW5TdHJpbmcgPSBmYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHBTdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgLyoga2V5d29yZHMgJiBvcGVyYXRvcnMgKi9cbiAgICAgIGlmICghIXBDb25maWcua2V5d29yZHMgJiYgcFN0cmVhbS5tYXRjaCh3b3JkUmVnZXhwQm91bmRhcnkocENvbmZpZy5rZXl3b3JkcyksIHRydWUsIHRydWUpKVxuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG5cbiAgICAgIGlmIChwU3RyZWFtLm1hdGNoKHdvcmRSZWdleHBCb3VuZGFyeShwQ29uZmlnLm9wdGlvbnMpLCB0cnVlLCB0cnVlKSlcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuXG4gICAgICBpZiAocFN0cmVhbS5tYXRjaCh3b3JkUmVnZXhwQm91bmRhcnkocENvbmZpZy5hcmNzV29yZHMpLCB0cnVlLCB0cnVlKSlcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuXG4gICAgICBpZiAocFN0cmVhbS5tYXRjaCh3b3JkUmVnZXhwKHBDb25maWcuYXJjc090aGVycyksIHRydWUsIHRydWUpKVxuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG5cbiAgICAgIGlmICghIXBDb25maWcub3BlcmF0b3JzICYmIHBTdHJlYW0ubWF0Y2god29yZFJlZ2V4cChwQ29uZmlnLm9wZXJhdG9ycyksIHRydWUsIHRydWUpKVxuICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuXG4gICAgICBpZiAoISFwQ29uZmlnLmNvbnN0YW50cyAmJiBwU3RyZWFtLm1hdGNoKHdvcmRSZWdleHAocENvbmZpZy5jb25zdGFudHMpLCB0cnVlLCB0cnVlKSlcbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcblxuICAgICAgLyogYXR0cmlidXRlIGxpc3RzICovXG4gICAgICBpZiAoIXBDb25maWcuaW5BdHRyaWJ1dGVMaXN0ICYmICEhcENvbmZpZy5hdHRyaWJ1dGVzICYmIHBTdHJlYW0ubWF0Y2goL1xcWy8sIHRydWUsIHRydWUpKSB7XG4gICAgICAgIHBDb25maWcuaW5BdHRyaWJ1dGVMaXN0ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFwiYnJhY2tldFwiO1xuICAgICAgfVxuICAgICAgaWYgKHBDb25maWcuaW5BdHRyaWJ1dGVMaXN0KSB7XG4gICAgICAgIGlmIChwQ29uZmlnLmF0dHJpYnV0ZXMgIT09IG51bGwgJiYgcFN0cmVhbS5tYXRjaCh3b3JkUmVnZXhwQm91bmRhcnkocENvbmZpZy5hdHRyaWJ1dGVzKSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocFN0cmVhbS5tYXRjaCgvXS8sIHRydWUsIHRydWUpKSB7XG4gICAgICAgICAgcENvbmZpZy5pbkF0dHJpYnV0ZUxpc3QgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gXCJicmFja2V0XCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcFN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gXCJiYXNlXCI7XG4gICAgfTtcbiAgfVxuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8qXG4gIFRoaXMgTVVNUFMgTGFuZ3VhZ2Ugc2NyaXB0IHdhcyBjb25zdHJ1Y3RlZCB1c2luZyB2YnNjcmlwdC5qcyBhcyBhIHRlbXBsYXRlLlxuKi9cblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwibXVtcHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gd29yZFJlZ2V4cCh3b3Jkcykge1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKChcIiArIHdvcmRzLmpvaW4oXCIpfChcIikgKyBcIikpXFxcXGJcIiwgXCJpXCIpO1xuICAgIH1cblxuICAgIHZhciBzaW5nbGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKFwiXltcXFxcK1xcXFwtXFxcXCovJiMhXz9cXFxcXFxcXDw+PVxcXFwnXFxcXFtcXFxcXV1cIik7XG4gICAgdmFyIGRvdWJsZU9wZXJhdG9ycyA9IG5ldyBSZWdFeHAoXCJeKCgnPSl8KDw9KXwoPj0pfCgnPil8KCc8KXwoW1spfChdXSl8KF4kKSlcIik7XG4gICAgdmFyIHNpbmdsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKFwiXltcXFxcLiw6XVwiKTtcbiAgICB2YXIgYnJhY2tldHMgPSBuZXcgUmVnRXhwKFwiWygpXVwiKTtcbiAgICB2YXIgaWRlbnRpZmllcnMgPSBuZXcgUmVnRXhwKFwiXlslQS1aYS16XVtBLVphLXowLTldKlwiKTtcbiAgICB2YXIgY29tbWFuZEtleXdvcmRzID0gW1wiYnJlYWtcIixcImNsb3NlXCIsXCJkb1wiLFwiZWxzZVwiLFwiZm9yXCIsXCJnb3RvXCIsIFwiaGFsdFwiLCBcImhhbmdcIiwgXCJpZlwiLCBcImpvYlwiLFwia2lsbFwiLFwibG9ja1wiLFwibWVyZ2VcIixcIm5ld1wiLFwib3BlblwiLCBcInF1aXRcIiwgXCJyZWFkXCIsIFwic2V0XCIsIFwidGNvbW1pdFwiLCBcInRyb2xsYmFja1wiLCBcInRzdGFydFwiLCBcInVzZVwiLCBcInZpZXdcIiwgXCJ3cml0ZVwiLCBcInhlY3V0ZVwiLCBcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0Y1wiLCBcInRyb1wiLCBcInRzXCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiXTtcbiAgICAvLyBUaGUgZm9sbG93aW5nIGxpc3QgaW5jbHVkZXMgaW5zdHJpbnNpYyBmdW5jdGlvbnMgX2FuZF8gc3BlY2lhbCB2YXJpYWJsZXNcbiAgICB2YXIgaW50cmluc2ljRnVuY3NXb3JkcyA9IFtcIlxcXFwkYXNjaWlcIiwgXCJcXFxcJGNoYXJcIiwgXCJcXFxcJGRhdGFcIiwgXCJcXFxcJGVjb2RlXCIsIFwiXFxcXCRlc3RhY2tcIiwgXCJcXFxcJGV0cmFwXCIsIFwiXFxcXCRleHRyYWN0XCIsIFwiXFxcXCRmaW5kXCIsIFwiXFxcXCRmbnVtYmVyXCIsIFwiXFxcXCRnZXRcIiwgXCJcXFxcJGhvcm9sb2dcIiwgXCJcXFxcJGlvXCIsIFwiXFxcXCRpbmNyZW1lbnRcIiwgXCJcXFxcJGpvYlwiLCBcIlxcXFwkanVzdGlmeVwiLCBcIlxcXFwkbGVuZ3RoXCIsIFwiXFxcXCRuYW1lXCIsIFwiXFxcXCRuZXh0XCIsIFwiXFxcXCRvcmRlclwiLCBcIlxcXFwkcGllY2VcIiwgXCJcXFxcJHFsZW5ndGhcIiwgXCJcXFxcJHFzdWJzY3JpcHRcIiwgXCJcXFxcJHF1ZXJ5XCIsIFwiXFxcXCRxdWl0XCIsIFwiXFxcXCRyYW5kb21cIiwgXCJcXFxcJHJldmVyc2VcIiwgXCJcXFxcJHNlbGVjdFwiLCBcIlxcXFwkc3RhY2tcIiwgXCJcXFxcJHRlc3RcIiwgXCJcXFxcJHRleHRcIiwgXCJcXFxcJHRyYW5zbGF0ZVwiLCBcIlxcXFwkdmlld1wiLCBcIlxcXFwkeFwiLCBcIlxcXFwkeVwiLCBcIlxcXFwkYVwiLCBcIlxcXFwkY1wiLCBcIlxcXFwkZFwiLCBcIlxcXFwkZVwiLCBcIlxcXFwkZWNcIiwgXCJcXFxcJGVzXCIsIFwiXFxcXCRldFwiLCBcIlxcXFwkZlwiLCBcIlxcXFwkZm5cIiwgXCJcXFxcJGdcIiwgXCJcXFxcJGhcIiwgXCJcXFxcJGlcIiwgXCJcXFxcJGpcIiwgXCJcXFxcJGxcIiwgXCJcXFxcJG5cIiwgXCJcXFxcJG5hXCIsIFwiXFxcXCRvXCIsIFwiXFxcXCRwXCIsIFwiXFxcXCRxXCIsIFwiXFxcXCRxbFwiLCBcIlxcXFwkcXNcIiwgXCJcXFxcJHJcIiwgXCJcXFxcJHJlXCIsIFwiXFxcXCRzXCIsIFwiXFxcXCRzdFwiLCBcIlxcXFwkdFwiLCBcIlxcXFwkdHJcIiwgXCJcXFxcJHZcIiwgXCJcXFxcJHpcIl07XG4gICAgdmFyIGludHJpbnNpY0Z1bmNzID0gd29yZFJlZ2V4cChpbnRyaW5zaWNGdW5jc1dvcmRzKTtcbiAgICB2YXIgY29tbWFuZCA9IHdvcmRSZWdleHAoY29tbWFuZEtleXdvcmRzKTtcblxuICAgIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgIHN0YXRlLmxhYmVsID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuY29tbWFuZE1vZGUgPSAwO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgPHNwYWNlPiBjaGFyYWN0ZXIgaGFzIG1lYW5pbmcgaW4gTVVNUFMuIElnbm9yaW5nIGNvbnNlY3V0aXZlXG4gICAgICAvLyBzcGFjZXMgd291bGQgaW50ZXJmZXJlIHdpdGggaW50ZXJwcmV0aW5nIHdoZXRoZXIgdGhlIG5leHQgbm9uLXNwYWNlXG4gICAgICAvLyBjaGFyYWN0ZXIgYmVsb25ncyB0byB0aGUgY29tbWFuZCBvciBhcmd1bWVudCBjb250ZXh0LlxuXG4gICAgICAvLyBFeGFtaW5lIGVhY2ggY2hhcmFjdGVyIGFuZCB1cGRhdGUgYSBtb2RlIHZhcmlhYmxlIHdob3NlIGludGVycHJldGF0aW9uIGlzOlxuICAgICAgLy8gICA+MCA9PiBjb21tYW5kICAgIDAgPT4gYXJndW1lbnQgICAgPDAgPT4gY29tbWFuZCBwb3N0LWNvbmRpdGlvbmFsXG4gICAgICB2YXIgY2ggPSBzdHJlYW0ucGVlaygpO1xuXG4gICAgICBpZiAoY2ggPT0gXCIgXCIgfHwgY2ggPT0gXCJcXHRcIikgeyAvLyBQcmUtcHJvY2VzcyA8c3BhY2U+XG4gICAgICAgIHN0YXRlLmxhYmVsID0gZmFsc2U7XG4gICAgICAgIGlmIChzdGF0ZS5jb21tYW5kTW9kZSA9PSAwKVxuICAgICAgICAgIHN0YXRlLmNvbW1hbmRNb2RlID0gMTtcbiAgICAgICAgZWxzZSBpZiAoKHN0YXRlLmNvbW1hbmRNb2RlIDwgMCkgfHwgKHN0YXRlLmNvbW1hbmRNb2RlID09IDIpKVxuICAgICAgICAgIHN0YXRlLmNvbW1hbmRNb2RlID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoKGNoICE9IFwiLlwiKSAmJiAoc3RhdGUuY29tbWFuZE1vZGUgPiAwKSkge1xuICAgICAgICBpZiAoY2ggPT0gXCI6XCIpXG4gICAgICAgICAgc3RhdGUuY29tbWFuZE1vZGUgPSAtMTsgICAvLyBTSVMgLSBDb21tYW5kIHBvc3QtY29uZGl0aW9uYWxcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHN0YXRlLmNvbW1hbmRNb2RlID0gMjtcbiAgICAgIH1cblxuICAgICAgLy8gRG8gbm90IGNvbG9yIHBhcmFtZXRlciBsaXN0IGFzIGxpbmUgdGFnXG4gICAgICBpZiAoKGNoID09PSBcIihcIikgfHwgKGNoID09PSBcIlxcdTAwMDlcIikpXG4gICAgICAgIHN0YXRlLmxhYmVsID0gZmFsc2U7XG5cbiAgICAgIC8vIE1VTVBTIGNvbW1lbnQgc3RhcnRzIHdpdGggXCI7XCJcbiAgICAgIGlmIChjaCA9PT0gXCI7XCIpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9XG5cbiAgICAgIC8vIE51bWJlciBMaXRlcmFscyAvLyBTSVMvUkxNIC0gTVVNUFMgcGVybWl0cyBjYW5vbmljIG51bWJlciBmb2xsb3dlZCBieSBjb25jYXRlbmF0ZSBvcGVyYXRvclxuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlstK10/XFxkKyhcXC5cXGQrKT8oW2VFXVstK10/XFxkKyk/LykpXG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuXG4gICAgICAvLyBIYW5kbGUgU3RyaW5nc1xuICAgICAgaWYgKGNoID09ICdcIicpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5za2lwVG8oJ1wiJykpIHtcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBvcGVyYXRvcnMgYW5kIERlbGltaXRlcnNcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goZG91YmxlT3BlcmF0b3JzKSB8fCBzdHJlYW0ubWF0Y2goc2luZ2xlT3BlcmF0b3JzKSlcbiAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcblxuICAgICAgLy8gUHJldmVudHMgbGVhZGluZyBcIi5cIiBpbiBETyBibG9jayBmcm9tIGZhbGxpbmcgdGhyb3VnaCB0byBlcnJvclxuICAgICAgaWYgKHN0cmVhbS5tYXRjaChzaW5nbGVEZWxpbWl0ZXJzKSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgIGlmIChicmFja2V0cy50ZXN0KGNoKSkge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gXCJicmFja2V0XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5jb21tYW5kTW9kZSA+IDAgJiYgc3RyZWFtLm1hdGNoKGNvbW1hbmQpKVxuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goaW50cmluc2ljRnVuY3MpKVxuICAgICAgICByZXR1cm4gXCJidWlsdGluXCI7XG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goaWRlbnRpZmllcnMpKVxuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuXG4gICAgICAvLyBEZXRlY3QgZG9sbGFyLXNpZ24gd2hlbiBub3QgYSBkb2N1bWVudGVkIGludHJpbnNpYyBmdW5jdGlvblxuICAgICAgLy8gXCJeXCIgbWF5IGludHJvZHVjZSBhIEdWTiBvciBTU1ZOIC0gQ29sb3Igc2FtZSBhcyBmdW5jdGlvblxuICAgICAgaWYgKGNoID09PSBcIiRcIiB8fCBjaCA9PT0gXCJeXCIpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIFwiYnVpbHRpblwiO1xuICAgICAgfVxuXG4gICAgICAvLyBNVU1QUyBJbmRpcmVjdGlvblxuICAgICAgaWYgKGNoID09PSBcIkBcIikge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gXCJzdHJpbmctMlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoL1tcXHclXS8udGVzdChjaCkpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3JV0vKTtcbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIG5vbi1kZXRlY3RlZCBpdGVtc1xuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICBjb21tYW5kTW9kZTogMFxuICAgICAgICB9O1xuICAgICAgfSxcblxuICAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICBpZiAoc3RhdGUubGFiZWwpIHJldHVybiBcInRhZ1wiO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LW11bXBzXCIsIFwibXVtcHNcIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwibmdpbnhcIiwgZnVuY3Rpb24oY29uZmlnKSB7XG5cbiAgZnVuY3Rpb24gd29yZHMoc3RyKSB7XG4gICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdChcIiBcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciBrZXl3b3JkcyA9IHdvcmRzKFxuICAgIC8qIG5neERpcmVjdGl2ZUNvbnRyb2wgKi8gXCJicmVhayByZXR1cm4gcmV3cml0ZSBzZXRcIiArXG4gICAgLyogbmd4RGlyZWN0aXZlICovIFwiIGFjY2VwdF9tdXRleCBhY2NlcHRfbXV0ZXhfZGVsYXkgYWNjZXNzX2xvZyBhZGRfYWZ0ZXJfYm9keSBhZGRfYmVmb3JlX2JvZHkgYWRkX2hlYWRlciBhZGRpdGlvbl90eXBlcyBhaW8gYWxpYXMgYWxsb3cgYW5jaWVudF9icm93c2VyIGFuY2llbnRfYnJvd3Nlcl92YWx1ZSBhdXRoX2Jhc2ljIGF1dGhfYmFzaWNfdXNlcl9maWxlIGF1dGhfaHR0cCBhdXRoX2h0dHBfaGVhZGVyIGF1dGhfaHR0cF90aW1lb3V0IGF1dG9pbmRleCBhdXRvaW5kZXhfZXhhY3Rfc2l6ZSBhdXRvaW5kZXhfbG9jYWx0aW1lIGNoYXJzZXQgY2hhcnNldF90eXBlcyBjbGllbnRfYm9keV9idWZmZXJfc2l6ZSBjbGllbnRfYm9keV9pbl9maWxlX29ubHkgY2xpZW50X2JvZHlfaW5fc2luZ2xlX2J1ZmZlciBjbGllbnRfYm9keV90ZW1wX3BhdGggY2xpZW50X2JvZHlfdGltZW91dCBjbGllbnRfaGVhZGVyX2J1ZmZlcl9zaXplIGNsaWVudF9oZWFkZXJfdGltZW91dCBjbGllbnRfbWF4X2JvZHlfc2l6ZSBjb25uZWN0aW9uX3Bvb2xfc2l6ZSBjcmVhdGVfZnVsbF9wdXRfcGF0aCBkYWVtb24gZGF2X2FjY2VzcyBkYXZfbWV0aG9kcyBkZWJ1Z19jb25uZWN0aW9uIGRlYnVnX3BvaW50cyBkZWZhdWx0X3R5cGUgZGVncmFkYXRpb24gZGVncmFkZSBkZW55IGRldnBvbGxfY2hhbmdlcyBkZXZwb2xsX2V2ZW50cyBkaXJlY3RpbyBkaXJlY3Rpb19hbGlnbm1lbnQgZW1wdHlfZ2lmIGVudiBlcG9sbF9ldmVudHMgZXJyb3JfbG9nIGV2ZW50cG9ydF9ldmVudHMgZXhwaXJlcyBmYXN0Y2dpX2JpbmQgZmFzdGNnaV9idWZmZXJfc2l6ZSBmYXN0Y2dpX2J1ZmZlcnMgZmFzdGNnaV9idXN5X2J1ZmZlcnNfc2l6ZSBmYXN0Y2dpX2NhY2hlIGZhc3RjZ2lfY2FjaGVfa2V5IGZhc3RjZ2lfY2FjaGVfbWV0aG9kcyBmYXN0Y2dpX2NhY2hlX21pbl91c2VzIGZhc3RjZ2lfY2FjaGVfcGF0aCBmYXN0Y2dpX2NhY2hlX3VzZV9zdGFsZSBmYXN0Y2dpX2NhY2hlX3ZhbGlkIGZhc3RjZ2lfY2F0Y2hfc3RkZXJyIGZhc3RjZ2lfY29ubmVjdF90aW1lb3V0IGZhc3RjZ2lfaGlkZV9oZWFkZXIgZmFzdGNnaV9pZ25vcmVfY2xpZW50X2Fib3J0IGZhc3RjZ2lfaWdub3JlX2hlYWRlcnMgZmFzdGNnaV9pbmRleCBmYXN0Y2dpX2ludGVyY2VwdF9lcnJvcnMgZmFzdGNnaV9tYXhfdGVtcF9maWxlX3NpemUgZmFzdGNnaV9uZXh0X3Vwc3RyZWFtIGZhc3RjZ2lfcGFyYW0gZmFzdGNnaV9wYXNzX2hlYWRlciBmYXN0Y2dpX3Bhc3NfcmVxdWVzdF9ib2R5IGZhc3RjZ2lfcGFzc19yZXF1ZXN0X2hlYWRlcnMgZmFzdGNnaV9yZWFkX3RpbWVvdXQgZmFzdGNnaV9zZW5kX2xvd2F0IGZhc3RjZ2lfc2VuZF90aW1lb3V0IGZhc3RjZ2lfc3BsaXRfcGF0aF9pbmZvIGZhc3RjZ2lfc3RvcmUgZmFzdGNnaV9zdG9yZV9hY2Nlc3MgZmFzdGNnaV90ZW1wX2ZpbGVfd3JpdGVfc2l6ZSBmYXN0Y2dpX3RlbXBfcGF0aCBmYXN0Y2dpX3Vwc3RyZWFtX2ZhaWxfdGltZW91dCBmYXN0Y2dpX3Vwc3RyZWFtX21heF9mYWlscyBmbHYgZ2VvaXBfY2l0eSBnZW9pcF9jb3VudHJ5IGdvb2dsZV9wZXJmdG9vbHNfcHJvZmlsZXMgZ3ppcCBnemlwX2J1ZmZlcnMgZ3ppcF9jb21wX2xldmVsIGd6aXBfZGlzYWJsZSBnemlwX2hhc2ggZ3ppcF9odHRwX3ZlcnNpb24gZ3ppcF9taW5fbGVuZ3RoIGd6aXBfbm9fYnVmZmVyIGd6aXBfcHJveGllZCBnemlwX3N0YXRpYyBnemlwX3R5cGVzIGd6aXBfdmFyeSBnemlwX3dpbmRvdyBpZl9tb2RpZmllZF9zaW5jZSBpZ25vcmVfaW52YWxpZF9oZWFkZXJzIGltYWdlX2ZpbHRlciBpbWFnZV9maWx0ZXJfYnVmZmVyIGltYWdlX2ZpbHRlcl9qcGVnX3F1YWxpdHkgaW1hZ2VfZmlsdGVyX3RyYW5zcGFyZW5jeSBpbWFwX2F1dGggaW1hcF9jYXBhYmlsaXRpZXMgaW1hcF9jbGllbnRfYnVmZmVyIGluZGV4IGlwX2hhc2gga2VlcGFsaXZlX3JlcXVlc3RzIGtlZXBhbGl2ZV90aW1lb3V0IGtxdWV1ZV9jaGFuZ2VzIGtxdWV1ZV9ldmVudHMgbGFyZ2VfY2xpZW50X2hlYWRlcl9idWZmZXJzIGxpbWl0X2Nvbm4gbGltaXRfY29ubl9sb2dfbGV2ZWwgbGltaXRfcmF0ZSBsaW1pdF9yYXRlX2FmdGVyIGxpbWl0X3JlcSBsaW1pdF9yZXFfbG9nX2xldmVsIGxpbWl0X3JlcV96b25lIGxpbWl0X3pvbmUgbGluZ2VyaW5nX3RpbWUgbGluZ2VyaW5nX3RpbWVvdXQgbG9ja19maWxlIGxvZ19mb3JtYXQgbG9nX25vdF9mb3VuZCBsb2dfc3VicmVxdWVzdCBtYXBfaGFzaF9idWNrZXRfc2l6ZSBtYXBfaGFzaF9tYXhfc2l6ZSBtYXN0ZXJfcHJvY2VzcyBtZW1jYWNoZWRfYmluZCBtZW1jYWNoZWRfYnVmZmVyX3NpemUgbWVtY2FjaGVkX2Nvbm5lY3RfdGltZW91dCBtZW1jYWNoZWRfbmV4dF91cHN0cmVhbSBtZW1jYWNoZWRfcmVhZF90aW1lb3V0IG1lbWNhY2hlZF9zZW5kX3RpbWVvdXQgbWVtY2FjaGVkX3Vwc3RyZWFtX2ZhaWxfdGltZW91dCBtZW1jYWNoZWRfdXBzdHJlYW1fbWF4X2ZhaWxzIG1lcmdlX3NsYXNoZXMgbWluX2RlbGV0ZV9kZXB0aCBtb2Rlcm5fYnJvd3NlciBtb2Rlcm5fYnJvd3Nlcl92YWx1ZSBtc2llX3BhZGRpbmcgbXNpZV9yZWZyZXNoIG11bHRpX2FjY2VwdCBvcGVuX2ZpbGVfY2FjaGUgb3Blbl9maWxlX2NhY2hlX2Vycm9ycyBvcGVuX2ZpbGVfY2FjaGVfZXZlbnRzIG9wZW5fZmlsZV9jYWNoZV9taW5fdXNlcyBvcGVuX2ZpbGVfY2FjaGVfdmFsaWQgb3Blbl9sb2dfZmlsZV9jYWNoZSBvdXRwdXRfYnVmZmVycyBvdmVycmlkZV9jaGFyc2V0IHBlcmwgcGVybF9tb2R1bGVzIHBlcmxfcmVxdWlyZSBwZXJsX3NldCBwaWQgcG9wM19hdXRoIHBvcDNfY2FwYWJpbGl0aWVzIHBvcnRfaW5fcmVkaXJlY3QgcG9zdHBvbmVfZ3ppcHBpbmcgcG9zdHBvbmVfb3V0cHV0IHByb3RvY29sIHByb3h5IHByb3h5X2JpbmQgcHJveHlfYnVmZmVyIHByb3h5X2J1ZmZlcl9zaXplIHByb3h5X2J1ZmZlcmluZyBwcm94eV9idWZmZXJzIHByb3h5X2J1c3lfYnVmZmVyc19zaXplIHByb3h5X2NhY2hlIHByb3h5X2NhY2hlX2tleSBwcm94eV9jYWNoZV9tZXRob2RzIHByb3h5X2NhY2hlX21pbl91c2VzIHByb3h5X2NhY2hlX3BhdGggcHJveHlfY2FjaGVfdXNlX3N0YWxlIHByb3h5X2NhY2hlX3ZhbGlkIHByb3h5X2Nvbm5lY3RfdGltZW91dCBwcm94eV9oZWFkZXJzX2hhc2hfYnVja2V0X3NpemUgcHJveHlfaGVhZGVyc19oYXNoX21heF9zaXplIHByb3h5X2hpZGVfaGVhZGVyIHByb3h5X2lnbm9yZV9jbGllbnRfYWJvcnQgcHJveHlfaWdub3JlX2hlYWRlcnMgcHJveHlfaW50ZXJjZXB0X2Vycm9ycyBwcm94eV9tYXhfdGVtcF9maWxlX3NpemUgcHJveHlfbWV0aG9kIHByb3h5X25leHRfdXBzdHJlYW0gcHJveHlfcGFzc19lcnJvcl9tZXNzYWdlIHByb3h5X3Bhc3NfaGVhZGVyIHByb3h5X3Bhc3NfcmVxdWVzdF9ib2R5IHByb3h5X3Bhc3NfcmVxdWVzdF9oZWFkZXJzIHByb3h5X3JlYWRfdGltZW91dCBwcm94eV9yZWRpcmVjdCBwcm94eV9zZW5kX2xvd2F0IHByb3h5X3NlbmRfdGltZW91dCBwcm94eV9zZXRfYm9keSBwcm94eV9zZXRfaGVhZGVyIHByb3h5X3NzbF9zZXNzaW9uX3JldXNlIHByb3h5X3N0b3JlIHByb3h5X3N0b3JlX2FjY2VzcyBwcm94eV90ZW1wX2ZpbGVfd3JpdGVfc2l6ZSBwcm94eV90ZW1wX3BhdGggcHJveHlfdGltZW91dCBwcm94eV91cHN0cmVhbV9mYWlsX3RpbWVvdXQgcHJveHlfdXBzdHJlYW1fbWF4X2ZhaWxzIHJhbmRvbV9pbmRleCByZWFkX2FoZWFkIHJlYWxfaXBfaGVhZGVyIHJlY3Vyc2l2ZV9lcnJvcl9wYWdlcyByZXF1ZXN0X3Bvb2xfc2l6ZSByZXNldF90aW1lZG91dF9jb25uZWN0aW9uIHJlc29sdmVyIHJlc29sdmVyX3RpbWVvdXQgcmV3cml0ZV9sb2cgcnRzaWdfb3ZlcmZsb3dfZXZlbnRzIHJ0c2lnX292ZXJmbG93X3Rlc3QgcnRzaWdfb3ZlcmZsb3dfdGhyZXNob2xkIHJ0c2lnX3NpZ25vIHNhdGlzZnkgc2VjdXJlX2xpbmtfc2VjcmV0IHNlbmRfbG93YXQgc2VuZF90aW1lb3V0IHNlbmRmaWxlIHNlbmRmaWxlX21heF9jaHVuayBzZXJ2ZXJfbmFtZV9pbl9yZWRpcmVjdCBzZXJ2ZXJfbmFtZXNfaGFzaF9idWNrZXRfc2l6ZSBzZXJ2ZXJfbmFtZXNfaGFzaF9tYXhfc2l6ZSBzZXJ2ZXJfdG9rZW5zIHNldF9yZWFsX2lwX2Zyb20gc210cF9hdXRoIHNtdHBfY2FwYWJpbGl0aWVzIHNtdHBfY2xpZW50X2J1ZmZlciBzbXRwX2dyZWV0aW5nX2RlbGF5IHNvX2tlZXBhbGl2ZSBzb3VyY2VfY2hhcnNldCBzc2kgc3NpX2lnbm9yZV9yZWN5Y2xlZF9idWZmZXJzIHNzaV9taW5fZmlsZV9jaHVuayBzc2lfc2lsZW50X2Vycm9ycyBzc2lfdHlwZXMgc3NpX3ZhbHVlX2xlbmd0aCBzc2wgc3NsX2NlcnRpZmljYXRlIHNzbF9jZXJ0aWZpY2F0ZV9rZXkgc3NsX2NpcGhlcnMgc3NsX2NsaWVudF9jZXJ0aWZpY2F0ZSBzc2xfY3JsIHNzbF9kaHBhcmFtIHNzbF9lbmdpbmUgc3NsX3ByZWZlcl9zZXJ2ZXJfY2lwaGVycyBzc2xfcHJvdG9jb2xzIHNzbF9zZXNzaW9uX2NhY2hlIHNzbF9zZXNzaW9uX3RpbWVvdXQgc3NsX3ZlcmlmeV9jbGllbnQgc3NsX3ZlcmlmeV9kZXB0aCBzdGFydHRscyBzdHViX3N0YXR1cyBzdWJfZmlsdGVyIHN1Yl9maWx0ZXJfb25jZSBzdWJfZmlsdGVyX3R5cGVzIHRjcF9ub2RlbGF5IHRjcF9ub3B1c2ggdGhyZWFkX3N0YWNrX3NpemUgdGltZW91dCB0aW1lcl9yZXNvbHV0aW9uIHR5cGVzX2hhc2hfYnVja2V0X3NpemUgdHlwZXNfaGFzaF9tYXhfc2l6ZSB1bmRlcnNjb3Jlc19pbl9oZWFkZXJzIHVuaW5pdGlhbGl6ZWRfdmFyaWFibGVfd2FybiB1c2UgdXNlciB1c2VyaWQgdXNlcmlkX2RvbWFpbiB1c2VyaWRfZXhwaXJlcyB1c2VyaWRfbWFyayB1c2VyaWRfbmFtZSB1c2VyaWRfcDNwIHVzZXJpZF9wYXRoIHVzZXJpZF9zZXJ2aWNlIHZhbGlkX3JlZmVyZXJzIHZhcmlhYmxlc19oYXNoX2J1Y2tldF9zaXplIHZhcmlhYmxlc19oYXNoX21heF9zaXplIHdvcmtlcl9jb25uZWN0aW9ucyB3b3JrZXJfY3B1X2FmZmluaXR5IHdvcmtlcl9wcmlvcml0eSB3b3JrZXJfcHJvY2Vzc2VzIHdvcmtlcl9ybGltaXRfY29yZSB3b3JrZXJfcmxpbWl0X25vZmlsZSB3b3JrZXJfcmxpbWl0X3NpZ3BlbmRpbmcgd29ya2VyX3RocmVhZHMgd29ya2luZ19kaXJlY3RvcnkgeGNsaWVudCB4bWxfZW50aXRpZXMgeHNsdF9zdHlsZXNoZWV0IHhzbHRfdHlwZXNkcmV3QGxpMjI5LTIzXCJcbiAgICApO1xuXG4gIHZhciBrZXl3b3Jkc19ibG9jayA9IHdvcmRzKFxuICAgIC8qIG5neERpcmVjdGl2ZUJsb2NrICovIFwiaHR0cCBtYWlsIGV2ZW50cyBzZXJ2ZXIgdHlwZXMgbG9jYXRpb24gdXBzdHJlYW0gY2hhcnNldF9tYXAgbGltaXRfZXhjZXB0IGlmIGdlbyBtYXBcIlxuICAgICk7XG5cbiAgdmFyIGtleXdvcmRzX2ltcG9ydGFudCA9IHdvcmRzKFxuICAgIC8qIG5neERpcmVjdGl2ZUltcG9ydGFudCAqLyBcImluY2x1ZGUgcm9vdCBzZXJ2ZXIgc2VydmVyX25hbWUgbGlzdGVuIGludGVybmFsIHByb3h5X3Bhc3MgbWVtY2FjaGVkX3Bhc3MgZmFzdGNnaV9wYXNzIHRyeV9maWxlc1wiXG4gICAgKTtcblxuICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LCB0eXBlO1xuICBmdW5jdGlvbiByZXQoc3R5bGUsIHRwKSB7dHlwZSA9IHRwOyByZXR1cm4gc3R5bGU7fVxuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG5cblxuICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9dLyk7XG5cbiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcblxuXG4gICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHtcbiAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoa2V5d29yZHNfYmxvY2sucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkge1xuICAgICAgcmV0dXJuIFwidmFyaWFibGUtMlwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChrZXl3b3Jkc19pbXBvcnRhbnQucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLTJcIjtcbiAgICB9XG4gICAgLyoqL1xuXG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gXCJAXCIpIHtzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXFxcXFwtXS8pOyByZXR1cm4gcmV0KFwibWV0YVwiLCBzdHJlYW0uY3VycmVudCgpKTt9XG4gICAgZWxzZSBpZiAoY2ggPT0gXCIvXCIgJiYgc3RyZWFtLmVhdChcIipcIikpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVudDtcbiAgICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjaCA9PSBcIjxcIiAmJiBzdHJlYW0uZWF0KFwiIVwiKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblNHTUxDb21tZW50O1xuICAgICAgcmV0dXJuIHRva2VuU0dNTENvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoID09IFwiPVwiKSByZXQobnVsbCwgXCJjb21wYXJlXCIpO1xuICAgIGVsc2UgaWYgKChjaCA9PSBcIn5cIiB8fCBjaCA9PSBcInxcIikgJiYgc3RyZWFtLmVhdChcIj1cIikpIHJldHVybiByZXQobnVsbCwgXCJjb21wYXJlXCIpO1xuICAgIGVsc2UgaWYgKGNoID09IFwiXFxcIlwiIHx8IGNoID09IFwiJ1wiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2ggPT0gXCIjXCIpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiByZXQoXCJjb21tZW50XCIsIFwiY29tbWVudFwiKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2ggPT0gXCIhXCIpIHtcbiAgICAgIHN0cmVhbS5tYXRjaCgvXlxccypcXHcqLyk7XG4gICAgICByZXR1cm4gcmV0KFwia2V5d29yZFwiLCBcImltcG9ydGFudFwiKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoL1xcZC8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcdy4lXS8pO1xuICAgICAgcmV0dXJuIHJldChcIm51bWJlclwiLCBcInVuaXRcIik7XG4gICAgfVxuICAgIGVsc2UgaWYgKC9bLC4rPipcXC9dLy50ZXN0KGNoKSkge1xuICAgICAgcmV0dXJuIHJldChudWxsLCBcInNlbGVjdC1vcFwiKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoL1s7e306XFxbXFxdXS8udGVzdChjaCkpIHtcbiAgICAgIHJldHVybiByZXQobnVsbCwgY2gpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcXFxcXC1dLyk7XG4gICAgICByZXR1cm4gcmV0KFwidmFyaWFibGVcIiwgXCJ2YXJpYWJsZVwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7XG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmIChtYXliZUVuZCAmJiBjaCA9PSBcIi9cIikge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBtYXliZUVuZCA9IChjaCA9PSBcIipcIik7XG4gICAgfVxuICAgIHJldHVybiByZXQoXCJjb21tZW50XCIsIFwiY29tbWVudFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuU0dNTENvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBkYXNoZXMgPSAwLCBjaDtcbiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgaWYgKGRhc2hlcyA+PSAyICYmIGNoID09IFwiPlwiKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRhc2hlcyA9IChjaCA9PSBcIi1cIikgPyBkYXNoZXMgKyAxIDogMDtcbiAgICB9XG4gICAgcmV0dXJuIHJldChcImNvbW1lbnRcIiwgXCJjb21tZW50XCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7XG4gICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2ggPT0gcXVvdGUgJiYgIWVzY2FwZWQpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmICghZXNjYXBlZCkgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICByZXR1cm4gcmV0KFwic3RyaW5nXCIsIFwic3RyaW5nXCIpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2UpIHtcbiAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZSxcbiAgICAgICAgICAgICAgYmFzZUluZGVudDogYmFzZSB8fCAwLFxuICAgICAgICAgICAgICBzdGFjazogW119O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHR5cGUgPSBudWxsO1xuICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG5cbiAgICAgIHZhciBjb250ZXh0ID0gc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdO1xuICAgICAgaWYgKHR5cGUgPT0gXCJoYXNoXCIgJiYgY29udGV4dCA9PSBcInJ1bGVcIikgc3R5bGUgPSBcImF0b21cIjtcbiAgICAgIGVsc2UgaWYgKHN0eWxlID09IFwidmFyaWFibGVcIikge1xuICAgICAgICBpZiAoY29udGV4dCA9PSBcInJ1bGVcIikgc3R5bGUgPSBcIm51bWJlclwiO1xuICAgICAgICBlbHNlIGlmICghY29udGV4dCB8fCBjb250ZXh0ID09IFwiQG1lZGlhe1wiKSBzdHlsZSA9IFwidGFnXCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb250ZXh0ID09IFwicnVsZVwiICYmIC9eW1xce1xcfTtdJC8udGVzdCh0eXBlKSlcbiAgICAgICAgc3RhdGUuc3RhY2sucG9wKCk7XG4gICAgICBpZiAodHlwZSA9PSBcIntcIikge1xuICAgICAgICBpZiAoY29udGV4dCA9PSBcIkBtZWRpYVwiKSBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPSBcIkBtZWRpYXtcIjtcbiAgICAgICAgZWxzZSBzdGF0ZS5zdGFjay5wdXNoKFwie1wiKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJ9XCIpIHN0YXRlLnN0YWNrLnBvcCgpO1xuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcIkBtZWRpYVwiKSBzdGF0ZS5zdGFjay5wdXNoKFwiQG1lZGlhXCIpO1xuICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSBcIntcIiAmJiB0eXBlICE9IFwiY29tbWVudFwiKSBzdGF0ZS5zdGFjay5wdXNoKFwicnVsZVwiKTtcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgICB2YXIgbiA9IHN0YXRlLnN0YWNrLmxlbmd0aDtcbiAgICAgIGlmICgvXlxcfS8udGVzdCh0ZXh0QWZ0ZXIpKVxuICAgICAgICBuIC09IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXSA9PSBcInJ1bGVcIiA/IDIgOiAxO1xuICAgICAgcmV0dXJuIHN0YXRlLmJhc2VJbmRlbnQgKyBuICogaW5kZW50VW5pdDtcbiAgICB9LFxuXG4gICAgZWxlY3RyaWNDaGFyczogXCJ9XCJcbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtbmdpbngtY29uZlwiLCBcIm5naW54XCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8vIEF1dGhvcjogSmFuIFQuIFNvdHQgKGh0dHA6Ly9naXRodWIuY29tL2lkbGViZXJnKVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4vLi4vYWRkb24vbW9kZS9zaW1wbGVcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi8uLi9hZGRvbi9tb2RlL3NpbXBsZVwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZVNpbXBsZU1vZGUoXCJuc2lzXCIse1xuICBzdGFydDpbXG4gICAgLy8gTnVtYmVyc1xuICAgIHtyZWdleDogLyg/OlsrLV0/KSg/OjB4W1xcZCxhLWZdKyl8KD86MG9bMC03XSspfCg/OjBiWzAsMV0rKXwoPzpcXGQrLj9cXGQqKS8sIHRva2VuOiBcIm51bWJlclwifSxcblxuICAgIC8vIFN0cmluZ3NcbiAgICB7IHJlZ2V4OiAvXCIoPzpbXlxcXFxcIl18XFxcXC4pKlwiPy8sIHRva2VuOiBcInN0cmluZ1wiIH0sXG4gICAgeyByZWdleDogLycoPzpbXlxcXFwnXXxcXFxcLikqJz8vLCB0b2tlbjogXCJzdHJpbmdcIiB9LFxuICAgIHsgcmVnZXg6IC9gKD86W15cXFxcYF18XFxcXC4pKmA/LywgdG9rZW46IFwic3RyaW5nXCIgfSxcblxuICAgIC8vIENvbXBpbGUgVGltZSBDb21tYW5kc1xuICAgIHtyZWdleDogL15cXHMqKD86XFwhKGluY2x1ZGV8YWRkaW5jbHVkZWRpcnxhZGRwbHVnaW5kaXJ8YXBwZW5kZmlsZXxjZHxkZWxmaWxlfGVjaG98ZXJyb3J8ZXhlY3V0ZXxwYWNraGRyfHByYWdtYXxmaW5hbGl6ZXxnZXRkbGx2ZXJzaW9ufGdldHRsYnZlcnNpb258c3lzdGVtfHRlbXBmaWxlfHdhcm5pbmd8dmVyYm9zZXxkZWZpbmV8dW5kZWZ8aW5zZXJ0bWFjcm98bWFjcm98bWFjcm9lbmR8bWFrZW5zaXN8c2VhcmNocGFyc2V8c2VhcmNocmVwbGFjZSkpXFxiLywgdG9rZW46IFwia2V5d29yZFwifSxcblxuICAgIC8vIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uXG4gICAge3JlZ2V4OiAvXlxccyooPzpcXCEoaWYoPzpuP2RlZik/fGlmbWFjcm9uP2RlZnxtYWNybykpXFxiLywgdG9rZW46IFwia2V5d29yZFwiLCBpbmRlbnQ6IHRydWV9LFxuICAgIHtyZWdleDogL15cXHMqKD86XFwhKGVsc2V8ZW5kaWZ8bWFjcm9lbmQpKVxcYi8sIHRva2VuOiBcImtleXdvcmRcIiwgZGVkZW50OiB0cnVlfSxcblxuICAgIC8vIFJ1bnRpbWUgQ29tbWFuZHNcbiAgICB7cmVnZXg6IC9eXFxzKig/OkFib3J0fEFkZEJyYW5kaW5nSW1hZ2V8QWRkU2l6ZXxBbGxvd1Jvb3REaXJJbnN0YWxsfEFsbG93U2tpcEZpbGVzfEF1dG9DbG9zZVdpbmRvd3xCR0ZvbnR8QkdHcmFkaWVudHxCcmFuZGluZ1RleHR8QnJpbmdUb0Zyb250fENhbGx8Q2FsbEluc3RETEx8Q2FwdGlvbnxDaGFuZ2VVSXxDaGVja0JpdG1hcHxDbGVhckVycm9yc3xDb21wbGV0ZWRUZXh0fENvbXBvbmVudFRleHR8Q29weUZpbGVzfENSQ0NoZWNrfENyZWF0ZURpcmVjdG9yeXxDcmVhdGVGb250fENyZWF0ZVNob3J0Q3V0fERlbGV0ZXxEZWxldGVJTklTZWN8RGVsZXRlSU5JU3RyfERlbGV0ZVJlZ0tleXxEZWxldGVSZWdWYWx1ZXxEZXRhaWxQcmludHxEZXRhaWxzQnV0dG9uVGV4dHxEaXJUZXh0fERpclZhcnxEaXJWZXJpZnl8RW5hYmxlV2luZG93fEVudW1SZWdLZXl8RW51bVJlZ1ZhbHVlfEV4Y2h8RXhlY3xFeGVjU2hlbGx8RXhlY1NoZWxsV2FpdHxFeGVjV2FpdHxFeHBhbmRFbnZTdHJpbmdzfEZpbGV8RmlsZUJ1ZlNpemV8RmlsZUNsb3NlfEZpbGVFcnJvclRleHR8RmlsZU9wZW58RmlsZVJlYWR8RmlsZVJlYWRCeXRlfEZpbGVSZWFkVVRGMTZMRXxGaWxlUmVhZFdvcmR8RmlsZVdyaXRlVVRGMTZMRXxGaWxlU2Vla3xGaWxlV3JpdGV8RmlsZVdyaXRlQnl0ZXxGaWxlV3JpdGVXb3JkfEZpbmRDbG9zZXxGaW5kRmlyc3R8RmluZE5leHR8RmluZFdpbmRvd3xGbHVzaElOSXxHZXRDdXJJbnN0VHlwZXxHZXRDdXJyZW50QWRkcmVzc3xHZXREbGdJdGVtfEdldERMTFZlcnNpb258R2V0RExMVmVyc2lvbkxvY2FsfEdldEVycm9yTGV2ZWx8R2V0RmlsZVRpbWV8R2V0RmlsZVRpbWVMb2NhbHxHZXRGdWxsUGF0aE5hbWV8R2V0RnVuY3Rpb25BZGRyZXNzfEdldEluc3REaXJFcnJvcnxHZXRLbm93bkZvbGRlclBhdGh8R2V0TGFiZWxBZGRyZXNzfEdldFRlbXBGaWxlTmFtZXxHb3RvfEhpZGVXaW5kb3d8SWNvbnxJZkFib3J0fElmRXJyb3JzfElmRmlsZUV4aXN0c3xJZlJlYm9vdEZsYWd8SWZSdGxMYW5ndWFnZXxJZlNoZWxsVmFyQ29udGV4dEFsbHxJZlNpbGVudHxJbml0UGx1Z2luc0RpcnxJbnN0YWxsQnV0dG9uVGV4dHxJbnN0YWxsQ29sb3JzfEluc3RhbGxEaXJ8SW5zdGFsbERpclJlZ0tleXxJbnN0UHJvZ3Jlc3NGbGFnc3xJbnN0VHlwZXxJbnN0VHlwZUdldFRleHR8SW5zdFR5cGVTZXRUZXh0fEludDY0Q21wfEludDY0Q21wVXxJbnQ2NEZtdHxJbnRDbXB8SW50Q21wVXxJbnRGbXR8SW50T3B8SW50UHRyQ21wfEludFB0ckNtcFV8SW50UHRyT3B8SXNXaW5kb3d8TGFuZ1N0cmluZ3xMaWNlbnNlQmtDb2xvcnxMaWNlbnNlRGF0YXxMaWNlbnNlRm9yY2VTZWxlY3Rpb258TGljZW5zZUxhbmdTdHJpbmd8TGljZW5zZVRleHR8TG9hZEFuZFNldEltYWdlfExvYWRMYW5ndWFnZUZpbGV8TG9ja1dpbmRvd3xMb2dTZXR8TG9nVGV4dHxNYW5pZmVzdERQSUF3YXJlfE1hbmlmZXN0TG9uZ1BhdGhBd2FyZXxNYW5pZmVzdE1heFZlcnNpb25UZXN0ZWR8TWFuaWZlc3RTdXBwb3J0ZWRPU3xNZXNzYWdlQm94fE1pc2NCdXR0b25UZXh0fE5hbWV8Tm9wfE91dEZpbGV8UGFnZXxQYWdlQ2FsbGJhY2tzfFBFQWRkUmVzb3VyY2V8UEVEbGxDaGFyYWN0ZXJpc3RpY3N8UEVSZW1vdmVSZXNvdXJjZXxQRVN1YnN5c1ZlcnxQb3B8UHVzaHxRdWl0fFJlYWRFbnZTdHJ8UmVhZElOSVN0cnxSZWFkUmVnRFdPUkR8UmVhZFJlZ1N0cnxSZWJvb3R8UmVnRExMfFJlbmFtZXxSZXF1ZXN0RXhlY3V0aW9uTGV2ZWx8UmVzZXJ2ZUZpbGV8UmV0dXJufFJNRGlyfFNlYXJjaFBhdGh8U2VjdGlvbkdldEZsYWdzfFNlY3Rpb25HZXRJbnN0VHlwZXN8U2VjdGlvbkdldFNpemV8U2VjdGlvbkdldFRleHR8U2VjdGlvbklufFNlY3Rpb25TZXRGbGFnc3xTZWN0aW9uU2V0SW5zdFR5cGVzfFNlY3Rpb25TZXRTaXplfFNlY3Rpb25TZXRUZXh0fFNlbmRNZXNzYWdlfFNldEF1dG9DbG9zZXxTZXRCcmFuZGluZ0ltYWdlfFNldENvbXByZXNzfFNldENvbXByZXNzb3J8U2V0Q29tcHJlc3NvckRpY3RTaXplfFNldEN0bENvbG9yc3xTZXRDdXJJbnN0VHlwZXxTZXREYXRhYmxvY2tPcHRpbWl6ZXxTZXREYXRlU2F2ZXxTZXREZXRhaWxzUHJpbnR8U2V0RGV0YWlsc1ZpZXd8U2V0RXJyb3JMZXZlbHxTZXRFcnJvcnN8U2V0RmlsZUF0dHJpYnV0ZXN8U2V0Rm9udHxTZXRPdXRQYXRofFNldE92ZXJ3cml0ZXxTZXRSZWJvb3RGbGFnfFNldFJlZ1ZpZXd8U2V0U2hlbGxWYXJDb250ZXh0fFNldFNpbGVudHxTaG93SW5zdERldGFpbHN8U2hvd1VuaW5zdERldGFpbHN8U2hvd1dpbmRvd3xTaWxlbnRJbnN0YWxsfFNpbGVudFVuSW5zdGFsbHxTbGVlcHxTcGFjZVRleHRzfFN0ckNtcHxTdHJDbXBTfFN0ckNweXxTdHJMZW58U3ViQ2FwdGlvbnxVbmljb2RlfFVuaW5zdGFsbEJ1dHRvblRleHR8VW5pbnN0YWxsQ2FwdGlvbnxVbmluc3RhbGxJY29ufFVuaW5zdGFsbFN1YkNhcHRpb258VW5pbnN0YWxsVGV4dHxVbmluc3RQYWdlfFVuUmVnRExMfFZhcnxWSUFkZFZlcnNpb25LZXl8VklGaWxlVmVyc2lvbnxWSVByb2R1Y3RWZXJzaW9ufFdpbmRvd0ljb258V3JpdGVJTklTdHJ8V3JpdGVSZWdCaW58V3JpdGVSZWdEV09SRHxXcml0ZVJlZ0V4cGFuZFN0cnxXcml0ZVJlZ011bHRpU3RyfFdyaXRlUmVnTm9uZXxXcml0ZVJlZ1N0cnxXcml0ZVVuaW5zdGFsbGVyfFhQU3R5bGUpXFxiLywgdG9rZW46IFwia2V5d29yZFwifSxcbiAgICB7cmVnZXg6IC9eXFxzKig/OkZ1bmN0aW9ufFBhZ2VFeHxTZWN0aW9uKD86R3JvdXApPylcXGIvLCB0b2tlbjogXCJrZXl3b3JkXCIsIGluZGVudDogdHJ1ZX0sXG4gICAge3JlZ2V4OiAvXlxccyooPzooRnVuY3Rpb258UGFnZUV4fFNlY3Rpb24oPzpHcm91cCk/KUVuZClcXGIvLCB0b2tlbjogXCJrZXl3b3JkXCIsIGRlZGVudDogdHJ1ZX0sXG5cbiAgICAvLyBDb21tYW5kIE9wdGlvbnNcbiAgICB7cmVnZXg6IC9cXGIoPzpBUkNISVZFfEZJTEVfQVRUUklCVVRFX0FSQ0hJVkV8RklMRV9BVFRSSUJVVEVfSElEREVOfEZJTEVfQVRUUklCVVRFX05PUk1BTHxGSUxFX0FUVFJJQlVURV9PRkZMSU5FfEZJTEVfQVRUUklCVVRFX1JFQURPTkxZfEZJTEVfQVRUUklCVVRFX1NZU1RFTXxGSUxFX0FUVFJJQlVURV9URU1QT1JBUll8SElEREVOfEhLQ0N8SEtDUigzMnw2NCk/fEhLQ1UoMzJ8NjQpP3xIS0REfEhLRVlfQ0xBU1NFU19ST09UfEhLRVlfQ1VSUkVOVF9DT05GSUd8SEtFWV9DVVJSRU5UX1VTRVJ8SEtFWV9EWU5fREFUQXxIS0VZX0xPQ0FMX01BQ0hJTkV8SEtFWV9QRVJGT1JNQU5DRV9EQVRBfEhLRVlfVVNFUlN8SEtMTSgzMnw2NCk/fEhLUER8SEtVfElEQUJPUlR8SURDQU5DRUx8SUREX0RJUnxJRERfSU5TVHxJRERfSU5TVEZJTEVTfElERF9MSUNFTlNFfElERF9TRUxDT018SUREX1VOSU5TVHxJRERfVkVSSUZZfElESUdOT1JFfElETk98SURPS3xJRFJFVFJZfElEWUVTfE1CX0FCT1JUUkVUUllJR05PUkV8TUJfREVGQlVUVE9OMXxNQl9ERUZCVVRUT04yfE1CX0RFRkJVVFRPTjN8TUJfREVGQlVUVE9ONHxNQl9JQ09ORVhDTEFNQVRJT058TUJfSUNPTklORk9STUFUSU9OfE1CX0lDT05RVUVTVElPTnxNQl9JQ09OU1RPUHxNQl9PS3xNQl9PS0NBTkNFTHxNQl9SRVRSWUNBTkNFTHxNQl9SSUdIVHxNQl9SVExSRUFESU5HfE1CX1NFVEZPUkVHUk9VTkR8TUJfVE9QTU9TVHxNQl9VU0VSSUNPTnxNQl9ZRVNOT3xNQl9ZRVNOT0NBTkNFTHxOT1JNQUx8T0ZGTElORXxSRUFET05MWXxTSENUWHxTSEVMTF9DT05URVhUfFNXX0hJREV8U1dfU0hPV0RFRkFVTFR8U1dfU0hPV01BWElNSVpFRHxTV19TSE9XTUlOSU1JWkVEfFNXX1NIT1dOT1JNQUx8U1lTVEVNfFRFTVBPUkFSWSlcXGIvLCB0b2tlbjogXCJhdG9tXCJ9LFxuICAgIHtyZWdleDogL1xcYig/OmFkbWlufGFsbHxhdXRvfGJvdGh8Ym90dG9tfGJ6aXAyfGNvbXBvbmVudHN8Y3VycmVudHxjdXN0b218ZGlyZWN0b3J5fGZhbHNlfGZvcmNlfGhpZGV8aGlnaGVzdHxpZmRpZmZ8aWZuZXdlcnxpbnN0ZmlsZXN8bGFzdHVzZWR8bGVhdmV8bGVmdHxsaWNlbnNlfGxpc3Rvbmx5fGx6bWF8bmV2ZXJzaG93fG5vbmV8bm9ybWFsfG5vdHNldHxvZmZ8b258cmlnaHR8c2hvd3xzaWxlbnR8c2lsZW50bG9nfHRleHRvbmx5fHRvcHx0cnVlfHRyeXx1blxcLmNvbXBvbmVudHN8dW5cXC5jdXN0b218dW5cXC5kaXJlY3Rvcnl8dW5cXC5pbnN0ZmlsZXN8dW5cXC5saWNlbnNlfHVuaW5zdENvbmZpcm18dXNlcnxXaW4xMHxXaW43fFdpbjh8V2luVmlzdGF8emxpYilcXGIvLCB0b2tlbjogXCJidWlsdGluXCJ9LFxuXG4gICAgLy8gTG9naWNMaWIubnNoXG4gICAge3JlZ2V4OiAvXFwkXFx7KD86QW5kKD86SWYoPzpOb3QpP3xVbmxlc3MpfEJyZWFrfENhc2UoPzpFbHNlKT98Q29udGludWV8RGVmYXVsdHxEbyg/OlVudGlsfFdoaWxlKT98RWxzZSg/OklmKD86Tm90KT98VW5sZXNzKT98RW5kKD86SWZ8U2VsZWN0fFN3aXRjaCl8RXhpdCg/OkRvfEZvcnxXaGlsZSl8Rm9yKD86RWFjaCk/fElmKD86Q21kfE5vdCg/OlRoZW4pP3xUaGVuKT98TG9vcCg/OlVudGlsfFdoaWxlKT98T3IoPzpJZig/Ok5vdCk/fFVubGVzcyl8U2VsZWN0fFN3aXRjaHxVbmxlc3N8V2hpbGUpXFx9LywgdG9rZW46IFwidmFyaWFibGUtMlwiLCBpbmRlbnQ6IHRydWV9LFxuXG4gICAgLy8gRmlsZUZ1bmMubnNoXG4gICAge3JlZ2V4OiAvXFwkXFx7KD86QmFubmVyVHJpbVBhdGh8RGlyU3RhdGV8RHJpdmVTcGFjZXxHZXQoQmFzZU5hbWV8RHJpdmVzfEV4ZU5hbWV8RXhlUGF0aHxGaWxlQXR0cmlidXRlc3xGaWxlRXh0fEZpbGVOYW1lfEZpbGVWZXJzaW9ufE9wdGlvbnN8T3B0aW9uc1N8UGFyYW1ldGVyc3xQYXJlbnR8Um9vdHxTaXplfFRpbWUpfExvY2F0ZXxSZWZyZXNoU2hlbGxJY29ucylcXH0vLCB0b2tlbjogXCJ2YXJpYWJsZS0yXCIsIGRlZGVudDogdHJ1ZX0sXG5cbiAgICAvLyBNZW1lbnRvLm5zaFxuICAgIHtyZWdleDogL1xcJFxceyg/Ok1lbWVudG8oPzpTZWN0aW9uKD86RG9uZXxFbmR8UmVzdG9yZXxTYXZlKT98VW5zZWxlY3RlZFNlY3Rpb24pKVxcfS8sIHRva2VuOiBcInZhcmlhYmxlLTJcIiwgZGVkZW50OiB0cnVlfSxcblxuICAgIC8vIFRleHRGdW5jLm5zaFxuICAgIHtyZWdleDogL1xcJFxceyg/OkNvbmZpZyg/OlJlYWR8UmVhZFN8V3JpdGV8V3JpdGVTKXxGaWxlKD86Sm9pbnxSZWFkRnJvbUVuZHxSZWNvZGUpfExpbmUoPzpGaW5kfFJlYWR8U3VtKXxUZXh0KD86Q29tcGFyZXxDb21wYXJlUyl8VHJpbU5ld0xpbmVzKVxcfS8sIHRva2VuOiBcInZhcmlhYmxlLTJcIiwgZGVkZW50OiB0cnVlfSxcblxuICAgIC8vIFdpblZlci5uc2hcbiAgICB7cmVnZXg6IC9cXCRcXHsoPzooPzpBdCg/OkxlYXN0fE1vc3QpfElzKSg/OlNlcnZpY2VQYWNrfFdpbig/Ojd8OHwxMHw5NXw5OHwyMDAoPzowfDN8OCg/OlIyKT8pfE1FfE5UNHxWaXN0YXxYUCkpfElzKD86TlR8U2VydmVyKSlcXH0vLCB0b2tlbjogXCJ2YXJpYWJsZVwiLCBkZWRlbnQ6IHRydWV9LFxuXG4gICAgLy8gV29yZEZ1bmMubnNoXG4gICAge3JlZ2V4OiAvXFwkXFx7KD86U3RyRmlsdGVyUz98VmVyc2lvbig/OkNvbXBhcmV8Q29udmVydCl8V29yZCg/OkFkZFM/fEZpbmQoPzooPzoyfDMpWCk/Uz98SW5zZXJ0Uz98UmVwbGFjZVM/KSlcXH0vLCB0b2tlbjogXCJ2YXJpYWJsZS0yXCIsIGRlZGVudDogdHJ1ZX0sXG5cbiAgICAvLyB4NjQubnNoXG4gICAge3JlZ2V4OiAvXFwkXFx7KD86UnVubmluZ1g2NClcXH0vLCB0b2tlbjogXCJ2YXJpYWJsZVwiLCBkZWRlbnQ6IHRydWV9LFxuICAgIHtyZWdleDogL1xcJFxceyg/OkRpc2FibGV8RW5hYmxlKVg2NEZTUmVkaXJlY3Rpb25cXH0vLCB0b2tlbjogXCJ2YXJpYWJsZS0yXCIsIGRlZGVudDogdHJ1ZX0sXG5cbiAgICAvLyBMaW5lIENvbW1lbnRcbiAgICB7cmVnZXg6IC8oI3w7KS4qLywgdG9rZW46IFwiY29tbWVudFwifSxcblxuICAgIC8vIEJsb2NrIENvbW1lbnRcbiAgICB7cmVnZXg6IC9cXC9cXCovLCB0b2tlbjogXCJjb21tZW50XCIsIG5leHQ6IFwiY29tbWVudFwifSxcblxuICAgIC8vIE9wZXJhdG9yXG4gICAge3JlZ2V4OiAvWy0rXFwvKj08PiFdKy8sIHRva2VuOiBcIm9wZXJhdG9yXCJ9LFxuXG4gICAgLy8gVmFyaWFibGVcbiAgICB7cmVnZXg6IC9cXCRcXHcrLywgdG9rZW46IFwidmFyaWFibGVcIn0sXG5cbiAgICAvLyBDb25zdGFudFxuICAgIHtyZWdleDogL1xcJHtbXFx3XFwuOi1dK30vLCB0b2tlbjogXCJ2YXJpYWJsZS0yXCJ9LFxuXG4gICAgLy8gTGFuZ3VhZ2UgU3RyaW5nXG4gICAge3JlZ2V4OiAvXFwkXFwoW1xcd1xcLjotXStcXCkvLCB0b2tlbjogXCJ2YXJpYWJsZS0zXCJ9XG4gIF0sXG4gIGNvbW1lbnQ6IFtcbiAgICB7cmVnZXg6IC8uKj9cXCpcXC8vLCB0b2tlbjogXCJjb21tZW50XCIsIG5leHQ6IFwic3RhcnRcIn0sXG4gICAge3JlZ2V4OiAvLiovLCB0b2tlbjogXCJjb21tZW50XCJ9XG4gIF0sXG4gIG1ldGE6IHtcbiAgICBlbGVjdHJpY0lucHV0OiAvXlxccyooKEZ1bmN0aW9ufFBhZ2VFeHxTZWN0aW9ufFNlY3Rpb24oR3JvdXApPylFbmR8KFxcIShlbmRpZnxtYWNyb2VuZCkpfFxcJFxceyhFbmQoSWZ8VW5sZXNzfFdoaWxlKXxMb29wKFVudGlsKXxOZXh0KVxcfSkkLyxcbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCIvKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCIqL1wiLFxuICAgIGxpbmVDb21tZW50OiBbXCIjXCIsIFwiO1wiXVxuICB9XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LW5zaXNcIiwgXCJuc2lzXCIpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuKiBUaGlzIHNjcmlwdCBwcm92aWRlcyBzeW50YXggaGlnaGxpZ2h0aW5nIHN1cHBvcnQgZm9yXG4qIHRoZSBOLVRyaXBsZXMgZm9ybWF0LlxuKiBOLVRyaXBsZXMgZm9ybWF0IHNwZWNpZmljYXRpb246XG4qICAgICBodHRwczovL3d3dy53My5vcmcvVFIvbi10cmlwbGVzL1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qXG4gICAgVGhlIGZvbGxvd2luZyBleHByZXNzaW9uIGRlZmluZXMgdGhlIGRlZmluZWQgQVNGIGdyYW1tYXIgdHJhbnNpdGlvbnMuXG5cbiAgICBwcmVfc3ViamVjdCAtPlxuICAgICAgICB7XG4gICAgICAgICggd3JpdGluZ19zdWJqZWN0X3VyaSB8IHdyaXRpbmdfYm5vZGVfdXJpIClcbiAgICAgICAgICAgIC0+IHByZV9wcmVkaWNhdGVcbiAgICAgICAgICAgICAgICAtPiB3cml0aW5nX3ByZWRpY2F0ZV91cmlcbiAgICAgICAgICAgICAgICAgICAgLT4gcHJlX29iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgLT4gd3JpdGluZ19vYmplY3RfdXJpIHwgd3JpdGluZ19vYmplY3RfYm5vZGUgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGluZ19vYmplY3RfbGl0ZXJhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiB3cml0aW5nX2xpdGVyYWxfbGFuZyB8IHdyaXRpbmdfbGl0ZXJhbF90eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBwb3N0X29iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBCRUdJTlxuICAgICAgICAgfSBvdGhlcndpc2Uge1xuICAgICAgICAgICAgIC0+IEVSUk9SXG4gICAgICAgICB9XG4qL1xuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcIm50cmlwbGVzXCIsIGZ1bmN0aW9uKCkge1xuXG4gIHZhciBMb2NhdGlvbiA9IHtcbiAgICBQUkVfU1VCSkVDVCAgICAgICAgIDogMCxcbiAgICBXUklUSU5HX1NVQl9VUkkgICAgIDogMSxcbiAgICBXUklUSU5HX0JOT0RFX1VSSSAgIDogMixcbiAgICBQUkVfUFJFRCAgICAgICAgICAgIDogMyxcbiAgICBXUklUSU5HX1BSRURfVVJJICAgIDogNCxcbiAgICBQUkVfT0JKICAgICAgICAgICAgIDogNSxcbiAgICBXUklUSU5HX09CSl9VUkkgICAgIDogNixcbiAgICBXUklUSU5HX09CSl9CTk9ERSAgIDogNyxcbiAgICBXUklUSU5HX09CSl9MSVRFUkFMIDogOCxcbiAgICBXUklUSU5HX0xJVF9MQU5HICAgIDogOSxcbiAgICBXUklUSU5HX0xJVF9UWVBFICAgIDogMTAsXG4gICAgUE9TVF9PQkogICAgICAgICAgICA6IDExLFxuICAgIEVSUk9SICAgICAgICAgICAgICAgOiAxMlxuICB9O1xuICBmdW5jdGlvbiB0cmFuc2l0U3RhdGUoY3VyclN0YXRlLCBjKSB7XG4gICAgdmFyIGN1cnJMb2NhdGlvbiA9IGN1cnJTdGF0ZS5sb2NhdGlvbjtcbiAgICB2YXIgcmV0O1xuXG4gICAgLy8gT3BlbmluZy5cbiAgICBpZiAgICAgKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfU1VCSkVDVCAmJiBjID09ICc8JykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19TVUJfVVJJO1xuICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLlBSRV9TVUJKRUNUICYmIGMgPT0gJ18nKSByZXQgPSBMb2NhdGlvbi5XUklUSU5HX0JOT0RFX1VSSTtcbiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfUFJFRCAgICAmJiBjID09ICc8JykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19QUkVEX1VSSTtcbiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfT0JKICAgICAmJiBjID09ICc8JykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19PQkpfVVJJO1xuICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLlBSRV9PQkogICAgICYmIGMgPT0gJ18nKSByZXQgPSBMb2NhdGlvbi5XUklUSU5HX09CSl9CTk9ERTtcbiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfT0JKICAgICAmJiBjID09ICdcIicpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfT0JKX0xJVEVSQUw7XG5cbiAgICAvLyBDbG9zaW5nLlxuICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfU1VCX1VSSSAgICAgJiYgYyA9PSAnPicpIHJldCA9IExvY2F0aW9uLlBSRV9QUkVEO1xuICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfQk5PREVfVVJJICAgJiYgYyA9PSAnICcpIHJldCA9IExvY2F0aW9uLlBSRV9QUkVEO1xuICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfUFJFRF9VUkkgICAgJiYgYyA9PSAnPicpIHJldCA9IExvY2F0aW9uLlBSRV9PQko7XG4gICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19PQkpfVVJJICAgICAmJiBjID09ICc+JykgcmV0ID0gTG9jYXRpb24uUE9TVF9PQko7XG4gICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19PQkpfQk5PREUgICAmJiBjID09ICcgJykgcmV0ID0gTG9jYXRpb24uUE9TVF9PQko7XG4gICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19PQkpfTElURVJBTCAmJiBjID09ICdcIicpIHJldCA9IExvY2F0aW9uLlBPU1RfT0JKO1xuICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfTElUX0xBTkcgJiYgYyA9PSAnICcpIHJldCA9IExvY2F0aW9uLlBPU1RfT0JKO1xuICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfTElUX1RZUEUgJiYgYyA9PSAnPicpIHJldCA9IExvY2F0aW9uLlBPU1RfT0JKO1xuXG4gICAgLy8gQ2xvc2luZyB0eXBlZCBhbmQgbGFuZ3VhZ2UgbGl0ZXJhbC5cbiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX09CSl9MSVRFUkFMICYmIGMgPT0gJ0AnKSByZXQgPSBMb2NhdGlvbi5XUklUSU5HX0xJVF9MQU5HO1xuICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfT0JKX0xJVEVSQUwgJiYgYyA9PSAnXicpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfTElUX1RZUEU7XG5cbiAgICAvLyBTcGFjZXMuXG4gICAgZWxzZSBpZiggYyA9PSAnICcgJiZcbiAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICBjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX1NVQkpFQ1QgfHxcbiAgICAgICAgICAgICAgIGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfUFJFRCAgICB8fFxuICAgICAgICAgICAgICAgY3VyckxvY2F0aW9uID09IExvY2F0aW9uLlBSRV9PQkogICAgIHx8XG4gICAgICAgICAgICAgICBjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUE9TVF9PQkpcbiAgICAgICAgICAgICApXG4gICAgICAgICAgICkgcmV0ID0gY3VyckxvY2F0aW9uO1xuXG4gICAgLy8gUmVzZXQuXG4gICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUE9TVF9PQkogJiYgYyA9PSAnLicpIHJldCA9IExvY2F0aW9uLlBSRV9TVUJKRUNUO1xuXG4gICAgLy8gRXJyb3JcbiAgICBlbHNlIHJldCA9IExvY2F0aW9uLkVSUk9SO1xuXG4gICAgY3VyclN0YXRlLmxvY2F0aW9uPXJldDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgbG9jYXRpb24gOiBMb2NhdGlvbi5QUkVfU1VCSkVDVCxcbiAgICAgICAgICAgdXJpcyAgICAgOiBbXSxcbiAgICAgICAgICAgYW5jaG9ycyAgOiBbXSxcbiAgICAgICAgICAgYm5vZGVzICAgOiBbXSxcbiAgICAgICAgICAgbGFuZ3MgICAgOiBbXSxcbiAgICAgICAgICAgdHlwZXMgICAgOiBbXVxuICAgICAgIH07XG4gICAgfSxcbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICAgIGlmKGNoID09ICc8Jykge1xuICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCBjaCk7XG4gICAgICAgICB2YXIgcGFyc2VkVVJJID0gJyc7XG4gICAgICAgICBzdHJlYW0uZWF0V2hpbGUoIGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJyMnICYmIGMgIT0gJz4nICkgeyBwYXJzZWRVUkkgKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlO30gKTtcbiAgICAgICAgIHN0YXRlLnVyaXMucHVzaChwYXJzZWRVUkkpO1xuICAgICAgICAgaWYoIHN0cmVhbS5tYXRjaCgnIycsIGZhbHNlKSApIHJldHVybiAndmFyaWFibGUnO1xuICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJz4nKTtcbiAgICAgICAgIHJldHVybiAndmFyaWFibGUnO1xuICAgICAgfVxuICAgICAgaWYoY2ggPT0gJyMnKSB7XG4gICAgICAgIHZhciBwYXJzZWRBbmNob3IgPSAnJztcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoYyAhPSAnPicgJiYgYyAhPSAnICcpIHsgcGFyc2VkQW5jaG9yKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlO30pO1xuICAgICAgICBzdGF0ZS5hbmNob3JzLnB1c2gocGFyc2VkQW5jaG9yKTtcbiAgICAgICAgcmV0dXJuICd2YXJpYWJsZS0yJztcbiAgICAgIH1cbiAgICAgIGlmKGNoID09ICc+Jykge1xuICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJz4nKTtcbiAgICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJztcbiAgICAgIH1cbiAgICAgIGlmKGNoID09ICdfJykge1xuICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgY2gpO1xuICAgICAgICAgIHZhciBwYXJzZWRCTm9kZSA9ICcnO1xuICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShmdW5jdGlvbihjKSB7IGlmKCBjICE9ICcgJyApIHsgcGFyc2VkQk5vZGUgKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlO30pO1xuICAgICAgICAgIHN0YXRlLmJub2Rlcy5wdXNoKHBhcnNlZEJOb2RlKTtcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJyAnKTtcbiAgICAgICAgICByZXR1cm4gJ2J1aWx0aW4nO1xuICAgICAgfVxuICAgICAgaWYoY2ggPT0gJ1wiJykge1xuICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgY2gpO1xuICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSggZnVuY3Rpb24oYykgeyByZXR1cm4gYyAhPSAnXCInOyB9ICk7XG4gICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICBpZiggc3RyZWFtLnBlZWsoKSAhPSAnQCcgJiYgc3RyZWFtLnBlZWsoKSAhPSAnXicgKSB7XG4gICAgICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJ1wiJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICAgIH1cbiAgICAgIGlmKCBjaCA9PSAnQCcgKSB7XG4gICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnQCcpO1xuICAgICAgICAgIHZhciBwYXJzZWRMYW5nID0gJyc7XG4gICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJyAnICkgeyBwYXJzZWRMYW5nICs9IGM7IHJldHVybiB0cnVlOyB9IHJldHVybiBmYWxzZTt9KTtcbiAgICAgICAgICBzdGF0ZS5sYW5ncy5wdXNoKHBhcnNlZExhbmcpO1xuICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnICcpO1xuICAgICAgICAgIHJldHVybiAnc3RyaW5nLTInO1xuICAgICAgfVxuICAgICAgaWYoIGNoID09ICdeJyApIHtcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJ14nKTtcbiAgICAgICAgICB2YXIgcGFyc2VkVHlwZSA9ICcnO1xuICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShmdW5jdGlvbihjKSB7IGlmKCBjICE9ICc+JyApIHsgcGFyc2VkVHlwZSArPSBjOyByZXR1cm4gdHJ1ZTsgfSByZXR1cm4gZmFsc2U7fSApO1xuICAgICAgICAgIHN0YXRlLnR5cGVzLnB1c2gocGFyc2VkVHlwZSk7XG4gICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsICc+Jyk7XG4gICAgICAgICAgcmV0dXJuICd2YXJpYWJsZSc7XG4gICAgICB9XG4gICAgICBpZiggY2ggPT0gJyAnICkge1xuICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgY2gpO1xuICAgICAgfVxuICAgICAgaWYoIGNoID09ICcuJyApIHtcbiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59KTtcblxuLy8gZGVmaW5lIHRoZSByZWdpc3RlcmVkIE1lZGlhIFR5cGUgZm9yIG4tdHJpcGxlczpcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9uLXRyaXBsZXMvI24tdHJpcGxlcy1tZWRpYXR5cGVcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL24tdHJpcGxlc1wiLCBcIm50cmlwbGVzXCIpO1xuXG4vLyBOLVF1YWRzIGlzIGJhc2VkIG9uIHRoZSBOLVRyaXBsZXMgZm9ybWF0IChzbyBzYW1lIGhpZ2hsaWdodGluZyB3b3Jrcylcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9uLXF1YWRzL1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vbi1xdWFkc1wiLCBcIm50cmlwbGVzXCIpO1xuXG4vLyBwcmV2aW91c2x5IHVzZWQsIHRob3VnaCB0ZWNobmljYWxseSBpbmNvcnJlY3QgbWVkaWEgdHlwZSBmb3Igbi10cmlwbGVzXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L24tdHJpcGxlc1wiLCBcIm50cmlwbGVzXCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwib2N0YXZlXCIsIGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB3b3JkUmVnZXhwKHdvcmRzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKChcIiArIHdvcmRzLmpvaW4oXCIpfChcIikgKyBcIikpXFxcXGJcIik7XG4gIH1cblxuICB2YXIgc2luZ2xlT3BlcmF0b3JzID0gbmV3IFJlZ0V4cChcIl5bXFxcXCtcXFxcLVxcXFwqLyZ8XFxcXF5+PD4hQCdcXFxcXFxcXF1cIik7XG4gIHZhciBzaW5nbGVEZWxpbWl0ZXJzID0gbmV3IFJlZ0V4cCgnXltcXFxcKFxcXFxbXFxcXHtcXFxcfSw6PTtcXFxcLl0nKTtcbiAgdmFyIGRvdWJsZU9wZXJhdG9ycyA9IG5ldyBSZWdFeHAoXCJeKCg9PSl8KH49KXwoPD0pfCg+PSl8KDw8KXwoPj4pfChcXFxcLltcXFxcK1xcXFwtXFxcXCovXFxcXF5cXFxcXFxcXF0pKVwiKTtcbiAgdmFyIGRvdWJsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKFwiXigoIT0pfChcXFxcKz0pfChcXFxcLT0pfChcXFxcKj0pfCgvPSl8KCY9KXwoXFxcXHw9KXwoXFxcXF49KSlcIik7XG4gIHZhciB0cmlwbGVEZWxpbWl0ZXJzID0gbmV3IFJlZ0V4cChcIl4oKD4+PSl8KDw8PSkpXCIpO1xuICB2YXIgZXhwcmVzc2lvbkVuZCA9IG5ldyBSZWdFeHAoXCJeW1xcXFxdXFxcXCldXCIpO1xuICB2YXIgaWRlbnRpZmllcnMgPSBuZXcgUmVnRXhwKFwiXltfQS1aYS16XFx4YTEtXFx1ZmZmZl1bX0EtWmEtejAtOVxceGExLVxcdWZmZmZdKlwiKTtcblxuICB2YXIgYnVpbHRpbnMgPSB3b3JkUmVnZXhwKFtcbiAgICAnZXJyb3InLCAnZXZhbCcsICdmdW5jdGlvbicsICdhYnMnLCAnYWNvcycsICdhdGFuJywgJ2FzaW4nLCAnY29zJyxcbiAgICAnY29zaCcsICdleHAnLCAnbG9nJywgJ3Byb2QnLCAnc3VtJywgJ2xvZzEwJywgJ21heCcsICdtaW4nLCAnc2lnbicsICdzaW4nLCAnc2luaCcsXG4gICAgJ3NxcnQnLCAndGFuJywgJ3Jlc2hhcGUnLCAnYnJlYWsnLCAnemVyb3MnLCAnZGVmYXVsdCcsICdtYXJnaW4nLCAncm91bmQnLCAnb25lcycsXG4gICAgJ3JhbmQnLCAnc3luJywgJ2NlaWwnLCAnZmxvb3InLCAnc2l6ZScsICdjbGVhcicsICd6ZXJvcycsICdleWUnLCAnbWVhbicsICdzdGQnLCAnY292JyxcbiAgICAnZGV0JywgJ2VpZycsICdpbnYnLCAnbm9ybScsICdyYW5rJywgJ3RyYWNlJywgJ2V4cG0nLCAnbG9nbScsICdzcXJ0bScsICdsaW5zcGFjZScsICdwbG90JyxcbiAgICAndGl0bGUnLCAneGxhYmVsJywgJ3lsYWJlbCcsICdsZWdlbmQnLCAndGV4dCcsICdncmlkJywgJ21lc2hncmlkJywgJ21lc2gnLCAnbnVtMnN0cicsXG4gICAgJ2ZmdCcsICdpZmZ0JywgJ2FycmF5ZnVuJywgJ2NlbGxmdW4nLCAnaW5wdXQnLCAnZmxpcGxyJywgJ2ZsaXB1ZCcsICdpc21lbWJlcidcbiAgXSk7XG5cbiAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChbXG4gICAgJ3JldHVybicsICdjYXNlJywgJ3N3aXRjaCcsICdlbHNlJywgJ2Vsc2VpZicsICdlbmQnLCAnZW5kaWYnLCAnZW5kZnVuY3Rpb24nLFxuICAgICdpZicsICdvdGhlcndpc2UnLCAnZG8nLCAnZm9yJywgJ3doaWxlJywgJ3RyeScsICdjYXRjaCcsICdjbGFzc2RlZicsICdwcm9wZXJ0aWVzJywgJ2V2ZW50cycsXG4gICAgJ21ldGhvZHMnLCAnZ2xvYmFsJywgJ3BlcnNpc3RlbnQnLCAnZW5kZm9yJywgJ2VuZHdoaWxlJywgJ3ByaW50ZicsICdzcHJpbnRmJywgJ2Rpc3AnLCAndW50aWwnLFxuICAgICdjb250aW51ZScsICdwa2cnXG4gIF0pO1xuXG5cbiAgLy8gdG9rZW5pemVyc1xuICBmdW5jdGlvbiB0b2tlblRyYW5zcG9zZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKCFzdHJlYW0uc29sKCkgJiYgc3RyZWFtLnBlZWsoKSA9PT0gJ1xcJycpIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgIHJldHVybiAnb3BlcmF0b3InO1xuICAgIH1cbiAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpO1xuICB9XG5cblxuICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL14uKiV9LykpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgcmV0dXJuICdjb21tZW50JztcbiAgICB9O1xuICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICByZXR1cm4gJ2NvbW1lbnQnO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAvLyB3aGl0ZXNwYWNlc1xuICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBIYW5kbGUgb25lIGxpbmUgQ29tbWVudHNcbiAgICBpZiAoc3RyZWFtLm1hdGNoKCcleycpKXtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50O1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgcmV0dXJuICdjb21tZW50JztcbiAgICB9XG5cbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eWyUjXS8pKXtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiAnY29tbWVudCc7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIE51bWJlciBMaXRlcmFsc1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL15bMC05XFwuKy1dLywgZmFsc2UpKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eWystXT8weFswLTlhLWZBLUZdK1tpal0/LykpIHtcbiAgICAgICAgc3RyZWFtLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICByZXR1cm4gJ251bWJlcic7IH07XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eWystXT9cXGQqXFwuXFxkKyhbRWVEZF1bKy1dP1xcZCspP1tpal0/LykpIHsgcmV0dXJuICdudW1iZXInOyB9O1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlsrLV0/XFxkKyhbRWVEZF1bKy1dP1xcZCspP1tpal0/LykpIHsgcmV0dXJuICdudW1iZXInOyB9O1xuICAgIH1cbiAgICBpZiAoc3RyZWFtLm1hdGNoKHdvcmRSZWdleHAoWyduYW4nLCdOYU4nLCdpbmYnLCdJbmYnXSkpKSB7IHJldHVybiAnbnVtYmVyJzsgfTtcblxuICAgIC8vIEhhbmRsZSBTdHJpbmdzXG4gICAgdmFyIG0gPSBzdHJlYW0ubWF0Y2goL15cIig/OlteXCJdfFwiXCIpKihcInwkKS8pIHx8IHN0cmVhbS5tYXRjaCgvXicoPzpbXiddfCcnKSooJ3wkKS8pXG4gICAgaWYgKG0pIHsgcmV0dXJuIG1bMV0gPyAnc3RyaW5nJyA6IFwic3RyaW5nIGVycm9yXCI7IH1cblxuICAgIC8vIEhhbmRsZSB3b3Jkc1xuICAgIGlmIChzdHJlYW0ubWF0Y2goa2V5d29yZHMpKSB7IHJldHVybiAna2V5d29yZCc7IH0gO1xuICAgIGlmIChzdHJlYW0ubWF0Y2goYnVpbHRpbnMpKSB7IHJldHVybiAnYnVpbHRpbic7IH0gO1xuICAgIGlmIChzdHJlYW0ubWF0Y2goaWRlbnRpZmllcnMpKSB7IHJldHVybiAndmFyaWFibGUnOyB9IDtcblxuICAgIGlmIChzdHJlYW0ubWF0Y2goc2luZ2xlT3BlcmF0b3JzKSB8fCBzdHJlYW0ubWF0Y2goZG91YmxlT3BlcmF0b3JzKSkgeyByZXR1cm4gJ29wZXJhdG9yJzsgfTtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKHNpbmdsZURlbGltaXRlcnMpIHx8IHN0cmVhbS5tYXRjaChkb3VibGVEZWxpbWl0ZXJzKSB8fCBzdHJlYW0ubWF0Y2godHJpcGxlRGVsaW1pdGVycykpIHsgcmV0dXJuIG51bGw7IH07XG5cbiAgICBpZiAoc3RyZWFtLm1hdGNoKGV4cHJlc3Npb25FbmQpKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuVHJhbnNwb3NlO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuXG4gICAgLy8gSGFuZGxlIG5vbi1kZXRlY3RlZCBpdGVtc1xuICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgcmV0dXJuICdlcnJvcic7XG4gIH07XG5cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZVxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHN0eWxlID09PSAnbnVtYmVyJyB8fCBzdHlsZSA9PT0gJ3ZhcmlhYmxlJyl7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5UcmFuc3Bvc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSxcblxuICAgIGxpbmVDb21tZW50OiAnJScsXG5cbiAgICBmb2xkOiAnaW5kZW50J1xuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1vY3RhdmVcIiwgXCJvY3RhdmVcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJvelwiLCBmdW5jdGlvbiAoY29uZikge1xuXG4gIGZ1bmN0aW9uIHdvcmRSZWdleHAod29yZHMpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oKFwiICsgd29yZHMuam9pbihcIil8KFwiKSArIFwiKSlcXFxcYlwiKTtcbiAgfVxuXG4gIHZhciBzaW5nbGVPcGVyYXRvcnMgPSAvW1xcXkAhXFx8PD4jflxcLlxcKlxcLVxcK1xcXFwvLD1dLztcbiAgdmFyIGRvdWJsZU9wZXJhdG9ycyA9IC8oPC0pfCg6PSl8KD08KXwoPj0pfCg8PSl8KDw6KXwoPjopfCg9Oil8KFxcXFw9KXwoXFxcXD06KXwoISEpfCg9PSl8KDo6KS87XG4gIHZhciB0cmlwbGVPcGVyYXRvcnMgPSAvKDo6Oil8KFxcLlxcLlxcLil8KD08Oil8KD49OikvO1xuXG4gIHZhciBtaWRkbGUgPSBbXCJpblwiLCBcInRoZW5cIiwgXCJlbHNlXCIsIFwib2ZcIiwgXCJlbHNlb2ZcIiwgXCJlbHNlY2FzZVwiLCBcImVsc2VpZlwiLCBcImNhdGNoXCIsXG4gICAgXCJmaW5hbGx5XCIsIFwid2l0aFwiLCBcInJlcXVpcmVcIiwgXCJwcmVwYXJlXCIsIFwiaW1wb3J0XCIsIFwiZXhwb3J0XCIsIFwiZGVmaW5lXCIsIFwiZG9cIl07XG4gIHZhciBlbmQgPSBbXCJlbmRcIl07XG5cbiAgdmFyIGF0b21zID0gd29yZFJlZ2V4cChbXCJ0cnVlXCIsIFwiZmFsc2VcIiwgXCJuaWxcIiwgXCJ1bml0XCJdKTtcbiAgdmFyIGNvbW1vbktleXdvcmRzID0gd29yZFJlZ2V4cChbXCJhbmR0aGVuXCIsIFwiYXRcIiwgXCJhdHRyXCIsIFwiZGVjbGFyZVwiLCBcImZlYXRcIiwgXCJmcm9tXCIsIFwibGV4XCIsXG4gICAgXCJtb2RcIiwgXCJkaXZcIiwgXCJtb2RlXCIsIFwib3JlbHNlXCIsIFwicGFyc2VyXCIsIFwicHJvZFwiLCBcInByb3BcIiwgXCJzY2FubmVyXCIsIFwic2VsZlwiLCBcInN5blwiLCBcInRva2VuXCJdKTtcbiAgdmFyIG9wZW5pbmdLZXl3b3JkcyA9IHdvcmRSZWdleHAoW1wibG9jYWxcIiwgXCJwcm9jXCIsIFwiZnVuXCIsIFwiY2FzZVwiLCBcImNsYXNzXCIsIFwiaWZcIiwgXCJjb25kXCIsIFwib3JcIiwgXCJkaXNcIixcbiAgICBcImNob2ljZVwiLCBcIm5vdFwiLCBcInRocmVhZFwiLCBcInRyeVwiLCBcInJhaXNlXCIsIFwibG9ja1wiLCBcImZvclwiLCBcInN1Y2h0aGF0XCIsIFwibWV0aFwiLCBcImZ1bmN0b3JcIl0pO1xuICB2YXIgbWlkZGxlS2V5d29yZHMgPSB3b3JkUmVnZXhwKG1pZGRsZSk7XG4gIHZhciBlbmRLZXl3b3JkcyA9IHdvcmRSZWdleHAoZW5kKTtcblxuICAvLyBUb2tlbml6ZXJzXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBCcmFja2V0c1xuICAgIGlmKHN0cmVhbS5tYXRjaCgvW3t9XS8pKSB7XG4gICAgICByZXR1cm4gXCJicmFja2V0XCI7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBbXSBrZXl3b3JkXG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvKFxcW10pLykpIHtcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiXG4gICAgfVxuXG4gICAgLy8gT3BlcmF0b3JzXG4gICAgaWYgKHN0cmVhbS5tYXRjaCh0cmlwbGVPcGVyYXRvcnMpIHx8IHN0cmVhbS5tYXRjaChkb3VibGVPcGVyYXRvcnMpKSB7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH1cblxuICAgIC8vIEF0b21zXG4gICAgaWYoc3RyZWFtLm1hdGNoKGF0b21zKSkge1xuICAgICAgcmV0dXJuICdhdG9tJztcbiAgICB9XG5cbiAgICAvLyBPcGVuaW5nIGtleXdvcmRzXG4gICAgdmFyIG1hdGNoZWQgPSBzdHJlYW0ubWF0Y2gob3BlbmluZ0tleXdvcmRzKTtcbiAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgaWYgKCFzdGF0ZS5kb0luQ3VycmVudExpbmUpXG4gICAgICAgIHN0YXRlLmN1cnJlbnRJbmRlbnQrKztcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUuZG9JbkN1cnJlbnRMaW5lID0gZmFsc2U7XG5cbiAgICAgIC8vIFNwZWNpYWwgbWF0Y2hpbmcgZm9yIHNpZ25hdHVyZXNcbiAgICAgIGlmKG1hdGNoZWRbMF0gPT0gXCJwcm9jXCIgfHwgbWF0Y2hlZFswXSA9PSBcImZ1blwiKVxuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuRnVuUHJvYztcbiAgICAgIGVsc2UgaWYobWF0Y2hlZFswXSA9PSBcImNsYXNzXCIpXG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5DbGFzcztcbiAgICAgIGVsc2UgaWYobWF0Y2hlZFswXSA9PSBcIm1ldGhcIilcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbk1ldGg7XG5cbiAgICAgIHJldHVybiAna2V5d29yZCc7XG4gICAgfVxuXG4gICAgLy8gTWlkZGxlIGFuZCBvdGhlciBrZXl3b3Jkc1xuICAgIGlmIChzdHJlYW0ubWF0Y2gobWlkZGxlS2V5d29yZHMpIHx8IHN0cmVhbS5tYXRjaChjb21tb25LZXl3b3JkcykpIHtcbiAgICAgIHJldHVybiBcImtleXdvcmRcIlxuICAgIH1cblxuICAgIC8vIEVuZCBrZXl3b3Jkc1xuICAgIGlmIChzdHJlYW0ubWF0Y2goZW5kS2V5d29yZHMpKSB7XG4gICAgICBzdGF0ZS5jdXJyZW50SW5kZW50LS07XG4gICAgICByZXR1cm4gJ2tleXdvcmQnO1xuICAgIH1cblxuICAgIC8vIEVhdCB0aGUgbmV4dCBjaGFyIGZvciBuZXh0IGNvbXBhcmlzb25zXG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgIC8vIFN0cmluZ3NcbiAgICBpZiAoY2ggPT0gJ1wiJyB8fCBjaCA9PSBcIidcIikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgLy8gTnVtYmVyc1xuICAgIGlmICgvW35cXGRdLy50ZXN0KGNoKSkge1xuICAgICAgaWYgKGNoID09IFwiflwiKSB7XG4gICAgICAgIGlmKCEgL15bMC05XS8udGVzdChzdHJlYW0ucGVlaygpKSlcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgZWxzZSBpZiAoKCBzdHJlYW0ubmV4dCgpID09IFwiMFwiICYmIHN0cmVhbS5tYXRjaCgvXlt4WF1bMC05YS1mQS1GXSsvKSkgfHwgc3RyZWFtLm1hdGNoKC9eWzAtOV0qKFxcLlswLTldKyk/KFtlRV1bfitdP1swLTldKyk/LykpXG4gICAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICgoY2ggPT0gXCIwXCIgJiYgc3RyZWFtLm1hdGNoKC9eW3hYXVswLTlhLWZBLUZdKy8pKSB8fCBzdHJlYW0ubWF0Y2goL15bMC05XSooXFwuWzAtOV0rKT8oW2VFXVt+K10/WzAtOV0rKT8vKSlcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENvbW1lbnRzXG4gICAgaWYgKGNoID09IFwiJVwiKSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gJ2NvbW1lbnQnO1xuICAgIH1cbiAgICBlbHNlIGlmIChjaCA9PSBcIi9cIikge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50O1xuICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbmdsZSBvcGVyYXRvcnNcbiAgICBpZihzaW5nbGVPcGVyYXRvcnMudGVzdChjaCkpIHtcbiAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90aGluZyBtYXRjaCwgd2Ugc2tpcCB0aGUgZW50aXJlIGFscGhhbnVtZXJpY2FsIGJsb2NrXG4gICAgc3RyZWFtLmVhdFdoaWxlKC9cXHcvKTtcblxuICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkNsYXNzKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzdHJlYW0ubWF0Y2goLyhbQS1aXVtBLVphLXowLTlfXSopfChgLitgKS8pO1xuICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgIHJldHVybiBcInZhcmlhYmxlLTNcIlxuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5NZXRoKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzdHJlYW0ubWF0Y2goLyhbYS16QS1aXVtBLVphLXowLTlfXSopfChgLitgKS8pO1xuICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgIHJldHVybiBcImRlZlwiXG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkZ1blByb2Moc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYoIXN0YXRlLmhhc1Bhc3NlZEZpcnN0U3RhZ2UgJiYgc3RyZWFtLmVhdChcIntcIikpIHtcbiAgICAgIHN0YXRlLmhhc1Bhc3NlZEZpcnN0U3RhZ2UgPSB0cnVlO1xuICAgICAgcmV0dXJuIFwiYnJhY2tldFwiO1xuICAgIH1cbiAgICBlbHNlIGlmKHN0YXRlLmhhc1Bhc3NlZEZpcnN0U3RhZ2UpIHtcbiAgICAgIHN0cmVhbS5tYXRjaCgvKFtBLVpdW0EtWmEtejAtOV9dKil8KGAuK2ApfFxcJC8pO1xuICAgICAgc3RhdGUuaGFzUGFzc2VkRmlyc3RTdGFnZSA9IGZhbHNlO1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICByZXR1cm4gXCJkZWZcIlxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7XG4gICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYgKGNoID09IFwiL1wiICYmIG1heWJlRW5kKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG1heWJlRW5kID0gKGNoID09IFwiKlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge1xuICAgICAgICAgIGVuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gXCJcXFxcXCI7XG4gICAgICB9XG4gICAgICBpZiAoZW5kIHx8ICFlc2NhcGVkKVxuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZEVsZWN0cmljSW5wdXRSZWdFeCgpIHtcbiAgICAvLyBSZWluZGVudGF0aW9uIHNob3VsZCBvY2N1ciBvbiBbXSBvciBvbiBhIG1hdGNoIG9mIGFueSBvZlxuICAgIC8vIHRoZSBibG9jayBjbG9zaW5nIGtleXdvcmRzLCBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICB2YXIgYWxsQ2xvc2luZ3MgPSBtaWRkbGUuY29uY2F0KGVuZCk7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJbXFxcXFtcXFxcXV18KFwiICsgYWxsQ2xvc2luZ3Muam9pbihcInxcIikgKyBcIikkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHtcblxuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsXG4gICAgICAgIGN1cnJlbnRJbmRlbnQ6IDAsXG4gICAgICAgIGRvSW5DdXJyZW50TGluZTogZmFsc2UsXG4gICAgICAgIGhhc1Bhc3NlZEZpcnN0U3RhZ2U6IGZhbHNlXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uc29sKCkpXG4gICAgICAgIHN0YXRlLmRvSW5DdXJyZW50TGluZSA9IDA7XG5cbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbiAoc3RhdGUsIHRleHRBZnRlcikge1xuICAgICAgdmFyIHRydWVUZXh0ID0gdGV4dEFmdGVyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcblxuICAgICAgaWYgKHRydWVUZXh0Lm1hdGNoKGVuZEtleXdvcmRzKSB8fCB0cnVlVGV4dC5tYXRjaChtaWRkbGVLZXl3b3JkcykgfHwgdHJ1ZVRleHQubWF0Y2goLyhcXFtdKS8pKVxuICAgICAgICByZXR1cm4gY29uZi5pbmRlbnRVbml0ICogKHN0YXRlLmN1cnJlbnRJbmRlbnQgLSAxKTtcblxuICAgICAgaWYgKHN0YXRlLmN1cnJlbnRJbmRlbnQgPCAwKVxuICAgICAgICByZXR1cm4gMDtcblxuICAgICAgcmV0dXJuIHN0YXRlLmN1cnJlbnRJbmRlbnQgKiBjb25mLmluZGVudFVuaXQ7XG4gICAgfSxcbiAgICBmb2xkOiBcImluZGVudFwiLFxuICAgIGVsZWN0cmljSW5wdXQ6IGJ1aWxkRWxlY3RyaWNJbnB1dFJlZ0V4KCksXG4gICAgbGluZUNvbW1lbnQ6IFwiJVwiLFxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIi8qXCIsXG4gICAgYmxvY2tDb21tZW50RW5kOiBcIiovXCJcbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtb3pcIiwgXCJvelwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInBhc2NhbFwiLCBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gd29yZHMoc3RyKSB7XG4gICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdChcIiBcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuICB2YXIga2V5d29yZHMgPSB3b3JkcyhcbiAgICBcImFic29sdXRlIGFuZCBhcnJheSBhc20gYmVnaW4gY2FzZSBjb25zdCBjb25zdHJ1Y3RvciBkZXN0cnVjdG9yIGRpdiBkbyBcIiArXG4gICAgXCJkb3dudG8gZWxzZSBlbmQgZmlsZSBmb3IgZnVuY3Rpb24gZ290byBpZiBpbXBsZW1lbnRhdGlvbiBpbiBpbmhlcml0ZWQgXCIgK1xuICAgIFwiaW5saW5lIGludGVyZmFjZSBsYWJlbCBtb2QgbmlsIG5vdCBvYmplY3Qgb2Ygb3BlcmF0b3Igb3IgcGFja2VkIHByb2NlZHVyZSBcIiArXG4gICAgXCJwcm9ncmFtIHJlY29yZCByZWludHJvZHVjZSByZXBlYXQgc2VsZiBzZXQgc2hsIHNociBzdHJpbmcgdGhlbiB0byB0eXBlIFwiICtcbiAgICBcInVuaXQgdW50aWwgdXNlcyB2YXIgd2hpbGUgd2l0aCB4b3IgYXMgY2xhc3MgZGlzcGludGVyZmFjZSBleGNlcHQgZXhwb3J0cyBcIiArXG4gICAgXCJmaW5hbGl6YXRpb24gZmluYWxseSBpbml0aWFsaXphdGlvbiBpbmxpbmUgaXMgbGlicmFyeSBvbiBvdXQgcGFja2VkIFwiICtcbiAgICBcInByb3BlcnR5IHJhaXNlIHJlc291cmNlc3RyaW5nIHRocmVhZHZhciB0cnkgYWJzb2x1dGUgYWJzdHJhY3QgYWxpYXMgXCIgK1xuICAgIFwiYXNzZW1ibGVyIGJpdHBhY2tlZCBicmVhayBjZGVjbCBjb250aW51ZSBjcHBkZWNsIGN2YXIgZGVmYXVsdCBkZXByZWNhdGVkIFwiICtcbiAgICBcImR5bmFtaWMgZW51bWVyYXRvciBleHBlcmltZW50YWwgZXhwb3J0IGV4dGVybmFsIGZhciBmYXIxNiBmb3J3YXJkIGdlbmVyaWMgXCIgK1xuICAgIFwiaGVscGVyIGltcGxlbWVudHMgaW5kZXggaW50ZXJydXB0IGlvY2hlY2sgbG9jYWwgbWVzc2FnZSBuYW1lIG5lYXIgXCIgK1xuICAgIFwibm9kZWZhdWx0IG5vcmV0dXJuIG5vc3RhY2tmcmFtZSBvbGRmcGNjYWxsIG90aGVyd2lzZSBvdmVybG9hZCBvdmVycmlkZSBcIiArXG4gICAgXCJwYXNjYWwgcGxhdGZvcm0gcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHB1Ymxpc2hlZCByZWFkIHJlZ2lzdGVyIFwiICtcbiAgICBcInJlaW50cm9kdWNlIHJlc3VsdCBzYWZlY2FsbCBzYXZlcmVnaXN0ZXJzIHNvZnRmbG9hdCBzcGVjaWFsaXplIHN0YXRpYyBcIiArXG4gICAgXCJzdGRjYWxsIHN0b3JlZCBzdHJpY3QgdW5hbGlnbmVkIHVuaW1wbGVtZW50ZWQgdmFyYXJncyB2aXJ0dWFsIHdyaXRlXCIpO1xuICB2YXIgYXRvbXMgPSB7XCJudWxsXCI6IHRydWV9O1xuXG4gIHZhciBpc09wZXJhdG9yQ2hhciA9IC9bK1xcLSomJT08PiE/fFxcL10vO1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gXCIjXCIgJiYgc3RhdGUuc3RhcnRPZkxpbmUpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICB9XG4gICAgaWYgKGNoID09ICdcIicgfHwgY2ggPT0gXCInXCIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoY2ggPT0gXCIoXCIgJiYgc3RyZWFtLmVhdChcIipcIikpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50O1xuICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgaWYgKGNoID09IFwie1wiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudEJyYWNlcztcbiAgICAgIHJldHVybiB0b2tlbkNvbW1lbnRCcmFjZXMoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmICgvW1xcW1xcXVxcKFxcKSw7XFw6XFwuXS8udGVzdChjaCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoL1xcZC8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcLl0vKTtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH1cbiAgICBpZiAoY2ggPT0gXCIvXCIpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiL1wiKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpO1xuICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICB9XG4gICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX10vKTtcbiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICBpZiAoa2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gXCJhdG9tXCI7XG4gICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge2VuZCA9IHRydWU7IGJyZWFrO31cbiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gXCJcXFxcXCI7XG4gICAgICB9XG4gICAgICBpZiAoZW5kIHx8ICFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7XG4gICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYgKGNoID09IFwiKVwiICYmIG1heWJlRW5kKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBtYXliZUVuZCA9IChjaCA9PSBcIipcIik7XG4gICAgfVxuICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudEJyYWNlcyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIn1cIikge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cblxuICAvLyBJbnRlcmZhY2VcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHt0b2tlbml6ZTogbnVsbH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgdmFyIHN0eWxlID0gKHN0YXRlLnRva2VuaXplIHx8IHRva2VuQmFzZSkoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBpZiAoc3R5bGUgPT0gXCJjb21tZW50XCIgfHwgc3R5bGUgPT0gXCJtZXRhXCIpIHJldHVybiBzdHlsZTtcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgZWxlY3RyaWNDaGFyczogXCJ7fVwiXG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXBhc2NhbFwiLCBcInBhc2NhbFwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0XCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIsIFwiLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0XCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInBlZ2pzXCIsIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgdmFyIGpzTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwiamF2YXNjcmlwdFwiKTtcblxuICBmdW5jdGlvbiBpZGVudGlmaWVyKHN0cmVhbSkge1xuICAgIHJldHVybiBzdHJlYW0ubWF0Y2goL15bYS16QS1aX11bYS16QS1aMC05X10qLyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluU3RyaW5nOiBmYWxzZSxcbiAgICAgICAgc3RyaW5nVHlwZTogbnVsbCxcbiAgICAgICAgaW5Db21tZW50OiBmYWxzZSxcbiAgICAgICAgaW5DaGFyYWN0ZXJDbGFzczogZmFsc2UsXG4gICAgICAgIGJyYWNlZDogMCxcbiAgICAgICAgbGhzOiB0cnVlLFxuICAgICAgICBsb2NhbFN0YXRlOiBudWxsXG4gICAgICB9O1xuICAgIH0sXG4gICAgdG9rZW46IGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtKVxuXG4gICAgICAvL2NoZWNrIGZvciBzdGF0ZSBjaGFuZ2VzXG4gICAgICBpZiAoIXN0YXRlLmluU3RyaW5nICYmICFzdGF0ZS5pbkNvbW1lbnQgJiYgKChzdHJlYW0ucGVlaygpID09ICdcIicpIHx8IChzdHJlYW0ucGVlaygpID09IFwiJ1wiKSkpIHtcbiAgICAgICAgc3RhdGUuc3RyaW5nVHlwZSA9IHN0cmVhbS5wZWVrKCk7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7IC8vIFNraXAgcXVvdGVcbiAgICAgICAgc3RhdGUuaW5TdHJpbmcgPSB0cnVlOyAvLyBVcGRhdGUgc3RhdGVcbiAgICAgIH1cbiAgICAgIGlmICghc3RhdGUuaW5TdHJpbmcgJiYgIXN0YXRlLmluQ29tbWVudCAmJiBzdHJlYW0ubWF0Y2goL15cXC9cXCovKSkge1xuICAgICAgICBzdGF0ZS5pbkNvbW1lbnQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvL3JldHVybiBzdGF0ZVxuICAgICAgaWYgKHN0YXRlLmluU3RyaW5nKSB7XG4gICAgICAgIHdoaWxlIChzdGF0ZS5pblN0cmluZyAmJiAhc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09IHN0YXRlLnN0cmluZ1R5cGUpIHtcbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7IC8vIFNraXAgcXVvdGVcbiAgICAgICAgICAgIHN0YXRlLmluU3RyaW5nID0gZmFsc2U7IC8vIENsZWFyIGZsYWdcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmVhbS5tYXRjaCgvXi5bXlxcXFxcXFwiXFwnXSovKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlLmxocyA/IFwicHJvcGVydHkgc3RyaW5nXCIgOiBcInN0cmluZ1wiOyAvLyBUb2tlbiBzdHlsZVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5pbkNvbW1lbnQpIHtcbiAgICAgICAgd2hpbGUgKHN0YXRlLmluQ29tbWVudCAmJiAhc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXFwqXFwvLykpIHtcbiAgICAgICAgICAgIHN0YXRlLmluQ29tbWVudCA9IGZhbHNlOyAvLyBDbGVhciBmbGFnXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmVhbS5tYXRjaCgvXi5bXlxcKl0qLyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaW5DaGFyYWN0ZXJDbGFzcykge1xuICAgICAgICAgIHdoaWxlIChzdGF0ZS5pbkNoYXJhY3RlckNsYXNzICYmICFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgICAgIGlmICghKHN0cmVhbS5tYXRjaCgvXlteXFxdXFxcXF0rLykgfHwgc3RyZWFtLm1hdGNoKC9eXFxcXC4vKSkpIHtcbiAgICAgICAgICAgICAgc3RhdGUuaW5DaGFyYWN0ZXJDbGFzcyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJ1snKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHN0YXRlLmluQ2hhcmFjdGVyQ2xhc3MgPSB0cnVlO1xuICAgICAgICByZXR1cm4gJ2JyYWNrZXQnO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15cXC9cXC8vKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuYnJhY2VkIHx8IHN0cmVhbS5wZWVrKCkgPT09ICd7Jykge1xuICAgICAgICBpZiAoc3RhdGUubG9jYWxTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoanNNb2RlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4gPSBqc01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0YXRlKTtcbiAgICAgICAgdmFyIHRleHQgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGV4dFtpXSA9PT0gJ3snKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmJyYWNlZCsrO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0W2ldID09PSAnfScpIHtcbiAgICAgICAgICAgICAgc3RhdGUuYnJhY2VkLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9IGVsc2UgaWYgKGlkZW50aWZpZXIoc3RyZWFtKSkge1xuICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJzonKSB7XG4gICAgICAgICAgcmV0dXJuICd2YXJpYWJsZSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICd2YXJpYWJsZS0yJztcbiAgICAgIH0gZWxzZSBpZiAoWydbJywgJ10nLCAnKCcsICcpJ10uaW5kZXhPZihzdHJlYW0ucGVlaygpKSAhPSAtMSkge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gJ2JyYWNrZXQnO1xuICAgICAgfSBlbHNlIGlmICghc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbn0sIFwiamF2YXNjcmlwdFwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vLyBDb2RlTWlycm9yMiBtb2RlL3BlcmwvcGVybC5qcyAodGV4dC94LXBlcmwpIGJldGEgMC4xMCAoMjAxMS0xMS0wOClcbi8vIFRoaXMgaXMgYSBwYXJ0IG9mIENvZGVNaXJyb3IgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2FiYWNhL0NvZGVNaXJyb3JfbW9kZV9wZXJsIChtYWlsQHNhYmFjYS5jb20pXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwicGVybFwiLGZ1bmN0aW9uKCl7XG4gICAgICAgIC8vIGh0dHA6Ly9wZXJsZG9jLnBlcmwub3JnXG4gICAgICAgIHZhciBQRVJMPXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgbnVsbCAtIG1hZ2ljIHRvdWNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgMSAtIGtleXdvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAyIC0gZGVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgMyAtIGF0b21cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICA0IC0gb3BlcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICA1IC0gdmFyaWFibGUtMiAocHJlZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBbeCx5XSAtIHg9MSwyLDM7IHk9bXVzdCBiZSBkZWZpbmVkIGlmIHh7Li4ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBQRVJMIG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgICctPicgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJysrJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnLS0nICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICcqKicgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgISB+IFxcIGFuZCB1bmFyeSArIGFuZCAtXG4gICAgICAgICAgICAgICAgJz1+JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnIX4nICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICcqJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJy8nICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnJScgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICd4JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJysnICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnLScgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICcuJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJzw8JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnPj4nICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIG5hbWVkIHVuYXJ5IG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgICc8JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJz4nICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnPD0nICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICc+PScgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJ2x0JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnZ3QnICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICdsZScgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJ2dlJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnPT0nICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICchPScgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJzw9PicgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnZXEnICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICduZScgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJ2NtcCcgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnfn4nICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICcmJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJ3wnICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnXicgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICcmJicgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJ3x8JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnLy8nICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICcuLicgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJy4uLicgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnPycgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICc6JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJz0nICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnKz0nICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICctPScgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJyo9JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCwgIC8vICAgZXRjLiA/Pz9cbiAgICAgICAgICAgICAgICAnLCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICc9PicgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJzo6JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBsaXN0IG9wZXJhdG9ycyAocmlnaHR3YXJkKVxuICAgICAgICAgICAgICAgICdub3QnICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgJ2FuZCcgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgNCxcbiAgICAgICAgICAgICAgICAnb3InICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICA0LFxuICAgICAgICAgICAgICAgICd4b3InICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgIDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIFBFUkwgcHJlZGVmaW5lZCB2YXJpYWJsZXMgKEkga25vdywgd2hhdCB0aGlzIGlzIGEgcGFyYW5vaWQgaWRlYSwgYnV0IG1heSBiZSBuZWVkZWQgZm9yIHBlb3BsZSwgd2hvIGxlYXJuIFBFUkwsIGFuZCBmb3IgbWUgYXMgd2VsbCwgLi4uYW5kIG1heSBiZSBmb3IgeW91PzspXG4gICAgICAgICAgICAgICAgJ0JFR0lOJyAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgWzUsMV0sXG4gICAgICAgICAgICAgICAgJ0VORCcgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgWzUsMV0sXG4gICAgICAgICAgICAgICAgJ1BSSU5UJyAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgWzUsMV0sXG4gICAgICAgICAgICAgICAgJ1BSSU5URicgICAgICAgICAgICAgICAgICAgICAgICA6ICAgWzUsMV0sXG4gICAgICAgICAgICAgICAgJ0dFVEMnICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgWzUsMV0sXG4gICAgICAgICAgICAgICAgJ1JFQUQnICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgWzUsMV0sXG4gICAgICAgICAgICAgICAgJ1JFQURMSU5FJyAgICAgICAgICAgICAgICAgICAgICA6ICAgWzUsMV0sXG4gICAgICAgICAgICAgICAgJ0RFU1RST1knICAgICAgICAgICAgICAgICAgICAgICA6ICAgWzUsMV0sXG4gICAgICAgICAgICAgICAgJ1RJRScgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgWzUsMV0sXG4gICAgICAgICAgICAgICAgJ1RJRUhBTkRMRScgICAgICAgICAgICAgICAgICAgICA6ICAgWzUsMV0sXG4gICAgICAgICAgICAgICAgJ1VOVElFJyAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgWzUsMV0sXG4gICAgICAgICAgICAgICAgJ1NURElOJyAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJ1NURElOX1RPUCcgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJ1NURE9VVCcgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJ1NURE9VVF9UT1AnICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJ1NUREVSUicgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJ1NUREVSUl9UT1AnICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRBUkcnICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRfJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJ0BBUkcnICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJ0BfJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRMSVNUX1NFUEFSQVRPUicgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRcIicgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckUFJPQ0VTU19JRCcgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckUElEJyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckJCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckUkVBTF9HUk9VUF9JRCcgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckR0lEJyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckKCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckRUZGRUNUSVZFX0dST1VQX0lEJyAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckRUdJRCcgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckKScgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckUFJPR1JBTV9OQU1FJyAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckMCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckU1VCU0NSSVBUX1NFUEFSQVRPUicgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckU1VCU0VQJyAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckOycgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckUkVBTF9VU0VSX0lEJyAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckVUlEJyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckPCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckRUZGRUNUSVZFX1VTRVJfSUQnICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckRVVJRCcgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckPicgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckYScgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckYicgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckQ09NUElMSU5HJyAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXkMnICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckREVCVUdHSU5HJyAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXkQnICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICcke15FTkNPRElOR30nICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckRU5WJyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICclRU5WJyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckU1lTVEVNX0ZEX01BWCcgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXkYnICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICdARicgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICcke15HTE9CQUxfUEhBU0V9JyAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXkgnICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICclXkgnICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICdASU5DJyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICclSU5DJyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckSU5QTEFDRV9FRElUJyAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXkknICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXk0nICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckT1NOQU1FJyAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXk8nICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICcke15PUEVOfScgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckUEVSTERCJyAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXlAnICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckU0lHJyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICclU0lHJyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckQkFTRVRJTUUnICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXlQnICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICcke15UQUlOVH0nICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICcke15VTklDT0RFfScgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICcke15VVEY4Q0FDSEV9JyAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICcke15VVEY4TE9DQUxFfScgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckUEVSTF9WRVJTSU9OJyAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXlYnICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICcke15XSU4zMl9TTE9QUFlfU1RBVH0nICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckRVhFQ1VUQUJMRV9OQU1FJyAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXlgnICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckMScgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LCAvLyAtIHJlZ2V4cCAkMSwgJDIuLi5cbiAgICAgICAgICAgICAgICAnJE1BVENIJyAgICAgICAgICAgICAgICAgICAgICAgIDogICAgNSxcbiAgICAgICAgICAgICAgICAnJCYnICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgNSxcbiAgICAgICAgICAgICAgICAnJHteTUFUQ0h9JyAgICAgICAgICAgICAgICAgICAgIDogICAgNSxcbiAgICAgICAgICAgICAgICAnJFBSRU1BVENIJyAgICAgICAgICAgICAgICAgICAgIDogICAgNSxcbiAgICAgICAgICAgICAgICAnJGAnICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgNSxcbiAgICAgICAgICAgICAgICAnJHteUFJFTUFUQ0h9JyAgICAgICAgICAgICAgICAgIDogICAgNSxcbiAgICAgICAgICAgICAgICAnJFBPU1RNQVRDSCcgICAgICAgICAgICAgICAgICAgIDogICAgNSxcbiAgICAgICAgICAgICAgICBcIiQnXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICcke15QT1NUTUFUQ0h9JyAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckTEFTVF9QQVJFTl9NQVRDSCcgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckKycgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckTEFTVF9TVUJNQVRDSF9SRVNVTFQnICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXk4nICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICdATEFTVF9NQVRDSF9FTkQnICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICdAKycgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICclTEFTVF9QQVJFTl9NQVRDSCcgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICclKycgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICdATEFTVF9NQVRDSF9TVEFSVCcgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICdALScgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICclTEFTVF9NQVRDSF9TVEFSVCcgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICclLScgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckTEFTVF9SRUdFWFBfQ09ERV9SRVNVTFQnICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXlInICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICcke15SRV9ERUJVR19GTEFHU30nICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICcke15SRV9UUklFX01BWEJVRn0nICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckQVJHVicgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICdAQVJHVicgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICdBUkdWJyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICdBUkdWT1VUJyAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckT1VUUFVUX0ZJRUxEX1NFUEFSQVRPUicgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckT0ZTJyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckLCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckSU5QVVRfTElORV9OVU1CRVInICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckTlInICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckLicgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckSU5QVVRfUkVDT1JEX1NFUEFSQVRPUicgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckUlMnICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckLycgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckT1VUUFVUX1JFQ09SRF9TRVBBUkFUT1InICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckT1JTJyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICA1LFxuICAgICAgICAgICAgICAgICckXFxcXCcgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRPVVRQVVRfQVVUT0ZMVVNIJyAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyR8JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRBQ0NVTVVMQVRPUicgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyReQScgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRGT1JNQVRfRk9STUZFRUQnICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyReTCcgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRGT1JNQVRfUEFHRV9OVU1CRVInICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyQlJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRGT1JNQVRfTElORVNfTEVGVCcgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyQtJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRGT1JNQVRfTElORV9CUkVBS19DSEFSQUNURVJTJyA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyQ6JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRGT1JNQVRfTElORVNfUEVSX1BBR0UnICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyQ9JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRGT1JNQVRfVE9QX05BTUUnICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyReJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRGT1JNQVRfTkFNRScgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyR+JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyR7XkNISUxEX0VSUk9SX05BVElWRX0nICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRFWFRFTkRFRF9PU19FUlJPUicgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyReRScgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRFWENFUFRJT05TX0JFSU5HX0NBVUdIVCcgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyReUycgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRXQVJOSU5HJyAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyReVycgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyR7XldBUk5JTkdfQklUU30nICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRPU19FUlJPUicgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRFUlJOTycgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyQhJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyVPU19FUlJPUicgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyVFUlJOTycgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyUhJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRDSElMRF9FUlJPUicgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyQ/JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRFVkFMX0VSUk9SJyAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRAJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRPRk1UJyAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyQjJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyQqJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRBUlJBWV9CQVNFJyAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRbJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRPTERfUEVSTF9WRVJTSU9OJyAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgJyRdJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIFBFUkwgYmxvY2tzXG4gICAgICAgICAgICAgICAgJ2lmJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6WzEsMV0sXG4gICAgICAgICAgICAgICAgZWxzaWYgICAgICAgICAgICAgICAgICAgICAgICAgICA6WzEsMV0sXG4gICAgICAgICAgICAgICAgJ2Vsc2UnICAgICAgICAgICAgICAgICAgICAgICAgICA6WzEsMV0sXG4gICAgICAgICAgICAgICAgJ3doaWxlJyAgICAgICAgICAgICAgICAgICAgICAgICA6WzEsMV0sXG4gICAgICAgICAgICAgICAgdW5sZXNzICAgICAgICAgICAgICAgICAgICAgICAgICA6WzEsMV0sXG4gICAgICAgICAgICAgICAgJ2ZvcicgICAgICAgICAgICAgICAgICAgICAgICAgICA6WzEsMV0sXG4gICAgICAgICAgICAgICAgZm9yZWFjaCAgICAgICAgICAgICAgICAgICAgICAgICA6WzEsMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIFBFUkwgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgJ2FicycgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gYWJzb2x1dGUgdmFsdWUgZnVuY3Rpb25cbiAgICAgICAgICAgICAgICBhY2NlcHQgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBhY2NlcHQgYW4gaW5jb21pbmcgc29ja2V0IGNvbm5lY3RcbiAgICAgICAgICAgICAgICBhbGFybSAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBzY2hlZHVsZSBhIFNJR0FMUk1cbiAgICAgICAgICAgICAgICAnYXRhbjInICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBhcmN0YW5nZW50IG9mIFkvWCBpbiB0aGUgcmFuZ2UgLVBJIHRvIFBJXG4gICAgICAgICAgICAgICAgYmluZCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gYmluZHMgYW4gYWRkcmVzcyB0byBhIHNvY2tldFxuICAgICAgICAgICAgICAgIGJpbm1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHByZXBhcmUgYmluYXJ5IGZpbGVzIGZvciBJL09cbiAgICAgICAgICAgICAgICBibGVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBjcmVhdGUgYW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgYm9vdHN0cmFwICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vXG4gICAgICAgICAgICAgICAgJ2JyZWFrJyAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gYnJlYWsgb3V0IG9mIGEgXCJnaXZlblwiIGJsb2NrXG4gICAgICAgICAgICAgICAgY2FsbGVyICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZ2V0IGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgc3Vicm91dGluZSBjYWxsXG4gICAgICAgICAgICAgICAgY2hkaXIgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gY2hhbmdlIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgIGNobW9kICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGNoYW5nZXMgdGhlIHBlcm1pc3Npb25zIG9uIGEgbGlzdCBvZiBmaWxlc1xuICAgICAgICAgICAgICAgIGNob21wICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJlbW92ZSBhIHRyYWlsaW5nIHJlY29yZCBzZXBhcmF0b3IgZnJvbSBhIHN0cmluZ1xuICAgICAgICAgICAgICAgIGNob3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJlbW92ZSB0aGUgbGFzdCBjaGFyYWN0ZXIgZnJvbSBhIHN0cmluZ1xuICAgICAgICAgICAgICAgIGNob3duICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGNoYW5nZSB0aGUgb3duZXJzaGlwIG9uIGEgbGlzdCBvZiBmaWxlc1xuICAgICAgICAgICAgICAgIGNociAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBjaGFyYWN0ZXIgdGhpcyBudW1iZXIgcmVwcmVzZW50c1xuICAgICAgICAgICAgICAgIGNocm9vdCAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIG1ha2UgZGlyZWN0b3J5IG5ldyByb290IGZvciBwYXRoIGxvb2t1cHNcbiAgICAgICAgICAgICAgICBjbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBjbG9zZSBmaWxlIChvciBwaXBlIG9yIHNvY2tldCkgaGFuZGxlXG4gICAgICAgICAgICAgICAgY2xvc2VkaXIgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gY2xvc2UgZGlyZWN0b3J5IGhhbmRsZVxuICAgICAgICAgICAgICAgIGNvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGNvbm5lY3QgdG8gYSByZW1vdGUgc29ja2V0XG4gICAgICAgICAgICAgICAgJ2NvbnRpbnVlJyAgICAgICAgICAgICAgICAgICAgICA6WzEsMV0sIC8vIC0gb3B0aW9uYWwgdHJhaWxpbmcgYmxvY2sgaW4gYSB3aGlsZSBvciBmb3JlYWNoXG4gICAgICAgICAgICAgICAgJ2NvcycgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gY29zaW5lIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgY3J5cHQgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gb25lLXdheSBwYXNzd2Qtc3R5bGUgZW5jcnlwdGlvblxuICAgICAgICAgICAgICAgIGRibWNsb3NlICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGJyZWFrcyBiaW5kaW5nIG9uIGEgdGllZCBkYm0gZmlsZVxuICAgICAgICAgICAgICAgIGRibW9wZW4gICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGNyZWF0ZSBiaW5kaW5nIG9uIGEgdGllZCBkYm0gZmlsZVxuICAgICAgICAgICAgICAgICdkZWZhdWx0JyAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvL1xuICAgICAgICAgICAgICAgIGRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHRlc3Qgd2hldGhlciBhIHZhbHVlLCB2YXJpYWJsZSwgb3IgZnVuY3Rpb24gaXMgZGVmaW5lZFxuICAgICAgICAgICAgICAgICdkZWxldGUnICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGRlbGV0ZXMgYSB2YWx1ZSBmcm9tIGEgaGFzaFxuICAgICAgICAgICAgICAgIGRpZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJhaXNlIGFuIGV4Y2VwdGlvbiBvciBiYWlsIG91dFxuICAgICAgICAgICAgICAgICdkbycgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHR1cm4gYSBCTE9DSyBpbnRvIGEgVEVSTVxuICAgICAgICAgICAgICAgIGR1bXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGNyZWF0ZSBhbiBpbW1lZGlhdGUgY29yZSBkdW1wXG4gICAgICAgICAgICAgICAgZWFjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcmV0cmlldmUgdGhlIG5leHQga2V5L3ZhbHVlIHBhaXIgZnJvbSBhIGhhc2hcbiAgICAgICAgICAgICAgICBlbmRncmVudCAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBiZSBkb25lIHVzaW5nIGdyb3VwIGZpbGVcbiAgICAgICAgICAgICAgICBlbmRob3N0ZW50ICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBiZSBkb25lIHVzaW5nIGhvc3RzIGZpbGVcbiAgICAgICAgICAgICAgICBlbmRuZXRlbnQgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBiZSBkb25lIHVzaW5nIG5ldHdvcmtzIGZpbGVcbiAgICAgICAgICAgICAgICBlbmRwcm90b2VudCAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBiZSBkb25lIHVzaW5nIHByb3RvY29scyBmaWxlXG4gICAgICAgICAgICAgICAgZW5kcHdlbnQgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gYmUgZG9uZSB1c2luZyBwYXNzd2QgZmlsZVxuICAgICAgICAgICAgICAgIGVuZHNlcnZlbnQgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGJlIGRvbmUgdXNpbmcgc2VydmljZXMgZmlsZVxuICAgICAgICAgICAgICAgIGVvZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHRlc3QgYSBmaWxlaGFuZGxlIGZvciBpdHMgZW5kXG4gICAgICAgICAgICAgICAgJ2V2YWwnICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gY2F0Y2ggZXhjZXB0aW9ucyBvciBjb21waWxlIGFuZCBydW4gY29kZVxuICAgICAgICAgICAgICAgICdleGVjJyAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGFiYW5kb24gdGhpcyBwcm9ncmFtIHRvIHJ1biBhbm90aGVyXG4gICAgICAgICAgICAgICAgZXhpc3RzICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gdGVzdCB3aGV0aGVyIGEgaGFzaCBrZXkgaXMgcHJlc2VudFxuICAgICAgICAgICAgICAgIGV4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHRlcm1pbmF0ZSB0aGlzIHByb2dyYW1cbiAgICAgICAgICAgICAgICAnZXhwJyAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSByYWlzZSBJIHRvIGEgcG93ZXJcbiAgICAgICAgICAgICAgICBmY250bCAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBmaWxlIGNvbnRyb2wgc3lzdGVtIGNhbGxcbiAgICAgICAgICAgICAgICBmaWxlbm8gICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSByZXR1cm4gZmlsZSBkZXNjcmlwdG9yIGZyb20gZmlsZWhhbmRsZVxuICAgICAgICAgICAgICAgIGZsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGxvY2sgYW4gZW50aXJlIGZpbGUgd2l0aCBhbiBhZHZpc29yeSBsb2NrXG4gICAgICAgICAgICAgICAgZm9yayAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gY3JlYXRlIGEgbmV3IHByb2Nlc3MganVzdCBsaWtlIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZGVjbGFyZSBhIHBpY3R1cmUgZm9ybWF0IHdpdGggdXNlIGJ5IHRoZSB3cml0ZSgpIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgZm9ybWxpbmUgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgZm9ybWF0c1xuICAgICAgICAgICAgICAgIGdldGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgZmlsZWhhbmRsZVxuICAgICAgICAgICAgICAgIGdldGdyZW50ICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBuZXh0IGdyb3VwIHJlY29yZFxuICAgICAgICAgICAgICAgIGdldGdyZ2lkICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBncm91cCByZWNvcmQgZ2l2ZW4gZ3JvdXAgdXNlciBJRFxuICAgICAgICAgICAgICAgIGdldGdybmFtICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBncm91cCByZWNvcmQgZ2l2ZW4gZ3JvdXAgbmFtZVxuICAgICAgICAgICAgICAgIGdldGhvc3RieWFkZHIgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBob3N0IHJlY29yZCBnaXZlbiBpdHMgYWRkcmVzc1xuICAgICAgICAgICAgICAgIGdldGhvc3RieW5hbWUgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBob3N0IHJlY29yZCBnaXZlbiBuYW1lXG4gICAgICAgICAgICAgICAgZ2V0aG9zdGVudCAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZ2V0IG5leHQgaG9zdHMgcmVjb3JkXG4gICAgICAgICAgICAgICAgZ2V0bG9naW4gICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcmV0dXJuIHdobyBsb2dnZWQgaW4gYXQgdGhpcyB0dHlcbiAgICAgICAgICAgICAgICBnZXRuZXRieWFkZHIgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBnZXQgbmV0d29yayByZWNvcmQgZ2l2ZW4gaXRzIGFkZHJlc3NcbiAgICAgICAgICAgICAgICBnZXRuZXRieW5hbWUgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBnZXQgbmV0d29ya3MgcmVjb3JkIGdpdmVuIG5hbWVcbiAgICAgICAgICAgICAgICBnZXRuZXRlbnQgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBnZXQgbmV4dCBuZXR3b3JrcyByZWNvcmRcbiAgICAgICAgICAgICAgICBnZXRwZWVybmFtZSAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBmaW5kIHRoZSBvdGhlciBlbmQgb2YgYSBzb2NrZXQgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIGdldHBncnAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBwcm9jZXNzIGdyb3VwXG4gICAgICAgICAgICAgICAgZ2V0cHBpZCAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZ2V0IHBhcmVudCBwcm9jZXNzIElEXG4gICAgICAgICAgICAgICAgZ2V0cHJpb3JpdHkgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZ2V0IGN1cnJlbnQgbmljZSB2YWx1ZVxuICAgICAgICAgICAgICAgIGdldHByb3RvYnluYW1lICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBwcm90b2NvbCByZWNvcmQgZ2l2ZW4gbmFtZVxuICAgICAgICAgICAgICAgIGdldHByb3RvYnludW1iZXIgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBwcm90b2NvbCByZWNvcmQgbnVtZXJpYyBwcm90b2NvbFxuICAgICAgICAgICAgICAgIGdldHByb3RvZW50ICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBuZXh0IHByb3RvY29scyByZWNvcmRcbiAgICAgICAgICAgICAgICBnZXRwd2VudCAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBnZXQgbmV4dCBwYXNzd2QgcmVjb3JkXG4gICAgICAgICAgICAgICAgZ2V0cHduYW0gICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZ2V0IHBhc3N3ZCByZWNvcmQgZ2l2ZW4gdXNlciBsb2dpbiBuYW1lXG4gICAgICAgICAgICAgICAgZ2V0cHd1aWQgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZ2V0IHBhc3N3ZCByZWNvcmQgZ2l2ZW4gdXNlciBJRFxuICAgICAgICAgICAgICAgIGdldHNlcnZieW5hbWUgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBzZXJ2aWNlcyByZWNvcmQgZ2l2ZW4gaXRzIG5hbWVcbiAgICAgICAgICAgICAgICBnZXRzZXJ2Ynlwb3J0ICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBnZXQgc2VydmljZXMgcmVjb3JkIGdpdmVuIG51bWVyaWMgcG9ydFxuICAgICAgICAgICAgICAgIGdldHNlcnZlbnQgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBuZXh0IHNlcnZpY2VzIHJlY29yZFxuICAgICAgICAgICAgICAgIGdldHNvY2tuYW1lICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJldHJpZXZlIHRoZSBzb2NrYWRkciBmb3IgYSBnaXZlbiBzb2NrZXRcbiAgICAgICAgICAgICAgICBnZXRzb2Nrb3B0ICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBnZXQgc29ja2V0IG9wdGlvbnMgb24gYSBnaXZlbiBzb2NrZXRcbiAgICAgICAgICAgICAgICBnaXZlbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy9cbiAgICAgICAgICAgICAgICBnbG9iICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBleHBhbmQgZmlsZW5hbWVzIHVzaW5nIHdpbGRjYXJkc1xuICAgICAgICAgICAgICAgIGdtdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGNvbnZlcnQgVU5JWCB0aW1lIGludG8gcmVjb3JkIG9yIHN0cmluZyB1c2luZyBHcmVlbndpY2ggdGltZVxuICAgICAgICAgICAgICAgICdnb3RvJyAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGNyZWF0ZSBzcGFnaGV0dGkgY29kZVxuICAgICAgICAgICAgICAgIGdyZXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGxvY2F0ZSBlbGVtZW50cyBpbiBhIGxpc3QgdGVzdCB0cnVlIGFnYWluc3QgYSBnaXZlbiBjcml0ZXJpb25cbiAgICAgICAgICAgICAgICBoZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGEgaGV4YWRlY2ltYWwgbnVtYmVyXG4gICAgICAgICAgICAgICAgJ2ltcG9ydCcgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcGF0Y2ggYSBtb2R1bGUncyBuYW1lc3BhY2UgaW50byB5b3VyIG93blxuICAgICAgICAgICAgICAgIGluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGZpbmQgYSBzdWJzdHJpbmcgd2l0aGluIGEgc3RyaW5nXG4gICAgICAgICAgICAgICAgJ2ludCcgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZ2V0IHRoZSBpbnRlZ2VyIHBvcnRpb24gb2YgYSBudW1iZXJcbiAgICAgICAgICAgICAgICBpb2N0bCAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBzeXN0ZW0tZGVwZW5kZW50IGRldmljZSBjb250cm9sIHN5c3RlbSBjYWxsXG4gICAgICAgICAgICAgICAgJ2pvaW4nICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gam9pbiBhIGxpc3QgaW50byBhIHN0cmluZyB1c2luZyBhIHNlcGFyYXRvclxuICAgICAgICAgICAgICAgIGtleXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJldHJpZXZlIGxpc3Qgb2YgaW5kaWNlcyBmcm9tIGEgaGFzaFxuICAgICAgICAgICAgICAgIGtpbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIG9yIHByb2Nlc3MgZ3JvdXBcbiAgICAgICAgICAgICAgICBsYXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBleGl0IGEgYmxvY2sgcHJlbWF0dXJlbHlcbiAgICAgICAgICAgICAgICBsYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSByZXR1cm4gbG93ZXItY2FzZSB2ZXJzaW9uIG9mIGEgc3RyaW5nXG4gICAgICAgICAgICAgICAgbGNmaXJzdCAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcmV0dXJuIGEgc3RyaW5nIHdpdGgganVzdCB0aGUgbmV4dCBsZXR0ZXIgaW4gbG93ZXIgY2FzZVxuICAgICAgICAgICAgICAgIGxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgc3RyaW5nXG4gICAgICAgICAgICAgICAgJ2xpbmsnICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gY3JlYXRlIGEgaGFyZCBsaW5rIGluIHRoZSBmaWxlc3l0ZW1cbiAgICAgICAgICAgICAgICBsaXN0ZW4gICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSByZWdpc3RlciB5b3VyIHNvY2tldCBhcyBhIHNlcnZlclxuICAgICAgICAgICAgICAgIGxvY2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAyLCAgICAvLyAtIGNyZWF0ZSBhIHRlbXBvcmFyeSB2YWx1ZSBmb3IgYSBnbG9iYWwgdmFyaWFibGUgKGR5bmFtaWMgc2NvcGluZylcbiAgICAgICAgICAgICAgICBsb2NhbHRpbWUgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBjb252ZXJ0IFVOSVggdGltZSBpbnRvIHJlY29yZCBvciBzdHJpbmcgdXNpbmcgbG9jYWwgdGltZVxuICAgICAgICAgICAgICAgIGxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBhIHRocmVhZCBsb2NrIG9uIGEgdmFyaWFibGUsIHN1YnJvdXRpbmUsIG9yIG1ldGhvZFxuICAgICAgICAgICAgICAgICdsb2cnICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJldHJpZXZlIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBmb3IgYSBudW1iZXJcbiAgICAgICAgICAgICAgICBsc3RhdCAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBzdGF0IGEgc3ltYm9saWMgbGlua1xuICAgICAgICAgICAgICAgIG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm51bGwsICAvLyAtIG1hdGNoIGEgc3RyaW5nIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVyblxuICAgICAgICAgICAgICAgIG1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGFwcGx5IGEgY2hhbmdlIHRvIGEgbGlzdCB0byBnZXQgYmFjayBhIG5ldyBsaXN0IHdpdGggdGhlIGNoYW5nZXNcbiAgICAgICAgICAgICAgICBta2RpciAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBjcmVhdGUgYSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBtc2djdGwgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBTeXNWIElQQyBtZXNzYWdlIGNvbnRyb2wgb3BlcmF0aW9uc1xuICAgICAgICAgICAgICAgIG1zZ2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBTeXNWIElQQyBtZXNzYWdlIHF1ZXVlXG4gICAgICAgICAgICAgICAgbXNncmN2ICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcmVjZWl2ZSBhIFN5c1YgSVBDIG1lc3NhZ2UgZnJvbSBhIG1lc3NhZ2UgcXVldWVcbiAgICAgICAgICAgICAgICBtc2dzbmQgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBzZW5kIGEgU3lzViBJUEMgbWVzc2FnZSB0byBhIG1lc3NhZ2UgcXVldWVcbiAgICAgICAgICAgICAgICBteSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMiwgICAgLy8gLSBkZWNsYXJlIGFuZCBhc3NpZ24gYSBsb2NhbCB2YXJpYWJsZSAobGV4aWNhbCBzY29waW5nKVxuICAgICAgICAgICAgICAgICduZXcnICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvL1xuICAgICAgICAgICAgICAgIG5leHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGl0ZXJhdGUgYSBibG9jayBwcmVtYXR1cmVseVxuICAgICAgICAgICAgICAgIG5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHVuaW1wb3J0IHNvbWUgbW9kdWxlIHN5bWJvbHMgb3Igc2VtYW50aWNzIGF0IGNvbXBpbGUgdGltZVxuICAgICAgICAgICAgICAgIG9jdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYW4gb2N0YWwgbnVtYmVyXG4gICAgICAgICAgICAgICAgb3BlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gb3BlbiBhIGZpbGUsIHBpcGUsIG9yIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICBvcGVuZGlyICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBvcGVuIGEgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgb3JkICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZmluZCBhIGNoYXJhY3RlcidzIG51bWVyaWMgcmVwcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICBvdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMiwgICAgLy8gLSBkZWNsYXJlIGFuZCBhc3NpZ24gYSBwYWNrYWdlIHZhcmlhYmxlIChsZXhpY2FsIHNjb3BpbmcpXG4gICAgICAgICAgICAgICAgcGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gY29udmVydCBhIGxpc3QgaW50byBhIGJpbmFyeSByZXByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICdwYWNrYWdlJyAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGRlY2xhcmUgYSBzZXBhcmF0ZSBnbG9iYWwgbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgcGlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gb3BlbiBhIHBhaXIgb2YgY29ubmVjdGVkIGZpbGVoYW5kbGVzXG4gICAgICAgICAgICAgICAgcG9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcmVtb3ZlIHRoZSBsYXN0IGVsZW1lbnQgZnJvbSBhbiBhcnJheSBhbmQgcmV0dXJuIGl0XG4gICAgICAgICAgICAgICAgcG9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZmluZCBvciBzZXQgdGhlIG9mZnNldCBmb3IgdGhlIGxhc3QvbmV4dCBtLy9nIHNlYXJjaFxuICAgICAgICAgICAgICAgIHByaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIG91dHB1dCBhIGxpc3QgdG8gYSBmaWxlaGFuZGxlXG4gICAgICAgICAgICAgICAgcHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gb3V0cHV0IGEgZm9ybWF0dGVkIGxpc3QgdG8gYSBmaWxlaGFuZGxlXG4gICAgICAgICAgICAgICAgcHJvdG90eXBlICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZ2V0IHRoZSBwcm90b3R5cGUgKGlmIGFueSkgb2YgYSBzdWJyb3V0aW5lXG4gICAgICAgICAgICAgICAgcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gYXBwZW5kIG9uZSBvciBtb3JlIGVsZW1lbnRzIHRvIGFuIGFycmF5XG4gICAgICAgICAgICAgICAgcSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bnVsbCwgIC8vIC0gc2luZ2x5IHF1b3RlIGEgc3RyaW5nXG4gICAgICAgICAgICAgICAgcXEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bnVsbCwgIC8vIC0gZG91Ymx5IHF1b3RlIGEgc3RyaW5nXG4gICAgICAgICAgICAgICAgcXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bnVsbCwgIC8vIC0gQ29tcGlsZSBwYXR0ZXJuXG4gICAgICAgICAgICAgICAgcXVvdGVtZXRhICAgICAgICAgICAgICAgICAgICAgICA6bnVsbCwgIC8vIC0gcXVvdGUgcmVndWxhciBleHByZXNzaW9uIG1hZ2ljIGNoYXJhY3RlcnNcbiAgICAgICAgICAgICAgICBxdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpudWxsLCAgLy8gLSBxdW90ZSBhIGxpc3Qgb2Ygd29yZHNcbiAgICAgICAgICAgICAgICBxeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpudWxsLCAgLy8gLSBiYWNrcXVvdGUgcXVvdGUgYSBzdHJpbmdcbiAgICAgICAgICAgICAgICByYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSByZXRyaWV2ZSB0aGUgbmV4dCBwc2V1ZG9yYW5kb20gbnVtYmVyXG4gICAgICAgICAgICAgICAgcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZml4ZWQtbGVuZ3RoIGJ1ZmZlcmVkIGlucHV0IGZyb20gYSBmaWxlaGFuZGxlXG4gICAgICAgICAgICAgICAgcmVhZGRpciAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZ2V0IGEgZGlyZWN0b3J5IGZyb20gYSBkaXJlY3RvcnkgaGFuZGxlXG4gICAgICAgICAgICAgICAgcmVhZGxpbmUgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZmV0Y2ggYSByZWNvcmQgZnJvbSBhIGZpbGVcbiAgICAgICAgICAgICAgICByZWFkbGluayAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBkZXRlcm1pbmUgd2hlcmUgYSBzeW1ib2xpYyBsaW5rIGlzIHBvaW50aW5nXG4gICAgICAgICAgICAgICAgcmVhZHBpcGUgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZXhlY3V0ZSBhIHN5c3RlbSBjb21tYW5kIGFuZCBjb2xsZWN0IHN0YW5kYXJkIG91dHB1dFxuICAgICAgICAgICAgICAgIHJlY3YgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJlY2VpdmUgYSBtZXNzYWdlIG92ZXIgYSBTb2NrZXRcbiAgICAgICAgICAgICAgICByZWRvICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBzdGFydCB0aGlzIGxvb3AgaXRlcmF0aW9uIG92ZXIgYWdhaW5cbiAgICAgICAgICAgICAgICByZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBmaW5kIG91dCB0aGUgdHlwZSBvZiB0aGluZyBiZWluZyByZWZlcmVuY2VkXG4gICAgICAgICAgICAgICAgcmVuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gY2hhbmdlIGEgZmlsZW5hbWVcbiAgICAgICAgICAgICAgICByZXF1aXJlICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBsb2FkIGluIGV4dGVybmFsIGZ1bmN0aW9ucyBmcm9tIGEgbGlicmFyeSBhdCBydW50aW1lXG4gICAgICAgICAgICAgICAgcmVzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gY2xlYXIgYWxsIHZhcmlhYmxlcyBvZiBhIGdpdmVuIG5hbWVcbiAgICAgICAgICAgICAgICAncmV0dXJuJyAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBnZXQgb3V0IG9mIGEgZnVuY3Rpb24gZWFybHlcbiAgICAgICAgICAgICAgICByZXZlcnNlICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBmbGlwIGEgc3RyaW5nIG9yIGEgbGlzdFxuICAgICAgICAgICAgICAgIHJld2luZGRpciAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJlc2V0IGRpcmVjdG9yeSBoYW5kbGVcbiAgICAgICAgICAgICAgICByaW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSByaWdodC10by1sZWZ0IHN1YnN0cmluZyBzZWFyY2hcbiAgICAgICAgICAgICAgICBybWRpciAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSByZW1vdmUgYSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpudWxsLCAgLy8gLSByZXBsYWNlIGEgcGF0dGVybiB3aXRoIGEgc3RyaW5nXG4gICAgICAgICAgICAgICAgc2F5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcHJpbnQgd2l0aCBuZXdsaW5lXG4gICAgICAgICAgICAgICAgc2NhbGFyICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZm9yY2UgYSBzY2FsYXIgY29udGV4dFxuICAgICAgICAgICAgICAgIHNlZWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJlcG9zaXRpb24gZmlsZSBwb2ludGVyIGZvciByYW5kb20tYWNjZXNzIEkvT1xuICAgICAgICAgICAgICAgIHNlZWtkaXIgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJlcG9zaXRpb24gZGlyZWN0b3J5IHBvaW50ZXJcbiAgICAgICAgICAgICAgICBzZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSByZXNldCBkZWZhdWx0IG91dHB1dCBvciBkbyBJL08gbXVsdGlwbGV4aW5nXG4gICAgICAgICAgICAgICAgc2VtY3RsICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gU3lzViBzZW1hcGhvcmUgY29udHJvbCBvcGVyYXRpb25zXG4gICAgICAgICAgICAgICAgc2VtZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZ2V0IHNldCBvZiBTeXNWIHNlbWFwaG9yZXNcbiAgICAgICAgICAgICAgICBzZW1vcCAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBTeXNWIHNlbWFwaG9yZSBvcGVyYXRpb25zXG4gICAgICAgICAgICAgICAgc2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gc2VuZCBhIG1lc3NhZ2Ugb3ZlciBhIHNvY2tldFxuICAgICAgICAgICAgICAgIHNldGdyZW50ICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHByZXBhcmUgZ3JvdXAgZmlsZSBmb3IgdXNlXG4gICAgICAgICAgICAgICAgc2V0aG9zdGVudCAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcHJlcGFyZSBob3N0cyBmaWxlIGZvciB1c2VcbiAgICAgICAgICAgICAgICBzZXRuZXRlbnQgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBwcmVwYXJlIG5ldHdvcmtzIGZpbGUgZm9yIHVzZVxuICAgICAgICAgICAgICAgIHNldHBncnAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHNldCB0aGUgcHJvY2VzcyBncm91cCBvZiBhIHByb2Nlc3NcbiAgICAgICAgICAgICAgICBzZXRwcmlvcml0eSAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBzZXQgYSBwcm9jZXNzJ3MgbmljZSB2YWx1ZVxuICAgICAgICAgICAgICAgIHNldHByb3RvZW50ICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHByZXBhcmUgcHJvdG9jb2xzIGZpbGUgZm9yIHVzZVxuICAgICAgICAgICAgICAgIHNldHB3ZW50ICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHByZXBhcmUgcGFzc3dkIGZpbGUgZm9yIHVzZVxuICAgICAgICAgICAgICAgIHNldHNlcnZlbnQgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHByZXBhcmUgc2VydmljZXMgZmlsZSBmb3IgdXNlXG4gICAgICAgICAgICAgICAgc2V0c29ja29wdCAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gc2V0IHNvbWUgc29ja2V0IG9wdGlvbnNcbiAgICAgICAgICAgICAgICBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSByZW1vdmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXksIGFuZCByZXR1cm4gaXRcbiAgICAgICAgICAgICAgICBzaG1jdGwgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBTeXNWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9uc1xuICAgICAgICAgICAgICAgIHNobWdldCAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBTeXNWIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBpZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgc2htcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcmVhZCBTeXNWIHNoYXJlZCBtZW1vcnlcbiAgICAgICAgICAgICAgICBzaG13cml0ZSAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSB3cml0ZSBTeXNWIHNoYXJlZCBtZW1vcnlcbiAgICAgICAgICAgICAgICBzaHV0ZG93biAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBjbG9zZSBkb3duIGp1c3QgaGFsZiBvZiBhIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgJ3NpbicgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcmV0dXJuIHRoZSBzaW5lIG9mIGEgbnVtYmVyXG4gICAgICAgICAgICAgICAgc2xlZXAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gYmxvY2sgZm9yIHNvbWUgbnVtYmVyIG9mIHNlY29uZHNcbiAgICAgICAgICAgICAgICBzb2NrZXQgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBjcmVhdGUgYSBzb2NrZXRcbiAgICAgICAgICAgICAgICBzb2NrZXRwYWlyICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBjcmVhdGUgYSBwYWlyIG9mIHNvY2tldHNcbiAgICAgICAgICAgICAgICAnc29ydCcgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBzb3J0IGEgbGlzdCBvZiB2YWx1ZXNcbiAgICAgICAgICAgICAgICBzcGxpY2UgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBhZGQgb3IgcmVtb3ZlIGVsZW1lbnRzIGFueXdoZXJlIGluIGFuIGFycmF5XG4gICAgICAgICAgICAgICAgJ3NwbGl0JyAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gc3BsaXQgdXAgYSBzdHJpbmcgdXNpbmcgYSByZWdleHAgZGVsaW1pdGVyXG4gICAgICAgICAgICAgICAgc3ByaW50ZiAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZm9ybWF0dGVkIHByaW50IGludG8gYSBzdHJpbmdcbiAgICAgICAgICAgICAgICAnc3FydCcgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBzcXVhcmUgcm9vdCBmdW5jdGlvblxuICAgICAgICAgICAgICAgIHNyYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gICAgICAgICAgICAgICAgc3RhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZ2V0IGEgZmlsZSdzIHN0YXR1cyBpbmZvcm1hdGlvblxuICAgICAgICAgICAgICAgIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGRlY2xhcmUgYW5kIGFzc2lnbiBhIHN0YXRlIHZhcmlhYmxlIChwZXJzaXN0ZW50IGxleGljYWwgc2NvcGluZylcbiAgICAgICAgICAgICAgICBzdHVkeSAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBvcHRpbWl6ZSBpbnB1dCBkYXRhIGZvciByZXBlYXRlZCBzZWFyY2hlc1xuICAgICAgICAgICAgICAgICdzdWInICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGRlY2xhcmUgYSBzdWJyb3V0aW5lLCBwb3NzaWJseSBhbm9ueW1vdXNseVxuICAgICAgICAgICAgICAgICdzdWJzdHInICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBvciBhbHRlciBhIHBvcnRpb24gb2YgYSBzdGlybmdcbiAgICAgICAgICAgICAgICBzeW1saW5rICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBjcmVhdGUgYSBzeW1ib2xpYyBsaW5rIHRvIGEgZmlsZVxuICAgICAgICAgICAgICAgIHN5c2NhbGwgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGV4ZWN1dGUgYW4gYXJiaXRyYXJ5IHN5c3RlbSBjYWxsXG4gICAgICAgICAgICAgICAgc3lzb3BlbiAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gb3BlbiBhIGZpbGUsIHBpcGUsIG9yIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICBzeXNyZWFkICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBmaXhlZC1sZW5ndGggdW5idWZmZXJlZCBpbnB1dCBmcm9tIGEgZmlsZWhhbmRsZVxuICAgICAgICAgICAgICAgIHN5c3NlZWsgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHBvc2l0aW9uIEkvTyBwb2ludGVyIG9uIGhhbmRsZSB1c2VkIHdpdGggc3lzcmVhZCBhbmQgc3lzd3JpdGVcbiAgICAgICAgICAgICAgICBzeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBydW4gYSBzZXBhcmF0ZSBwcm9ncmFtXG4gICAgICAgICAgICAgICAgc3lzd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZml4ZWQtbGVuZ3RoIHVuYnVmZmVyZWQgb3V0cHV0IHRvIGEgZmlsZWhhbmRsZVxuICAgICAgICAgICAgICAgIHRlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBjdXJyZW50IHNlZWtwb2ludGVyIG9uIGEgZmlsZWhhbmRsZVxuICAgICAgICAgICAgICAgIHRlbGxkaXIgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGdldCBjdXJyZW50IHNlZWtwb2ludGVyIG9uIGEgZGlyZWN0b3J5IGhhbmRsZVxuICAgICAgICAgICAgICAgIHRpZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGJpbmQgYSB2YXJpYWJsZSB0byBhbiBvYmplY3QgY2xhc3NcbiAgICAgICAgICAgICAgICB0aWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCB1bmRlcmx5aW5nIGEgdGllZCB2YXJpYWJsZVxuICAgICAgICAgICAgICAgIHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJldHVybiBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSAxOTcwXG4gICAgICAgICAgICAgICAgdGltZXMgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcmV0dXJuIGVsYXBzZWQgdGltZSBmb3Igc2VsZiBhbmQgY2hpbGQgcHJvY2Vzc2VzXG4gICAgICAgICAgICAgICAgdHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bnVsbCwgIC8vIC0gdHJhbnNsaXRlcmF0ZSBhIHN0cmluZ1xuICAgICAgICAgICAgICAgIHRydW5jYXRlICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHNob3J0ZW4gYSBmaWxlXG4gICAgICAgICAgICAgICAgdWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcmV0dXJuIHVwcGVyLWNhc2UgdmVyc2lvbiBvZiBhIHN0cmluZ1xuICAgICAgICAgICAgICAgIHVjZmlyc3QgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHJldHVybiBhIHN0cmluZyB3aXRoIGp1c3QgdGhlIG5leHQgbGV0dGVyIGluIHVwcGVyIGNhc2VcbiAgICAgICAgICAgICAgICB1bWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSBzZXQgZmlsZSBjcmVhdGlvbiBtb2RlIG1hc2tcbiAgICAgICAgICAgICAgICB1bmRlZiAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSByZW1vdmUgYSB2YXJpYWJsZSBvciBmdW5jdGlvbiBkZWZpbml0aW9uXG4gICAgICAgICAgICAgICAgdW5saW5rICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcmVtb3ZlIG9uZSBsaW5rIHRvIGEgZmlsZVxuICAgICAgICAgICAgICAgIHVucGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGNvbnZlcnQgYmluYXJ5IHN0cnVjdHVyZSBpbnRvIG5vcm1hbCBwZXJsIHZhcmlhYmxlc1xuICAgICAgICAgICAgICAgIHVuc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHByZXBlbmQgbW9yZSBlbGVtZW50cyB0byB0aGUgYmVnaW5uaW5nIG9mIGEgbGlzdFxuICAgICAgICAgICAgICAgIHVudGllICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGJyZWFrIGEgdGllIGJpbmRpbmcgdG8gYSB2YXJpYWJsZVxuICAgICAgICAgICAgICAgIHVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIGxvYWQgaW4gYSBtb2R1bGUgYXQgY29tcGlsZSB0aW1lXG4gICAgICAgICAgICAgICAgdXRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gc2V0IGEgZmlsZSdzIGxhc3QgYWNjZXNzIGFuZCBtb2RpZnkgdGltZXNcbiAgICAgICAgICAgICAgICB2YWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgIDoxLCAgICAgLy8gLSByZXR1cm4gYSBsaXN0IG9mIHRoZSB2YWx1ZXMgaW4gYSBoYXNoXG4gICAgICAgICAgICAgICAgdmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gdGVzdCBvciBzZXQgcGFydGljdWxhciBiaXRzIGluIGEgc3RyaW5nXG4gICAgICAgICAgICAgICAgd2FpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gd2FpdCBmb3IgYW55IGNoaWxkIHByb2Nlc3MgdG8gZGllXG4gICAgICAgICAgICAgICAgd2FpdHBpZCAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gd2FpdCBmb3IgYSBwYXJ0aWN1bGFyIGNoaWxkIHByb2Nlc3MgdG8gZGllXG4gICAgICAgICAgICAgICAgd2FudGFycmF5ICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gZ2V0IHZvaWQgdnMgc2NhbGFyIHZzIGxpc3QgY29udGV4dCBvZiBjdXJyZW50IHN1YnJvdXRpbmUgY2FsbFxuICAgICAgICAgICAgICAgIHdhcm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEsICAgICAvLyAtIHByaW50IGRlYnVnZ2luZyBpbmZvXG4gICAgICAgICAgICAgICAgd2hlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vXG4gICAgICAgICAgICAgICAgd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICA6MSwgICAgIC8vIC0gcHJpbnQgYSBwaWN0dXJlIHJlY29yZFxuICAgICAgICAgICAgICAgIHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm51bGx9OyAvLyAtIHRyYW5zbGl0ZXJhdGUgYSBzdHJpbmdcblxuICAgICAgICB2YXIgUlhzdHlsZT1cInN0cmluZy0yXCI7XG4gICAgICAgIHZhciBSWG1vZGlmaWVycz0vW2dvc2V4aW1hY3BsdWRdLzsgICAgICAgICAgICAgIC8vIE5PVEU6IFwibVwiLCBcInNcIiwgXCJ5XCIgYW5kIFwidHJcIiBuZWVkIHRvIGNvcnJlY3QgcmVhbCBtb2RpZmllcnMgZm9yIGVhY2ggcmVnZXhwIHR5cGVcblxuICAgICAgICBmdW5jdGlvbiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxjaGFpbixzdHlsZSx0YWlsKXsgICAgIC8vIE5PVEU6IGNoYWluLmxlbmd0aCA+IDIgaXMgbm90IHdvcmtpbmcgbm93IChpdCdzIGZvciBzWy4uLl1bLi4uXWdlb3M7KVxuICAgICAgICAgICAgICAgIHN0YXRlLmNoYWluPW51bGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICAgM3RhaWxcbiAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZT1udWxsO1xuICAgICAgICAgICAgICAgIHN0YXRlLnRhaWw9bnVsbDtcbiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZT1mdW5jdGlvbihzdHJlYW0sc3RhdGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGU9ZmFsc2UsYyxpPTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShjPXN0cmVhbS5uZXh0KCkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT09Y2hhaW5baV0mJiFlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjaGFpblsrK2ldIT09dW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoYWluPWNoYWluW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGU9c3R5bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS50YWlsPXRhaWw7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYodGFpbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSh0YWlsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZT10b2tlblBlcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlO31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZT0hZSYmYz09XCJcXFxcXCI7fVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlO307XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSxzdGF0ZSk7fVxuXG4gICAgICAgIGZ1bmN0aW9uIHRva2VuU09NRVRISU5HKHN0cmVhbSxzdGF0ZSxzdHJpbmcpe1xuICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplPWZ1bmN0aW9uKHN0cmVhbSxzdGF0ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzdHJlYW0uc3RyaW5nPT1zdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplPXRva2VuUGVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiO307XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSxzdGF0ZSk7fVxuXG4gICAgICAgIGZ1bmN0aW9uIHRva2VuUGVybChzdHJlYW0sc3RhdGUpe1xuICAgICAgICAgICAgICAgIGlmKHN0cmVhbS5lYXRTcGFjZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgaWYoc3RhdGUuY2hhaW4pXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsc3RhdGUuY2hhaW4sc3RhdGUuc3R5bGUsc3RhdGUudGFpbCk7XG4gICAgICAgICAgICAgICAgaWYoc3RyZWFtLm1hdGNoKC9eXFwtP1tcXGRcXC5dLyxmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzdHJlYW0ubWF0Y2goL14oXFwtPyhcXGQqXFwuXFxkKyhlWystXT9cXGQrKT98XFxkK1xcLlxcZCopfDB4W1xcZGEtZkEtRl0rfDBiWzAxXSt8XFxkKyhlWystXT9cXGQrKT8pLykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICAgICAgICAgICAgICBpZihzdHJlYW0ubWF0Y2goL148PCg/PVxcdykvKSl7ICAgICAgICAgICAgICAgICAgLy8gTk9URTogPDxTT01FVEhJTkdcXG4uLi5cXG5TT01FVEhJTkdcXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXFx3Lyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5TT01FVEhJTkcoc3RyZWFtLHN0YXRlLHN0cmVhbS5jdXJyZW50KCkuc3Vic3RyKDIpKTt9XG4gICAgICAgICAgICAgICAgaWYoc3RyZWFtLnNvbCgpJiZzdHJlYW0ubWF0Y2goL15cXD1pdGVtKD8hXFx3KS8pKXsvLyBOT1RFOiBcXG49aXRlbS4uLlxcbj1jdXRcXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlblNPTUVUSElORyhzdHJlYW0sc3RhdGUsJz1jdXQnKTt9XG4gICAgICAgICAgICAgICAgdmFyIGNoPXN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYoY2g9PSdcIid8fGNoPT1cIidcIil7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogJyBvciBcIiBvciA8PCdTT01FVEhJTkcnXFxuLi4uXFxuU09NRVRISU5HXFxuIG9yIDw8XCJTT01FVEhJTkdcIlxcbi4uLlxcblNPTUVUSElOR1xcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJlZml4KHN0cmVhbSwgMyk9PVwiPDxcIitjaCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwPXN0cmVhbS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXFx3Lyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuPXN0cmVhbS5jdXJyZW50KCkuc3Vic3RyKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihuJiZzdHJlYW0uZWF0KGNoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5TT01FVEhJTkcoc3RyZWFtLHN0YXRlLG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucG9zPXA7fVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjaF0sXCJzdHJpbmdcIik7fVxuICAgICAgICAgICAgICAgIGlmKGNoPT1cInFcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYz1sb29rKHN0cmVhbSwgLTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShjJiYvXFx3Ly50ZXN0KGMpKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM9bG9vayhzdHJlYW0sIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT1cInhcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYz1sb29rKHN0cmVhbSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCIoXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWF0U3VmZml4KHN0cmVhbSwgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wiKVwiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCJbXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWF0U3VmZml4KHN0cmVhbSwgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wiXVwiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCJ7XCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWF0U3VmZml4KHN0cmVhbSwgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wifVwiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCI8XCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWF0U3VmZml4KHN0cmVhbSwgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wiPlwiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoL1tcXF4nXCIhflxcL10vLnRlc3QoYykpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWF0U3VmZml4KHN0cmVhbSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW3N0cmVhbS5lYXQoYyldLFJYc3R5bGUsUlhtb2RpZmllcnMpO319XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoYz09XCJxXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM9bG9vayhzdHJlYW0sIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PVwiKFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhdFN1ZmZpeChzdHJlYW0sIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtcIilcIl0sXCJzdHJpbmdcIik7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PVwiW1wiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhdFN1ZmZpeChzdHJlYW0sIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtcIl1cIl0sXCJzdHJpbmdcIik7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PVwie1wiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhdFN1ZmZpeChzdHJlYW0sIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtcIn1cIl0sXCJzdHJpbmdcIik7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PVwiPFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhdFN1ZmZpeChzdHJlYW0sIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtcIj5cIl0sXCJzdHJpbmdcIik7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKC9bXFxeJ1wiIX5cXC9dLy50ZXN0KGMpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhdFN1ZmZpeChzdHJlYW0sIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtzdHJlYW0uZWF0KGMpXSxcInN0cmluZ1wiKTt9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGM9PVwid1wiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjPWxvb2soc3RyZWFtLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT1cIihcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXRTdWZmaXgoc3RyZWFtLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbXCIpXCJdLFwiYnJhY2tldFwiKTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCJbXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWF0U3VmZml4KHN0cmVhbSwgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wiXVwiXSxcImJyYWNrZXRcIik7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PVwie1wiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhdFN1ZmZpeChzdHJlYW0sIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtcIn1cIl0sXCJicmFja2V0XCIpO31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT1cIjxcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXRTdWZmaXgoc3RyZWFtLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbXCI+XCJdLFwiYnJhY2tldFwiKTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoL1tcXF4nXCIhflxcL10vLnRlc3QoYykpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWF0U3VmZml4KHN0cmVhbSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW3N0cmVhbS5lYXQoYyldLFwiYnJhY2tldFwiKTt9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGM9PVwiclwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjPWxvb2soc3RyZWFtLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT1cIihcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXRTdWZmaXgoc3RyZWFtLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbXCIpXCJdLFJYc3R5bGUsUlhtb2RpZmllcnMpO31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT1cIltcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXRTdWZmaXgoc3RyZWFtLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbXCJdXCJdLFJYc3R5bGUsUlhtb2RpZmllcnMpO31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT1cIntcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXRTdWZmaXgoc3RyZWFtLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbXCJ9XCJdLFJYc3R5bGUsUlhtb2RpZmllcnMpO31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT1cIjxcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXRTdWZmaXgoc3RyZWFtLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbXCI+XCJdLFJYc3R5bGUsUlhtb2RpZmllcnMpO31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigvW1xcXidcIiF+XFwvXS8udGVzdChjKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXRTdWZmaXgoc3RyZWFtLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbc3RyZWFtLmVhdChjKV0sUlhzdHlsZSxSWG1vZGlmaWVycyk7fX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZigvW1xcXidcIiF+XFwvKFxcW3s8XS8udGVzdChjKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCIoXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWF0U3VmZml4KHN0cmVhbSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wiKVwiXSxcInN0cmluZ1wiKTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCJbXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWF0U3VmZml4KHN0cmVhbSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wiXVwiXSxcInN0cmluZ1wiKTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCJ7XCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWF0U3VmZml4KHN0cmVhbSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wifVwiXSxcInN0cmluZ1wiKTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCI8XCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWF0U3VmZml4KHN0cmVhbSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wiPlwiXSxcInN0cmluZ1wiKTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoL1tcXF4nXCIhflxcL10vLnRlc3QoYykpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtzdHJlYW0uZWF0KGMpXSxcInN0cmluZ1wiKTt9fX19XG4gICAgICAgICAgICAgICAgaWYoY2g9PVwibVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjPWxvb2soc3RyZWFtLCAtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZighKGMmJi9cXHcvLnRlc3QoYykpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYz1zdHJlYW0uZWF0KC9bKFxcW3s8XFxeJ1wiIX5cXC9dLyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKC9bXFxeJ1wiIX5cXC9dLy50ZXN0KGMpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbY10sUlhzdHlsZSxSWG1vZGlmaWVycyk7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PVwiKFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbXCIpXCJdLFJYc3R5bGUsUlhtb2RpZmllcnMpO31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT1cIltcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wiXVwiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCJ7XCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtcIn1cIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PVwiPFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbXCI+XCJdLFJYc3R5bGUsUlhtb2RpZmllcnMpO319fX1cbiAgICAgICAgICAgICAgICBpZihjaD09XCJzXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGM9L1tcXC8+XFxdfSlcXHddLy50ZXN0KGxvb2soc3RyZWFtLCAtMikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjPXN0cmVhbS5lYXQoL1soXFxbezxcXF4nXCIhflxcL10vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCJbXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wiXVwiLFwiXVwiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT1cIntcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbXCJ9XCIsXCJ9XCJdLFJYc3R5bGUsUlhtb2RpZmllcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PVwiPFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtcIj5cIixcIj5cIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCIoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wiKVwiLFwiKVwiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2MsY10sUlhzdHlsZSxSWG1vZGlmaWVycyk7fX19XG4gICAgICAgICAgICAgICAgaWYoY2g9PVwieVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjPS9bXFwvPlxcXX0pXFx3XS8udGVzdChsb29rKHN0cmVhbSwgLTIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFjKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYz1zdHJlYW0uZWF0KC9bKFxcW3s8XFxeJ1wiIX5cXC9dLyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PVwiW1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtcIl1cIixcIl1cIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCJ7XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wifVwiLFwifVwiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT1cIjxcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbXCI+XCIsXCI+XCJdLFJYc3R5bGUsUlhtb2RpZmllcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PVwiKFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtcIilcIixcIilcIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjLGNdLFJYc3R5bGUsUlhtb2RpZmllcnMpO319fVxuICAgICAgICAgICAgICAgIGlmKGNoPT1cInRcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYz0vW1xcLz5cXF19KVxcd10vLnRlc3QobG9vayhzdHJlYW0sIC0yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZighYyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM9c3RyZWFtLmVhdChcInJcIik7aWYoYyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM9c3RyZWFtLmVhdCgvWyhcXFt7PFxcXidcIiF+XFwvXS8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT1cIltcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbXCJdXCIsXCJdXCJdLFJYc3R5bGUsUlhtb2RpZmllcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PVwie1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtcIn1cIixcIn1cIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYz09XCI8XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW1wiPlwiLFwiPlwiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT1cIihcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbXCIpXCIsXCIpXCJdLFJYc3R5bGUsUlhtb2RpZmllcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbYyxjXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTt9fX19XG4gICAgICAgICAgICAgICAgaWYoY2g9PVwiYFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbY2hdLFwidmFyaWFibGUtMlwiKTt9XG4gICAgICAgICAgICAgICAgaWYoY2g9PVwiL1wiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEvflxccyokLy50ZXN0KHByZWZpeChzdHJlYW0pKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjaF0sUlhzdHlsZSxSWG1vZGlmaWVycyk7fVxuICAgICAgICAgICAgICAgIGlmKGNoPT1cIiRcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcD1zdHJlYW0ucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RyZWFtLmVhdFdoaWxlKC9cXGQvKXx8c3RyZWFtLmVhdChcIntcIikmJnN0cmVhbS5lYXRXaGlsZSgvXFxkLykmJnN0cmVhbS5lYXQoXCJ9XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3M9cDt9XG4gICAgICAgICAgICAgICAgaWYoL1skQCVdLy50ZXN0KGNoKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcD1zdHJlYW0ucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RyZWFtLmVhdChcIl5cIikmJnN0cmVhbS5lYXQoL1tBLVpdLyl8fCEvW0AkJSZdLy50ZXN0KGxvb2soc3RyZWFtLCAtMikpJiZzdHJlYW0uZWF0KC9bPXxcXFxcXFwtIz9AOzomYH5cXF4hXFxbXFxdKidcIiQrLixcXC88PigpXS8pKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGM9c3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoUEVSTFtjXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7fVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcz1wO31cbiAgICAgICAgICAgICAgICBpZigvWyRAJSZdLy50ZXN0KGNoKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzdHJlYW0uZWF0V2hpbGUoL1tcXHckXFxbXFxdXS8pfHxzdHJlYW0uZWF0KFwie1wiKSYmc3RyZWFtLmVhdFdoaWxlKC9bXFx3JFxcW1xcXV0vKSYmc3RyZWFtLmVhdChcIn1cIikpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYz1zdHJlYW0uY3VycmVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihQRVJMW2NdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhcmlhYmxlXCI7fX1cbiAgICAgICAgICAgICAgICBpZihjaD09XCIjXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vayhzdHJlYW0sIC0yKSE9XCIkXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbW1lbnRcIjt9fVxuICAgICAgICAgICAgICAgIGlmKC9bOitcXC1cXF4qJCYlQD08PiE/fFxcL35cXC5dLy50ZXN0KGNoKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcD1zdHJlYW0ucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bOitcXC1cXF4qJCYlQD08PiE/fFxcL35cXC5dLyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihQRVJMW3N0cmVhbS5jdXJyZW50KCldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucG9zPXA7fVxuICAgICAgICAgICAgICAgIGlmKGNoPT1cIl9cIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzdHJlYW0ucG9zPT0xKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3VmZml4KHN0cmVhbSwgNik9PVwiX0VORF9fXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbJ1xcMCddLFwiY29tbWVudFwiKTt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoc3VmZml4KHN0cmVhbSwgNyk9PVwiX0RBVEFfX1wiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWydcXDAnXSxcInZhcmlhYmxlLTJcIik7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHN1ZmZpeChzdHJlYW0sIDcpPT1cIl9DX19cIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsnXFwwJ10sXCJzdHJpbmdcIik7fX19XG4gICAgICAgICAgICAgICAgaWYoL1xcdy8udGVzdChjaCkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHA9c3RyZWFtLnBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb2soc3RyZWFtLCAtMik9PVwie1wiJiYobG9vayhzdHJlYW0sIDApPT1cIn1cInx8c3RyZWFtLmVhdFdoaWxlKC9cXHcvKSYmbG9vayhzdHJlYW0sIDApPT1cIn1cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucG9zPXA7fVxuICAgICAgICAgICAgICAgIGlmKC9bQS1aXS8udGVzdChjaCkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGw9bG9vayhzdHJlYW0sIC0yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwPXN0cmVhbS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tBLVpfXS8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoL1tcXGRhLXpdLy50ZXN0KGxvb2soc3RyZWFtLCAwKSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucG9zPXA7fVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGM9UEVSTFtzdHJlYW0uY3VycmVudCgpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM9Y1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobCE9XCI6XCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGM9PTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihjPT0yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGVmXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihjPT0zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoYz09NClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihjPT01KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidmFyaWFibGUtMlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1ldGFcIjt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtZXRhXCI7fX1cbiAgICAgICAgICAgICAgICBpZigvW2EtekEtWl9dLy50ZXN0KGNoKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbD1sb29rKHN0cmVhbSwgLTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9cXHcvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjPVBFUkxbc3RyZWFtLmN1cnJlbnQoKV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZighYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYz1jWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYobCE9XCI6XCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPT0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihjPT0yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRlZlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGM9PTMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGM9PTQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihjPT01KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1ldGFcIjt9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1ldGFcIjt9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7fVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbml6ZTogdG9rZW5QZXJsLFxuICAgICAgICAgICAgICAgICAgICBjaGFpbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHRhaWw6IG51bGxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0ZS50b2tlbml6ZSB8fCB0b2tlblBlcmwpKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpbmVDb21tZW50OiAnIydcbiAgICAgICAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwid29yZENoYXJzXCIsIFwicGVybFwiLCAvW1xcdyRdLyk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1wZXJsXCIsIFwicGVybFwiKTtcblxuLy8gaXQncyBsaWtlIFwicGVla1wiLCBidXQgbmVlZCBmb3IgbG9vay1haGVhZCBvciBsb29rLWJlaGluZCBpZiBpbmRleCA8IDBcbmZ1bmN0aW9uIGxvb2soc3RyZWFtLCBjKXtcbiAgcmV0dXJuIHN0cmVhbS5zdHJpbmcuY2hhckF0KHN0cmVhbS5wb3MrKGN8fDApKTtcbn1cblxuLy8gcmV0dXJuIGEgcGFydCBvZiBwcmVmaXggb2YgY3VycmVudCBzdHJlYW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uXG5mdW5jdGlvbiBwcmVmaXgoc3RyZWFtLCBjKXtcbiAgaWYoYyl7XG4gICAgdmFyIHg9c3RyZWFtLnBvcy1jO1xuICAgIHJldHVybiBzdHJlYW0uc3RyaW5nLnN1YnN0cigoeD49MD94OjApLGMpO31cbiAgZWxzZXtcbiAgICByZXR1cm4gc3RyZWFtLnN0cmluZy5zdWJzdHIoMCxzdHJlYW0ucG9zLTEpO1xuICB9XG59XG5cbi8vIHJldHVybiBhIHBhcnQgb2Ygc3VmZml4IG9mIGN1cnJlbnQgc3RyZWFtIGZyb20gY3VycmVudCBwb3NpdGlvblxuZnVuY3Rpb24gc3VmZml4KHN0cmVhbSwgYyl7XG4gIHZhciB5PXN0cmVhbS5zdHJpbmcubGVuZ3RoO1xuICB2YXIgeD15LXN0cmVhbS5wb3MrMTtcbiAgcmV0dXJuIHN0cmVhbS5zdHJpbmcuc3Vic3RyKHN0cmVhbS5wb3MsKGMmJmM8eT9jOngpKTtcbn1cblxuLy8gZWF0aW5nIGFuZCB2b21pdGluZyBhIHBhcnQgb2Ygc3RyZWFtIGZyb20gY3VycmVudCBwb3NpdGlvblxuZnVuY3Rpb24gZWF0U3VmZml4KHN0cmVhbSwgYyl7XG4gIHZhciB4PXN0cmVhbS5wb3MrYztcbiAgdmFyIHk7XG4gIGlmKHg8PTApXG4gICAgc3RyZWFtLnBvcz0wO1xuICBlbHNlIGlmKHg+PSh5PXN0cmVhbS5zdHJpbmcubGVuZ3RoLTEpKVxuICAgIHN0cmVhbS5wb3M9eTtcbiAgZWxzZVxuICAgIHN0cmVhbS5wb3M9eDtcbn1cblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4vaHRtbG1peGVkL2h0bWxtaXhlZFwiKSwgcmVxdWlyZShcIi4uL2NsaWtlL2NsaWtlXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIsIFwiLi4vaHRtbG1peGVkL2h0bWxtaXhlZFwiLCBcIi4uL2NsaWtlL2NsaWtlXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBmdW5jdGlvbiBrZXl3b3JkcyhzdHIpIHtcbiAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KFwiIFwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKSBvYmpbd29yZHNbaV1dID0gdHJ1ZTtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLy8gSGVscGVyIGZvciBwaHBTdHJpbmdcbiAgZnVuY3Rpb24gbWF0Y2hTZXF1ZW5jZShsaXN0LCBlbmQsIGVzY2FwZXMpIHtcbiAgICBpZiAobGlzdC5sZW5ndGggPT0gMCkgcmV0dXJuIHBocFN0cmluZyhlbmQpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIHBhdHRlcm5zID0gbGlzdFswXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0dGVybnMubGVuZ3RoOyBpKyspIGlmIChzdHJlYW0ubWF0Y2gocGF0dGVybnNbaV1bMF0pKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gbWF0Y2hTZXF1ZW5jZShsaXN0LnNsaWNlKDEpLCBlbmQpO1xuICAgICAgICByZXR1cm4gcGF0dGVybnNbaV1bMV07XG4gICAgICB9XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHBocFN0cmluZyhlbmQsIGVzY2FwZXMpO1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBwaHBTdHJpbmcoY2xvc2luZywgZXNjYXBlcykge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7IHJldHVybiBwaHBTdHJpbmdfKHN0cmVhbSwgc3RhdGUsIGNsb3NpbmcsIGVzY2FwZXMpOyB9O1xuICB9XG4gIGZ1bmN0aW9uIHBocFN0cmluZ18oc3RyZWFtLCBzdGF0ZSwgY2xvc2luZywgZXNjYXBlcykge1xuICAgIC8vIFwiQ29tcGxleFwiIHN5bnRheFxuICAgIGlmIChlc2NhcGVzICE9PSBmYWxzZSAmJiBzdHJlYW0ubWF0Y2goXCIke1wiLCBmYWxzZSkgfHwgc3RyZWFtLm1hdGNoKFwieyRcIiwgZmFsc2UpKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9XG5cbiAgICAvLyBTaW1wbGUgc3ludGF4XG4gICAgaWYgKGVzY2FwZXMgIT09IGZhbHNlICYmIHN0cmVhbS5tYXRjaCgvXlxcJFthLXpBLVpfXVthLXpBLVowLTlfXSovKSkge1xuICAgICAgLy8gQWZ0ZXIgdGhlIHZhcmlhYmxlIG5hbWUgdGhlcmUgbWF5IGFwcGVhciBhcnJheSBvciBvYmplY3Qgb3BlcmF0b3IuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKFwiW1wiLCBmYWxzZSkpIHtcbiAgICAgICAgLy8gTWF0Y2ggYXJyYXkgb3BlcmF0b3JcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBtYXRjaFNlcXVlbmNlKFtcbiAgICAgICAgICBbW1wiW1wiLCBudWxsXV0sXG4gICAgICAgICAgW1svXFxkW1xcd1xcLl0qLywgXCJudW1iZXJcIl0sXG4gICAgICAgICAgIFsvXFwkW2EtekEtWl9dW2EtekEtWjAtOV9dKi8sIFwidmFyaWFibGUtMlwiXSxcbiAgICAgICAgICAgWy9bXFx3XFwkXSsvLCBcInZhcmlhYmxlXCJdXSxcbiAgICAgICAgICBbW1wiXVwiLCBudWxsXV1cbiAgICAgICAgXSwgY2xvc2luZywgZXNjYXBlcyk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXC1cXD5cXHcvLCBmYWxzZSkpIHtcbiAgICAgICAgLy8gTWF0Y2ggb2JqZWN0IG9wZXJhdG9yXG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gbWF0Y2hTZXF1ZW5jZShbXG4gICAgICAgICAgW1tcIi0+XCIsIG51bGxdXSxcbiAgICAgICAgICBbWy9bXFx3XSsvLCBcInZhcmlhYmxlXCJdXVxuICAgICAgICBdLCBjbG9zaW5nLCBlc2NhcGVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICB9XG5cbiAgICB2YXIgZXNjYXBlZCA9IGZhbHNlO1xuICAgIC8vIE5vcm1hbCBzdHJpbmdcbiAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJlxuICAgICAgICAgICAoZXNjYXBlZCB8fCBlc2NhcGVzID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKCFzdHJlYW0ubWF0Y2goXCJ7JFwiLCBmYWxzZSkgJiZcbiAgICAgICAgICAgICAhc3RyZWFtLm1hdGNoKC9eKFxcJFthLXpBLVpfXVthLXpBLVowLTlfXSp8XFwkXFx7KS8sIGZhbHNlKSkpKSB7XG4gICAgICBpZiAoIWVzY2FwZWQgJiYgc3RyZWFtLm1hdGNoKGNsb3NpbmcpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgICAgc3RhdGUudG9rU3RhY2sucG9wKCk7IHN0YXRlLnRva1N0YWNrLnBvcCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGVzY2FwZWQgPSBzdHJlYW0ubmV4dCgpID09IFwiXFxcXFwiICYmICFlc2NhcGVkO1xuICAgIH1cbiAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgfVxuXG4gIHZhciBwaHBLZXl3b3JkcyA9IFwiYWJzdHJhY3QgYW5kIGFycmF5IGFzIGJyZWFrIGNhc2UgY2F0Y2ggY2xhc3MgY2xvbmUgY29uc3QgY29udGludWUgZGVjbGFyZSBkZWZhdWx0IFwiICtcbiAgICBcImRvIGVsc2UgZWxzZWlmIGVuZGRlY2xhcmUgZW5kZm9yIGVuZGZvcmVhY2ggZW5kaWYgZW5kc3dpdGNoIGVuZHdoaWxlIGV4dGVuZHMgZmluYWwgXCIgK1xuICAgIFwiZm9yIGZvcmVhY2ggZnVuY3Rpb24gZ2xvYmFsIGdvdG8gaWYgaW1wbGVtZW50cyBpbnRlcmZhY2UgaW5zdGFuY2VvZiBuYW1lc3BhY2UgXCIgK1xuICAgIFwibmV3IG9yIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBzdGF0aWMgc3dpdGNoIHRocm93IHRyYWl0IHRyeSB1c2UgdmFyIHdoaWxlIHhvciBcIiArXG4gICAgXCJkaWUgZWNobyBlbXB0eSBleGl0IGV2YWwgaW5jbHVkZSBpbmNsdWRlX29uY2UgaXNzZXQgbGlzdCByZXF1aXJlIHJlcXVpcmVfb25jZSByZXR1cm4gXCIgK1xuICAgIFwicHJpbnQgdW5zZXQgX19oYWx0X2NvbXBpbGVyIHNlbGYgc3RhdGljIHBhcmVudCB5aWVsZCBpbnN0ZWFkb2YgZmluYWxseVwiO1xuICB2YXIgcGhwQXRvbXMgPSBcInRydWUgZmFsc2UgbnVsbCBUUlVFIEZBTFNFIE5VTEwgX19DTEFTU19fIF9fRElSX18gX19GSUxFX18gX19MSU5FX18gX19NRVRIT0RfXyBfX0ZVTkNUSU9OX18gX19OQU1FU1BBQ0VfXyBfX1RSQUlUX19cIjtcbiAgdmFyIHBocEJ1aWx0aW4gPSBcImZ1bmNfbnVtX2FyZ3MgZnVuY19nZXRfYXJnIGZ1bmNfZ2V0X2FyZ3Mgc3RybGVuIHN0cmNtcCBzdHJuY21wIHN0cmNhc2VjbXAgc3RybmNhc2VjbXAgZWFjaCBlcnJvcl9yZXBvcnRpbmcgZGVmaW5lIGRlZmluZWQgdHJpZ2dlcl9lcnJvciB1c2VyX2Vycm9yIHNldF9lcnJvcl9oYW5kbGVyIHJlc3RvcmVfZXJyb3JfaGFuZGxlciBnZXRfZGVjbGFyZWRfY2xhc3NlcyBnZXRfbG9hZGVkX2V4dGVuc2lvbnMgZXh0ZW5zaW9uX2xvYWRlZCBnZXRfZXh0ZW5zaW9uX2Z1bmNzIGRlYnVnX2JhY2t0cmFjZSBjb25zdGFudCBiaW4yaGV4IGhleDJiaW4gc2xlZXAgdXNsZWVwIHRpbWUgbWt0aW1lIGdtbWt0aW1lIHN0cmZ0aW1lIGdtc3RyZnRpbWUgc3RydG90aW1lIGRhdGUgZ21kYXRlIGdldGRhdGUgbG9jYWx0aW1lIGNoZWNrZGF0ZSBmbHVzaCB3b3Jkd3JhcCBodG1sc3BlY2lhbGNoYXJzIGh0bWxlbnRpdGllcyBodG1sX2VudGl0eV9kZWNvZGUgbWQ1IG1kNV9maWxlIGNyYzMyIGdldGltYWdlc2l6ZSBpbWFnZV90eXBlX3RvX21pbWVfdHlwZSBwaHBpbmZvIHBocHZlcnNpb24gcGhwY3JlZGl0cyBzdHJuYXRjbXAgc3RybmF0Y2FzZWNtcCBzdWJzdHJfY291bnQgc3Ryc3BuIHN0cmNzcG4gc3RydG9rIHN0cnRvdXBwZXIgc3RydG9sb3dlciBzdHJwb3Mgc3RycnBvcyBzdHJyZXYgaGVicmV2IGhlYnJldmMgbmwyYnIgYmFzZW5hbWUgZGlybmFtZSBwYXRoaW5mbyBzdHJpcHNsYXNoZXMgc3RyaXBjc2xhc2hlcyBzdHJzdHIgc3RyaXN0ciBzdHJyY2hyIHN0cl9zaHVmZmxlIHN0cl93b3JkX2NvdW50IHN0cmNvbGwgc3Vic3RyIHN1YnN0cl9yZXBsYWNlIHF1b3RlbWV0YSB1Y2ZpcnN0IHVjd29yZHMgc3RydHIgYWRkc2xhc2hlcyBhZGRjc2xhc2hlcyBydHJpbSBzdHJfcmVwbGFjZSBzdHJfcmVwZWF0IGNvdW50X2NoYXJzIGNodW5rX3NwbGl0IHRyaW0gbHRyaW0gc3RyaXBfdGFncyBzaW1pbGFyX3RleHQgZXhwbG9kZSBpbXBsb2RlIHNldGxvY2FsZSBsb2NhbGVjb252IHBhcnNlX3N0ciBzdHJfcGFkIGNob3Agc3RyY2hyIHNwcmludGYgcHJpbnRmIHZwcmludGYgdnNwcmludGYgc3NjYW5mIGZzY2FuZiBwYXJzZV91cmwgdXJsZW5jb2RlIHVybGRlY29kZSByYXd1cmxlbmNvZGUgcmF3dXJsZGVjb2RlIHJlYWRsaW5rIGxpbmtpbmZvIGxpbmsgdW5saW5rIGV4ZWMgc3lzdGVtIGVzY2FwZXNoZWxsY21kIGVzY2FwZXNoZWxsYXJnIHBhc3N0aHJ1IHNoZWxsX2V4ZWMgcHJvY19vcGVuIHByb2NfY2xvc2UgcmFuZCBzcmFuZCBnZXRyYW5kbWF4IG10X3JhbmQgbXRfc3JhbmQgbXRfZ2V0cmFuZG1heCBiYXNlNjRfZGVjb2RlIGJhc2U2NF9lbmNvZGUgYWJzIGNlaWwgZmxvb3Igcm91bmQgaXNfZmluaXRlIGlzX25hbiBpc19pbmZpbml0ZSBiaW5kZWMgaGV4ZGVjIG9jdGRlYyBkZWNiaW4gZGVjb2N0IGRlY2hleCBiYXNlX2NvbnZlcnQgbnVtYmVyX2Zvcm1hdCBmbW9kIGlwMmxvbmcgbG9uZzJpcCBnZXRlbnYgcHV0ZW52IGdldG9wdCBtaWNyb3RpbWUgZ2V0dGltZW9mZGF5IGdldHJ1c2FnZSB1bmlxaWQgcXVvdGVkX3ByaW50YWJsZV9kZWNvZGUgc2V0X3RpbWVfbGltaXQgZ2V0X2NmZ192YXIgbWFnaWNfcXVvdGVzX3J1bnRpbWUgc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lIGdldF9tYWdpY19xdW90ZXNfZ3BjIGdldF9tYWdpY19xdW90ZXNfcnVudGltZSBpbXBvcnRfcmVxdWVzdF92YXJpYWJsZXMgZXJyb3JfbG9nIHNlcmlhbGl6ZSB1bnNlcmlhbGl6ZSBtZW1vcnlfZ2V0X3VzYWdlIHZhcl9kdW1wIHZhcl9leHBvcnQgZGVidWdfenZhbF9kdW1wIHByaW50X3IgaGlnaGxpZ2h0X2ZpbGUgc2hvd19zb3VyY2UgaGlnaGxpZ2h0X3N0cmluZyBpbmlfZ2V0IGluaV9nZXRfYWxsIGluaV9zZXQgaW5pX2FsdGVyIGluaV9yZXN0b3JlIGdldF9pbmNsdWRlX3BhdGggc2V0X2luY2x1ZGVfcGF0aCByZXN0b3JlX2luY2x1ZGVfcGF0aCBzZXRjb29raWUgaGVhZGVyIGhlYWRlcnNfc2VudCBjb25uZWN0aW9uX2Fib3J0ZWQgY29ubmVjdGlvbl9zdGF0dXMgaWdub3JlX3VzZXJfYWJvcnQgcGFyc2VfaW5pX2ZpbGUgaXNfdXBsb2FkZWRfZmlsZSBtb3ZlX3VwbG9hZGVkX2ZpbGUgaW50dmFsIGZsb2F0dmFsIGRvdWJsZXZhbCBzdHJ2YWwgZ2V0dHlwZSBzZXR0eXBlIGlzX251bGwgaXNfcmVzb3VyY2UgaXNfYm9vbCBpc19sb25nIGlzX2Zsb2F0IGlzX2ludCBpc19pbnRlZ2VyIGlzX2RvdWJsZSBpc19yZWFsIGlzX251bWVyaWMgaXNfc3RyaW5nIGlzX2FycmF5IGlzX29iamVjdCBpc19zY2FsYXIgZXJlZyBlcmVnX3JlcGxhY2UgZXJlZ2kgZXJlZ2lfcmVwbGFjZSBzcGxpdCBzcGxpdGkgam9pbiBzcWxfcmVnY2FzZSBkbCBwY2xvc2UgcG9wZW4gcmVhZGZpbGUgcmV3aW5kIHJtZGlyIHVtYXNrIGZjbG9zZSBmZW9mIGZnZXRjIGZnZXRzIGZnZXRzcyBmcmVhZCBmb3BlbiBmcGFzc3RocnUgZnRydW5jYXRlIGZzdGF0IGZzZWVrIGZ0ZWxsIGZmbHVzaCBmd3JpdGUgZnB1dHMgbWtkaXIgcmVuYW1lIGNvcHkgdGVtcG5hbSB0bXBmaWxlIGZpbGUgZmlsZV9nZXRfY29udGVudHMgZmlsZV9wdXRfY29udGVudHMgc3RyZWFtX3NlbGVjdCBzdHJlYW1fY29udGV4dF9jcmVhdGUgc3RyZWFtX2NvbnRleHRfc2V0X3BhcmFtcyBzdHJlYW1fY29udGV4dF9zZXRfb3B0aW9uIHN0cmVhbV9jb250ZXh0X2dldF9vcHRpb25zIHN0cmVhbV9maWx0ZXJfcHJlcGVuZCBzdHJlYW1fZmlsdGVyX2FwcGVuZCBmZ2V0Y3N2IGZsb2NrIGdldF9tZXRhX3RhZ3Mgc3RyZWFtX3NldF93cml0ZV9idWZmZXIgc2V0X2ZpbGVfYnVmZmVyIHNldF9zb2NrZXRfYmxvY2tpbmcgc3RyZWFtX3NldF9ibG9ja2luZyBzb2NrZXRfc2V0X2Jsb2NraW5nIHN0cmVhbV9nZXRfbWV0YV9kYXRhIHN0cmVhbV9yZWdpc3Rlcl93cmFwcGVyIHN0cmVhbV93cmFwcGVyX3JlZ2lzdGVyIHN0cmVhbV9zZXRfdGltZW91dCBzb2NrZXRfc2V0X3RpbWVvdXQgc29ja2V0X2dldF9zdGF0dXMgcmVhbHBhdGggZm5tYXRjaCBmc29ja29wZW4gcGZzb2Nrb3BlbiBwYWNrIHVucGFjayBnZXRfYnJvd3NlciBjcnlwdCBvcGVuZGlyIGNsb3NlZGlyIGNoZGlyIGdldGN3ZCByZXdpbmRkaXIgcmVhZGRpciBkaXIgZ2xvYiBmaWxlYXRpbWUgZmlsZWN0aW1lIGZpbGVncm91cCBmaWxlaW5vZGUgZmlsZW10aW1lIGZpbGVvd25lciBmaWxlcGVybXMgZmlsZXNpemUgZmlsZXR5cGUgZmlsZV9leGlzdHMgaXNfd3JpdGFibGUgaXNfd3JpdGVhYmxlIGlzX3JlYWRhYmxlIGlzX2V4ZWN1dGFibGUgaXNfZmlsZSBpc19kaXIgaXNfbGluayBzdGF0IGxzdGF0IGNob3duIHRvdWNoIGNsZWFyc3RhdGNhY2hlIG1haWwgb2Jfc3RhcnQgb2JfZmx1c2ggb2JfY2xlYW4gb2JfZW5kX2ZsdXNoIG9iX2VuZF9jbGVhbiBvYl9nZXRfZmx1c2ggb2JfZ2V0X2NsZWFuIG9iX2dldF9sZW5ndGggb2JfZ2V0X2xldmVsIG9iX2dldF9zdGF0dXMgb2JfZ2V0X2NvbnRlbnRzIG9iX2ltcGxpY2l0X2ZsdXNoIG9iX2xpc3RfaGFuZGxlcnMga3NvcnQga3Jzb3J0IG5hdHNvcnQgbmF0Y2FzZXNvcnQgYXNvcnQgYXJzb3J0IHNvcnQgcnNvcnQgdXNvcnQgdWFzb3J0IHVrc29ydCBzaHVmZmxlIGFycmF5X3dhbGsgY291bnQgZW5kIHByZXYgbmV4dCByZXNldCBjdXJyZW50IGtleSBtaW4gbWF4IGluX2FycmF5IGFycmF5X3NlYXJjaCBleHRyYWN0IGNvbXBhY3QgYXJyYXlfZmlsbCByYW5nZSBhcnJheV9tdWx0aXNvcnQgYXJyYXlfcHVzaCBhcnJheV9wb3AgYXJyYXlfc2hpZnQgYXJyYXlfdW5zaGlmdCBhcnJheV9zcGxpY2UgYXJyYXlfc2xpY2UgYXJyYXlfbWVyZ2UgYXJyYXlfbWVyZ2VfcmVjdXJzaXZlIGFycmF5X2tleXMgYXJyYXlfdmFsdWVzIGFycmF5X2NvdW50X3ZhbHVlcyBhcnJheV9yZXZlcnNlIGFycmF5X3JlZHVjZSBhcnJheV9wYWQgYXJyYXlfZmxpcCBhcnJheV9jaGFuZ2Vfa2V5X2Nhc2UgYXJyYXlfcmFuZCBhcnJheV91bmlxdWUgYXJyYXlfaW50ZXJzZWN0IGFycmF5X2ludGVyc2VjdF9hc3NvYyBhcnJheV9kaWZmIGFycmF5X2RpZmZfYXNzb2MgYXJyYXlfc3VtIGFycmF5X2ZpbHRlciBhcnJheV9tYXAgYXJyYXlfY2h1bmsgYXJyYXlfa2V5X2V4aXN0cyBhcnJheV9pbnRlcnNlY3Rfa2V5IGFycmF5X2NvbWJpbmUgYXJyYXlfY29sdW1uIHBvcyBzaXplb2Yga2V5X2V4aXN0cyBhc3NlcnQgYXNzZXJ0X29wdGlvbnMgdmVyc2lvbl9jb21wYXJlIGZ0b2sgc3RyX3JvdDEzIGFnZ3JlZ2F0ZSBzZXNzaW9uX25hbWUgc2Vzc2lvbl9tb2R1bGVfbmFtZSBzZXNzaW9uX3NhdmVfcGF0aCBzZXNzaW9uX2lkIHNlc3Npb25fcmVnZW5lcmF0ZV9pZCBzZXNzaW9uX2RlY29kZSBzZXNzaW9uX3JlZ2lzdGVyIHNlc3Npb25fdW5yZWdpc3RlciBzZXNzaW9uX2lzX3JlZ2lzdGVyZWQgc2Vzc2lvbl9lbmNvZGUgc2Vzc2lvbl9zdGFydCBzZXNzaW9uX2Rlc3Ryb3kgc2Vzc2lvbl91bnNldCBzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXIgc2Vzc2lvbl9jYWNoZV9saW1pdGVyIHNlc3Npb25fY2FjaGVfZXhwaXJlIHNlc3Npb25fc2V0X2Nvb2tpZV9wYXJhbXMgc2Vzc2lvbl9nZXRfY29va2llX3BhcmFtcyBzZXNzaW9uX3dyaXRlX2Nsb3NlIHByZWdfbWF0Y2ggcHJlZ19tYXRjaF9hbGwgcHJlZ19yZXBsYWNlIHByZWdfcmVwbGFjZV9jYWxsYmFjayBwcmVnX3NwbGl0IHByZWdfcXVvdGUgcHJlZ19ncmVwIG92ZXJsb2FkIGN0eXBlX2FsbnVtIGN0eXBlX2FscGhhIGN0eXBlX2NudHJsIGN0eXBlX2RpZ2l0IGN0eXBlX2xvd2VyIGN0eXBlX2dyYXBoIGN0eXBlX3ByaW50IGN0eXBlX3B1bmN0IGN0eXBlX3NwYWNlIGN0eXBlX3VwcGVyIGN0eXBlX3hkaWdpdCB2aXJ0dWFsIGFwYWNoZV9yZXF1ZXN0X2hlYWRlcnMgYXBhY2hlX25vdGUgYXBhY2hlX2xvb2t1cF91cmkgYXBhY2hlX2NoaWxkX3Rlcm1pbmF0ZSBhcGFjaGVfc2V0ZW52IGFwYWNoZV9yZXNwb25zZV9oZWFkZXJzIGFwYWNoZV9nZXRfdmVyc2lvbiBnZXRhbGxoZWFkZXJzIG15c3FsX2Nvbm5lY3QgbXlzcWxfcGNvbm5lY3QgbXlzcWxfY2xvc2UgbXlzcWxfc2VsZWN0X2RiIG15c3FsX2NyZWF0ZV9kYiBteXNxbF9kcm9wX2RiIG15c3FsX3F1ZXJ5IG15c3FsX3VuYnVmZmVyZWRfcXVlcnkgbXlzcWxfZGJfcXVlcnkgbXlzcWxfbGlzdF9kYnMgbXlzcWxfbGlzdF90YWJsZXMgbXlzcWxfbGlzdF9maWVsZHMgbXlzcWxfbGlzdF9wcm9jZXNzZXMgbXlzcWxfZXJyb3IgbXlzcWxfZXJybm8gbXlzcWxfYWZmZWN0ZWRfcm93cyBteXNxbF9pbnNlcnRfaWQgbXlzcWxfcmVzdWx0IG15c3FsX251bV9yb3dzIG15c3FsX251bV9maWVsZHMgbXlzcWxfZmV0Y2hfcm93IG15c3FsX2ZldGNoX2FycmF5IG15c3FsX2ZldGNoX2Fzc29jIG15c3FsX2ZldGNoX29iamVjdCBteXNxbF9kYXRhX3NlZWsgbXlzcWxfZmV0Y2hfbGVuZ3RocyBteXNxbF9mZXRjaF9maWVsZCBteXNxbF9maWVsZF9zZWVrIG15c3FsX2ZyZWVfcmVzdWx0IG15c3FsX2ZpZWxkX25hbWUgbXlzcWxfZmllbGRfdGFibGUgbXlzcWxfZmllbGRfbGVuIG15c3FsX2ZpZWxkX3R5cGUgbXlzcWxfZmllbGRfZmxhZ3MgbXlzcWxfZXNjYXBlX3N0cmluZyBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcgbXlzcWxfc3RhdCBteXNxbF90aHJlYWRfaWQgbXlzcWxfY2xpZW50X2VuY29kaW5nIG15c3FsX2dldF9jbGllbnRfaW5mbyBteXNxbF9nZXRfaG9zdF9pbmZvIG15c3FsX2dldF9wcm90b19pbmZvIG15c3FsX2dldF9zZXJ2ZXJfaW5mbyBteXNxbF9pbmZvIG15c3FsIG15c3FsX2ZpZWxkbmFtZSBteXNxbF9maWVsZHRhYmxlIG15c3FsX2ZpZWxkbGVuIG15c3FsX2ZpZWxkdHlwZSBteXNxbF9maWVsZGZsYWdzIG15c3FsX3NlbGVjdGRiIG15c3FsX2NyZWF0ZWRiIG15c3FsX2Ryb3BkYiBteXNxbF9mcmVlcmVzdWx0IG15c3FsX251bWZpZWxkcyBteXNxbF9udW1yb3dzIG15c3FsX2xpc3RkYnMgbXlzcWxfbGlzdHRhYmxlcyBteXNxbF9saXN0ZmllbGRzIG15c3FsX2RiX25hbWUgbXlzcWxfZGJuYW1lIG15c3FsX3RhYmxlbmFtZSBteXNxbF90YWJsZV9uYW1lIHBnX2Nvbm5lY3QgcGdfcGNvbm5lY3QgcGdfY2xvc2UgcGdfY29ubmVjdGlvbl9zdGF0dXMgcGdfY29ubmVjdGlvbl9idXN5IHBnX2Nvbm5lY3Rpb25fcmVzZXQgcGdfaG9zdCBwZ19kYm5hbWUgcGdfcG9ydCBwZ190dHkgcGdfb3B0aW9ucyBwZ19waW5nIHBnX3F1ZXJ5IHBnX3NlbmRfcXVlcnkgcGdfY2FuY2VsX3F1ZXJ5IHBnX2ZldGNoX3Jlc3VsdCBwZ19mZXRjaF9yb3cgcGdfZmV0Y2hfYXNzb2MgcGdfZmV0Y2hfYXJyYXkgcGdfZmV0Y2hfb2JqZWN0IHBnX2ZldGNoX2FsbCBwZ19hZmZlY3RlZF9yb3dzIHBnX2dldF9yZXN1bHQgcGdfcmVzdWx0X3NlZWsgcGdfcmVzdWx0X3N0YXR1cyBwZ19mcmVlX3Jlc3VsdCBwZ19sYXN0X29pZCBwZ19udW1fcm93cyBwZ19udW1fZmllbGRzIHBnX2ZpZWxkX25hbWUgcGdfZmllbGRfbnVtIHBnX2ZpZWxkX3NpemUgcGdfZmllbGRfdHlwZSBwZ19maWVsZF9wcnRsZW4gcGdfZmllbGRfaXNfbnVsbCBwZ19nZXRfbm90aWZ5IHBnX2dldF9waWQgcGdfcmVzdWx0X2Vycm9yIHBnX2xhc3RfZXJyb3IgcGdfbGFzdF9ub3RpY2UgcGdfcHV0X2xpbmUgcGdfZW5kX2NvcHkgcGdfY29weV90byBwZ19jb3B5X2Zyb20gcGdfdHJhY2UgcGdfdW50cmFjZSBwZ19sb19jcmVhdGUgcGdfbG9fdW5saW5rIHBnX2xvX29wZW4gcGdfbG9fY2xvc2UgcGdfbG9fcmVhZCBwZ19sb193cml0ZSBwZ19sb19yZWFkX2FsbCBwZ19sb19pbXBvcnQgcGdfbG9fZXhwb3J0IHBnX2xvX3NlZWsgcGdfbG9fdGVsbCBwZ19lc2NhcGVfc3RyaW5nIHBnX2VzY2FwZV9ieXRlYSBwZ191bmVzY2FwZV9ieXRlYSBwZ19jbGllbnRfZW5jb2RpbmcgcGdfc2V0X2NsaWVudF9lbmNvZGluZyBwZ19tZXRhX2RhdGEgcGdfY29udmVydCBwZ19pbnNlcnQgcGdfdXBkYXRlIHBnX2RlbGV0ZSBwZ19zZWxlY3QgcGdfZXhlYyBwZ19nZXRsYXN0b2lkIHBnX2NtZHR1cGxlcyBwZ19lcnJvcm1lc3NhZ2UgcGdfbnVtcm93cyBwZ19udW1maWVsZHMgcGdfZmllbGRuYW1lIHBnX2ZpZWxkc2l6ZSBwZ19maWVsZHR5cGUgcGdfZmllbGRudW0gcGdfZmllbGRwcnRsZW4gcGdfZmllbGRpc251bGwgcGdfZnJlZXJlc3VsdCBwZ19yZXN1bHQgcGdfbG9yZWFkYWxsIHBnX2xvY3JlYXRlIHBnX2xvdW5saW5rIHBnX2xvb3BlbiBwZ19sb2Nsb3NlIHBnX2xvcmVhZCBwZ19sb3dyaXRlIHBnX2xvaW1wb3J0IHBnX2xvZXhwb3J0IGh0dHBfcmVzcG9uc2VfY29kZSBnZXRfZGVjbGFyZWRfdHJhaXRzIGdldGltYWdlc2l6ZWZyb21zdHJpbmcgc29ja2V0X2ltcG9ydF9zdHJlYW0gc3RyZWFtX3NldF9jaHVua19zaXplIHRyYWl0X2V4aXN0cyBoZWFkZXJfcmVnaXN0ZXJfY2FsbGJhY2sgY2xhc3NfdXNlcyBzZXNzaW9uX3N0YXR1cyBzZXNzaW9uX3JlZ2lzdGVyX3NodXRkb3duIGVjaG8gcHJpbnQgZ2xvYmFsIHN0YXRpYyBleGl0IGFycmF5IGVtcHR5IGV2YWwgaXNzZXQgdW5zZXQgZGllIGluY2x1ZGUgcmVxdWlyZSBpbmNsdWRlX29uY2UgcmVxdWlyZV9vbmNlIGpzb25fZGVjb2RlIGpzb25fZW5jb2RlIGpzb25fbGFzdF9lcnJvciBqc29uX2xhc3RfZXJyb3JfbXNnIGN1cmxfY2xvc2UgY3VybF9jb3B5X2hhbmRsZSBjdXJsX2Vycm5vIGN1cmxfZXJyb3IgY3VybF9lc2NhcGUgY3VybF9leGVjIGN1cmxfZmlsZV9jcmVhdGUgY3VybF9nZXRpbmZvIGN1cmxfaW5pdCBjdXJsX211bHRpX2FkZF9oYW5kbGUgY3VybF9tdWx0aV9jbG9zZSBjdXJsX211bHRpX2V4ZWMgY3VybF9tdWx0aV9nZXRjb250ZW50IGN1cmxfbXVsdGlfaW5mb19yZWFkIGN1cmxfbXVsdGlfaW5pdCBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUgY3VybF9tdWx0aV9zZWxlY3QgY3VybF9tdWx0aV9zZXRvcHQgY3VybF9tdWx0aV9zdHJlcnJvciBjdXJsX3BhdXNlIGN1cmxfcmVzZXQgY3VybF9zZXRvcHRfYXJyYXkgY3VybF9zZXRvcHQgY3VybF9zaGFyZV9jbG9zZSBjdXJsX3NoYXJlX2luaXQgY3VybF9zaGFyZV9zZXRvcHQgY3VybF9zdHJlcnJvciBjdXJsX3VuZXNjYXBlIGN1cmxfdmVyc2lvbiBteXNxbGlfYWZmZWN0ZWRfcm93cyBteXNxbGlfYXV0b2NvbW1pdCBteXNxbGlfY2hhbmdlX3VzZXIgbXlzcWxpX2NoYXJhY3Rlcl9zZXRfbmFtZSBteXNxbGlfY2xvc2UgbXlzcWxpX2NvbW1pdCBteXNxbGlfY29ubmVjdF9lcnJubyBteXNxbGlfY29ubmVjdF9lcnJvciBteXNxbGlfY29ubmVjdCBteXNxbGlfZGF0YV9zZWVrIG15c3FsaV9kZWJ1ZyBteXNxbGlfZHVtcF9kZWJ1Z19pbmZvIG15c3FsaV9lcnJubyBteXNxbGlfZXJyb3JfbGlzdCBteXNxbGlfZXJyb3IgbXlzcWxpX2ZldGNoX2FsbCBteXNxbGlfZmV0Y2hfYXJyYXkgbXlzcWxpX2ZldGNoX2Fzc29jIG15c3FsaV9mZXRjaF9maWVsZF9kaXJlY3QgbXlzcWxpX2ZldGNoX2ZpZWxkIG15c3FsaV9mZXRjaF9maWVsZHMgbXlzcWxpX2ZldGNoX2xlbmd0aHMgbXlzcWxpX2ZldGNoX29iamVjdCBteXNxbGlfZmV0Y2hfcm93IG15c3FsaV9maWVsZF9jb3VudCBteXNxbGlfZmllbGRfc2VlayBteXNxbGlfZmllbGRfdGVsbCBteXNxbGlfZnJlZV9yZXN1bHQgbXlzcWxpX2dldF9jaGFyc2V0IG15c3FsaV9nZXRfY2xpZW50X2luZm8gbXlzcWxpX2dldF9jbGllbnRfc3RhdHMgbXlzcWxpX2dldF9jbGllbnRfdmVyc2lvbiBteXNxbGlfZ2V0X2Nvbm5lY3Rpb25fc3RhdHMgbXlzcWxpX2dldF9ob3N0X2luZm8gbXlzcWxpX2dldF9wcm90b19pbmZvIG15c3FsaV9nZXRfc2VydmVyX2luZm8gbXlzcWxpX2dldF9zZXJ2ZXJfdmVyc2lvbiBteXNxbGlfaW5mbyBteXNxbGlfaW5pdCBteXNxbGlfaW5zZXJ0X2lkIG15c3FsaV9raWxsIG15c3FsaV9tb3JlX3Jlc3VsdHMgbXlzcWxpX211bHRpX3F1ZXJ5IG15c3FsaV9uZXh0X3Jlc3VsdCBteXNxbGlfbnVtX2ZpZWxkcyBteXNxbGlfbnVtX3Jvd3MgbXlzcWxpX29wdGlvbnMgbXlzcWxpX3BpbmcgbXlzcWxpX3ByZXBhcmUgbXlzcWxpX3F1ZXJ5IG15c3FsaV9yZWFsX2Nvbm5lY3QgbXlzcWxpX3JlYWxfZXNjYXBlX3N0cmluZyBteXNxbGlfcmVhbF9xdWVyeSBteXNxbGlfcmVhcF9hc3luY19xdWVyeSBteXNxbGlfcmVmcmVzaCBteXNxbGlfcm9sbGJhY2sgbXlzcWxpX3NlbGVjdF9kYiBteXNxbGlfc2V0X2NoYXJzZXQgbXlzcWxpX3NldF9sb2NhbF9pbmZpbGVfZGVmYXVsdCBteXNxbGlfc2V0X2xvY2FsX2luZmlsZV9oYW5kbGVyIG15c3FsaV9zcWxzdGF0ZSBteXNxbGlfc3NsX3NldCBteXNxbGlfc3RhdCBteXNxbGlfc3RtdF9pbml0IG15c3FsaV9zdG9yZV9yZXN1bHQgbXlzcWxpX3RocmVhZF9pZCBteXNxbGlfdGhyZWFkX3NhZmUgbXlzcWxpX3VzZV9yZXN1bHQgbXlzcWxpX3dhcm5pbmdfY291bnRcIjtcbiAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImhpbnRXb3Jkc1wiLCBcInBocFwiLCBbcGhwS2V5d29yZHMsIHBocEF0b21zLCBwaHBCdWlsdGluXS5qb2luKFwiIFwiKS5zcGxpdChcIiBcIikpO1xuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwid29yZENoYXJzXCIsIFwicGhwXCIsIC9bXFx3JF0vKTtcblxuICB2YXIgcGhwQ29uZmlnID0ge1xuICAgIG5hbWU6IFwiY2xpa2VcIixcbiAgICBoZWxwZXJUeXBlOiBcInBocFwiLFxuICAgIGtleXdvcmRzOiBrZXl3b3JkcyhwaHBLZXl3b3JkcyksXG4gICAgYmxvY2tLZXl3b3Jkczoga2V5d29yZHMoXCJjYXRjaCBkbyBlbHNlIGVsc2VpZiBmb3IgZm9yZWFjaCBpZiBzd2l0Y2ggdHJ5IHdoaWxlIGZpbmFsbHlcIiksXG4gICAgZGVmS2V5d29yZHM6IGtleXdvcmRzKFwiY2xhc3MgZnVuY3Rpb24gaW50ZXJmYWNlIG5hbWVzcGFjZSB0cmFpdFwiKSxcbiAgICBhdG9tczoga2V5d29yZHMocGhwQXRvbXMpLFxuICAgIGJ1aWx0aW46IGtleXdvcmRzKHBocEJ1aWx0aW4pLFxuICAgIG11bHRpTGluZVN0cmluZ3M6IHRydWUsXG4gICAgaG9va3M6IHtcbiAgICAgIFwiJFwiOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX10vKTtcbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGUtMlwiO1xuICAgICAgfSxcbiAgICAgIFwiPFwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHZhciBiZWZvcmU7XG4gICAgICAgIGlmIChiZWZvcmUgPSBzdHJlYW0ubWF0Y2goLzw8XFxzKi8pKSB7XG4gICAgICAgICAgdmFyIHF1b3RlZCA9IHN0cmVhbS5lYXQoL1snXCJdLyk7XG4gICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwuXS8pO1xuICAgICAgICAgIHZhciBkZWxpbSA9IHN0cmVhbS5jdXJyZW50KCkuc2xpY2UoYmVmb3JlWzBdLmxlbmd0aCArIChxdW90ZWQgPyAyIDogMSkpO1xuICAgICAgICAgIGlmIChxdW90ZWQpIHN0cmVhbS5lYXQocXVvdGVkKTtcbiAgICAgICAgICBpZiAoZGVsaW0pIHtcbiAgICAgICAgICAgIChzdGF0ZS50b2tTdGFjayB8fCAoc3RhdGUudG9rU3RhY2sgPSBbXSkpLnB1c2goZGVsaW0sIDApO1xuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwaHBTdHJpbmcoZGVsaW0sIHF1b3RlZCAhPSBcIidcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIFwiI1wiOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkgJiYgIXN0cmVhbS5tYXRjaChcIj8+XCIsIGZhbHNlKSkgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfSxcbiAgICAgIFwiL1wiOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCIvXCIpKSB7XG4gICAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkgJiYgIXN0cmVhbS5tYXRjaChcIj8+XCIsIGZhbHNlKSkgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgICdcIic6IGZ1bmN0aW9uKF9zdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIChzdGF0ZS50b2tTdGFjayB8fCAoc3RhdGUudG9rU3RhY2sgPSBbXSkpLnB1c2goJ1wiJywgMCk7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gcGhwU3RyaW5nKCdcIicpO1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH0sXG4gICAgICBcIntcIjogZnVuY3Rpb24oX3N0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLnRva1N0YWNrICYmIHN0YXRlLnRva1N0YWNrLmxlbmd0aClcbiAgICAgICAgICBzdGF0ZS50b2tTdGFja1tzdGF0ZS50b2tTdGFjay5sZW5ndGggLSAxXSsrO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgXCJ9XCI6IGZ1bmN0aW9uKF9zdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS50b2tTdGFjayAmJiBzdGF0ZS50b2tTdGFjay5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAhLS1zdGF0ZS50b2tTdGFja1tzdGF0ZS50b2tTdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGhwU3RyaW5nKHN0YXRlLnRva1N0YWNrW3N0YXRlLnRva1N0YWNrLmxlbmd0aCAtIDJdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcInBocFwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykge1xuICAgIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIChwYXJzZXJDb25maWcgJiYgcGFyc2VyQ29uZmlnLmh0bWxNb2RlKSB8fCBcInRleHQvaHRtbFwiKTtcbiAgICB2YXIgcGhwTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHBocENvbmZpZyk7XG5cbiAgICBmdW5jdGlvbiBkaXNwYXRjaChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgaXNQSFAgPSBzdGF0ZS5jdXJNb2RlID09IHBocE1vZGU7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0YXRlLnBlbmRpbmcgJiYgc3RhdGUucGVuZGluZyAhPSAnXCInICYmIHN0YXRlLnBlbmRpbmcgIT0gXCInXCIpIHN0YXRlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgaWYgKCFpc1BIUCkge1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePFxcP1xcdyovKSkge1xuICAgICAgICAgIHN0YXRlLmN1ck1vZGUgPSBwaHBNb2RlO1xuICAgICAgICAgIGlmICghc3RhdGUucGhwKSBzdGF0ZS5waHAgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUocGhwTW9kZSwgaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWwsIFwiXCIsIFwiXCIpKVxuICAgICAgICAgIHN0YXRlLmN1clN0YXRlID0gc3RhdGUucGhwO1xuICAgICAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUucGVuZGluZyA9PSAnXCInIHx8IHN0YXRlLnBlbmRpbmcgPT0gXCInXCIpIHtcbiAgICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJiBzdHJlYW0ubmV4dCgpICE9IHN0YXRlLnBlbmRpbmcpIHt9XG4gICAgICAgICAgdmFyIHN0eWxlID0gXCJzdHJpbmdcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5wZW5kaW5nICYmIHN0cmVhbS5wb3MgPCBzdGF0ZS5wZW5kaW5nLmVuZCkge1xuICAgICAgICAgIHN0cmVhbS5wb3MgPSBzdGF0ZS5wZW5kaW5nLmVuZDtcbiAgICAgICAgICB2YXIgc3R5bGUgPSBzdGF0ZS5wZW5kaW5nLnN0eWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBzdHlsZSA9IGh0bWxNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuY3VyU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5wZW5kaW5nKSBzdGF0ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCksIG9wZW5QSFAgPSBjdXIuc2VhcmNoKC88XFw/LyksIG07XG4gICAgICAgIGlmIChvcGVuUEhQICE9IC0xKSB7XG4gICAgICAgICAgaWYgKHN0eWxlID09IFwic3RyaW5nXCIgJiYgKG0gPSBjdXIubWF0Y2goL1tcXCdcXFwiXSQvKSkgJiYgIS9cXD8+Ly50ZXN0KGN1cikpIHN0YXRlLnBlbmRpbmcgPSBtWzBdO1xuICAgICAgICAgIGVsc2Ugc3RhdGUucGVuZGluZyA9IHtlbmQ6IHN0cmVhbS5wb3MsIHN0eWxlOiBzdHlsZX07XG4gICAgICAgICAgc3RyZWFtLmJhY2tVcChjdXIubGVuZ3RoIC0gb3BlblBIUCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSBlbHNlIGlmIChpc1BIUCAmJiBzdGF0ZS5waHAudG9rZW5pemUgPT0gbnVsbCAmJiBzdHJlYW0ubWF0Y2goXCI/PlwiKSkge1xuICAgICAgICBzdGF0ZS5jdXJNb2RlID0gaHRtbE1vZGU7XG4gICAgICAgIHN0YXRlLmN1clN0YXRlID0gc3RhdGUuaHRtbDtcbiAgICAgICAgaWYgKCFzdGF0ZS5waHAuY29udGV4dC5wcmV2KSBzdGF0ZS5waHAgPSBudWxsO1xuICAgICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGhwTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmN1clN0YXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKGh0bWxNb2RlKVxuICAgICAgICB2YXIgcGhwID0gcGFyc2VyQ29uZmlnLnN0YXJ0T3BlbiA/IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShwaHBNb2RlKSA6IG51bGxcbiAgICAgICAgcmV0dXJuIHtodG1sOiBodG1sLFxuICAgICAgICAgICAgICAgIHBocDogcGhwLFxuICAgICAgICAgICAgICAgIGN1ck1vZGU6IHBhcnNlckNvbmZpZy5zdGFydE9wZW4gPyBwaHBNb2RlIDogaHRtbE1vZGUsXG4gICAgICAgICAgICAgICAgY3VyU3RhdGU6IHBhcnNlckNvbmZpZy5zdGFydE9wZW4gPyBwaHAgOiBodG1sLFxuICAgICAgICAgICAgICAgIHBlbmRpbmc6IG51bGx9O1xuICAgICAgfSxcblxuICAgICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgICB2YXIgaHRtbCA9IHN0YXRlLmh0bWwsIGh0bWxOZXcgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShodG1sTW9kZSwgaHRtbCksXG4gICAgICAgICAgICBwaHAgPSBzdGF0ZS5waHAsIHBocE5ldyA9IHBocCAmJiBDb2RlTWlycm9yLmNvcHlTdGF0ZShwaHBNb2RlLCBwaHApLCBjdXI7XG4gICAgICAgIGlmIChzdGF0ZS5jdXJNb2RlID09IGh0bWxNb2RlKSBjdXIgPSBodG1sTmV3O1xuICAgICAgICBlbHNlIGN1ciA9IHBocE5ldztcbiAgICAgICAgcmV0dXJuIHtodG1sOiBodG1sTmV3LCBwaHA6IHBocE5ldywgY3VyTW9kZTogc3RhdGUuY3VyTW9kZSwgY3VyU3RhdGU6IGN1cixcbiAgICAgICAgICAgICAgICBwZW5kaW5nOiBzdGF0ZS5wZW5kaW5nfTtcbiAgICAgIH0sXG5cbiAgICAgIHRva2VuOiBkaXNwYXRjaCxcblxuICAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyLCBsaW5lKSB7XG4gICAgICAgIGlmICgoc3RhdGUuY3VyTW9kZSAhPSBwaHBNb2RlICYmIC9eXFxzKjxcXC8vLnRlc3QodGV4dEFmdGVyKSkgfHxcbiAgICAgICAgICAgIChzdGF0ZS5jdXJNb2RlID09IHBocE1vZGUgJiYgL15cXD8+Ly50ZXN0KHRleHRBZnRlcikpKVxuICAgICAgICAgIHJldHVybiBodG1sTW9kZS5pbmRlbnQoc3RhdGUuaHRtbCwgdGV4dEFmdGVyLCBsaW5lKTtcbiAgICAgICAgcmV0dXJuIHN0YXRlLmN1ck1vZGUuaW5kZW50KHN0YXRlLmN1clN0YXRlLCB0ZXh0QWZ0ZXIsIGxpbmUpO1xuICAgICAgfSxcblxuICAgICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiLypcIixcbiAgICAgIGJsb2NrQ29tbWVudEVuZDogXCIqL1wiLFxuICAgICAgbGluZUNvbW1lbnQ6IFwiLy9cIixcblxuICAgICAgaW5uZXJNb2RlOiBmdW5jdGlvbihzdGF0ZSkgeyByZXR1cm4ge3N0YXRlOiBzdGF0ZS5jdXJTdGF0ZSwgbW9kZTogc3RhdGUuY3VyTW9kZX07IH1cbiAgICB9O1xuICB9LCBcImh0bWxtaXhlZFwiLCBcImNsaWtlXCIpO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwXCIsIFwicGhwXCIpO1xuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi94LWh0dHBkLXBocC1vcGVuXCIsIHtuYW1lOiBcInBocFwiLCBzdGFydE9wZW46IHRydWV9KTtcbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXBocFwiLCBwaHBDb25maWcpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vKlxuICogICAgICBQaWcgTGF0aW4gTW9kZSBmb3IgQ29kZU1pcnJvciAyXG4gKiAgICAgIEBhdXRob3IgUHJhc2FudGggSmF5YWNoYW5kcmFuXG4gKiAgICAgIEBsaW5rICAgaHR0cHM6Ly9naXRodWIuY29tL3ByYXNhbnRoai9waWctY29kZW1pcnJvci0yXG4gKiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBhZGFwdGVkIGZyb20gUEwvU1FMIG1vZGUgaW4gQ29kZU1pcnJvciAyLlxuICovXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInBpZ1wiLCBmdW5jdGlvbihfY29uZmlnLCBwYXJzZXJDb25maWcpIHtcbiAgdmFyIGtleXdvcmRzID0gcGFyc2VyQ29uZmlnLmtleXdvcmRzLFxuICBidWlsdGlucyA9IHBhcnNlckNvbmZpZy5idWlsdGlucyxcbiAgdHlwZXMgPSBwYXJzZXJDb25maWcudHlwZXMsXG4gIG11bHRpTGluZVN0cmluZ3MgPSBwYXJzZXJDb25maWcubXVsdGlMaW5lU3RyaW5ncztcblxuICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWyorXFwtJTw+PSY/OlxcLyF8XS87XG5cbiAgZnVuY3Rpb24gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgZikge1xuICAgIHN0YXRlLnRva2VuaXplID0gZjtcbiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGlzRW5kID0gZmFsc2U7XG4gICAgdmFyIGNoO1xuICAgIHdoaWxlKGNoID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYoY2ggPT0gXCIvXCIgJiYgaXNFbmQpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaXNFbmQgPSAoY2ggPT0gXCIqXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTtcbiAgICAgIHdoaWxlKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge1xuICAgICAgICAgIGVuZCA9IHRydWU7IGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpXG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgICB9O1xuICB9XG5cblxuICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG5cbiAgICAvLyBpcyBhIHN0YXJ0IG9mIHN0cmluZz9cbiAgICBpZiAoY2ggPT0gJ1wiJyB8fCBjaCA9PSBcIidcIilcbiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpO1xuICAgIC8vIGlzIGl0IG9uZSBvZiB0aGUgc3BlY2lhbCBjaGFyc1xuICAgIGVsc2UgaWYoL1tcXFtcXF17fVxcKFxcKSw7XFwuXS8udGVzdChjaCkpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyBpcyBpdCBhIG51bWJlcj9cbiAgICBlbHNlIGlmKC9cXGQvLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5dLyk7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9XG4gICAgLy8gbXVsdGkgbGluZSBjb21tZW50IG9yIG9wZXJhdG9yXG4gICAgZWxzZSBpZiAoY2ggPT0gXCIvXCIpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiKlwiKSkge1xuICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5Db21tZW50KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpO1xuICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBzaW5nbGUgbGluZSBjb21tZW50IG9yIG9wZXJhdG9yXG4gICAgZWxzZSBpZiAoY2g9PVwiLVwiKSB7XG4gICAgICBpZihzdHJlYW0uZWF0KFwiLVwiKSl7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7XG4gICAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGlzIGl0IGFuIG9wZXJhdG9yXG4gICAgZWxzZSBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIGdldCB0aGUgd2hpbGUgd29yZFxuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX10vKTtcbiAgICAgIC8vIGlzIGl0IG9uZSBvZiB0aGUgbGlzdGVkIGtleXdvcmRzP1xuICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgLy9rZXl3b3JkcyBjYW4gYmUgdXNlZCBhcyB2YXJpYWJsZXMgbGlrZSBmbGF0dGVuKGdyb3VwKSwgZ3JvdXAuJDAgZXRjLi5cbiAgICAgICAgaWYgKCFzdHJlYW0uZWF0KFwiKVwiKSAmJiAhc3RyZWFtLmVhdChcIi5cIikpXG4gICAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgfVxuICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBidWlsdGluIGZ1bmN0aW9ucz9cbiAgICAgIGlmIChidWlsdGlucyAmJiBidWlsdGlucy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvVXBwZXJDYXNlKCkpKVxuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICAvLyBpcyBpdCBvbmUgb2YgdGhlIGxpc3RlZCB0eXBlcz9cbiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvVXBwZXJDYXNlKCkpKVxuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0zXCI7XG4gICAgICAvLyBkZWZhdWx0IGlzIGEgJ3ZhcmlhYmxlJ1xuICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICB9XG4gIH1cblxuICAvLyBJbnRlcmZhY2VcbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsXG4gICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuICB9O1xufSk7XG5cbihmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24ga2V5d29yZHMoc3RyKSB7XG4gICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdChcIiBcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8vIGJ1aWx0aW4gZnVuY3MgdGFrZW4gZnJvbSB0cnVuayByZXZpc2lvbiAxMzAzMjM3XG4gIHZhciBwQnVpbHRpbnMgPSBcIkFCUyBBQ09TIEFSSVRZIEFTSU4gQVRBTiBBVkcgQkFHU0laRSBCSU5TVE9SQUdFIEJMT09NIEJVSUxEQkxPT00gQ0JSVCBDRUlMIFwiXG4gICAgKyBcIkNPTkNBVCBDT1IgQ09TIENPU0ggQ09VTlQgQ09VTlRfU1RBUiBDT1YgQ09OU1RBTlRTSVpFIENVQkVESU1FTlNJT05TIERJRkYgRElTVElOQ1QgRE9VQkxFQUJTIFwiXG4gICAgKyBcIkRPVUJMRUFWRyBET1VCTEVCQVNFIERPVUJMRU1BWCBET1VCTEVNSU4gRE9VQkxFUk9VTkQgRE9VQkxFU1VNIEVYUCBGTE9PUiBGTE9BVEFCUyBGTE9BVEFWRyBcIlxuICAgICsgXCJGTE9BVE1BWCBGTE9BVE1JTiBGTE9BVFJPVU5EIEZMT0FUU1VNIEdFTkVSSUNJTlZPS0VSIElOREVYT0YgSU5UQUJTIElOVEFWRyBJTlRNQVggSU5UTUlOIFwiXG4gICAgKyBcIklOVFNVTSBJTlZPS0VGT1JET1VCTEUgSU5WT0tFRk9SRkxPQVQgSU5WT0tFRk9SSU5UIElOVk9LRUZPUkxPTkcgSU5WT0tFRk9SU1RSSU5HIElOVk9LRVIgXCJcbiAgICArIFwiSVNFTVBUWSBKU09OTE9BREVSIEpTT05NRVRBREFUQSBKU09OU1RPUkFHRSBMQVNUX0lOREVYX09GIExDRklSU1QgTE9HIExPRzEwIExPV0VSIExPTkdBQlMgXCJcbiAgICArIFwiTE9OR0FWRyBMT05HTUFYIExPTkdNSU4gTE9OR1NVTSBNQVggTUlOIE1BUFNJWkUgTU9OSVRPUkVEVURGIE5PTkRFVEVSTUlOSVNUSUMgT1VUUFVUU0NIRU1BICBcIlxuICAgICsgXCJQSUdTVE9SQUdFIFBJR1NUUkVBTUlORyBSQU5ET00gUkVHRVhfRVhUUkFDVCBSRUdFWF9FWFRSQUNUX0FMTCBSRVBMQUNFIFJPVU5EIFNJTiBTSU5IIFNJWkUgXCJcbiAgICArIFwiU1FSVCBTVFJTUExJVCBTVUJTVFJJTkcgU1VNIFNUUklOR0NPTkNBVCBTVFJJTkdNQVggU1RSSU5HTUlOIFNUUklOR1NJWkUgVEFOIFRBTkggVE9CQUcgXCJcbiAgICArIFwiVE9LRU5JWkUgVE9NQVAgVE9QIFRPVFVQTEUgVFJJTSBURVhUTE9BREVSIFRVUExFU0laRSBVQ0ZJUlNUIFVQUEVSIFVURjhTVE9SQUdFQ09OVkVSVEVSIFwiO1xuXG4gIC8vIHRha2VuIGZyb20gUXVlcnlMZXhlci5nXG4gIHZhciBwS2V5d29yZHMgPSBcIlZPSUQgSU1QT1JUIFJFVFVSTlMgREVGSU5FIExPQUQgRklMVEVSIEZPUkVBQ0ggT1JERVIgQ1VCRSBESVNUSU5DVCBDT0dST1VQIFwiXG4gICAgKyBcIkpPSU4gQ1JPU1MgVU5JT04gU1BMSVQgSU5UTyBJRiBPVEhFUldJU0UgQUxMIEFTIEJZIFVTSU5HIElOTkVSIE9VVEVSIE9OU0NIRU1BIFBBUkFMTEVMIFwiXG4gICAgKyBcIlBBUlRJVElPTiBHUk9VUCBBTkQgT1IgTk9UIEdFTkVSQVRFIEZMQVRURU4gQVNDIERFU0MgSVMgU1RSRUFNIFRIUk9VR0ggU1RPUkUgTUFQUkVEVUNFIFwiXG4gICAgKyBcIlNISVAgQ0FDSEUgSU5QVVQgT1VUUFVUIFNUREVSUk9SIFNURElOIFNURE9VVCBMSU1JVCBTQU1QTEUgTEVGVCBSSUdIVCBGVUxMIEVRIEdUIExUIEdURSBMVEUgXCJcbiAgICArIFwiTkVRIE1BVENIRVMgVFJVRSBGQUxTRSBEVU1QXCI7XG5cbiAgLy8gZGF0YSB0eXBlc1xuICB2YXIgcFR5cGVzID0gXCJCT09MRUFOIElOVCBMT05HIEZMT0FUIERPVUJMRSBDSEFSQVJSQVkgQllURUFSUkFZIEJBRyBUVVBMRSBNQVAgXCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXBpZ1wiLCB7XG4gICAgbmFtZTogXCJwaWdcIixcbiAgICBidWlsdGluczoga2V5d29yZHMocEJ1aWx0aW5zKSxcbiAgICBrZXl3b3Jkczoga2V5d29yZHMocEtleXdvcmRzKSxcbiAgICB0eXBlczoga2V5d29yZHMocFR5cGVzKVxuICB9KTtcblxuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiaGludFdvcmRzXCIsIFwicGlnXCIsIChwQnVpbHRpbnMgKyBwVHlwZXMgKyBwS2V5d29yZHMpLnNwbGl0KFwiIFwiKSk7XG59KCkpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JykgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZSgnLi4vLi4vbGliL2NvZGVtaXJyb3InKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoWycuLi8uLi9saWIvY29kZW1pcnJvciddLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKHdpbmRvdy5Db2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbid1c2Ugc3RyaWN0JztcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKCdwb3dlcnNoZWxsJywgZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUmVnZXhwKHBhdHRlcm5zLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdmFyIHByZWZpeCA9IG9wdGlvbnMucHJlZml4ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnByZWZpeCA6ICdeJztcbiAgICB2YXIgc3VmZml4ID0gb3B0aW9ucy5zdWZmaXggIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuc3VmZml4IDogJ1xcXFxiJztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0dGVybnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXR0ZXJuc1tpXSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICBwYXR0ZXJuc1tpXSA9IHBhdHRlcm5zW2ldLnNvdXJjZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBwYXR0ZXJuc1tpXSA9IHBhdHRlcm5zW2ldLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVnRXhwKHByZWZpeCArICcoJyArIHBhdHRlcm5zLmpvaW4oJ3wnKSArICcpJyArIHN1ZmZpeCwgJ2knKTtcbiAgfVxuXG4gIHZhciBub3RDaGFyYWN0ZXJPckRhc2ggPSAnKD89W15BLVphLXpcXFxcZFxcXFwtX118JCknO1xuICB2YXIgdmFyTmFtZXMgPSAvW1xcd1xcLTpdL1xuICB2YXIga2V5d29yZHMgPSBidWlsZFJlZ2V4cChbXG4gICAgL2JlZ2lufGJyZWFrfGNhdGNofGNvbnRpbnVlfGRhdGF8ZGVmYXVsdHxkb3xkeW5hbWljcGFyYW0vLFxuICAgIC9lbHNlfGVsc2VpZnxlbmR8ZXhpdHxmaWx0ZXJ8ZmluYWxseXxmb3J8Zm9yZWFjaHxmcm9tfGZ1bmN0aW9ufGlmfGluLyxcbiAgICAvcGFyYW18cHJvY2Vzc3xyZXR1cm58c3dpdGNofHRocm93fHRyYXB8dHJ5fHVudGlsfHdoZXJlfHdoaWxlL1xuICBdLCB7IHN1ZmZpeDogbm90Q2hhcmFjdGVyT3JEYXNoIH0pO1xuXG4gIHZhciBwdW5jdHVhdGlvbiA9IC9bXFxbXFxde30sO2BcXFxcXFwuXXxAWyh7XS87XG4gIHZhciB3b3JkT3BlcmF0b3JzID0gYnVpbGRSZWdleHAoW1xuICAgICdmJyxcbiAgICAvYj9ub3QvLFxuICAgIC9baWNdP3NwbGl0LywgJ2pvaW4nLFxuICAgIC9pcyhub3QpPy8sICdhcycsXG4gICAgL1tpY10/KGVxfG5lfFtnbF1bdGVdKS8sXG4gICAgL1tpY10/KG5vdCk/KGxpa2V8bWF0Y2h8Y29udGFpbnMpLyxcbiAgICAvW2ljXT9yZXBsYWNlLyxcbiAgICAvYj8oYW5kfG9yfHhvcikvXG4gIF0sIHsgcHJlZml4OiAnLScgfSk7XG4gIHZhciBzeW1ib2xPcGVyYXRvcnMgPSAvWytcXC0qXFwvJV09fFxcK1xcK3wtLXxcXC5cXC58WytcXC0qJl4lOj0hfFxcL118PCg/ISMpfCg/ISMpPi87XG4gIHZhciBvcGVyYXRvcnMgPSBidWlsZFJlZ2V4cChbd29yZE9wZXJhdG9ycywgc3ltYm9sT3BlcmF0b3JzXSwgeyBzdWZmaXg6ICcnIH0pO1xuXG4gIHZhciBudW1iZXJzID0gL14oKDB4W1xcZGEtZl0rKXwoKFxcZCtcXC5cXGQrfFxcZFxcLnxcXC5cXGQrfFxcZCspKGVbXFwrXFwtXT9cXGQrKT8pKVtsZF0/KFtrbWd0cF1iKT8vaTtcblxuICB2YXIgaWRlbnRpZmllcnMgPSAvXltBLVphLXpcXF9dW0EtWmEtelxcLVxcX1xcZF0qXFxiLztcblxuICB2YXIgc3ltYm9sQnVpbHRpbnMgPSAvW0EtWl06fCV8XFw/L2k7XG4gIHZhciBuYW1lZEJ1aWx0aW5zID0gYnVpbGRSZWdleHAoW1xuICAgIC9BZGQtKENvbXB1dGVyfENvbnRlbnR8SGlzdG9yeXxNZW1iZXJ8UFNTbmFwaW58VHlwZSkvLFxuICAgIC9DaGVja3BvaW50LUNvbXB1dGVyLyxcbiAgICAvQ2xlYXItKENvbnRlbnR8RXZlbnRMb2d8SGlzdG9yeXxIb3N0fEl0ZW0oUHJvcGVydHkpP3xWYXJpYWJsZSkvLFxuICAgIC9Db21wYXJlLU9iamVjdC8sXG4gICAgL0NvbXBsZXRlLVRyYW5zYWN0aW9uLyxcbiAgICAvQ29ubmVjdC1QU1Nlc3Npb24vLFxuICAgIC9Db252ZXJ0RnJvbS0oQ3N2fEpzb258U2VjdXJlU3RyaW5nfFN0cmluZ0RhdGEpLyxcbiAgICAvQ29udmVydC1QYXRoLyxcbiAgICAvQ29udmVydFRvLShDc3Z8SHRtbHxKc29ufFNlY3VyZVN0cmluZ3xYbWwpLyxcbiAgICAvQ29weS1JdGVtKFByb3BlcnR5KT8vLFxuICAgIC9EZWJ1Zy1Qcm9jZXNzLyxcbiAgICAvRGlzYWJsZS0oQ29tcHV0ZXJSZXN0b3JlfFBTQnJlYWtwb2ludHxQU1JlbW90aW5nfFBTU2Vzc2lvbkNvbmZpZ3VyYXRpb24pLyxcbiAgICAvRGlzY29ubmVjdC1QU1Nlc3Npb24vLFxuICAgIC9FbmFibGUtKENvbXB1dGVyUmVzdG9yZXxQU0JyZWFrcG9pbnR8UFNSZW1vdGluZ3xQU1Nlc3Npb25Db25maWd1cmF0aW9uKS8sXG4gICAgLyhFbnRlcnxFeGl0KS1QU1Nlc3Npb24vLFxuICAgIC9FeHBvcnQtKEFsaWFzfENsaXhtbHxDb25zb2xlfENvdW50ZXJ8Q3N2fEZvcm1hdERhdGF8TW9kdWxlTWVtYmVyfFBTU2Vzc2lvbikvLFxuICAgIC9Gb3JFYWNoLU9iamVjdC8sXG4gICAgL0Zvcm1hdC0oQ3VzdG9tfExpc3R8VGFibGV8V2lkZSkvLFxuICAgIG5ldyBSZWdFeHAoJ0dldC0oQWNsfEFsaWFzfEF1dGhlbnRpY29kZVNpZ25hdHVyZXxDaGlsZEl0ZW18Q29tbWFuZHxDb21wdXRlclJlc3RvcmVQb2ludHxDb250ZW50fENvbnRyb2xQYW5lbEl0ZW18Q291bnRlcnxDcmVkZW50aWFsJ1xuICAgICAgKyAnfEN1bHR1cmV8RGF0ZXxFdmVudHxFdmVudExvZ3xFdmVudFN1YnNjcmliZXJ8RXhlY3V0aW9uUG9saWN5fEZvcm1hdERhdGF8SGVscHxIaXN0b3J5fEhvc3R8SG90Rml4fEl0ZW18SXRlbVByb3BlcnR5fEpvYidcbiAgICAgICsgJ3xMb2NhdGlvbnxNZW1iZXJ8TW9kdWxlfFBmeENlcnRpZmljYXRlfFByb2Nlc3N8UFNCcmVha3BvaW50fFBTQ2FsbFN0YWNrfFBTRHJpdmV8UFNQcm92aWRlcnxQU1Nlc3Npb258UFNTZXNzaW9uQ29uZmlndXJhdGlvbidcbiAgICAgICsgJ3xQU1NuYXBpbnxSYW5kb218U2VydmljZXxUcmFjZVNvdXJjZXxUcmFuc2FjdGlvbnxUeXBlRGF0YXxVSUN1bHR1cmV8VW5pcXVlfFZhcmlhYmxlfFZlcmJ8V2luRXZlbnR8V21pT2JqZWN0KScpLFxuICAgIC9Hcm91cC1PYmplY3QvLFxuICAgIC9JbXBvcnQtKEFsaWFzfENsaXhtbHxDb3VudGVyfENzdnxMb2NhbGl6ZWREYXRhfE1vZHVsZXxQU1Nlc3Npb24pLyxcbiAgICAvSW1wb3J0U3lzdGVtTW9kdWxlcy8sXG4gICAgL0ludm9rZS0oQ29tbWFuZHxFeHByZXNzaW9ufEhpc3Rvcnl8SXRlbXxSZXN0TWV0aG9kfFdlYlJlcXVlc3R8V21pTWV0aG9kKS8sXG4gICAgL0pvaW4tUGF0aC8sXG4gICAgL0xpbWl0LUV2ZW50TG9nLyxcbiAgICAvTWVhc3VyZS0oQ29tbWFuZHxPYmplY3QpLyxcbiAgICAvTW92ZS1JdGVtKFByb3BlcnR5KT8vLFxuICAgIG5ldyBSZWdFeHAoJ05ldy0oQWxpYXN8RXZlbnR8RXZlbnRMb2d8SXRlbShQcm9wZXJ0eSk/fE1vZHVsZXxNb2R1bGVNYW5pZmVzdHxPYmplY3R8UFNEcml2ZXxQU1Nlc3Npb258UFNTZXNzaW9uQ29uZmlndXJhdGlvbkZpbGUnXG4gICAgICArICd8UFNTZXNzaW9uT3B0aW9ufFBTVHJhbnNwb3J0T3B0aW9ufFNlcnZpY2V8VGltZVNwYW58VmFyaWFibGV8V2ViU2VydmljZVByb3h5fFdpbkV2ZW50KScpLFxuICAgIC9PdXQtKERlZmF1bHR8RmlsZXxHcmlkVmlld3xIb3N0fE51bGx8UHJpbnRlcnxTdHJpbmcpLyxcbiAgICAvUGF1c2UvLFxuICAgIC8oUG9wfFB1c2gpLUxvY2F0aW9uLyxcbiAgICAvUmVhZC1Ib3N0LyxcbiAgICAvUmVjZWl2ZS0oSm9ifFBTU2Vzc2lvbikvLFxuICAgIC9SZWdpc3Rlci0oRW5naW5lRXZlbnR8T2JqZWN0RXZlbnR8UFNTZXNzaW9uQ29uZmlndXJhdGlvbnxXbWlFdmVudCkvLFxuICAgIC9SZW1vdmUtKENvbXB1dGVyfEV2ZW50fEV2ZW50TG9nfEl0ZW0oUHJvcGVydHkpP3xKb2J8TW9kdWxlfFBTQnJlYWtwb2ludHxQU0RyaXZlfFBTU2Vzc2lvbnxQU1NuYXBpbnxUeXBlRGF0YXxWYXJpYWJsZXxXbWlPYmplY3QpLyxcbiAgICAvUmVuYW1lLShDb21wdXRlcnxJdGVtKFByb3BlcnR5KT8pLyxcbiAgICAvUmVzZXQtQ29tcHV0ZXJNYWNoaW5lUGFzc3dvcmQvLFxuICAgIC9SZXNvbHZlLVBhdGgvLFxuICAgIC9SZXN0YXJ0LShDb21wdXRlcnxTZXJ2aWNlKS8sXG4gICAgL1Jlc3RvcmUtQ29tcHV0ZXIvLFxuICAgIC9SZXN1bWUtKEpvYnxTZXJ2aWNlKS8sXG4gICAgL1NhdmUtSGVscC8sXG4gICAgL1NlbGVjdC0oT2JqZWN0fFN0cmluZ3xYbWwpLyxcbiAgICAvU2VuZC1NYWlsTWVzc2FnZS8sXG4gICAgbmV3IFJlZ0V4cCgnU2V0LShBY2x8QWxpYXN8QXV0aGVudGljb2RlU2lnbmF0dXJlfENvbnRlbnR8RGF0ZXxFeGVjdXRpb25Qb2xpY3l8SXRlbShQcm9wZXJ0eSk/fExvY2F0aW9ufFBTQnJlYWtwb2ludHxQU0RlYnVnJyArXG4gICAgICAgICAgICAgICAnfFBTU2Vzc2lvbkNvbmZpZ3VyYXRpb258U2VydmljZXxTdHJpY3RNb2RlfFRyYWNlU291cmNlfFZhcmlhYmxlfFdtaUluc3RhbmNlKScpLFxuICAgIC9TaG93LShDb21tYW5kfENvbnRyb2xQYW5lbEl0ZW18RXZlbnRMb2cpLyxcbiAgICAvU29ydC1PYmplY3QvLFxuICAgIC9TcGxpdC1QYXRoLyxcbiAgICAvU3RhcnQtKEpvYnxQcm9jZXNzfFNlcnZpY2V8U2xlZXB8VHJhbnNhY3Rpb258VHJhbnNjcmlwdCkvLFxuICAgIC9TdG9wLShDb21wdXRlcnxKb2J8UHJvY2Vzc3xTZXJ2aWNlfFRyYW5zY3JpcHQpLyxcbiAgICAvU3VzcGVuZC0oSm9ifFNlcnZpY2UpLyxcbiAgICAvVGFiRXhwYW5zaW9uMi8sXG4gICAgL1RlZS1PYmplY3QvLFxuICAgIC9UZXN0LShDb21wdXRlclNlY3VyZUNoYW5uZWx8Q29ubmVjdGlvbnxNb2R1bGVNYW5pZmVzdHxQYXRofFBTU2Vzc2lvbkNvbmZpZ3VyYXRpb25GaWxlKS8sXG4gICAgL1RyYWNlLUNvbW1hbmQvLFxuICAgIC9VbmJsb2NrLUZpbGUvLFxuICAgIC9VbmRvLVRyYW5zYWN0aW9uLyxcbiAgICAvVW5yZWdpc3Rlci0oRXZlbnR8UFNTZXNzaW9uQ29uZmlndXJhdGlvbikvLFxuICAgIC9VcGRhdGUtKEZvcm1hdERhdGF8SGVscHxMaXN0fFR5cGVEYXRhKS8sXG4gICAgL1VzZS1UcmFuc2FjdGlvbi8sXG4gICAgL1dhaXQtKEV2ZW50fEpvYnxQcm9jZXNzKS8sXG4gICAgL1doZXJlLU9iamVjdC8sXG4gICAgL1dyaXRlLShEZWJ1Z3xFcnJvcnxFdmVudExvZ3xIb3N0fE91dHB1dHxQcm9ncmVzc3xWZXJib3NlfFdhcm5pbmcpLyxcbiAgICAvY2R8aGVscHxta2Rpcnxtb3JlfG9zc3xwcm9tcHQvLFxuICAgIC9hY3xhc25wfGNhdHxjZHxjaGRpcnxjbGN8Y2xlYXJ8Y2xoeXxjbGl8Y2xwfGNsc3xjbHZ8Y25zbnxjb21wYXJlfGNvcHl8Y3B8Y3BpfGNwcHxjdnBhfGRicHxkZWx8ZGlmZnxkaXJ8ZG5zbnxlYnAvLFxuICAgIC9lY2hvfGVwYWx8ZXBjc3Z8ZXBzbnxlcmFzZXxldHNufGV4c258ZmN8Zmx8Zm9yZWFjaHxmdHxmd3xnYWx8Z2JwfGdjfGdjaXxnY218Z2NzfGdkcnxnaHl8Z2l8Z2pifGdsfGdtfGdtb3xncHxncHMvLFxuICAgIC9ncm91cHxnc258Z3NucHxnc3Z8Z3V8Z3Z8Z3dtaXxofGhpc3Rvcnl8aWNtfGlleHxpaHl8aWl8aXBhbHxpcGNzdnxpcG1vfGlwc258aXJtfGlzZXxpd21pfGl3cnxraWxsfGxwfGxzfG1hbnxtZC8sXG4gICAgL21lYXN1cmV8bWl8bW91bnR8bW92ZXxtcHxtdnxuYWx8bmRyfG5pfG5tb3xucHNzY3xuc258bnZ8b2d2fG9ofHBvcGR8cHN8cHVzaGR8cHdkfHJ8cmJwfHJjamJ8cmNzbnxyZHxyZHJ8cmVufHJpLyxcbiAgICAvcmpifHJtfHJtZGlyfHJtb3xybml8cm5wfHJwfHJzbnxyc25wfHJ1amJ8cnZ8cnZwYXxyd21pfHNhamJ8c2FsfHNhcHN8c2FzdnxzYnB8c2N8c2VsZWN0fHNldHxzaGNtfHNpfHNsfHNsZWVwfHNscy8sXG4gICAgL3NvcnR8c3B8c3BqYnxzcHBzfHNwc3Z8c3RhcnR8c3VqYnxzdnxzd21pfHRlZXx0cmNtfHR5cGV8d2hlcmV8d2pifHdyaXRlL1xuICBdLCB7IHByZWZpeDogJycsIHN1ZmZpeDogJycgfSk7XG4gIHZhciB2YXJpYWJsZUJ1aWx0aW5zID0gYnVpbGRSZWdleHAoW1xuICAgIC9bJD9eX118QXJnc3xDb25maXJtUHJlZmVyZW5jZXxDb25zb2xlRmlsZU5hbWV8RGVidWdQcmVmZXJlbmNlfEVycm9yfEVycm9yQWN0aW9uUHJlZmVyZW5jZXxFcnJvclZpZXd8RXhlY3V0aW9uQ29udGV4dC8sXG4gICAgL0Zvcm1hdEVudW1lcmF0aW9uTGltaXR8SG9tZXxIb3N0fElucHV0fE1heGltdW1BbGlhc0NvdW50fE1heGltdW1Ecml2ZUNvdW50fE1heGltdW1FcnJvckNvdW50fE1heGltdW1GdW5jdGlvbkNvdW50LyxcbiAgICAvTWF4aW11bUhpc3RvcnlDb3VudHxNYXhpbXVtVmFyaWFibGVDb3VudHxNeUludm9jYXRpb258TmVzdGVkUHJvbXB0TGV2ZWx8T3V0cHV0RW5jb2Rpbmd8UGlkfFByb2ZpbGV8UHJvZ3Jlc3NQcmVmZXJlbmNlLyxcbiAgICAvUFNCb3VuZFBhcmFtZXRlcnN8UFNDb21tYW5kUGF0aHxQU0N1bHR1cmV8UFNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzfFBTRW1haWxTZXJ2ZXJ8UFNIb21lfFBTU2NyaXB0Um9vdHxQU1Nlc3Npb25BcHBsaWNhdGlvbk5hbWUvLFxuICAgIC9QU1Nlc3Npb25Db25maWd1cmF0aW9uTmFtZXxQU1Nlc3Npb25PcHRpb258UFNVSUN1bHR1cmV8UFNWZXJzaW9uVGFibGV8UHdkfFNoZWxsSWR8U3RhY2tUcmFjZXxWZXJib3NlUHJlZmVyZW5jZS8sXG4gICAgL1dhcm5pbmdQcmVmZXJlbmNlfFdoYXRJZlByZWZlcmVuY2UvLFxuXG4gICAgL0V2ZW50fEV2ZW50QXJnc3xFdmVudFN1YnNjcmliZXJ8U2VuZGVyLyxcbiAgICAvTWF0Y2hlc3xPZnN8Rm9yRWFjaHxMYXN0RXhpdENvZGV8UFNDbWRsZXR8UFNJdGVtfFBTU2VuZGVySW5mb3xUaGlzLyxcbiAgICAvdHJ1ZXxmYWxzZXxudWxsL1xuICBdLCB7IHByZWZpeDogJ1xcXFwkJywgc3VmZml4OiAnJyB9KTtcblxuICB2YXIgYnVpbHRpbnMgPSBidWlsZFJlZ2V4cChbc3ltYm9sQnVpbHRpbnMsIG5hbWVkQnVpbHRpbnMsIHZhcmlhYmxlQnVpbHRpbnNdLCB7IHN1ZmZpeDogbm90Q2hhcmFjdGVyT3JEYXNoIH0pO1xuXG4gIHZhciBncmFtbWFyID0ge1xuICAgIGtleXdvcmQ6IGtleXdvcmRzLFxuICAgIG51bWJlcjogbnVtYmVycyxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3JzLFxuICAgIGJ1aWx0aW46IGJ1aWx0aW5zLFxuICAgIHB1bmN0dWF0aW9uOiBwdW5jdHVhdGlvbixcbiAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyc1xuICB9O1xuXG4gIC8vIHRva2VuaXplcnNcbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAvLyBIYW5kbGUgQ29tbWVudHNcbiAgICAvL3ZhciBjaCA9IHN0cmVhbS5wZWVrKCk7XG5cbiAgICB2YXIgcGFyZW50ID0gc3RhdGUucmV0dXJuU3RhY2tbc3RhdGUucmV0dXJuU3RhY2subGVuZ3RoIC0gMV07XG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuc2hvdWxkUmV0dXJuRnJvbShzdGF0ZSkpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyZW50LnRva2VuaXplO1xuICAgICAgc3RhdGUucmV0dXJuU3RhY2sucG9wKCk7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc3RyZWFtLmVhdCgnKCcpKSB7XG4gICAgICBzdGF0ZS5icmFja2V0TmVzdGluZyArPSAxO1xuICAgICAgcmV0dXJuICdwdW5jdHVhdGlvbic7XG4gICAgfVxuXG4gICAgaWYgKHN0cmVhbS5lYXQoJyknKSkge1xuICAgICAgc3RhdGUuYnJhY2tldE5lc3RpbmcgLT0gMTtcbiAgICAgIHJldHVybiAncHVuY3R1YXRpb24nO1xuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBncmFtbWFyKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKGdyYW1tYXJba2V5XSkpIHtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgLy8gc2luZ2xlLXF1b3RlIHN0cmluZ1xuICAgIGlmIChjaCA9PT0gXCInXCIpIHtcbiAgICAgIHJldHVybiB0b2tlblNpbmdsZVF1b3RlU3RyaW5nKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJyQnKSB7XG4gICAgICByZXR1cm4gdG9rZW5WYXJpYWJsZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG5cbiAgICAvLyBkb3VibGUtcXVvdGUgc3RyaW5nXG4gICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICByZXR1cm4gdG9rZW5Eb3VibGVRdW90ZVN0cmluZyhzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICc8JyAmJiBzdHJlYW0uZWF0KCcjJykpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50O1xuICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICcjJykge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgcmV0dXJuICdjb21tZW50JztcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICdAJykge1xuICAgICAgdmFyIHF1b3RlTWF0Y2ggPSBzdHJlYW0uZWF0KC9bXCInXS8pO1xuICAgICAgaWYgKHF1b3RlTWF0Y2ggJiYgc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5NdWx0aVN0cmluZztcbiAgICAgICAgc3RhdGUuc3RhcnRRdW90ZSA9IHF1b3RlTWF0Y2hbMF07XG4gICAgICAgIHJldHVybiB0b2tlbk11bHRpU3RyaW5nKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkubWF0Y2goL1soe10vKSkge1xuICAgICAgICByZXR1cm4gJ3B1bmN0dWF0aW9uJztcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLnBlZWsoKS5tYXRjaCh2YXJOYW1lcykpIHtcbiAgICAgICAgLy8gc3BsYXR0ZWQgdmFyaWFibGVcbiAgICAgICAgcmV0dXJuIHRva2VuVmFyaWFibGUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnZXJyb3InO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TaW5nbGVRdW90ZVN0cmluZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoO1xuICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ucGVlaygpKSAhPSBudWxsKSB7XG4gICAgICBzdHJlYW0ubmV4dCgpO1xuXG4gICAgICBpZiAoY2ggPT09IFwiJ1wiICYmICFzdHJlYW0uZWF0KFwiJ1wiKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnZXJyb3InO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5Eb3VibGVRdW90ZVN0cmluZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoO1xuICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ucGVlaygpKSAhPSBudWxsKSB7XG4gICAgICBpZiAoY2ggPT09ICckJykge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nSW50ZXJwb2xhdGlvbjtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfVxuXG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgaWYgKGNoID09PSAnYCcpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaCA9PT0gJ1wiJyAmJiAhc3RyZWFtLmVhdCgnXCInKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnZXJyb3InO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmdJbnRlcnBvbGF0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICByZXR1cm4gdG9rZW5JbnRlcnBvbGF0aW9uKHN0cmVhbSwgc3RhdGUsIHRva2VuRG91YmxlUXVvdGVTdHJpbmcpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5NdWx0aVN0cmluZ1JldHVybihzdHJlYW0sIHN0YXRlKSB7XG4gICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbk11bHRpU3RyaW5nO1xuICAgIHN0YXRlLnN0YXJ0UXVvdGUgPSAnXCInXG4gICAgcmV0dXJuIHRva2VuTXVsdGlTdHJpbmcoc3RyZWFtLCBzdGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkhlcmVTdHJpbmdJbnRlcnBvbGF0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICByZXR1cm4gdG9rZW5JbnRlcnBvbGF0aW9uKHN0cmVhbSwgc3RhdGUsIHRva2VuTXVsdGlTdHJpbmdSZXR1cm4pO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5JbnRlcnBvbGF0aW9uKHN0cmVhbSwgc3RhdGUsIHBhcmVudFRva2VuaXplKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgnJCgnKSkge1xuICAgICAgdmFyIHNhdmVkQnJhY2tldE5lc3RpbmcgPSBzdGF0ZS5icmFja2V0TmVzdGluZztcbiAgICAgIHN0YXRlLnJldHVyblN0YWNrLnB1c2goe1xuICAgICAgICAvKmpzaGludCBsb29wZnVuYzp0cnVlICovXG4gICAgICAgIHNob3VsZFJldHVybkZyb206IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLmJyYWNrZXROZXN0aW5nID09PSBzYXZlZEJyYWNrZXROZXN0aW5nO1xuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6ZTogcGFyZW50VG9rZW5pemVcbiAgICAgIH0pO1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICBzdGF0ZS5icmFja2V0TmVzdGluZyArPSAxO1xuICAgICAgcmV0dXJuICdwdW5jdHVhdGlvbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICBzdGF0ZS5yZXR1cm5TdGFjay5wdXNoKHtcbiAgICAgICAgc2hvdWxkUmV0dXJuRnJvbTogZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9LFxuICAgICAgICB0b2tlbml6ZTogcGFyZW50VG9rZW5pemVcbiAgICAgIH0pO1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblZhcmlhYmxlO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICBpZiAobWF5YmVFbmQgJiYgY2ggPT0gJz4nKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBtYXliZUVuZCA9IChjaCA9PT0gJyMnKTtcbiAgICB9XG4gICAgcmV0dXJuICdjb21tZW50JztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuVmFyaWFibGUoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7XG4gICAgaWYgKHN0cmVhbS5lYXQoJ3snKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblZhcmlhYmxlV2l0aEJyYWNlcztcbiAgICAgIHJldHVybiB0b2tlblZhcmlhYmxlV2l0aEJyYWNlcyhzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKGNoICE9IHVuZGVmaW5lZCAmJiBjaC5tYXRjaCh2YXJOYW1lcykpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSh2YXJOYW1lcyk7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgIHJldHVybiAndmFyaWFibGUtMic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5WYXJpYWJsZVdpdGhCcmFjZXMoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaDtcbiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJ3ZhcmlhYmxlLTInO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5NdWx0aVN0cmluZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIHF1b3RlID0gc3RhdGUuc3RhcnRRdW90ZTtcbiAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaChuZXcgUmVnRXhwKHF1b3RlICsgJ0AnKSkpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChxdW90ZSA9PT0gJ1wiJykge1xuICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgICAgaWYgKGNoID09PSAnJCcpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuSGVyZVN0cmluZ0ludGVycG9sYXRpb247XG4gICAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgaWYgKGNoID09PSAnYCcpIHtcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgIH1cblxuICAgIHJldHVybiAnc3RyaW5nJztcbiAgfVxuXG4gIHZhciBleHRlcm5hbCA9IHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJldHVyblN0YWNrOiBbXSxcbiAgICAgICAgYnJhY2tldE5lc3Rpbmc6IDAsXG4gICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2VcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSxcblxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiAnPCMnLFxuICAgIGJsb2NrQ29tbWVudEVuZDogJyM+JyxcbiAgICBsaW5lQ29tbWVudDogJyMnLFxuICAgIGZvbGQ6ICdicmFjZSdcbiAgfTtcbiAgcmV0dXJuIGV4dGVybmFsO1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgnYXBwbGljYXRpb24veC1wb3dlcnNoZWxsJywgJ3Bvd2Vyc2hlbGwnKTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJwcm9wZXJ0aWVzXCIsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgc29sID0gc3RyZWFtLnNvbCgpIHx8IHN0YXRlLmFmdGVyU2VjdGlvbjtcbiAgICAgIHZhciBlb2wgPSBzdHJlYW0uZW9sKCk7XG5cbiAgICAgIHN0YXRlLmFmdGVyU2VjdGlvbiA9IGZhbHNlO1xuXG4gICAgICBpZiAoc29sKSB7XG4gICAgICAgIGlmIChzdGF0ZS5uZXh0TXVsdGlsaW5lKSB7XG4gICAgICAgICAgc3RhdGUuaW5NdWx0aWxpbmUgPSB0cnVlO1xuICAgICAgICAgIHN0YXRlLm5leHRNdWx0aWxpbmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IFwiZGVmXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGVvbCAmJiAhIHN0YXRlLm5leHRNdWx0aWxpbmUpIHtcbiAgICAgICAgc3RhdGUuaW5NdWx0aWxpbmUgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24gPSBcImRlZlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoc29sKSB7XG4gICAgICAgIHdoaWxlKHN0cmVhbS5lYXRTcGFjZSgpKSB7fVxuICAgICAgfVxuXG4gICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgICBpZiAoc29sICYmIChjaCA9PT0gXCIjXCIgfHwgY2ggPT09IFwiIVwiIHx8IGNoID09PSBcIjtcIikpIHtcbiAgICAgICAgc3RhdGUucG9zaXRpb24gPSBcImNvbW1lbnRcIjtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9IGVsc2UgaWYgKHNvbCAmJiBjaCA9PT0gXCJbXCIpIHtcbiAgICAgICAgc3RhdGUuYWZ0ZXJTZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgc3RyZWFtLnNraXBUbyhcIl1cIik7IHN0cmVhbS5lYXQoXCJdXCIpO1xuICAgICAgICByZXR1cm4gXCJoZWFkZXJcIjtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiPVwiIHx8IGNoID09PSBcIjpcIikge1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IFwicXVvdGVcIjtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSBcIlxcXFxcIiAmJiBzdGF0ZS5wb3NpdGlvbiA9PT0gXCJxdW90ZVwiKSB7XG4gICAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHsgIC8vIGVuZCBvZiBsaW5lP1xuICAgICAgICAgIC8vIE11bHRpbGluZSB2YWx1ZVxuICAgICAgICAgIHN0YXRlLm5leHRNdWx0aWxpbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGF0ZS5wb3NpdGlvbjtcbiAgICB9LFxuXG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwb3NpdGlvbiA6IFwiZGVmXCIsICAgICAgIC8vIEN1cnJlbnQgcG9zaXRpb24sIFwiZGVmXCIsIFwicXVvdGVcIiBvciBcImNvbW1lbnRcIlxuICAgICAgICBuZXh0TXVsdGlsaW5lIDogZmFsc2UsICAvLyBJcyB0aGUgbmV4dCBsaW5lIG11bHRpbGluZSB2YWx1ZVxuICAgICAgICBpbk11bHRpbGluZSA6IGZhbHNlLCAgICAvLyBJcyB0aGUgY3VycmVudCBsaW5lIGEgbXVsdGlsaW5lIHZhbHVlXG4gICAgICAgIGFmdGVyU2VjdGlvbiA6IGZhbHNlICAgIC8vIERpZCB3ZSBqdXN0IG9wZW4gYSBzZWN0aW9uXG4gICAgICB9O1xuICAgIH1cblxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1wcm9wZXJ0aWVzXCIsIFwicHJvcGVydGllc1wiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1pbmlcIiwgXCJwcm9wZXJ0aWVzXCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIGZ1bmN0aW9uIHdvcmRSZWdleHAod29yZHMpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oKFwiICsgd29yZHMuam9pbihcIil8KFwiKSArIFwiKSlcXFxcYlwiLCBcImlcIik7XG4gIH07XG5cbiAgdmFyIGtleXdvcmRBcnJheSA9IFtcbiAgICBcInBhY2thZ2VcIiwgXCJtZXNzYWdlXCIsIFwiaW1wb3J0XCIsIFwic3ludGF4XCIsXG4gICAgXCJyZXF1aXJlZFwiLCBcIm9wdGlvbmFsXCIsIFwicmVwZWF0ZWRcIiwgXCJyZXNlcnZlZFwiLCBcImRlZmF1bHRcIiwgXCJleHRlbnNpb25zXCIsIFwicGFja2VkXCIsXG4gICAgXCJib29sXCIsIFwiYnl0ZXNcIiwgXCJkb3VibGVcIiwgXCJlbnVtXCIsIFwiZmxvYXRcIiwgXCJzdHJpbmdcIixcbiAgICBcImludDMyXCIsIFwiaW50NjRcIiwgXCJ1aW50MzJcIiwgXCJ1aW50NjRcIiwgXCJzaW50MzJcIiwgXCJzaW50NjRcIiwgXCJmaXhlZDMyXCIsIFwiZml4ZWQ2NFwiLCBcInNmaXhlZDMyXCIsIFwic2ZpeGVkNjRcIixcbiAgICBcIm9wdGlvblwiLCBcInNlcnZpY2VcIiwgXCJycGNcIiwgXCJyZXR1cm5zXCJcbiAgXTtcbiAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChrZXl3b3JkQXJyYXkpO1xuXG4gIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJoaW50V29yZHNcIiwgXCJwcm90b2J1ZlwiLCBrZXl3b3JkQXJyYXkpO1xuXG4gIHZhciBpZGVudGlmaWVycyA9IG5ldyBSZWdFeHAoXCJeW19BLVphLXpcXHhhMS1cXHVmZmZmXVtfQS1aYS16MC05XFx4YTEtXFx1ZmZmZl0qXCIpO1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0pIHtcbiAgICAvLyB3aGl0ZXNwYWNlc1xuICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBIYW5kbGUgb25lIGxpbmUgQ29tbWVudHNcbiAgICBpZiAoc3RyZWFtLm1hdGNoKFwiLy9cIikpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgTnVtYmVyIExpdGVyYWxzXG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXlswLTlcXC4rLV0vLCBmYWxzZSkpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bKy1dPzB4WzAtOWEtZkEtRl0rLykpXG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlsrLV0/XFxkKlxcLlxcZCsoW0VlRGRdWystXT9cXGQrKT8vKSlcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eWystXT9cXGQrKFtFZURkXVsrLV0/XFxkKyk/LykpXG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBTdHJpbmdzXG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXlwiKFteXCJdfChcIlwiKSkqXCIvKSkgeyByZXR1cm4gXCJzdHJpbmdcIjsgfVxuICAgIGlmIChzdHJlYW0ubWF0Y2goL14nKFteJ118KCcnKSkqJy8pKSB7IHJldHVybiBcInN0cmluZ1wiOyB9XG5cbiAgICAvLyBIYW5kbGUgd29yZHNcbiAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzKSkgeyByZXR1cm4gXCJrZXl3b3JkXCI7IH1cbiAgICBpZiAoc3RyZWFtLm1hdGNoKGlkZW50aWZpZXJzKSkgeyByZXR1cm4gXCJ2YXJpYWJsZVwiOyB9IDtcblxuICAgIC8vIEhhbmRsZSBub24tZGV0ZWN0ZWQgaXRlbXNcbiAgICBzdHJlYW0ubmV4dCgpO1xuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcInByb3RvYnVmXCIsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogdG9rZW5CYXNlLFxuICAgICAgZm9sZDogXCJicmFjZVwiXG4gICAgfTtcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXByb3RvYnVmXCIsIFwicHJvdG9idWZcIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi9qYXZhc2NyaXB0L2phdmFzY3JpcHRcIiksIHJlcXVpcmUoXCIuLi9jc3MvY3NzXCIpLCByZXF1aXJlKFwiLi4vaHRtbG1peGVkL2h0bWxtaXhlZFwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4uL2phdmFzY3JpcHQvamF2YXNjcmlwdFwiLCBcIi4uL2Nzcy9jc3NcIiwgXCIuLi9odG1sbWl4ZWQvaHRtbG1peGVkXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInB1Z1wiLCBmdW5jdGlvbiAoY29uZmlnKSB7XG4gIC8vIHRva2VuIHR5cGVzXG4gIHZhciBLRVlXT1JEID0gJ2tleXdvcmQnO1xuICB2YXIgRE9DVFlQRSA9ICdtZXRhJztcbiAgdmFyIElEID0gJ2J1aWx0aW4nO1xuICB2YXIgQ0xBU1MgPSAncXVhbGlmaWVyJztcblxuICB2YXIgQVRUUlNfTkVTVCA9IHtcbiAgICAneyc6ICd9JyxcbiAgICAnKCc6ICcpJyxcbiAgICAnWyc6ICddJ1xuICB9O1xuXG4gIHZhciBqc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAnamF2YXNjcmlwdCcpO1xuXG4gIGZ1bmN0aW9uIFN0YXRlKCkge1xuICAgIHRoaXMuamF2YVNjcmlwdExpbmUgPSBmYWxzZTtcbiAgICB0aGlzLmphdmFTY3JpcHRMaW5lRXhjbHVkZXNDb2xvbiA9IGZhbHNlO1xuXG4gICAgdGhpcy5qYXZhU2NyaXB0QXJndW1lbnRzID0gZmFsc2U7XG4gICAgdGhpcy5qYXZhU2NyaXB0QXJndW1lbnRzRGVwdGggPSAwO1xuXG4gICAgdGhpcy5pc0ludGVycG9sYXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmludGVycG9sYXRpb25OZXN0aW5nID0gMDtcblxuICAgIHRoaXMuanNTdGF0ZSA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShqc01vZGUpO1xuXG4gICAgdGhpcy5yZXN0T2ZMaW5lID0gJyc7XG5cbiAgICB0aGlzLmlzSW5jbHVkZUZpbHRlcmVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0VhY2ggPSBmYWxzZTtcblxuICAgIHRoaXMubGFzdFRhZyA9ICcnO1xuICAgIHRoaXMuc2NyaXB0VHlwZSA9ICcnO1xuXG4gICAgLy8gQXR0cmlidXRlcyBNb2RlXG4gICAgdGhpcy5pc0F0dHJzID0gZmFsc2U7XG4gICAgdGhpcy5hdHRyc05lc3QgPSBbXTtcbiAgICB0aGlzLmluQXR0cmlidXRlTmFtZSA9IHRydWU7XG4gICAgdGhpcy5hdHRyaWJ1dGVJc1R5cGUgPSBmYWxzZTtcbiAgICB0aGlzLmF0dHJWYWx1ZSA9ICcnO1xuXG4gICAgLy8gSW5kZW50ZWQgTW9kZVxuICAgIHRoaXMuaW5kZW50T2YgPSBJbmZpbml0eTtcbiAgICB0aGlzLmluZGVudFRva2VuID0gJyc7XG5cbiAgICB0aGlzLmlubmVyTW9kZSA9IG51bGw7XG4gICAgdGhpcy5pbm5lclN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMuaW5uZXJNb2RlRm9yTGluZSA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTYWZlbHkgY29weSBhIHN0YXRlXG4gICAqXG4gICAqIEByZXR1cm4ge1N0YXRlfVxuICAgKi9cbiAgU3RhdGUucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlcyA9IG5ldyBTdGF0ZSgpO1xuICAgIHJlcy5qYXZhU2NyaXB0TGluZSA9IHRoaXMuamF2YVNjcmlwdExpbmU7XG4gICAgcmVzLmphdmFTY3JpcHRMaW5lRXhjbHVkZXNDb2xvbiA9IHRoaXMuamF2YVNjcmlwdExpbmVFeGNsdWRlc0NvbG9uO1xuICAgIHJlcy5qYXZhU2NyaXB0QXJndW1lbnRzID0gdGhpcy5qYXZhU2NyaXB0QXJndW1lbnRzO1xuICAgIHJlcy5qYXZhU2NyaXB0QXJndW1lbnRzRGVwdGggPSB0aGlzLmphdmFTY3JpcHRBcmd1bWVudHNEZXB0aDtcbiAgICByZXMuaXNJbnRlcnBvbGF0aW5nID0gdGhpcy5pc0ludGVycG9sYXRpbmc7XG4gICAgcmVzLmludGVycG9sYXRpb25OZXN0aW5nID0gdGhpcy5pbnRlcnBvbGF0aW9uTmVzdGluZztcblxuICAgIHJlcy5qc1N0YXRlID0gQ29kZU1pcnJvci5jb3B5U3RhdGUoanNNb2RlLCB0aGlzLmpzU3RhdGUpO1xuXG4gICAgcmVzLmlubmVyTW9kZSA9IHRoaXMuaW5uZXJNb2RlO1xuICAgIGlmICh0aGlzLmlubmVyTW9kZSAmJiB0aGlzLmlubmVyU3RhdGUpIHtcbiAgICAgIHJlcy5pbm5lclN0YXRlID0gQ29kZU1pcnJvci5jb3B5U3RhdGUodGhpcy5pbm5lck1vZGUsIHRoaXMuaW5uZXJTdGF0ZSk7XG4gICAgfVxuXG4gICAgcmVzLnJlc3RPZkxpbmUgPSB0aGlzLnJlc3RPZkxpbmU7XG5cbiAgICByZXMuaXNJbmNsdWRlRmlsdGVyZWQgPSB0aGlzLmlzSW5jbHVkZUZpbHRlcmVkO1xuICAgIHJlcy5pc0VhY2ggPSB0aGlzLmlzRWFjaDtcbiAgICByZXMubGFzdFRhZyA9IHRoaXMubGFzdFRhZztcbiAgICByZXMuc2NyaXB0VHlwZSA9IHRoaXMuc2NyaXB0VHlwZTtcbiAgICByZXMuaXNBdHRycyA9IHRoaXMuaXNBdHRycztcbiAgICByZXMuYXR0cnNOZXN0ID0gdGhpcy5hdHRyc05lc3Quc2xpY2UoKTtcbiAgICByZXMuaW5BdHRyaWJ1dGVOYW1lID0gdGhpcy5pbkF0dHJpYnV0ZU5hbWU7XG4gICAgcmVzLmF0dHJpYnV0ZUlzVHlwZSA9IHRoaXMuYXR0cmlidXRlSXNUeXBlO1xuICAgIHJlcy5hdHRyVmFsdWUgPSB0aGlzLmF0dHJWYWx1ZTtcbiAgICByZXMuaW5kZW50T2YgPSB0aGlzLmluZGVudE9mO1xuICAgIHJlcy5pbmRlbnRUb2tlbiA9IHRoaXMuaW5kZW50VG9rZW47XG5cbiAgICByZXMuaW5uZXJNb2RlRm9yTGluZSA9IHRoaXMuaW5uZXJNb2RlRm9yTGluZTtcblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgZnVuY3Rpb24gamF2YVNjcmlwdChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgLy8gaWYgamF2YVNjcmlwdExpbmUgd2FzIHNldCBhdCBlbmQgb2YgbGluZSwgaWdub3JlIGl0XG4gICAgICBzdGF0ZS5qYXZhU2NyaXB0TGluZSA9IGZhbHNlO1xuICAgICAgc3RhdGUuamF2YVNjcmlwdExpbmVFeGNsdWRlc0NvbG9uID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5qYXZhU2NyaXB0TGluZSkge1xuICAgICAgaWYgKHN0YXRlLmphdmFTY3JpcHRMaW5lRXhjbHVkZXNDb2xvbiAmJiBzdHJlYW0ucGVlaygpID09PSAnOicpIHtcbiAgICAgICAgc3RhdGUuamF2YVNjcmlwdExpbmUgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuamF2YVNjcmlwdExpbmVFeGNsdWRlc0NvbG9uID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciB0b2sgPSBqc01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5qc1N0YXRlKTtcbiAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHN0YXRlLmphdmFTY3JpcHRMaW5lID0gZmFsc2U7XG4gICAgICByZXR1cm4gdG9rIHx8IHRydWU7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGphdmFTY3JpcHRBcmd1bWVudHMoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5qYXZhU2NyaXB0QXJndW1lbnRzKSB7XG4gICAgICBpZiAoc3RhdGUuamF2YVNjcmlwdEFyZ3VtZW50c0RlcHRoID09PSAwICYmIHN0cmVhbS5wZWVrKCkgIT09ICcoJykge1xuICAgICAgICBzdGF0ZS5qYXZhU2NyaXB0QXJndW1lbnRzID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAnKCcpIHtcbiAgICAgICAgc3RhdGUuamF2YVNjcmlwdEFyZ3VtZW50c0RlcHRoKys7XG4gICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICcpJykge1xuICAgICAgICBzdGF0ZS5qYXZhU2NyaXB0QXJndW1lbnRzRGVwdGgtLTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5qYXZhU2NyaXB0QXJndW1lbnRzRGVwdGggPT09IDApIHtcbiAgICAgICAgc3RhdGUuamF2YVNjcmlwdEFyZ3VtZW50cyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0b2sgPSBqc01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5qc1N0YXRlKTtcbiAgICAgIHJldHVybiB0b2sgfHwgdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB5aWVsZFN0YXRlbWVudChzdHJlYW0pIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eeWllbGRcXGIvKSkge1xuICAgICAgICByZXR1cm4gJ2tleXdvcmQnO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRvY3R5cGUoc3RyZWFtKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXig/OmRvY3R5cGUpICooW15cXG5dKyk/LykpIHtcbiAgICAgICAgcmV0dXJuIERPQ1RZUEU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJwb2xhdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgnI3snKSkge1xuICAgICAgc3RhdGUuaXNJbnRlcnBvbGF0aW5nID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmludGVycG9sYXRpb25OZXN0aW5nID0gMDtcbiAgICAgIHJldHVybiAncHVuY3R1YXRpb24nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludGVycG9sYXRpb25Db250aW51ZWQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5pc0ludGVycG9sYXRpbmcpIHtcbiAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAnfScpIHtcbiAgICAgICAgc3RhdGUuaW50ZXJwb2xhdGlvbk5lc3RpbmctLTtcbiAgICAgICAgaWYgKHN0YXRlLmludGVycG9sYXRpb25OZXN0aW5nIDwgMCkge1xuICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgc3RhdGUuaXNJbnRlcnBvbGF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuICdwdW5jdHVhdGlvbic7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJ3snKSB7XG4gICAgICAgIHN0YXRlLmludGVycG9sYXRpb25OZXN0aW5nKys7XG4gICAgICB9XG4gICAgICByZXR1cm4ganNNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuanNTdGF0ZSkgfHwgdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYXNlU3RhdGVtZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eY2FzZVxcYi8pKSB7XG4gICAgICBzdGF0ZS5qYXZhU2NyaXB0TGluZSA9IHRydWU7XG4gICAgICByZXR1cm4gS0VZV09SRDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB3aGVuKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9ed2hlblxcYi8pKSB7XG4gICAgICBzdGF0ZS5qYXZhU2NyaXB0TGluZSA9IHRydWU7XG4gICAgICBzdGF0ZS5qYXZhU2NyaXB0TGluZUV4Y2x1ZGVzQ29sb24gPSB0cnVlO1xuICAgICAgcmV0dXJuIEtFWVdPUkQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVmYXVsdFN0YXRlbWVudChzdHJlYW0pIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eZGVmYXVsdFxcYi8pKSB7XG4gICAgICByZXR1cm4gS0VZV09SRDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBleHRlbmRzU3RhdGVtZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eZXh0ZW5kcz9cXGIvKSkge1xuICAgICAgc3RhdGUucmVzdE9mTGluZSA9ICdzdHJpbmcnO1xuICAgICAgcmV0dXJuIEtFWVdPUkQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eYXBwZW5kXFxiLykpIHtcbiAgICAgIHN0YXRlLnJlc3RPZkxpbmUgPSAndmFyaWFibGUnO1xuICAgICAgcmV0dXJuIEtFWVdPUkQ7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHByZXBlbmQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL15wcmVwZW5kXFxiLykpIHtcbiAgICAgIHN0YXRlLnJlc3RPZkxpbmUgPSAndmFyaWFibGUnO1xuICAgICAgcmV0dXJuIEtFWVdPUkQ7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGJsb2NrKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eYmxvY2tcXGIgKig/OihwcmVwZW5kfGFwcGVuZClcXGIpPy8pKSB7XG4gICAgICBzdGF0ZS5yZXN0T2ZMaW5lID0gJ3ZhcmlhYmxlJztcbiAgICAgIHJldHVybiBLRVlXT1JEO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluY2x1ZGUoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL15pbmNsdWRlXFxiLykpIHtcbiAgICAgIHN0YXRlLnJlc3RPZkxpbmUgPSAnc3RyaW5nJztcbiAgICAgIHJldHVybiBLRVlXT1JEO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluY2x1ZGVGaWx0ZXJlZChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXmluY2x1ZGU6KFthLXpBLVowLTlcXC1dKykvLCBmYWxzZSkgJiYgc3RyZWFtLm1hdGNoKCdpbmNsdWRlJykpIHtcbiAgICAgIHN0YXRlLmlzSW5jbHVkZUZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBLRVlXT1JEO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluY2x1ZGVGaWx0ZXJlZENvbnRpbnVlZChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmlzSW5jbHVkZUZpbHRlcmVkKSB7XG4gICAgICB2YXIgdG9rID0gZmlsdGVyKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgc3RhdGUuaXNJbmNsdWRlRmlsdGVyZWQgPSBmYWxzZTtcbiAgICAgIHN0YXRlLnJlc3RPZkxpbmUgPSAnc3RyaW5nJztcbiAgICAgIHJldHVybiB0b2s7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWl4aW4oc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL15taXhpblxcYi8pKSB7XG4gICAgICBzdGF0ZS5qYXZhU2NyaXB0TGluZSA9IHRydWU7XG4gICAgICByZXR1cm4gS0VZV09SRDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYWxsKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFwrKFstXFx3XSspLykpIHtcbiAgICAgIGlmICghc3RyZWFtLm1hdGNoKC9eXFwoICpbLVxcd10rICo9LywgZmFsc2UpKSB7XG4gICAgICAgIHN0YXRlLmphdmFTY3JpcHRBcmd1bWVudHMgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5qYXZhU2NyaXB0QXJndW1lbnRzRGVwdGggPSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuICd2YXJpYWJsZSc7XG4gICAgfVxuICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXCsjey8sIGZhbHNlKSkge1xuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIHN0YXRlLm1peGluQ2FsbEFmdGVyID0gdHJ1ZTtcbiAgICAgIHJldHVybiBpbnRlcnBvbGF0aW9uKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjYWxsQXJndW1lbnRzKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUubWl4aW5DYWxsQWZ0ZXIpIHtcbiAgICAgIHN0YXRlLm1peGluQ2FsbEFmdGVyID0gZmFsc2U7XG4gICAgICBpZiAoIXN0cmVhbS5tYXRjaCgvXlxcKCAqWy1cXHddKyAqPS8sIGZhbHNlKSkge1xuICAgICAgICBzdGF0ZS5qYXZhU2NyaXB0QXJndW1lbnRzID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuamF2YVNjcmlwdEFyZ3VtZW50c0RlcHRoID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbmRpdGlvbmFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKGlmfHVubGVzc3xlbHNlIGlmfGVsc2UpXFxiLykpIHtcbiAgICAgIHN0YXRlLmphdmFTY3JpcHRMaW5lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBLRVlXT1JEO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVhY2goc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL14oLSAqKT8oZWFjaHxmb3IpXFxiLykpIHtcbiAgICAgIHN0YXRlLmlzRWFjaCA9IHRydWU7XG4gICAgICByZXR1cm4gS0VZV09SRDtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZWFjaENvbnRpbnVlZChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmlzRWFjaCkge1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXiBpblxcYi8pKSB7XG4gICAgICAgIHN0YXRlLmphdmFTY3JpcHRMaW5lID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuaXNFYWNoID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBLRVlXT1JEO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uc29sKCkgfHwgc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgIHN0YXRlLmlzRWFjaCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubmV4dCgpKSB7XG4gICAgICAgIHdoaWxlICghc3RyZWFtLm1hdGNoKC9eIGluXFxiLywgZmFsc2UpICYmIHN0cmVhbS5uZXh0KCkpO1xuICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB3aGlsZVN0YXRlbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXndoaWxlXFxiLykpIHtcbiAgICAgIHN0YXRlLmphdmFTY3JpcHRMaW5lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBLRVlXT1JEO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRhZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNhcHR1cmVzO1xuICAgIGlmIChjYXB0dXJlcyA9IHN0cmVhbS5tYXRjaCgvXihcXHcoPzpbLTpcXHddKlxcdyk/KVxcLz8vKSkge1xuICAgICAgc3RhdGUubGFzdFRhZyA9IGNhcHR1cmVzWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoc3RhdGUubGFzdFRhZyA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgICAgc3RhdGUuc2NyaXB0VHlwZSA9ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JztcbiAgICAgIH1cbiAgICAgIHJldHVybiAndGFnJztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaWx0ZXIoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL146KFtcXHdcXC1dKykvKSkge1xuICAgICAgdmFyIGlubmVyTW9kZTtcbiAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmlubmVyTW9kZXMpIHtcbiAgICAgICAgaW5uZXJNb2RlID0gY29uZmlnLmlubmVyTW9kZXMoc3RyZWFtLmN1cnJlbnQoKS5zdWJzdHJpbmcoMSkpO1xuICAgICAgfVxuICAgICAgaWYgKCFpbm5lck1vZGUpIHtcbiAgICAgICAgaW5uZXJNb2RlID0gc3RyZWFtLmN1cnJlbnQoKS5zdWJzdHJpbmcoMSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGlubmVyTW9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaW5uZXJNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgaW5uZXJNb2RlKTtcbiAgICAgIH1cbiAgICAgIHNldElubmVyTW9kZShzdHJlYW0sIHN0YXRlLCBpbm5lck1vZGUpO1xuICAgICAgcmV0dXJuICdhdG9tJztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb2RlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKCE/PXwtKS8pKSB7XG4gICAgICBzdGF0ZS5qYXZhU2NyaXB0TGluZSA9IHRydWU7XG4gICAgICByZXR1cm4gJ3B1bmN0dWF0aW9uJztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpZChzdHJlYW0pIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eIyhbXFx3LV0rKS8pKSB7XG4gICAgICByZXR1cm4gSUQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xhc3NOYW1lKHN0cmVhbSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXC4oW1xcdy1dKykvKSkge1xuICAgICAgcmV0dXJuIENMQVNTO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dHJzKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSAnKCcpIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICBzdGF0ZS5pc0F0dHJzID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmF0dHJzTmVzdCA9IFtdO1xuICAgICAgc3RhdGUuaW5BdHRyaWJ1dGVOYW1lID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmF0dHJWYWx1ZSA9ICcnO1xuICAgICAgc3RhdGUuYXR0cmlidXRlSXNUeXBlID0gZmFsc2U7XG4gICAgICByZXR1cm4gJ3B1bmN0dWF0aW9uJztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhdHRyc0NvbnRpbnVlZChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmlzQXR0cnMpIHtcbiAgICAgIGlmIChBVFRSU19ORVNUW3N0cmVhbS5wZWVrKCldKSB7XG4gICAgICAgIHN0YXRlLmF0dHJzTmVzdC5wdXNoKEFUVFJTX05FU1Rbc3RyZWFtLnBlZWsoKV0pO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmF0dHJzTmVzdFtzdGF0ZS5hdHRyc05lc3QubGVuZ3RoIC0gMV0gPT09IHN0cmVhbS5wZWVrKCkpIHtcbiAgICAgICAgc3RhdGUuYXR0cnNOZXN0LnBvcCgpO1xuICAgICAgfSBlbHNlICBpZiAoc3RyZWFtLmVhdCgnKScpKSB7XG4gICAgICAgIHN0YXRlLmlzQXR0cnMgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuICdwdW5jdHVhdGlvbic7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuaW5BdHRyaWJ1dGVOYW1lICYmIHN0cmVhbS5tYXRjaCgvXltePSxcXCkhXSsvKSkge1xuICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJz0nIHx8IHN0cmVhbS5wZWVrKCkgPT09ICchJykge1xuICAgICAgICAgIHN0YXRlLmluQXR0cmlidXRlTmFtZSA9IGZhbHNlO1xuICAgICAgICAgIHN0YXRlLmpzU3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoanNNb2RlKTtcbiAgICAgICAgICBpZiAoc3RhdGUubGFzdFRhZyA9PT0gJ3NjcmlwdCcgJiYgc3RyZWFtLmN1cnJlbnQoKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3R5cGUnKSB7XG4gICAgICAgICAgICBzdGF0ZS5hdHRyaWJ1dGVJc1R5cGUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5hdHRyaWJ1dGVJc1R5cGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdhdHRyaWJ1dGUnO1xuICAgICAgfVxuXG4gICAgICB2YXIgdG9rID0ganNNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuanNTdGF0ZSk7XG4gICAgICBpZiAoc3RhdGUuYXR0cmlidXRlSXNUeXBlICYmIHRvayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3RhdGUuc2NyaXB0VHlwZSA9IHN0cmVhbS5jdXJyZW50KCkudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5hdHRyc05lc3QubGVuZ3RoID09PSAwICYmICh0b2sgPT09ICdzdHJpbmcnIHx8IHRvayA9PT0gJ3ZhcmlhYmxlJyB8fCB0b2sgPT09ICdrZXl3b3JkJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGdW5jdGlvbignJywgJ3ZhciB4ICcgKyBzdGF0ZS5hdHRyVmFsdWUucmVwbGFjZSgvLFxccyokLywgJycpLnJlcGxhY2UoL14hLywgJycpKTtcbiAgICAgICAgICBzdGF0ZS5pbkF0dHJpYnV0ZU5hbWUgPSB0cnVlO1xuICAgICAgICAgIHN0YXRlLmF0dHJWYWx1ZSA9ICcnO1xuICAgICAgICAgIHN0cmVhbS5iYWNrVXAoc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGgpO1xuICAgICAgICAgIHJldHVybiBhdHRyc0NvbnRpbnVlZChzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAvL25vdCB0aGUgZW5kIG9mIGFuIGF0dHJpYnV0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGF0ZS5hdHRyVmFsdWUgKz0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgIHJldHVybiB0b2sgfHwgdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhdHRyaWJ1dGVzQmxvY2soc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL14mYXR0cmlidXRlc1xcYi8pKSB7XG4gICAgICBzdGF0ZS5qYXZhU2NyaXB0QXJndW1lbnRzID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmphdmFTY3JpcHRBcmd1bWVudHNEZXB0aCA9IDA7XG4gICAgICByZXR1cm4gJ2tleXdvcmQnO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluZGVudChzdHJlYW0pIHtcbiAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICByZXR1cm4gJ2luZGVudCc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXiAqXFwvXFwvKC0pPyhbXlxcbl0qKS8pKSB7XG4gICAgICBzdGF0ZS5pbmRlbnRPZiA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgc3RhdGUuaW5kZW50VG9rZW4gPSAnY29tbWVudCc7XG4gICAgICByZXR1cm4gJ2NvbW1lbnQnO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbG9uKHN0cmVhbSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL146ICovKSkge1xuICAgICAgcmV0dXJuICdjb2xvbic7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdGV4dChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXig/OlxcfCA/fCApKFteXFxuXSspLykpIHtcbiAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICB9XG4gICAgaWYgKHN0cmVhbS5tYXRjaCgvXig8W15cXG5dKikvLCBmYWxzZSkpIHtcbiAgICAgIC8vIGh0bWwgc3RyaW5nXG4gICAgICBzZXRJbm5lck1vZGUoc3RyZWFtLCBzdGF0ZSwgJ2h0bWxtaXhlZCcpO1xuICAgICAgc3RhdGUuaW5uZXJNb2RlRm9yTGluZSA9IHRydWU7XG4gICAgICByZXR1cm4gaW5uZXJNb2RlKHN0cmVhbSwgc3RhdGUsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRvdChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5lYXQoJy4nKSkge1xuICAgICAgdmFyIGlubmVyTW9kZSA9IG51bGw7XG4gICAgICBpZiAoc3RhdGUubGFzdFRhZyA9PT0gJ3NjcmlwdCcgJiYgc3RhdGUuc2NyaXB0VHlwZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2phdmFzY3JpcHQnKSAhPSAtMSkge1xuICAgICAgICBpbm5lck1vZGUgPSBzdGF0ZS5zY3JpcHRUeXBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXCJ8Jy9nLCAnJyk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxhc3RUYWcgPT09ICdzdHlsZScpIHtcbiAgICAgICAgaW5uZXJNb2RlID0gJ2Nzcyc7XG4gICAgICB9XG4gICAgICBzZXRJbm5lck1vZGUoc3RyZWFtLCBzdGF0ZSwgaW5uZXJNb2RlKTtcbiAgICAgIHJldHVybiAnZG90JztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmYWlsKHN0cmVhbSkge1xuICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIHNldElubmVyTW9kZShzdHJlYW0sIHN0YXRlLCBtb2RlKSB7XG4gICAgbW9kZSA9IENvZGVNaXJyb3IubWltZU1vZGVzW21vZGVdIHx8IG1vZGU7XG4gICAgbW9kZSA9IGNvbmZpZy5pbm5lck1vZGVzID8gY29uZmlnLmlubmVyTW9kZXMobW9kZSkgfHwgbW9kZSA6IG1vZGU7XG4gICAgbW9kZSA9IENvZGVNaXJyb3IubWltZU1vZGVzW21vZGVdIHx8IG1vZGU7XG4gICAgbW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIG1vZGUpO1xuICAgIHN0YXRlLmluZGVudE9mID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG5cbiAgICBpZiAobW9kZSAmJiBtb2RlLm5hbWUgIT09ICdudWxsJykge1xuICAgICAgc3RhdGUuaW5uZXJNb2RlID0gbW9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuaW5kZW50VG9rZW4gPSAnc3RyaW5nJztcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaW5uZXJNb2RlKHN0cmVhbSwgc3RhdGUsIGZvcmNlKSB7XG4gICAgaWYgKHN0cmVhbS5pbmRlbnRhdGlvbigpID4gc3RhdGUuaW5kZW50T2YgfHwgKHN0YXRlLmlubmVyTW9kZUZvckxpbmUgJiYgIXN0cmVhbS5zb2woKSkgfHwgZm9yY2UpIHtcbiAgICAgIGlmIChzdGF0ZS5pbm5lck1vZGUpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5pbm5lclN0YXRlKSB7XG4gICAgICAgICAgc3RhdGUuaW5uZXJTdGF0ZSA9IHN0YXRlLmlubmVyTW9kZS5zdGFydFN0YXRlID8gQ29kZU1pcnJvci5zdGFydFN0YXRlKHN0YXRlLmlubmVyTW9kZSwgc3RyZWFtLmluZGVudGF0aW9uKCkpIDoge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmVhbS5oaWRlRmlyc3RDaGFycyhzdGF0ZS5pbmRlbnRPZiArIDIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUuaW5uZXJNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuaW5uZXJTdGF0ZSkgfHwgdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBzdGF0ZS5pbmRlbnRUb2tlbjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgc3RhdGUuaW5kZW50T2YgPSBJbmZpbml0eTtcbiAgICAgIHN0YXRlLmluZGVudFRva2VuID0gbnVsbDtcbiAgICAgIHN0YXRlLmlubmVyTW9kZSA9IG51bGw7XG4gICAgICBzdGF0ZS5pbm5lclN0YXRlID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcmVzdE9mTGluZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgLy8gaWYgcmVzdE9mTGluZSB3YXMgc2V0IGF0IGVuZCBvZiBsaW5lLCBpZ25vcmUgaXRcbiAgICAgIHN0YXRlLnJlc3RPZkxpbmUgPSAnJztcbiAgICB9XG4gICAgaWYgKHN0YXRlLnJlc3RPZkxpbmUpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHZhciB0b2sgPSBzdGF0ZS5yZXN0T2ZMaW5lO1xuICAgICAgc3RhdGUucmVzdE9mTGluZSA9ICcnO1xuICAgICAgcmV0dXJuIHRvaztcbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBTdGF0ZSgpO1xuICB9XG4gIGZ1bmN0aW9uIGNvcHlTdGF0ZShzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5jb3B5KCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgbmV4dCB0b2tlbiBpbiB0aGUgc3RyZWFtXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW1cbiAgICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAgICovXG4gIGZ1bmN0aW9uIG5leHRUb2tlbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIHRvayA9IGlubmVyTW9kZShzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgcmVzdE9mTGluZShzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgaW50ZXJwb2xhdGlvbkNvbnRpbnVlZChzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgaW5jbHVkZUZpbHRlcmVkQ29udGludWVkKHN0cmVhbSwgc3RhdGUpXG4gICAgICB8fCBlYWNoQ29udGludWVkKHN0cmVhbSwgc3RhdGUpXG4gICAgICB8fCBhdHRyc0NvbnRpbnVlZChzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgamF2YVNjcmlwdChzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgamF2YVNjcmlwdEFyZ3VtZW50cyhzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgY2FsbEFyZ3VtZW50cyhzdHJlYW0sIHN0YXRlKVxuXG4gICAgICB8fCB5aWVsZFN0YXRlbWVudChzdHJlYW0pXG4gICAgICB8fCBkb2N0eXBlKHN0cmVhbSlcbiAgICAgIHx8IGludGVycG9sYXRpb24oc3RyZWFtLCBzdGF0ZSlcbiAgICAgIHx8IGNhc2VTdGF0ZW1lbnQoc3RyZWFtLCBzdGF0ZSlcbiAgICAgIHx8IHdoZW4oc3RyZWFtLCBzdGF0ZSlcbiAgICAgIHx8IGRlZmF1bHRTdGF0ZW1lbnQoc3RyZWFtKVxuICAgICAgfHwgZXh0ZW5kc1N0YXRlbWVudChzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgYXBwZW5kKHN0cmVhbSwgc3RhdGUpXG4gICAgICB8fCBwcmVwZW5kKHN0cmVhbSwgc3RhdGUpXG4gICAgICB8fCBibG9jayhzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgaW5jbHVkZShzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgaW5jbHVkZUZpbHRlcmVkKHN0cmVhbSwgc3RhdGUpXG4gICAgICB8fCBtaXhpbihzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgY2FsbChzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgY29uZGl0aW9uYWwoc3RyZWFtLCBzdGF0ZSlcbiAgICAgIHx8IGVhY2goc3RyZWFtLCBzdGF0ZSlcbiAgICAgIHx8IHdoaWxlU3RhdGVtZW50KHN0cmVhbSwgc3RhdGUpXG4gICAgICB8fCB0YWcoc3RyZWFtLCBzdGF0ZSlcbiAgICAgIHx8IGZpbHRlcihzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgY29kZShzdHJlYW0sIHN0YXRlKVxuICAgICAgfHwgaWQoc3RyZWFtKVxuICAgICAgfHwgY2xhc3NOYW1lKHN0cmVhbSlcbiAgICAgIHx8IGF0dHJzKHN0cmVhbSwgc3RhdGUpXG4gICAgICB8fCBhdHRyaWJ1dGVzQmxvY2soc3RyZWFtLCBzdGF0ZSlcbiAgICAgIHx8IGluZGVudChzdHJlYW0pXG4gICAgICB8fCB0ZXh0KHN0cmVhbSwgc3RhdGUpXG4gICAgICB8fCBjb21tZW50KHN0cmVhbSwgc3RhdGUpXG4gICAgICB8fCBjb2xvbihzdHJlYW0pXG4gICAgICB8fCBkb3Qoc3RyZWFtLCBzdGF0ZSlcbiAgICAgIHx8IGZhaWwoc3RyZWFtKTtcblxuICAgIHJldHVybiB0b2sgPT09IHRydWUgPyBudWxsIDogdG9rO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogc3RhcnRTdGF0ZSxcbiAgICBjb3B5U3RhdGU6IGNvcHlTdGF0ZSxcbiAgICB0b2tlbjogbmV4dFRva2VuXG4gIH07XG59LCAnamF2YXNjcmlwdCcsICdjc3MnLCAnaHRtbG1peGVkJyk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LXB1ZycsICdwdWcnKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LWphZGUnLCAncHVnJyk7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJwdXBwZXRcIiwgZnVuY3Rpb24gKCkge1xuICAvLyBTdG9yZXMgdGhlIHdvcmRzIGZyb20gdGhlIGRlZmluZSBtZXRob2RcbiAgdmFyIHdvcmRzID0ge307XG4gIC8vIFRha2VuLCBtb3N0bHksIGZyb20gdGhlIFB1cHBldCBvZmZpY2lhbCB2YXJpYWJsZSBzdGFuZGFyZHMgcmVnZXhcbiAgdmFyIHZhcmlhYmxlX3JlZ2V4ID0gLyh7KT8oW2Etel1bYS16MC05X10qKT8oKDo6W2Etel1bYS16MC05X10qKSo6Oik/W2EtekEtWjAtOV9dKyh9KT8vO1xuXG4gIC8vIFRha2VzIGEgc3RyaW5nIG9mIHdvcmRzIHNlcGFyYXRlZCBieSBzcGFjZXMgYW5kIGFkZHMgdGhlbSBhc1xuICAvLyBrZXlzIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCAnc3R5bGUnXG4gIGZ1bmN0aW9uIGRlZmluZShzdHlsZSwgc3RyaW5nKSB7XG4gICAgdmFyIHNwbGl0ID0gc3RyaW5nLnNwbGl0KCcgJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGxpdC5sZW5ndGg7IGkrKykge1xuICAgICAgd29yZHNbc3BsaXRbaV1dID0gc3R5bGU7XG4gICAgfVxuICB9XG5cbiAgLy8gVGFrZXMgY29tbW9ubHkga25vd24gcHVwcGV0IHR5cGVzL3dvcmRzIGFuZCBjbGFzc2lmaWVzIHRoZW0gdG8gYSBzdHlsZVxuICBkZWZpbmUoJ2tleXdvcmQnLCAnY2xhc3MgZGVmaW5lIHNpdGUgbm9kZSBpbmNsdWRlIGltcG9ydCBpbmhlcml0cycpO1xuICBkZWZpbmUoJ2tleXdvcmQnLCAnY2FzZSBpZiBlbHNlIGluIGFuZCBlbHNpZiBkZWZhdWx0IG9yJyk7XG4gIGRlZmluZSgnYXRvbScsICdmYWxzZSB0cnVlIHJ1bm5pbmcgcHJlc2VudCBhYnNlbnQgZmlsZSBkaXJlY3RvcnkgdW5kZWYnKTtcbiAgZGVmaW5lKCdidWlsdGluJywgJ2FjdGlvbiBhdWdlYXMgYnVyc3QgY2hhaW4gY29tcHV0ZXIgY3JvbiBkZXN0aW5hdGlvbiBkcG9ydCBleGVjICcgK1xuICAgICdmaWxlIGZpbGVidWNrZXQgZ3JvdXAgaG9zdCBpY21wIGluaWZhY2UgaW50ZXJmYWNlIGp1bXAgazVsb2dpbiBsaW1pdCBsb2dfbGV2ZWwgJyArXG4gICAgJ2xvZ19wcmVmaXggbWFjYXV0aG9yaXphdGlvbiBtYWlsYWxpYXMgbWFpbGxpc3QgbWN4IG1vdW50IG5hZ2lvc19jb21tYW5kICcgK1xuICAgICduYWdpb3NfY29udGFjdCBuYWdpb3NfY29udGFjdGdyb3VwIG5hZ2lvc19ob3N0IG5hZ2lvc19ob3N0ZGVwZW5kZW5jeSAnICtcbiAgICAnbmFnaW9zX2hvc3Rlc2NhbGF0aW9uIG5hZ2lvc19ob3N0ZXh0aW5mbyBuYWdpb3NfaG9zdGdyb3VwIG5hZ2lvc19zZXJ2aWNlICcgK1xuICAgICduYWdpb3Nfc2VydmljZWRlcGVuZGVuY3kgbmFnaW9zX3NlcnZpY2Vlc2NhbGF0aW9uIG5hZ2lvc19zZXJ2aWNlZXh0aW5mbyAnICtcbiAgICAnbmFnaW9zX3NlcnZpY2Vncm91cCBuYWdpb3NfdGltZXBlcmlvZCBuYW1lIG5vdGlmeSBvdXRpZmFjZSBwYWNrYWdlIHByb3RvIHJlamVjdCAnICtcbiAgICAncmVzb3VyY2VzIHJvdXRlciBzY2hlZHVsZSBzY2hlZHVsZWRfdGFzayBzZWxib29sZWFuIHNlbG1vZHVsZSBzZXJ2aWNlIHNvdXJjZSAnICtcbiAgICAnc3BvcnQgc3NoX2F1dGhvcml6ZWRfa2V5IHNzaGtleSBzdGFnZSBzdGF0ZSB0YWJsZSB0aWR5IHRvZGVzdCB0b3BvcnRzIHRvc291cmNlICcgK1xuICAgICd1c2VyIHZsYW4geXVtcmVwbyB6ZnMgem9uZSB6cG9vbCcpO1xuXG4gIC8vIEFmdGVyIGZpbmRpbmcgYSBzdGFydCBvZiBhIHN0cmluZyAoJ3xcIikgdGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBmaW5kIHRoZSBlbmQ7XG4gIC8vIElmIGEgdmFyaWFibGUgaXMgZW5jb3VudGVyZWQgYWxvbmcgdGhlIHdheSwgd2UgZGlzcGxheSBpdCBkaWZmZXJlbnRseSB3aGVuIGl0XG4gIC8vIGlzIGVuY2Fwc3VsYXRlZCBpbiBhIGRvdWJsZS1xdW90ZWQgc3RyaW5nLlxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGN1cnJlbnQsIHByZXYsIGZvdW5kX3ZhciA9IGZhbHNlO1xuICAgIHdoaWxlICghc3RyZWFtLmVvbCgpICYmIChjdXJyZW50ID0gc3RyZWFtLm5leHQoKSkgIT0gc3RhdGUucGVuZGluZykge1xuICAgICAgaWYgKGN1cnJlbnQgPT09ICckJyAmJiBwcmV2ICE9ICdcXFxcJyAmJiBzdGF0ZS5wZW5kaW5nID09ICdcIicpIHtcbiAgICAgICAgZm91bmRfdmFyID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBwcmV2ID0gY3VycmVudDtcbiAgICB9XG4gICAgaWYgKGZvdW5kX3Zhcikge1xuICAgICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnQgPT0gc3RhdGUucGVuZGluZykge1xuICAgICAgc3RhdGUuY29udGludWVTdHJpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29udGludWVTdHJpbmcgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgfVxuXG4gIC8vIE1haW4gZnVuY3Rpb25cbiAgZnVuY3Rpb24gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSkge1xuICAgIC8vIE1hdGNoZXMgb25lIHdob2xlIHdvcmRcbiAgICB2YXIgd29yZCA9IHN0cmVhbS5tYXRjaCgvW1xcd10rLywgZmFsc2UpO1xuICAgIC8vIE1hdGNoZXMgYXR0cmlidXRlcyAoaS5lLiBlbnN1cmUgPT4gcHJlc2VudCA7ICdlbnN1cmUnIHdvdWxkIGJlIG1hdGNoZWQpXG4gICAgdmFyIGF0dHJpYnV0ZSA9IHN0cmVhbS5tYXRjaCgvKFxccyspP1xcdytcXHMrPT4uKi8sIGZhbHNlKTtcbiAgICAvLyBNYXRjaGVzIG5vbi1idWlsdGluIHJlc291cmNlIGRlY2xhcmF0aW9uc1xuICAgIC8vIChpLmUuIFwiYXBhY2hlOjp2aG9zdCB7XCIgb3IgXCJteWN1c3RvbWNsYXNzcyB7XCIgd291bGQgYmUgbWF0Y2hlZClcbiAgICB2YXIgcmVzb3VyY2UgPSBzdHJlYW0ubWF0Y2goLyhcXHMrKT9bXFx3Ol9dKyhcXHMrKT97LywgZmFsc2UpO1xuICAgIC8vIE1hdGNoZXMgdmlydHVhbCBhbmQgZXhwb3J0ZWQgcmVzb3VyY2VzIChpLmUuIEBAdXNlciB7IDsgYW5kIHRoZSBsaWtlKVxuICAgIHZhciBzcGVjaWFsX3Jlc291cmNlID0gc3RyZWFtLm1hdGNoKC8oXFxzKyk/W0BdezEsMn1bXFx3Ol9dKyhcXHMrKT97LywgZmFsc2UpO1xuXG4gICAgLy8gRmluYWxseSBhZHZhbmNlIHRoZSBzdHJlYW1cbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgLy8gSGF2ZSB3ZSBmb3VuZCBhIHZhcmlhYmxlP1xuICAgIGlmIChjaCA9PT0gJyQnKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHZhcmlhYmxlX3JlZ2V4KSkge1xuICAgICAgICAvLyBJZiBzbywgYW5kIGl0cyBpbiBhIHN0cmluZywgYXNzaWduIGl0IGEgZGlmZmVyZW50IGNvbG9yXG4gICAgICAgIHJldHVybiBzdGF0ZS5jb250aW51ZVN0cmluZyA/ICd2YXJpYWJsZS0yJyA6ICd2YXJpYWJsZSc7XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIGFuIGludmFsaWQgdmFyaWFibGVcbiAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgfVxuICAgIC8vIFNob3VsZCB3ZSBzdGlsbCBiZSBsb29raW5nIGZvciB0aGUgZW5kIG9mIGEgc3RyaW5nP1xuICAgIGlmIChzdGF0ZS5jb250aW51ZVN0cmluZykge1xuICAgICAgLy8gSWYgc28sIGdvIHRocm91Z2ggdGhlIGxvb3AgYWdhaW5cbiAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICByZXR1cm4gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIC8vIEFyZSB3ZSBpbiBhIGRlZmluaXRpb24gKGNsYXNzLCBub2RlLCBkZWZpbmUpP1xuICAgIGlmIChzdGF0ZS5pbkRlZmluaXRpb24pIHtcbiAgICAgIC8vIElmIHNvLCByZXR1cm4gZGVmIChpLmUuIGZvciAnY2xhc3MgbXljbGFzcyB7JyA7ICdteWNsYXNzJyB3b3VsZCBiZSBtYXRjaGVkKVxuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvKFxccyspP1tcXHc6X10rKFxccyspPy8pKSB7XG4gICAgICAgIHJldHVybiAnZGVmJztcbiAgICAgIH1cbiAgICAgIC8vIE1hdGNoIHRoZSByZXN0IGl0IHRoZSBuZXh0IHRpbWUgYXJvdW5kXG4gICAgICBzdHJlYW0ubWF0Y2goL1xccyt7Lyk7XG4gICAgICBzdGF0ZS5pbkRlZmluaXRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gQXJlIHdlIGluIGFuICdpbmNsdWRlJyBzdGF0ZW1lbnQ/XG4gICAgaWYgKHN0YXRlLmluSW5jbHVkZSkge1xuICAgICAgLy8gTWF0Y2ggYW5kIHJldHVybiB0aGUgaW5jbHVkZWQgY2xhc3NcbiAgICAgIHN0cmVhbS5tYXRjaCgvKFxccyspP1xcUysoXFxzKyk/Lyk7XG4gICAgICBzdGF0ZS5pbkluY2x1ZGUgPSBmYWxzZTtcbiAgICAgIHJldHVybiAnZGVmJztcbiAgICB9XG4gICAgLy8gRG8gd2UganVzdCBoYXZlIGEgZnVuY3Rpb24gb24gb3VyIGhhbmRzP1xuICAgIC8vIEluICdlbnN1cmVfcmVzb3VyY2UoXCJteWNsYXNzXCIpJywgJ2Vuc3VyZV9yZXNvdXJjZScgaXMgbWF0Y2hlZFxuICAgIGlmIChzdHJlYW0ubWF0Y2goLyhcXHMrKT9cXHcrXFwoLykpIHtcbiAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICByZXR1cm4gJ2RlZic7XG4gICAgfVxuICAgIC8vIEhhdmUgd2UgbWF0Y2hlZCB0aGUgcHJpb3IgYXR0cmlidXRlIHJlZ2V4P1xuICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgIHN0cmVhbS5tYXRjaCgvKFxccyspP1xcdysvKTtcbiAgICAgIHJldHVybiAndGFnJztcbiAgICB9XG4gICAgLy8gRG8gd2UgaGF2ZSBQdXBwZXQgc3BlY2lmaWMgd29yZHM/XG4gICAgaWYgKHdvcmQgJiYgd29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHtcbiAgICAgIC8vIE5lZ2F0ZXMgdGhlIGluaXRpYWwgbmV4dCgpXG4gICAgICBzdHJlYW0uYmFja1VwKDEpO1xuICAgICAgLy8gcnMgbW92ZSB0aGUgc3RyZWFtXG4gICAgICBzdHJlYW0ubWF0Y2goL1tcXHddKy8pO1xuICAgICAgLy8gV2Ugd2FudCB0byBwcm9jZXNzIHRoZXNlIHdvcmRzIGRpZmZlcmVudGx5XG4gICAgICAvLyBkbyB0byB0aGUgaW1wb3J0YW5jZSB0aGV5IGhhdmUgaW4gUHVwcGV0XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXHMrXFxTK1xccyt7LywgZmFsc2UpKSB7XG4gICAgICAgIHN0YXRlLmluRGVmaW5pdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAod29yZCA9PSAnaW5jbHVkZScpIHtcbiAgICAgICAgc3RhdGUuaW5JbmNsdWRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8vIFJldHVybnMgdGhlaXIgdmFsdWUgYXMgc3RhdGUgaW4gdGhlIHByaW9yIGRlZmluZSBtZXRob2RzXG4gICAgICByZXR1cm4gd29yZHNbd29yZF07XG4gICAgfVxuICAgIC8vIElzIHRoZXJlIGEgbWF0Y2ggb24gYSByZWZlcmVuY2U/XG4gICAgaWYgKC8oXnxcXHMrKVtBLVpdW1xcdzpfXSsvLnRlc3Qod29yZCkpIHtcbiAgICAgIC8vIE5lZ2F0ZSB0aGUgbmV4dCgpXG4gICAgICBzdHJlYW0uYmFja1VwKDEpO1xuICAgICAgLy8gTWF0Y2ggdGhlIGZ1bGwgcmVmZXJlbmNlXG4gICAgICBzdHJlYW0ubWF0Y2goLyhefFxccyspW0EtWl1bXFx3Ol9dKy8pO1xuICAgICAgcmV0dXJuICdkZWYnO1xuICAgIH1cbiAgICAvLyBIYXZlIHdlIG1hdGNoZWQgdGhlIHByaW9yIHJlc291cmNlIHJlZ2V4P1xuICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgc3RyZWFtLm1hdGNoKC8oXFxzKyk/W1xcdzpfXSsvKTtcbiAgICAgIHJldHVybiAnZGVmJztcbiAgICB9XG4gICAgLy8gSGF2ZSB3ZSBtYXRjaGVkIHRoZSBwcmlvciBzcGVjaWFsX3Jlc291cmNlIHJlZ2V4P1xuICAgIGlmIChzcGVjaWFsX3Jlc291cmNlKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goLyhcXHMrKT9bQF17MSwyfS8pO1xuICAgICAgcmV0dXJuICdzcGVjaWFsJztcbiAgICB9XG4gICAgLy8gTWF0Y2ggYWxsIHRoZSBjb21tZW50cy4gQWxsIG9mIHRoZW0uXG4gICAgaWYgKGNoID09IFwiI1wiKSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgfVxuICAgIC8vIEhhdmUgd2UgZm91bmQgYSBzdHJpbmc/XG4gICAgaWYgKGNoID09IFwiJ1wiIHx8IGNoID09ICdcIicpIHtcbiAgICAgIC8vIFN0b3JlIHRoZSB0eXBlIChzaW5nbGUgb3IgZG91YmxlKVxuICAgICAgc3RhdGUucGVuZGluZyA9IGNoO1xuICAgICAgLy8gUGVyZm9ybSB0aGUgbG9vcGluZyBmdW5jdGlvbiB0byBmaW5kIHRoZSBlbmRcbiAgICAgIHJldHVybiB0b2tlblN0cmluZyhzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgLy8gTWF0Y2ggYWxsIHRoZSBicmFja2V0c1xuICAgIGlmIChjaCA9PSAneycgfHwgY2ggPT0gJ30nKSB7XG4gICAgICByZXR1cm4gJ2JyYWNrZXQnO1xuICAgIH1cbiAgICAvLyBNYXRjaCBjaGFyYWN0ZXJzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGFzc3VtZVxuICAgIC8vIGFyZSB0cnlpbmcgdG8gYmUgcmVnZXhcbiAgICBpZiAoY2ggPT0gJy8nKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goLy4qP1xcLy8pO1xuICAgICAgcmV0dXJuICd2YXJpYWJsZS0zJztcbiAgICB9XG4gICAgLy8gTWF0Y2ggYWxsIHRoZSBudW1iZXJzXG4gICAgaWYgKGNoLm1hdGNoKC9bMC05XS8pKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1swLTldKy8pO1xuICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgIH1cbiAgICAvLyBNYXRjaCB0aGUgJz0nIGFuZCAnPT4nIG9wZXJhdG9yc1xuICAgIGlmIChjaCA9PSAnPScpIHtcbiAgICAgIGlmIChzdHJlYW0ucGVlaygpID09ICc+Jykge1xuICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH1cbiAgICAvLyBLZWVwIGFkdmFuY2luZyB0aHJvdWdoIGFsbCB0aGUgcmVzdFxuICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcdy1dLyk7XG4gICAgLy8gUmV0dXJuIGEgYmxhbmsgbGluZSBmb3IgZXZlcnl0aGluZyBlbHNlXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gU3RhcnQgaXQgYWxsXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0ge307XG4gICAgICBzdGF0ZS5pbkRlZmluaXRpb24gPSBmYWxzZTtcbiAgICAgIHN0YXRlLmluSW5jbHVkZSA9IGZhbHNlO1xuICAgICAgc3RhdGUuY29udGludWVTdHJpbmcgPSBmYWxzZTtcbiAgICAgIHN0YXRlLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9LFxuICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgLy8gU3RyaXAgdGhlIHNwYWNlcywgYnV0IHJlZ2V4IHdpbGwgYWNjb3VudCBmb3IgdGhlbSBlaXRoZXJ3YXlcbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICAvLyBHbyB0aHJvdWdoIHRoZSBtYWluIHByb2Nlc3NcbiAgICAgIHJldHVybiB0b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXB1cHBldFwiLCBcInB1cHBldFwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBmdW5jdGlvbiB3b3JkUmVnZXhwKHdvcmRzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKChcIiArIHdvcmRzLmpvaW4oXCIpfChcIikgKyBcIikpXFxcXGJcIik7XG4gIH1cblxuICB2YXIgd29yZE9wZXJhdG9ycyA9IHdvcmRSZWdleHAoW1wiYW5kXCIsIFwib3JcIiwgXCJub3RcIiwgXCJpc1wiXSk7XG4gIHZhciBjb21tb25LZXl3b3JkcyA9IFtcImFzXCIsIFwiYXNzZXJ0XCIsIFwiYnJlYWtcIiwgXCJjbGFzc1wiLCBcImNvbnRpbnVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRlZlwiLCBcImRlbFwiLCBcImVsaWZcIiwgXCJlbHNlXCIsIFwiZXhjZXB0XCIsIFwiZmluYWxseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3JcIiwgXCJmcm9tXCIsIFwiZ2xvYmFsXCIsIFwiaWZcIiwgXCJpbXBvcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGFtYmRhXCIsIFwicGFzc1wiLCBcInJhaXNlXCIsIFwicmV0dXJuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRyeVwiLCBcIndoaWxlXCIsIFwid2l0aFwiLCBcInlpZWxkXCIsIFwiaW5cIl07XG4gIHZhciBjb21tb25CdWlsdGlucyA9IFtcImFic1wiLCBcImFsbFwiLCBcImFueVwiLCBcImJpblwiLCBcImJvb2xcIiwgXCJieXRlYXJyYXlcIiwgXCJjYWxsYWJsZVwiLCBcImNoclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc21ldGhvZFwiLCBcImNvbXBpbGVcIiwgXCJjb21wbGV4XCIsIFwiZGVsYXR0clwiLCBcImRpY3RcIiwgXCJkaXJcIiwgXCJkaXZtb2RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW51bWVyYXRlXCIsIFwiZXZhbFwiLCBcImZpbHRlclwiLCBcImZsb2F0XCIsIFwiZm9ybWF0XCIsIFwiZnJvemVuc2V0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImdldGF0dHJcIiwgXCJnbG9iYWxzXCIsIFwiaGFzYXR0clwiLCBcImhhc2hcIiwgXCJoZWxwXCIsIFwiaGV4XCIsIFwiaWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5wdXRcIiwgXCJpbnRcIiwgXCJpc2luc3RhbmNlXCIsIFwiaXNzdWJjbGFzc1wiLCBcIml0ZXJcIiwgXCJsZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzdFwiLCBcImxvY2Fsc1wiLCBcIm1hcFwiLCBcIm1heFwiLCBcIm1lbW9yeXZpZXdcIiwgXCJtaW5cIiwgXCJuZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm9iamVjdFwiLCBcIm9jdFwiLCBcIm9wZW5cIiwgXCJvcmRcIiwgXCJwb3dcIiwgXCJwcm9wZXJ0eVwiLCBcInJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlcHJcIiwgXCJyZXZlcnNlZFwiLCBcInJvdW5kXCIsIFwic2V0XCIsIFwic2V0YXR0clwiLCBcInNsaWNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNvcnRlZFwiLCBcInN0YXRpY21ldGhvZFwiLCBcInN0clwiLCBcInN1bVwiLCBcInN1cGVyXCIsIFwidHVwbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiLCBcInZhcnNcIiwgXCJ6aXBcIiwgXCJfX2ltcG9ydF9fXCIsIFwiTm90SW1wbGVtZW50ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRWxsaXBzaXNcIiwgXCJfX2RlYnVnX19cIl07XG4gIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJoaW50V29yZHNcIiwgXCJweXRob25cIiwgY29tbW9uS2V5d29yZHMuY29uY2F0KGNvbW1vbkJ1aWx0aW5zKSk7XG5cbiAgZnVuY3Rpb24gdG9wKHN0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNjb3Blc1tzdGF0ZS5zY29wZXMubGVuZ3RoIC0gMV07XG4gIH1cblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJweXRob25cIiwgZnVuY3Rpb24oY29uZiwgcGFyc2VyQ29uZikge1xuICAgIHZhciBFUlJPUkNMQVNTID0gXCJlcnJvclwiO1xuXG4gICAgdmFyIGRlbGltaXRlcnMgPSBwYXJzZXJDb25mLmRlbGltaXRlcnMgfHwgcGFyc2VyQ29uZi5zaW5nbGVEZWxpbWl0ZXJzIHx8IC9eW1xcKFxcKVxcW1xcXVxce1xcfUAsOmA9O1xcLlxcXFxdLztcbiAgICAvLyAgICAgICAgICAgICAgIChCYWNrd2FyZHMtY29tcGF0aWJpbGl0eSB3aXRoIG9sZCwgY3VtYmVyc29tZSBjb25maWcgc3lzdGVtKVxuICAgIHZhciBvcGVyYXRvcnMgPSBbcGFyc2VyQ29uZi5zaW5nbGVPcGVyYXRvcnMsIHBhcnNlckNvbmYuZG91YmxlT3BlcmF0b3JzLCBwYXJzZXJDb25mLmRvdWJsZURlbGltaXRlcnMsIHBhcnNlckNvbmYudHJpcGxlRGVsaW1pdGVycyxcbiAgICAgICAgICAgICAgICAgICAgIHBhcnNlckNvbmYub3BlcmF0b3JzIHx8IC9eKFstKyovJVxcLyZ8Xl09P3xbPD49XSt8XFwvXFwvPT98XFwqXFwqPT98IT18W34hQF18XFwuXFwuXFwuKS9dXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcGVyYXRvcnMubGVuZ3RoOyBpKyspIGlmICghb3BlcmF0b3JzW2ldKSBvcGVyYXRvcnMuc3BsaWNlKGktLSwgMSlcblxuICAgIHZhciBoYW5naW5nSW5kZW50ID0gcGFyc2VyQ29uZi5oYW5naW5nSW5kZW50IHx8IGNvbmYuaW5kZW50VW5pdDtcblxuICAgIHZhciBteUtleXdvcmRzID0gY29tbW9uS2V5d29yZHMsIG15QnVpbHRpbnMgPSBjb21tb25CdWlsdGlucztcbiAgICBpZiAocGFyc2VyQ29uZi5leHRyYV9rZXl3b3JkcyAhPSB1bmRlZmluZWQpXG4gICAgICBteUtleXdvcmRzID0gbXlLZXl3b3Jkcy5jb25jYXQocGFyc2VyQ29uZi5leHRyYV9rZXl3b3Jkcyk7XG5cbiAgICBpZiAocGFyc2VyQ29uZi5leHRyYV9idWlsdGlucyAhPSB1bmRlZmluZWQpXG4gICAgICBteUJ1aWx0aW5zID0gbXlCdWlsdGlucy5jb25jYXQocGFyc2VyQ29uZi5leHRyYV9idWlsdGlucyk7XG5cbiAgICB2YXIgcHkzID0gIShwYXJzZXJDb25mLnZlcnNpb24gJiYgTnVtYmVyKHBhcnNlckNvbmYudmVyc2lvbikgPCAzKVxuICAgIGlmIChweTMpIHtcbiAgICAgIC8vIHNpbmNlIGh0dHA6Ly9sZWdhY3kucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDQ2NS8gQCBpcyBhbHNvIGFuIG9wZXJhdG9yXG4gICAgICB2YXIgaWRlbnRpZmllcnMgPSBwYXJzZXJDb25mLmlkZW50aWZpZXJzfHwgL15bX0EtWmEtelxcdTAwQTEtXFx1RkZGRl1bX0EtWmEtejAtOVxcdTAwQTEtXFx1RkZGRl0qLztcbiAgICAgIG15S2V5d29yZHMgPSBteUtleXdvcmRzLmNvbmNhdChbXCJub25sb2NhbFwiLCBcIkZhbHNlXCIsIFwiVHJ1ZVwiLCBcIk5vbmVcIiwgXCJhc3luY1wiLCBcImF3YWl0XCJdKTtcbiAgICAgIG15QnVpbHRpbnMgPSBteUJ1aWx0aW5zLmNvbmNhdChbXCJhc2NpaVwiLCBcImJ5dGVzXCIsIFwiZXhlY1wiLCBcInByaW50XCJdKTtcbiAgICAgIHZhciBzdHJpbmdQcmVmaXhlcyA9IG5ldyBSZWdFeHAoXCJeKChbcmJ1Zl18KGJyKXwoZnIpKT8oJ3szfXxcXFwiezN9fFsnXFxcIl0pKVwiLCBcImlcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpZGVudGlmaWVycyA9IHBhcnNlckNvbmYuaWRlbnRpZmllcnN8fCAvXltfQS1aYS16XVtfQS1aYS16MC05XSovO1xuICAgICAgbXlLZXl3b3JkcyA9IG15S2V5d29yZHMuY29uY2F0KFtcImV4ZWNcIiwgXCJwcmludFwiXSk7XG4gICAgICBteUJ1aWx0aW5zID0gbXlCdWlsdGlucy5jb25jYXQoW1wiYXBwbHlcIiwgXCJiYXNlc3RyaW5nXCIsIFwiYnVmZmVyXCIsIFwiY21wXCIsIFwiY29lcmNlXCIsIFwiZXhlY2ZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaWxlXCIsIFwiaW50ZXJuXCIsIFwibG9uZ1wiLCBcInJhd19pbnB1dFwiLCBcInJlZHVjZVwiLCBcInJlbG9hZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInVuaWNoclwiLCBcInVuaWNvZGVcIiwgXCJ4cmFuZ2VcIiwgXCJGYWxzZVwiLCBcIlRydWVcIiwgXCJOb25lXCJdKTtcbiAgICAgIHZhciBzdHJpbmdQcmVmaXhlcyA9IG5ldyBSZWdFeHAoXCJeKChbcnViZl18KHVyKXwoYnIpKT8oJ3szfXxcXFwiezN9fFsnXFxcIl0pKVwiLCBcImlcIik7XG4gICAgfVxuICAgIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAobXlLZXl3b3Jkcyk7XG4gICAgdmFyIGJ1aWx0aW5zID0gd29yZFJlZ2V4cChteUJ1aWx0aW5zKTtcblxuICAgIC8vIHRva2VuaXplcnNcbiAgICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIHNvbCA9IHN0cmVhbS5zb2woKSAmJiBzdGF0ZS5sYXN0VG9rZW4gIT0gXCJcXFxcXCJcbiAgICAgIGlmIChzb2wpIHN0YXRlLmluZGVudCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpXG4gICAgICAvLyBIYW5kbGUgc2NvcGUgY2hhbmdlc1xuICAgICAgaWYgKHNvbCAmJiB0b3Aoc3RhdGUpLnR5cGUgPT0gXCJweVwiKSB7XG4gICAgICAgIHZhciBzY29wZU9mZnNldCA9IHRvcChzdGF0ZSkub2Zmc2V0O1xuICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgICAgICB2YXIgbGluZU9mZnNldCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgICAgIGlmIChsaW5lT2Zmc2V0ID4gc2NvcGVPZmZzZXQpXG4gICAgICAgICAgICBwdXNoUHlTY29wZShzdGF0ZSk7XG4gICAgICAgICAgZWxzZSBpZiAobGluZU9mZnNldCA8IHNjb3BlT2Zmc2V0ICYmIGRlZGVudChzdHJlYW0sIHN0YXRlKSAmJiBzdHJlYW0ucGVlaygpICE9IFwiI1wiKVxuICAgICAgICAgICAgc3RhdGUuZXJyb3JUb2tlbiA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHN0eWxlID0gdG9rZW5CYXNlSW5uZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgICAgaWYgKHNjb3BlT2Zmc2V0ID4gMCAmJiBkZWRlbnQoc3RyZWFtLCBzdGF0ZSkpXG4gICAgICAgICAgICBzdHlsZSArPSBcIiBcIiArIEVSUk9SQ0xBU1M7XG4gICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdG9rZW5CYXNlSW5uZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5CYXNlSW5uZXIoc3RyZWFtLCBzdGF0ZSwgaW5Gb3JtYXQpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIEhhbmRsZSBDb21tZW50c1xuICAgICAgaWYgKCFpbkZvcm1hdCAmJiBzdHJlYW0ubWF0Y2goL14jLiovKSkgcmV0dXJuIFwiY29tbWVudFwiO1xuXG4gICAgICAvLyBIYW5kbGUgTnVtYmVyIExpdGVyYWxzXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eWzAtOVxcLl0vLCBmYWxzZSkpIHtcbiAgICAgICAgdmFyIGZsb2F0TGl0ZXJhbCA9IGZhbHNlO1xuICAgICAgICAvLyBGbG9hdHNcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXltcXGRfXSpcXC5cXGQrKGVbXFwrXFwtXT9cXGQrKT8vaSkpIHsgZmxvYXRMaXRlcmFsID0gdHJ1ZTsgfVxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW1xcZF9dK1xcLlxcZCovKSkgeyBmbG9hdExpdGVyYWwgPSB0cnVlOyB9XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXC5cXGQrLykpIHsgZmxvYXRMaXRlcmFsID0gdHJ1ZTsgfVxuICAgICAgICBpZiAoZmxvYXRMaXRlcmFsKSB7XG4gICAgICAgICAgLy8gRmxvYXQgbGl0ZXJhbHMgbWF5IGJlIFwiaW1hZ2luYXJ5XCJcbiAgICAgICAgICBzdHJlYW0uZWF0KC9KL2kpO1xuICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIEludGVnZXJzXG4gICAgICAgIHZhciBpbnRMaXRlcmFsID0gZmFsc2U7XG4gICAgICAgIC8vIEhleFxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eMHhbMC05YS1mX10rL2kpKSBpbnRMaXRlcmFsID0gdHJ1ZTtcbiAgICAgICAgLy8gQmluYXJ5XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14wYlswMV9dKy9pKSkgaW50TGl0ZXJhbCA9IHRydWU7XG4gICAgICAgIC8vIE9jdGFsXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14wb1swLTdfXSsvaSkpIGludExpdGVyYWwgPSB0cnVlO1xuICAgICAgICAvLyBEZWNpbWFsXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bMS05XVtcXGRfXSooZVtcXCtcXC1dP1tcXGRfXSspPy8pKSB7XG4gICAgICAgICAgLy8gRGVjaW1hbCBsaXRlcmFscyBtYXkgYmUgXCJpbWFnaW5hcnlcIlxuICAgICAgICAgIHN0cmVhbS5lYXQoL0ovaSk7XG4gICAgICAgICAgLy8gVE9ETyAtIENhbiB5b3UgaGF2ZSBpbWFnaW5hcnkgbG9uZ3M/XG4gICAgICAgICAgaW50TGl0ZXJhbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gWmVybyBieSBpdHNlbGYgd2l0aCBubyBvdGhlciBwaWVjZSBvZiBudW1iZXIuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14wKD8hW1xcZHhdKS9pKSkgaW50TGl0ZXJhbCA9IHRydWU7XG4gICAgICAgIGlmIChpbnRMaXRlcmFsKSB7XG4gICAgICAgICAgLy8gSW50ZWdlciBsaXRlcmFscyBtYXkgYmUgXCJsb25nXCJcbiAgICAgICAgICBzdHJlYW0uZWF0KC9ML2kpO1xuICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBTdHJpbmdzXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHN0cmluZ1ByZWZpeGVzKSkge1xuICAgICAgICB2YXIgaXNGbXRTdHJpbmcgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZicpICE9PSAtMTtcbiAgICAgICAgaWYgKCFpc0ZtdFN0cmluZykge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmdGYWN0b3J5KHN0cmVhbS5jdXJyZW50KCksIHN0YXRlLnRva2VuaXplKTtcbiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBmb3JtYXRTdHJpbmdGYWN0b3J5KHN0cmVhbS5jdXJyZW50KCksIHN0YXRlLnRva2VuaXplKTtcbiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcGVyYXRvcnMubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2gob3BlcmF0b3JzW2ldKSkgcmV0dXJuIFwib3BlcmF0b3JcIlxuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKGRlbGltaXRlcnMpKSByZXR1cm4gXCJwdW5jdHVhdGlvblwiO1xuXG4gICAgICBpZiAoc3RhdGUubGFzdFRva2VuID09IFwiLlwiICYmIHN0cmVhbS5tYXRjaChpZGVudGlmaWVycykpXG4gICAgICAgIHJldHVybiBcInByb3BlcnR5XCI7XG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goa2V5d29yZHMpIHx8IHN0cmVhbS5tYXRjaCh3b3JkT3BlcmF0b3JzKSlcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKGJ1aWx0aW5zKSlcbiAgICAgICAgcmV0dXJuIFwiYnVpbHRpblwiO1xuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKHNlbGZ8Y2xzKVxcYi8pKVxuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goaWRlbnRpZmllcnMpKSB7XG4gICAgICAgIGlmIChzdGF0ZS5sYXN0VG9rZW4gPT0gXCJkZWZcIiB8fCBzdGF0ZS5sYXN0VG9rZW4gPT0gXCJjbGFzc1wiKVxuICAgICAgICAgIHJldHVybiBcImRlZlwiO1xuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgbm9uLWRldGVjdGVkIGl0ZW1zXG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgcmV0dXJuIGluRm9ybWF0ID8gbnVsbCA6RVJST1JDTEFTUztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXRTdHJpbmdGYWN0b3J5KGRlbGltaXRlciwgdG9rZW5PdXRlcikge1xuICAgICAgd2hpbGUgKFwicnViZlwiLmluZGV4T2YoZGVsaW1pdGVyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKSA+PSAwKVxuICAgICAgICBkZWxpbWl0ZXIgPSBkZWxpbWl0ZXIuc3Vic3RyKDEpO1xuXG4gICAgICB2YXIgc2luZ2xlbGluZSA9IGRlbGltaXRlci5sZW5ndGggPT0gMTtcbiAgICAgIHZhciBPVVRDTEFTUyA9IFwic3RyaW5nXCI7XG5cbiAgICAgIGZ1bmN0aW9uIHRva2VuTmVzdGVkRXhwcihkZXB0aCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICAgIHZhciBpbm5lciA9IHRva2VuQmFzZUlubmVyKHN0cmVhbSwgc3RhdGUsIHRydWUpXG4gICAgICAgICAgaWYgKGlubmVyID09IFwicHVuY3R1YXRpb25cIikge1xuICAgICAgICAgICAgaWYgKHN0cmVhbS5jdXJyZW50KCkgPT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbk5lc3RlZEV4cHIoZGVwdGggKyAxKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0uY3VycmVudCgpID09IFwifVwiKSB7XG4gICAgICAgICAgICAgIGlmIChkZXB0aCA+IDEpIHN0YXRlLnRva2VuaXplID0gdG9rZW5OZXN0ZWRFeHByKGRlcHRoIC0gMSlcbiAgICAgICAgICAgICAgZWxzZSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpbm5lclxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJ1wiXFx7XFx9XFxcXF0vKTtcbiAgICAgICAgICBpZiAoc3RyZWFtLmVhdChcIlxcXFxcIikpIHtcbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoc2luZ2xlbGluZSAmJiBzdHJlYW0uZW9sKCkpXG4gICAgICAgICAgICAgIHJldHVybiBPVVRDTEFTUztcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChkZWxpbWl0ZXIpKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuT3V0ZXI7XG4gICAgICAgICAgICByZXR1cm4gT1VUQ0xBU1M7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goJ3t7JykpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSB7eyBpbiBmLXN0clxuICAgICAgICAgICAgcmV0dXJuIE9VVENMQVNTO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCd7JywgZmFsc2UpKSB7XG4gICAgICAgICAgICAvLyBzd2l0Y2ggdG8gbmVzdGVkIG1vZGVcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5OZXN0ZWRFeHByKDApXG4gICAgICAgICAgICBpZiAoc3RyZWFtLmN1cnJlbnQoKSkgcmV0dXJuIE9VVENMQVNTO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgnfX0nKSkge1xuICAgICAgICAgICAgcmV0dXJuIE9VVENMQVNTO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCd9JykpIHtcbiAgICAgICAgICAgIC8vIHNpbmdsZSB9IGluIGYtc3RyaW5nIGlzIGFuIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtLmVhdCgvWydcIl0vKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbmdsZWxpbmUpIHtcbiAgICAgICAgICBpZiAocGFyc2VyQ29uZi5zaW5nbGVMaW5lU3RyaW5nRXJyb3JzKVxuICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbk91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPVVRDTEFTUztcbiAgICAgIH1cbiAgICAgIHRva2VuU3RyaW5nLmlzU3RyaW5nID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0b2tlblN0cmluZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlblN0cmluZ0ZhY3RvcnkoZGVsaW1pdGVyLCB0b2tlbk91dGVyKSB7XG4gICAgICB3aGlsZSAoXCJydWJmXCIuaW5kZXhPZihkZWxpbWl0ZXIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpID49IDApXG4gICAgICAgIGRlbGltaXRlciA9IGRlbGltaXRlci5zdWJzdHIoMSk7XG5cbiAgICAgIHZhciBzaW5nbGVsaW5lID0gZGVsaW1pdGVyLmxlbmd0aCA9PSAxO1xuICAgICAgdmFyIE9VVENMQVNTID0gXCJzdHJpbmdcIjtcblxuICAgICAgZnVuY3Rpb24gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14nXCJcXFxcXS8pO1xuICAgICAgICAgIGlmIChzdHJlYW0uZWF0KFwiXFxcXFwiKSkge1xuICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIGlmIChzaW5nbGVsaW5lICYmIHN0cmVhbS5lb2woKSlcbiAgICAgICAgICAgICAgcmV0dXJuIE9VVENMQVNTO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKGRlbGltaXRlcikpIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5PdXRlcjtcbiAgICAgICAgICAgIHJldHVybiBPVVRDTEFTUztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtLmVhdCgvWydcIl0vKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbmdsZWxpbmUpIHtcbiAgICAgICAgICBpZiAocGFyc2VyQ29uZi5zaW5nbGVMaW5lU3RyaW5nRXJyb3JzKVxuICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbk91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPVVRDTEFTUztcbiAgICAgIH1cbiAgICAgIHRva2VuU3RyaW5nLmlzU3RyaW5nID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0b2tlblN0cmluZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoUHlTY29wZShzdGF0ZSkge1xuICAgICAgd2hpbGUgKHRvcChzdGF0ZSkudHlwZSAhPSBcInB5XCIpIHN0YXRlLnNjb3Blcy5wb3AoKVxuICAgICAgc3RhdGUuc2NvcGVzLnB1c2goe29mZnNldDogdG9wKHN0YXRlKS5vZmZzZXQgKyBjb25mLmluZGVudFVuaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJweVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiBudWxsfSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoQnJhY2tldFNjb3BlKHN0cmVhbSwgc3RhdGUsIHR5cGUpIHtcbiAgICAgIHZhciBhbGlnbiA9IHN0cmVhbS5tYXRjaCgvXihbXFxzXFxbXFx7XFwoXXwjLiopKiQvLCBmYWxzZSkgPyBudWxsIDogc3RyZWFtLmNvbHVtbigpICsgMVxuICAgICAgc3RhdGUuc2NvcGVzLnB1c2goe29mZnNldDogc3RhdGUuaW5kZW50ICsgaGFuZ2luZ0luZGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiBhbGlnbn0pXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVkZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBpbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgd2hpbGUgKHN0YXRlLnNjb3Blcy5sZW5ndGggPiAxICYmIHRvcChzdGF0ZSkub2Zmc2V0ID4gaW5kZW50ZWQpIHtcbiAgICAgICAgaWYgKHRvcChzdGF0ZSkudHlwZSAhPSBcInB5XCIpIHJldHVybiB0cnVlO1xuICAgICAgICBzdGF0ZS5zY29wZXMucG9wKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdG9wKHN0YXRlKS5vZmZzZXQgIT0gaW5kZW50ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5MZXhlcihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSBzdGF0ZS5iZWdpbm5pbmdPZkxpbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIHZhciBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTtcblxuICAgICAgLy8gSGFuZGxlIGRlY29yYXRvcnNcbiAgICAgIGlmIChzdGF0ZS5iZWdpbm5pbmdPZkxpbmUgJiYgY3VycmVudCA9PSBcIkBcIilcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5tYXRjaChpZGVudGlmaWVycywgZmFsc2UpID8gXCJtZXRhXCIgOiBweTMgPyBcIm9wZXJhdG9yXCIgOiBFUlJPUkNMQVNTO1xuXG4gICAgICBpZiAoL1xcUy8udGVzdChjdXJyZW50KSkgc3RhdGUuYmVnaW5uaW5nT2ZMaW5lID0gZmFsc2U7XG5cbiAgICAgIGlmICgoc3R5bGUgPT0gXCJ2YXJpYWJsZVwiIHx8IHN0eWxlID09IFwiYnVpbHRpblwiKVxuICAgICAgICAgICYmIHN0YXRlLmxhc3RUb2tlbiA9PSBcIm1ldGFcIilcbiAgICAgICAgc3R5bGUgPSBcIm1ldGFcIjtcblxuICAgICAgLy8gSGFuZGxlIHNjb3BlIGNoYW5nZXMuXG4gICAgICBpZiAoY3VycmVudCA9PSBcInBhc3NcIiB8fCBjdXJyZW50ID09IFwicmV0dXJuXCIpXG4gICAgICAgIHN0YXRlLmRlZGVudCArPSAxO1xuXG4gICAgICBpZiAoY3VycmVudCA9PSBcImxhbWJkYVwiKSBzdGF0ZS5sYW1iZGEgPSB0cnVlO1xuICAgICAgaWYgKGN1cnJlbnQgPT0gXCI6XCIgJiYgIXN0YXRlLmxhbWJkYSAmJiB0b3Aoc3RhdGUpLnR5cGUgPT0gXCJweVwiKVxuICAgICAgICBwdXNoUHlTY29wZShzdGF0ZSk7XG5cbiAgICAgIGlmIChjdXJyZW50Lmxlbmd0aCA9PSAxICYmICEvc3RyaW5nfGNvbW1lbnQvLnRlc3Qoc3R5bGUpKSB7XG4gICAgICAgIHZhciBkZWxpbWl0ZXJfaW5kZXggPSBcIlsoe1wiLmluZGV4T2YoY3VycmVudCk7XG4gICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT0gLTEpXG4gICAgICAgICAgcHVzaEJyYWNrZXRTY29wZShzdHJlYW0sIHN0YXRlLCBcIl0pfVwiLnNsaWNlKGRlbGltaXRlcl9pbmRleCwgZGVsaW1pdGVyX2luZGV4KzEpKTtcblxuICAgICAgICBkZWxpbWl0ZXJfaW5kZXggPSBcIl0pfVwiLmluZGV4T2YoY3VycmVudCk7XG4gICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT0gLTEpIHtcbiAgICAgICAgICBpZiAodG9wKHN0YXRlKS50eXBlID09IGN1cnJlbnQpIHN0YXRlLmluZGVudCA9IHN0YXRlLnNjb3Blcy5wb3AoKS5vZmZzZXQgLSBoYW5naW5nSW5kZW50XG4gICAgICAgICAgZWxzZSByZXR1cm4gRVJST1JDTEFTUztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmRlZGVudCA+IDAgJiYgc3RyZWFtLmVvbCgpICYmIHRvcChzdGF0ZSkudHlwZSA9PSBcInB5XCIpIHtcbiAgICAgICAgaWYgKHN0YXRlLnNjb3Blcy5sZW5ndGggPiAxKSBzdGF0ZS5zY29wZXMucG9wKCk7XG4gICAgICAgIHN0YXRlLmRlZGVudCAtPSAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuXG4gICAgdmFyIGV4dGVybmFsID0ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsXG4gICAgICAgICAgc2NvcGVzOiBbe29mZnNldDogYmFzZWNvbHVtbiB8fCAwLCB0eXBlOiBcInB5XCIsIGFsaWduOiBudWxsfV0sXG4gICAgICAgICAgaW5kZW50OiBiYXNlY29sdW1uIHx8IDAsXG4gICAgICAgICAgbGFzdFRva2VuOiBudWxsLFxuICAgICAgICAgIGxhbWJkYTogZmFsc2UsXG4gICAgICAgICAgZGVkZW50OiAwXG4gICAgICAgIH07XG4gICAgICB9LFxuXG4gICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgYWRkRXJyID0gc3RhdGUuZXJyb3JUb2tlbjtcbiAgICAgICAgaWYgKGFkZEVycikgc3RhdGUuZXJyb3JUb2tlbiA9IGZhbHNlO1xuICAgICAgICB2YXIgc3R5bGUgPSB0b2tlbkxleGVyKHN0cmVhbSwgc3RhdGUpO1xuXG4gICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZSAhPSBcImNvbW1lbnRcIilcbiAgICAgICAgICBzdGF0ZS5sYXN0VG9rZW4gPSAoc3R5bGUgPT0gXCJrZXl3b3JkXCIgfHwgc3R5bGUgPT0gXCJwdW5jdHVhdGlvblwiKSA/IHN0cmVhbS5jdXJyZW50KCkgOiBzdHlsZTtcbiAgICAgICAgaWYgKHN0eWxlID09IFwicHVuY3R1YXRpb25cIikgc3R5bGUgPSBudWxsO1xuXG4gICAgICAgIGlmIChzdHJlYW0uZW9sKCkgJiYgc3RhdGUubGFtYmRhKVxuICAgICAgICAgIHN0YXRlLmxhbWJkYSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gYWRkRXJyID8gc3R5bGUgKyBcIiBcIiArIEVSUk9SQ0xBU1MgOiBzdHlsZTtcbiAgICAgIH0sXG5cbiAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikge1xuICAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKVxuICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZS5pc1N0cmluZyA/IENvZGVNaXJyb3IuUGFzcyA6IDA7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gdG9wKHN0YXRlKSwgY2xvc2luZyA9IHNjb3BlLnR5cGUgPT0gdGV4dEFmdGVyLmNoYXJBdCgwKVxuICAgICAgICBpZiAoc2NvcGUuYWxpZ24gIT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gc2NvcGUuYWxpZ24gLSAoY2xvc2luZyA/IDEgOiAwKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIHNjb3BlLm9mZnNldCAtIChjbG9zaW5nID8gaGFuZ2luZ0luZGVudCA6IDApXG4gICAgICB9LFxuXG4gICAgICBlbGVjdHJpY0lucHV0OiAvXlxccypbXFx9XFxdXFwpXSQvLFxuICAgICAgY2xvc2VCcmFja2V0czoge3RyaXBsZXM6IFwiJ1xcXCJcIn0sXG4gICAgICBsaW5lQ29tbWVudDogXCIjXCIsXG4gICAgICBmb2xkOiBcImluZGVudFwiXG4gICAgfTtcbiAgICByZXR1cm4gZXh0ZXJuYWw7XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1weXRob25cIiwgXCJweXRob25cIik7XG5cbiAgdmFyIHdvcmRzID0gZnVuY3Rpb24oc3RyKSB7IHJldHVybiBzdHIuc3BsaXQoXCIgXCIpOyB9O1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1jeXRob25cIiwge1xuICAgIG5hbWU6IFwicHl0aG9uXCIsXG4gICAgZXh0cmFfa2V5d29yZHM6IHdvcmRzKFwiYnkgY2RlZiBjaW1wb3J0IGNwZGVmIGN0eXBlZGVmIGVudW0gZXhjZXB0IFwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcImV4dGVybiBnaWwgaW5jbHVkZSBub2dpbCBwcm9wZXJ0eSBwdWJsaWMgXCIrXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVhZG9ubHkgc3RydWN0IHVuaW9uIERFRiBJRiBFTElGIEVMU0VcIilcbiAgfSk7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJxXCIsZnVuY3Rpb24oY29uZmlnKXtcbiAgdmFyIGluZGVudFVuaXQ9Y29uZmlnLmluZGVudFVuaXQsXG4gICAgICBjdXJQdW5jLFxuICAgICAga2V5d29yZHM9YnVpbGRSRShbXCJhYnNcIixcImFjb3NcIixcImFqXCIsXCJhajBcIixcImFsbFwiLFwiYW5kXCIsXCJhbnlcIixcImFzY1wiLFwiYXNpblwiLFwiYXNvZlwiLFwiYXRhblwiLFwiYXR0clwiLFwiYXZnXCIsXCJhdmdzXCIsXCJiaW5cIixcImJ5XCIsXCJjZWlsaW5nXCIsXCJjb2xzXCIsXCJjb3JcIixcImNvc1wiLFwiY291bnRcIixcImNvdlwiLFwiY3Jvc3NcIixcImNzdlwiLFwiY3V0XCIsXCJkZWxldGVcIixcImRlbHRhc1wiLFwiZGVzY1wiLFwiZGV2XCIsXCJkaWZmZXJcIixcImRpc3RpbmN0XCIsXCJkaXZcIixcImRvXCIsXCJlYWNoXCIsXCJlalwiLFwiZW5saXN0XCIsXCJldmFsXCIsXCJleGNlcHRcIixcImV4ZWNcIixcImV4aXRcIixcImV4cFwiLFwiZmJ5XCIsXCJmaWxsc1wiLFwiZmlyc3RcIixcImZrZXlzXCIsXCJmbGlwXCIsXCJmbG9vclwiLFwiZnJvbVwiLFwiZ2V0XCIsXCJnZXRlbnZcIixcImdyb3VwXCIsXCJndGltZVwiLFwiaGNsb3NlXCIsXCJoY291bnRcIixcImhkZWxcIixcImhvcGVuXCIsXCJoc3ltXCIsXCJpYXNjXCIsXCJpZGVzY1wiLFwiaWZcIixcImlqXCIsXCJpblwiLFwiaW5zZXJ0XCIsXCJpbnRlclwiLFwiaW52XCIsXCJrZXlcIixcImtleXNcIixcImxhc3RcIixcImxpa2VcIixcImxpc3RcIixcImxqXCIsXCJsb2FkXCIsXCJsb2dcIixcImxvd2VyXCIsXCJsc3FcIixcImx0aW1lXCIsXCJsdHJpbVwiLFwibWF2Z1wiLFwibWF4XCIsXCJtYXhzXCIsXCJtY291bnRcIixcIm1kNVwiLFwibWRldlwiLFwibWVkXCIsXCJtZXRhXCIsXCJtaW5cIixcIm1pbnNcIixcIm1tYXhcIixcIm1taW5cIixcIm1tdVwiLFwibW9kXCIsXCJtc3VtXCIsXCJuZWdcIixcIm5leHRcIixcIm5vdFwiLFwibnVsbFwiLFwib3JcIixcIm92ZXJcIixcInBhcnNlXCIsXCJwZWFjaFwiLFwicGpcIixcInBsaXN0XCIsXCJwcmRcIixcInByZHNcIixcInByZXZcIixcInByaW9yXCIsXCJyYW5kXCIsXCJyYW5rXCIsXCJyYXRpb3NcIixcInJhemVcIixcInJlYWQwXCIsXCJyZWFkMVwiLFwicmVjaXByb2NhbFwiLFwicmV2ZXJzZVwiLFwicmxvYWRcIixcInJvdGF0ZVwiLFwicnNhdmVcIixcInJ0cmltXCIsXCJzYXZlXCIsXCJzY2FuXCIsXCJzZWxlY3RcIixcInNldFwiLFwic2V0ZW52XCIsXCJzaG93XCIsXCJzaWdudW1cIixcInNpblwiLFwic3FydFwiLFwic3NcIixcInNzclwiLFwic3RyaW5nXCIsXCJzdWJsaXN0XCIsXCJzdW1cIixcInN1bXNcIixcInN2XCIsXCJzeXN0ZW1cIixcInRhYmxlc1wiLFwidGFuXCIsXCJ0aWxcIixcInRyaW1cIixcInR4ZlwiLFwidHlwZVwiLFwidWpcIixcInVuZ3JvdXBcIixcInVuaW9uXCIsXCJ1cGRhdGVcIixcInVwcGVyXCIsXCJ1cHNlcnRcIixcInZhbHVlXCIsXCJ2YXJcIixcInZpZXdcIixcInZpZXdzXCIsXCJ2c1wiLFwid2F2Z1wiLFwid2hlcmVcIixcIndoZXJlXCIsXCJ3aGlsZVwiLFwid2l0aGluXCIsXCJ3alwiLFwid2oxXCIsXCJ3c3VtXCIsXCJ4YXNjXCIsXCJ4YmFyXCIsXCJ4Y29sXCIsXCJ4Y29sc1wiLFwieGRlc2NcIixcInhleHBcIixcInhncm91cFwiLFwieGtleVwiLFwieGxvZ1wiLFwieHByZXZcIixcInhyYW5rXCJdKSxcbiAgICAgIEU9L1t8LyZeISs6XFxcXFxcLSolJD1+IztAPjwsP19cXCdcXFwiXFxbXFwoXFxdXFwpXFxze31dLztcbiAgZnVuY3Rpb24gYnVpbGRSRSh3KXtyZXR1cm4gbmV3IFJlZ0V4cChcIl4oXCIrdy5qb2luKFwifFwiKStcIikkXCIpO31cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSxzdGF0ZSl7XG4gICAgdmFyIHNvbD1zdHJlYW0uc29sKCksYz1zdHJlYW0ubmV4dCgpO1xuICAgIGN1clB1bmM9bnVsbDtcbiAgICBpZihzb2wpXG4gICAgICBpZihjPT1cIi9cIilcbiAgICAgICAgcmV0dXJuKHN0YXRlLnRva2VuaXplPXRva2VuTGluZUNvbW1lbnQpKHN0cmVhbSxzdGF0ZSk7XG4gICAgICBlbHNlIGlmKGM9PVwiXFxcXFwiKXtcbiAgICAgICAgaWYoc3RyZWFtLmVvbCgpfHwvXFxzLy50ZXN0KHN0cmVhbS5wZWVrKCkpKVxuICAgICAgICAgIHJldHVybiBzdHJlYW0uc2tpcFRvRW5kKCksL15cXFxcXFxzKiQvLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSk/KHN0YXRlLnRva2VuaXplPXRva2VuQ29tbWVudFRvRU9GKShzdHJlYW0pOnN0YXRlLnRva2VuaXplPXRva2VuQmFzZSxcImNvbW1lbnRcIjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZT10b2tlbkJhc2UsXCJidWlsdGluXCI7XG4gICAgICB9XG4gICAgaWYoL1xccy8udGVzdChjKSlcbiAgICAgIHJldHVybiBzdHJlYW0ucGVlaygpPT1cIi9cIj8oc3RyZWFtLnNraXBUb0VuZCgpLFwiY29tbWVudFwiKTpcIndoaXRlc3BhY2VcIjtcbiAgICBpZihjPT0nXCInKVxuICAgICAgcmV0dXJuKHN0YXRlLnRva2VuaXplPXRva2VuU3RyaW5nKShzdHJlYW0sc3RhdGUpO1xuICAgIGlmKGM9PSdgJylcbiAgICAgIHJldHVybiBzdHJlYW0uZWF0V2hpbGUoL1tBLVphLXpcXGRfOlxcLy5dLyksXCJzeW1ib2xcIjtcbiAgICBpZigoXCIuXCI9PWMmJi9cXGQvLnRlc3Qoc3RyZWFtLnBlZWsoKSkpfHwvXFxkLy50ZXN0KGMpKXtcbiAgICAgIHZhciB0PW51bGw7XG4gICAgICBzdHJlYW0uYmFja1VwKDEpO1xuICAgICAgaWYoc3RyZWFtLm1hdGNoKC9eXFxkezR9XFwuXFxkezJ9KG18XFwuXFxkezJ9KFtEVF0oXFxkezJ9KDpcXGR7Mn0oOlxcZHsyfShcXC5cXGR7MSw5fSk/KT8pPyk/KT8pLylcbiAgICAgIHx8IHN0cmVhbS5tYXRjaCgvXlxcZCtEKFxcZHsyfSg6XFxkezJ9KDpcXGR7Mn0oXFwuXFxkezEsOX0pPyk/KT8pLylcbiAgICAgIHx8IHN0cmVhbS5tYXRjaCgvXlxcZHsyfTpcXGR7Mn0oOlxcZHsyfShcXC5cXGR7MSw5fSk/KT8vKVxuICAgICAgfHwgc3RyZWFtLm1hdGNoKC9eXFxkK1twdHV2XXsxfS8pKVxuICAgICAgICB0PVwidGVtcG9yYWxcIjtcbiAgICAgIGVsc2UgaWYoc3RyZWFtLm1hdGNoKC9eMFtOd1ddezF9LylcbiAgICAgIHx8IHN0cmVhbS5tYXRjaCgvXjB4W1xcZGEtZkEtRl0qLylcbiAgICAgIHx8IHN0cmVhbS5tYXRjaCgvXlswMV0rW2JdezF9LylcbiAgICAgIHx8IHN0cmVhbS5tYXRjaCgvXlxcZCtbY2hpam5dezF9LylcbiAgICAgIHx8IHN0cmVhbS5tYXRjaCgvLT9cXGQqKFxcLlxcZCopPyhlWytcXC1dP1xcZCspPyhlfGYpPy8pKVxuICAgICAgICB0PVwibnVtYmVyXCI7XG4gICAgICByZXR1cm4odCYmKCEoYz1zdHJlYW0ucGVlaygpKXx8RS50ZXN0KGMpKSk/dDooc3RyZWFtLm5leHQoKSxcImVycm9yXCIpO1xuICAgIH1cbiAgICBpZigvW0EtWmEtel18XFwuLy50ZXN0KGMpKVxuICAgICAgcmV0dXJuIHN0cmVhbS5lYXRXaGlsZSgvW0EtWmEtei5fXFxkXS8pLGtleXdvcmRzLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSk/XCJrZXl3b3JkXCI6XCJ2YXJpYWJsZVwiO1xuICAgIGlmKC9bfC8mXiErOlxcXFxcXC0qJSQ9fiM7QD48XFwuLD9fXFwnXS8udGVzdChjKSlcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGlmKC9be31cXChcXFtcXF1cXCldLy50ZXN0KGMpKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuXCJlcnJvclwiO1xuICB9XG4gIGZ1bmN0aW9uIHRva2VuTGluZUNvbW1lbnQoc3RyZWFtLHN0YXRlKXtcbiAgICByZXR1cm4gc3RyZWFtLnNraXBUb0VuZCgpLC9cXC9cXHMqJC8udGVzdChzdHJlYW0uY3VycmVudCgpKT8oc3RhdGUudG9rZW5pemU9dG9rZW5CbG9ja0NvbW1lbnQpKHN0cmVhbSxzdGF0ZSk6KHN0YXRlLnRva2VuaXplPXRva2VuQmFzZSksXCJjb21tZW50XCI7XG4gIH1cbiAgZnVuY3Rpb24gdG9rZW5CbG9ja0NvbW1lbnQoc3RyZWFtLHN0YXRlKXtcbiAgICB2YXIgZj1zdHJlYW0uc29sKCkmJnN0cmVhbS5wZWVrKCk9PVwiXFxcXFwiO1xuICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICBpZihmJiYvXlxcXFxcXHMqJC8udGVzdChzdHJlYW0uY3VycmVudCgpKSlcbiAgICAgIHN0YXRlLnRva2VuaXplPXRva2VuQmFzZTtcbiAgICByZXR1cm5cImNvbW1lbnRcIjtcbiAgfVxuICBmdW5jdGlvbiB0b2tlbkNvbW1lbnRUb0VPRihzdHJlYW0pe3JldHVybiBzdHJlYW0uc2tpcFRvRW5kKCksXCJjb21tZW50XCI7fVxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhzdHJlYW0sc3RhdGUpe1xuICAgIHZhciBlc2NhcGVkPWZhbHNlLG5leHQsZW5kPWZhbHNlO1xuICAgIHdoaWxlKChuZXh0PXN0cmVhbS5uZXh0KCkpKXtcbiAgICAgIGlmKG5leHQ9PVwiXFxcIlwiJiYhZXNjYXBlZCl7ZW5kPXRydWU7YnJlYWs7fVxuICAgICAgZXNjYXBlZD0hZXNjYXBlZCYmbmV4dD09XCJcXFxcXCI7XG4gICAgfVxuICAgIGlmKGVuZClzdGF0ZS50b2tlbml6ZT10b2tlbkJhc2U7XG4gICAgcmV0dXJuXCJzdHJpbmdcIjtcbiAgfVxuICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSx0eXBlLGNvbCl7c3RhdGUuY29udGV4dD17cHJldjpzdGF0ZS5jb250ZXh0LGluZGVudDpzdGF0ZS5pbmRlbnQsY29sOmNvbCx0eXBlOnR5cGV9O31cbiAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSl7c3RhdGUuaW5kZW50PXN0YXRlLmNvbnRleHQuaW5kZW50O3N0YXRlLmNvbnRleHQ9c3RhdGUuY29udGV4dC5wcmV2O31cbiAgcmV0dXJue1xuICAgIHN0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtcbiAgICAgIHJldHVybnt0b2tlbml6ZTp0b2tlbkJhc2UsXG4gICAgICAgICAgICAgY29udGV4dDpudWxsLFxuICAgICAgICAgICAgIGluZGVudDowLFxuICAgICAgICAgICAgIGNvbDowfTtcbiAgICB9LFxuICAgIHRva2VuOmZ1bmN0aW9uKHN0cmVhbSxzdGF0ZSl7XG4gICAgICBpZihzdHJlYW0uc29sKCkpe1xuICAgICAgICBpZihzdGF0ZS5jb250ZXh0JiZzdGF0ZS5jb250ZXh0LmFsaWduPT1udWxsKVxuICAgICAgICAgIHN0YXRlLmNvbnRleHQuYWxpZ249ZmFsc2U7XG4gICAgICAgIHN0YXRlLmluZGVudD1zdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgIH1cbiAgICAgIC8vaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBzdHlsZT1zdGF0ZS50b2tlbml6ZShzdHJlYW0sc3RhdGUpO1xuICAgICAgaWYoc3R5bGUhPVwiY29tbWVudFwiJiZzdGF0ZS5jb250ZXh0JiZzdGF0ZS5jb250ZXh0LmFsaWduPT1udWxsJiZzdGF0ZS5jb250ZXh0LnR5cGUhPVwicGF0dGVyblwiKXtcbiAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbj10cnVlO1xuICAgICAgfVxuICAgICAgaWYoY3VyUHVuYz09XCIoXCIpcHVzaENvbnRleHQoc3RhdGUsXCIpXCIsc3RyZWFtLmNvbHVtbigpKTtcbiAgICAgIGVsc2UgaWYoY3VyUHVuYz09XCJbXCIpcHVzaENvbnRleHQoc3RhdGUsXCJdXCIsc3RyZWFtLmNvbHVtbigpKTtcbiAgICAgIGVsc2UgaWYoY3VyUHVuYz09XCJ7XCIpcHVzaENvbnRleHQoc3RhdGUsXCJ9XCIsc3RyZWFtLmNvbHVtbigpKTtcbiAgICAgIGVsc2UgaWYoL1tcXF1cXH1cXCldLy50ZXN0KGN1clB1bmMpKXtcbiAgICAgICAgd2hpbGUoc3RhdGUuY29udGV4dCYmc3RhdGUuY29udGV4dC50eXBlPT1cInBhdHRlcm5cIilwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgaWYoc3RhdGUuY29udGV4dCYmY3VyUHVuYz09c3RhdGUuY29udGV4dC50eXBlKXBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZihjdXJQdW5jPT1cIi5cIiYmc3RhdGUuY29udGV4dCYmc3RhdGUuY29udGV4dC50eXBlPT1cInBhdHRlcm5cIilwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgIGVsc2UgaWYoL2F0b218c3RyaW5nfHZhcmlhYmxlLy50ZXN0KHN0eWxlKSYmc3RhdGUuY29udGV4dCl7XG4gICAgICAgIGlmKC9bXFx9XFxdXS8udGVzdChzdGF0ZS5jb250ZXh0LnR5cGUpKVxuICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLFwicGF0dGVyblwiLHN0cmVhbS5jb2x1bW4oKSk7XG4gICAgICAgIGVsc2UgaWYoc3RhdGUuY29udGV4dC50eXBlPT1cInBhdHRlcm5cIiYmIXN0YXRlLmNvbnRleHQuYWxpZ24pe1xuICAgICAgICAgIHN0YXRlLmNvbnRleHQuYWxpZ249dHJ1ZTtcbiAgICAgICAgICBzdGF0ZS5jb250ZXh0LmNvbD1zdHJlYW0uY29sdW1uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuICAgIGluZGVudDpmdW5jdGlvbihzdGF0ZSx0ZXh0QWZ0ZXIpe1xuICAgICAgdmFyIGZpcnN0Q2hhcj10ZXh0QWZ0ZXImJnRleHRBZnRlci5jaGFyQXQoMCk7XG4gICAgICB2YXIgY29udGV4dD1zdGF0ZS5jb250ZXh0O1xuICAgICAgaWYoL1tcXF1cXH1dLy50ZXN0KGZpcnN0Q2hhcikpXG4gICAgICAgIHdoaWxlIChjb250ZXh0JiZjb250ZXh0LnR5cGU9PVwicGF0dGVyblwiKWNvbnRleHQ9Y29udGV4dC5wcmV2O1xuICAgICAgdmFyIGNsb3Npbmc9Y29udGV4dCYmZmlyc3RDaGFyPT1jb250ZXh0LnR5cGU7XG4gICAgICBpZighY29udGV4dClcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICBlbHNlIGlmKGNvbnRleHQudHlwZT09XCJwYXR0ZXJuXCIpXG4gICAgICAgIHJldHVybiBjb250ZXh0LmNvbDtcbiAgICAgIGVsc2UgaWYoY29udGV4dC5hbGlnbilcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuY29sKyhjbG9zaW5nPzA6MSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBjb250ZXh0LmluZGVudCsoY2xvc2luZz8wOmluZGVudFVuaXQpO1xuICAgIH1cbiAgfTtcbn0pO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXFcIixcInFcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwid29yZENoYXJzXCIsIFwiclwiLCAvW1xcdy5dLyk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInJcIiwgZnVuY3Rpb24oY29uZmlnKSB7XG4gIGZ1bmN0aW9uIHdvcmRPYmood29yZHMpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgcmVzW3dvcmRzW2ldXSA9IHRydWU7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICB2YXIgY29tbW9uQXRvbXMgPSBbXCJOVUxMXCIsIFwiTkFcIiwgXCJJbmZcIiwgXCJOYU5cIiwgXCJOQV9pbnRlZ2VyX1wiLCBcIk5BX3JlYWxfXCIsIFwiTkFfY29tcGxleF9cIiwgXCJOQV9jaGFyYWN0ZXJfXCIsIFwiVFJVRVwiLCBcIkZBTFNFXCJdO1xuICB2YXIgY29tbW9uQnVpbHRpbnMgPSBbXCJsaXN0XCIsIFwicXVvdGVcIiwgXCJicXVvdGVcIiwgXCJldmFsXCIsIFwicmV0dXJuXCIsIFwiY2FsbFwiLCBcInBhcnNlXCIsIFwiZGVwYXJzZVwiXTtcbiAgdmFyIGNvbW1vbktleXdvcmRzID0gW1wiaWZcIiwgXCJlbHNlXCIsIFwicmVwZWF0XCIsIFwid2hpbGVcIiwgXCJmdW5jdGlvblwiLCBcImZvclwiLCBcImluXCIsIFwibmV4dFwiLCBcImJyZWFrXCJdO1xuICB2YXIgY29tbW9uQmxvY2tLZXl3b3JkcyA9IFtcImlmXCIsIFwiZWxzZVwiLCBcInJlcGVhdFwiLCBcIndoaWxlXCIsIFwiZnVuY3Rpb25cIiwgXCJmb3JcIl07XG5cbiAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImhpbnRXb3Jkc1wiLCBcInJcIiwgY29tbW9uQXRvbXMuY29uY2F0KGNvbW1vbkJ1aWx0aW5zLCBjb21tb25LZXl3b3JkcykpO1xuXG4gIHZhciBhdG9tcyA9IHdvcmRPYmooY29tbW9uQXRvbXMpO1xuICB2YXIgYnVpbHRpbnMgPSB3b3JkT2JqKGNvbW1vbkJ1aWx0aW5zKTtcbiAgdmFyIGtleXdvcmRzID0gd29yZE9iaihjb21tb25LZXl3b3Jkcyk7XG4gIHZhciBibG9ja2tleXdvcmRzID0gd29yZE9iaihjb21tb25CbG9ja0tleXdvcmRzKTtcbiAgdmFyIG9wQ2hhcnMgPSAvWytcXC0qXFwvXjw+PSEmfH4kOl0vO1xuICB2YXIgY3VyUHVuYztcblxuICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGN1clB1bmMgPSBudWxsO1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKGNoID09IFwiI1wiKSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIjBcIiAmJiBzdHJlYW0uZWF0KFwieFwiKSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFxkYS1mXS9pKTtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIuXCIgJiYgc3RyZWFtLmVhdCgvXFxkLykpIHtcbiAgICAgIHN0cmVhbS5tYXRjaCgvXFxkKig/OmVbK1xcLV0/XFxkKyk/Lyk7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9IGVsc2UgaWYgKC9cXGQvLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goL1xcZCooPzpcXC5cXGQrKT8oPzplWytcXC1dXFxkKyk/TD8vKTtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCInXCIgfHwgY2ggPT0gJ1wiJykge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiYFwiKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goL1teYF0rYC8pO1xuICAgICAgcmV0dXJuIFwidmFyaWFibGUtM1wiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIuXCIgJiYgc3RyZWFtLm1hdGNoKC8uWy5cXGRdKy8pKSB7XG4gICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgfSBlbHNlIGlmICgvW1xcd1xcLl0vLnRlc3QoY2gpICYmIGNoICE9IFwiX1wiKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5dLyk7XG4gICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgICBpZiAoYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkpIHJldHVybiBcImF0b21cIjtcbiAgICAgIGlmIChrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSkge1xuICAgICAgICAvLyBCbG9jayBrZXl3b3JkcyBzdGFydCBuZXcgYmxvY2tzLCBleGNlcHQgJ2Vsc2UgaWYnLCB3aGljaCBvbmx5IHN0YXJ0c1xuICAgICAgICAvLyBvbmUgbmV3IGJsb2NrIGZvciB0aGUgJ2lmJywgbm8gYmxvY2sgZm9yIHRoZSAnZWxzZScuXG4gICAgICAgIGlmIChibG9ja2tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpICYmXG4gICAgICAgICAgICAhc3RyZWFtLm1hdGNoKC9cXHMqaWYoXFxzK3wkKS8sIGZhbHNlKSlcbiAgICAgICAgICBjdXJQdW5jID0gXCJibG9ja1wiO1xuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICB9XG4gICAgICBpZiAoYnVpbHRpbnMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkpIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIiVcIikge1xuICAgICAgaWYgKHN0cmVhbS5za2lwVG8oXCIlXCIpKSBzdHJlYW0ubmV4dCgpO1xuICAgICAgcmV0dXJuIFwib3BlcmF0b3IgdmFyaWFibGUtMlwiO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIChjaCA9PSBcIjxcIiAmJiBzdHJlYW0uZWF0KFwiLVwiKSkgfHxcbiAgICAgICAgKGNoID09IFwiPFwiICYmIHN0cmVhbS5tYXRjaChcIjwtXCIpKSB8fFxuICAgICAgICAoY2ggPT0gXCItXCIgJiYgc3RyZWFtLm1hdGNoKC8+Pj8vKSlcbiAgICAgICkge1xuICAgICAgcmV0dXJuIFwib3BlcmF0b3IgYXJyb3dcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiPVwiICYmIHN0YXRlLmN0eC5hcmdMaXN0KSB7XG4gICAgICByZXR1cm4gXCJhcmctaXNcIjtcbiAgICB9IGVsc2UgaWYgKG9wQ2hhcnMudGVzdChjaCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIiRcIikgcmV0dXJuIFwib3BlcmF0b3IgZG9sbGFyXCI7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUob3BDaGFycyk7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH0gZWxzZSBpZiAoL1tcXChcXCl7fVxcW1xcXTtdLy50ZXN0KGNoKSkge1xuICAgICAgY3VyUHVuYyA9IGNoO1xuICAgICAgaWYgKGNoID09IFwiO1wiKSByZXR1cm4gXCJzZW1pXCI7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCJcXFxcXCIpKSB7XG4gICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIGlmIChjaCA9PSBcInhcIikgc3RyZWFtLm1hdGNoKC9eW2EtZjAtOV17Mn0vaSk7XG4gICAgICAgIGVsc2UgaWYgKChjaCA9PSBcInVcIiB8fCBjaCA9PSBcIlVcIikgJiYgc3RyZWFtLmVhdChcIntcIikgJiYgc3RyZWFtLnNraXBUbyhcIn1cIikpIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIGVsc2UgaWYgKGNoID09IFwidVwiKSBzdHJlYW0ubWF0Y2goL15bYS1mMC05XXs0fS9pKTtcbiAgICAgICAgZWxzZSBpZiAoY2ggPT0gXCJVXCIpIHN0cmVhbS5tYXRjaCgvXlthLWYwLTldezh9L2kpO1xuICAgICAgICBlbHNlIGlmICgvWzAtN10vLnRlc3QoY2gpKSBzdHJlYW0ubWF0Y2goL15bMC03XXsxLDJ9Lyk7XG4gICAgICAgIHJldHVybiBcInN0cmluZy0yXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbmV4dDtcbiAgICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChuZXh0ID09IHF1b3RlKSB7IHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOyBicmVhazsgfVxuICAgICAgICAgIGlmIChuZXh0ID09IFwiXFxcXFwiKSB7IHN0cmVhbS5iYWNrVXAoMSk7IGJyZWFrOyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBBTElHTl9ZRVMgPSAxLCBBTElHTl9OTyA9IDIsIEJSQUNFTEVTUyA9IDRcblxuICBmdW5jdGlvbiBwdXNoKHN0YXRlLCB0eXBlLCBzdHJlYW0pIHtcbiAgICBzdGF0ZS5jdHggPSB7dHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgaW5kZW50OiBzdGF0ZS5pbmRlbnQsXG4gICAgICAgICAgICAgICAgIGZsYWdzOiAwLFxuICAgICAgICAgICAgICAgICBjb2x1bW46IHN0cmVhbS5jb2x1bW4oKSxcbiAgICAgICAgICAgICAgICAgcHJldjogc3RhdGUuY3R4fTtcbiAgfVxuICBmdW5jdGlvbiBzZXRGbGFnKHN0YXRlLCBmbGFnKSB7XG4gICAgdmFyIGN0eCA9IHN0YXRlLmN0eFxuICAgIHN0YXRlLmN0eCA9IHt0eXBlOiBjdHgudHlwZSxcbiAgICAgICAgICAgICAgICAgaW5kZW50OiBjdHguaW5kZW50LFxuICAgICAgICAgICAgICAgICBmbGFnczogY3R4LmZsYWdzIHwgZmxhZyxcbiAgICAgICAgICAgICAgICAgY29sdW1uOiBjdHguY29sdW1uLFxuICAgICAgICAgICAgICAgICBwcmV2OiBjdHgucHJldn1cbiAgfVxuICBmdW5jdGlvbiBwb3Aoc3RhdGUpIHtcbiAgICBzdGF0ZS5pbmRlbnQgPSBzdGF0ZS5jdHguaW5kZW50O1xuICAgIHN0YXRlLmN0eCA9IHN0YXRlLmN0eC5wcmV2O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZSxcbiAgICAgICAgICAgICAgY3R4OiB7dHlwZTogXCJ0b3BcIixcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50OiAtY29uZmlnLmluZGVudFVuaXQsXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzOiBBTElHTl9OT30sXG4gICAgICAgICAgICAgIGluZGVudDogMCxcbiAgICAgICAgICAgICAgYWZ0ZXJJZGVudDogZmFsc2V9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICBpZiAoKHN0YXRlLmN0eC5mbGFncyAmIDMpID09IDApIHN0YXRlLmN0eC5mbGFncyB8PSBBTElHTl9OT1xuICAgICAgICBpZiAoc3RhdGUuY3R4LmZsYWdzICYgQlJBQ0VMRVNTKSBwb3Aoc3RhdGUpXG4gICAgICAgIHN0YXRlLmluZGVudCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHN0eWxlICE9IFwiY29tbWVudFwiICYmIChzdGF0ZS5jdHguZmxhZ3MgJiBBTElHTl9OTykgPT0gMCkgc2V0RmxhZyhzdGF0ZSwgQUxJR05fWUVTKVxuXG4gICAgICBpZiAoKGN1clB1bmMgPT0gXCI7XCIgfHwgY3VyUHVuYyA9PSBcIntcIiB8fCBjdXJQdW5jID09IFwifVwiKSAmJiBzdGF0ZS5jdHgudHlwZSA9PSBcImJsb2NrXCIpIHBvcChzdGF0ZSk7XG4gICAgICBpZiAoY3VyUHVuYyA9PSBcIntcIikgcHVzaChzdGF0ZSwgXCJ9XCIsIHN0cmVhbSk7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwiKFwiKSB7XG4gICAgICAgIHB1c2goc3RhdGUsIFwiKVwiLCBzdHJlYW0pO1xuICAgICAgICBpZiAoc3RhdGUuYWZ0ZXJJZGVudCkgc3RhdGUuY3R4LmFyZ0xpc3QgPSB0cnVlO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIltcIikgcHVzaChzdGF0ZSwgXCJdXCIsIHN0cmVhbSk7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwiYmxvY2tcIikgcHVzaChzdGF0ZSwgXCJibG9ja1wiLCBzdHJlYW0pO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBzdGF0ZS5jdHgudHlwZSkgcG9wKHN0YXRlKTtcbiAgICAgIGVsc2UgaWYgKHN0YXRlLmN0eC50eXBlID09IFwiYmxvY2tcIiAmJiBzdHlsZSAhPSBcImNvbW1lbnRcIikgc2V0RmxhZyhzdGF0ZSwgQlJBQ0VMRVNTKVxuICAgICAgc3RhdGUuYWZ0ZXJJZGVudCA9IHN0eWxlID09IFwidmFyaWFibGVcIiB8fCBzdHlsZSA9PSBcImtleXdvcmRcIjtcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDtcbiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgY3R4ID0gc3RhdGUuY3R4LFxuICAgICAgICAgIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gY3R4LnR5cGU7XG4gICAgICBpZiAoY3R4LmZsYWdzICYgQlJBQ0VMRVNTKSBjdHggPSBjdHgucHJldlxuICAgICAgaWYgKGN0eC50eXBlID09IFwiYmxvY2tcIikgcmV0dXJuIGN0eC5pbmRlbnQgKyAoZmlyc3RDaGFyID09IFwie1wiID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KTtcbiAgICAgIGVsc2UgaWYgKGN0eC5mbGFncyAmIEFMSUdOX1lFUykgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTtcbiAgICAgIGVsc2UgcmV0dXJuIGN0eC5pbmRlbnQgKyAoY2xvc2luZyA/IDAgOiBjb25maWcuaW5kZW50VW5pdCk7XG4gICAgfSxcblxuICAgIGxpbmVDb21tZW50OiBcIiNcIlxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1yc3JjXCIsIFwiclwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInJwbS1jaGFuZ2VzXCIsIGZ1bmN0aW9uKCkge1xuICB2YXIgaGVhZGVyU2VwZXJhdG9yID0gL14tKyQvO1xuICB2YXIgaGVhZGVyTGluZSA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1bikgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAgP1xcZHsxLDJ9IFxcZHsyfTpcXGR7Mn0oOlxcZHsyfSk/IFtBLVpdezMsNH0gXFxkezR9IC0gLztcbiAgdmFyIHNpbXBsZUVtYWlsID0gL15bXFx3Ky4tXStAW1xcdy4tXSsvO1xuXG4gIHJldHVybiB7XG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGhlYWRlclNlcGVyYXRvcikpIHsgcmV0dXJuICd0YWcnOyB9XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goaGVhZGVyTGluZSkpIHsgcmV0dXJuICd0YWcnOyB9XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHNpbXBsZUVtYWlsKSkgeyByZXR1cm4gJ3N0cmluZyc7IH1cbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXJwbS1jaGFuZ2VzXCIsIFwicnBtLWNoYW5nZXNcIik7XG5cbi8vIFF1aWNrIGFuZCBkaXJ0eSBzcGVjIGZpbGUgaGlnaGxpZ2h0aW5nXG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInJwbS1zcGVjXCIsIGZ1bmN0aW9uKCkge1xuICB2YXIgYXJjaCA9IC9eKGkzODZ8aTU4NnxpNjg2fHg4Nl82NHxwcGM2NGxlfHBwYzY0fHBwY3xpYTY0fHMzOTB4fHMzOTB8c3BhcmM2NHxzcGFyY3Y5fHNwYXJjfG5vYXJjaHxhbHBoYWV2NnxhbHBoYXxocHBhfG1pcHNlbCkvO1xuXG4gIHZhciBwcmVhbWJsZSA9IC9eW2EtekEtWjAtOSgpXSs6LztcbiAgdmFyIHNlY3Rpb24gPSAvXiUoZGVidWdfcGFja2FnZXxwYWNrYWdlfGRlc2NyaXB0aW9ufHByZXB8YnVpbGR8aW5zdGFsbHxmaWxlc3xjbGVhbnxjaGFuZ2Vsb2d8cHJlaW5zdGFsbHxwcmV1bnxwb3N0aW5zdGFsbHxwb3N0dW58cHJldHJhbnN8cG9zdHRyYW5zfHByZXxwb3N0fHRyaWdnZXJpbnx0cmlnZ2VydW58dmVyaWZ5c2NyaXB0fGNoZWNrfHRyaWdnZXJwb3N0dW58dHJpZ2dlcnByZWlufHRyaWdnZXIpLztcbiAgdmFyIGNvbnRyb2xfZmxvd19jb21wbGV4ID0gL14lKGlmbmFyY2h8aWZhcmNofGlmKS87IC8vIHJwbSBjb250cm9sIGZsb3cgbWFjcm9zXG4gIHZhciBjb250cm9sX2Zsb3dfc2ltcGxlID0gL14lKGVsc2V8ZW5kaWYpLzsgLy8gcnBtIGNvbnRyb2wgZmxvdyBtYWNyb3NcbiAgdmFyIG9wZXJhdG9ycyA9IC9eKFxcIXxcXD98XFw8XFw9fFxcPHxcXD5cXD18XFw+fFxcPVxcPXxcXCZcXCZ8XFx8XFx8KS87IC8vIG9wZXJhdG9ycyBpbiBjb250cm9sIGZsb3cgbWFjcm9zXG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udHJvbEZsb3c6IGZhbHNlLFxuICAgICAgICAgIG1hY3JvUGFyYW1ldGVyczogZmFsc2UsXG4gICAgICAgICAgc2VjdGlvbjogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgIGlmIChjaCA9PSBcIiNcIikgeyBzdHJlYW0uc2tpcFRvRW5kKCk7IHJldHVybiBcImNvbW1lbnRcIjsgfVxuXG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocHJlYW1ibGUpKSB7IHJldHVybiBcImhlYWRlclwiOyB9XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goc2VjdGlvbikpIHsgcmV0dXJuIFwiYXRvbVwiOyB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXCRcXHcrLykpIHsgcmV0dXJuIFwiZGVmXCI7IH0gLy8gVmFyaWFibGVzIGxpa2UgJyRSUE1fQlVJTERfUk9PVCdcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXCRcXHtcXHcrXFx9LykpIHsgcmV0dXJuIFwiZGVmXCI7IH0gLy8gVmFyaWFibGVzIGxpa2UgJyR7UlBNX0JVSUxEX1JPT1R9J1xuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKGNvbnRyb2xfZmxvd19zaW1wbGUpKSB7IHJldHVybiBcImtleXdvcmRcIjsgfVxuICAgICAgaWYgKHN0cmVhbS5tYXRjaChjb250cm9sX2Zsb3dfY29tcGxleCkpIHtcbiAgICAgICAgc3RhdGUuY29udHJvbEZsb3cgPSB0cnVlO1xuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuY29udHJvbEZsb3cpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChvcGVyYXRvcnMpKSB7IHJldHVybiBcIm9wZXJhdG9yXCI7IH1cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXihcXGQrKS8pKSB7IHJldHVybiBcIm51bWJlclwiOyB9XG4gICAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHsgc3RhdGUuY29udHJvbEZsb3cgPSBmYWxzZTsgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKGFyY2gpKSB7XG4gICAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHsgc3RhdGUuY29udHJvbEZsb3cgPSBmYWxzZTsgfVxuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cblxuICAgICAgLy8gTWFjcm9zIGxpa2UgJyVtYWtlX2luc3RhbGwnIG9yICclYXR0cigwNzc1LHJvb3Qscm9vdCknXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eJVtcXHddKy8pKSB7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXCgvKSkgeyBzdGF0ZS5tYWNyb1BhcmFtZXRlcnMgPSB0cnVlOyB9XG4gICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5tYWNyb1BhcmFtZXRlcnMpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxcZCsvKSkgeyByZXR1cm4gXCJudW1iZXJcIjt9XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXCkvKSkge1xuICAgICAgICAgIHN0YXRlLm1hY3JvUGFyYW1ldGVycyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBNYWNyb3MgbGlrZSAnJXtkZWZpbmVkIGZlZG9yYX0nXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eJVxce1xcPz9bXFx3IFxcLVxcOlxcIV0rXFx9LykpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lb2woKSkgeyBzdGF0ZS5jb250cm9sRmxvdyA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiBcImRlZlwiO1xuICAgICAgfVxuXG4gICAgICAvL1RPRE86IEluY2x1ZGUgYmFzaCBzY3JpcHQgc3ViLXBhcnNlciAoQ29kZU1pcnJvciBzdXBwb3J0cyB0aGF0KVxuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtcnBtLXNwZWNcIiwgXCJycG0tc3BlY1wiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vKlxuICogQXV0aG9yOiBDb25zdGFudGluIEp1Y292c2NoaSAoYy5qdWNvdnNjaGlAamFjb2JzLXVuaXZlcnNpdHkuZGUpXG4gKiBMaWNlbmNlOiBNSVRcbiAqL1xuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJzdGV4XCIsIGZ1bmN0aW9uKF9jb25maWcsIHBhcnNlckNvbmZpZykge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgZnVuY3Rpb24gcHVzaENvbW1hbmQoc3RhdGUsIGNvbW1hbmQpIHtcbiAgICAgIHN0YXRlLmNtZFN0YXRlLnB1c2goY29tbWFuZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGVla0NvbW1hbmQoc3RhdGUpIHtcbiAgICAgIGlmIChzdGF0ZS5jbWRTdGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5jbWRTdGF0ZVtzdGF0ZS5jbWRTdGF0ZS5sZW5ndGggLSAxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvcENvbW1hbmQoc3RhdGUpIHtcbiAgICAgIHZhciBwbHVnID0gc3RhdGUuY21kU3RhdGUucG9wKCk7XG4gICAgICBpZiAocGx1Zykge1xuICAgICAgICBwbHVnLmNsb3NlQnJhY2tldCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybnMgdGhlIG5vbi1kZWZhdWx0IHBsdWdpbiBjbG9zZXN0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICBmdW5jdGlvbiBnZXRNb3N0UG93ZXJmdWwoc3RhdGUpIHtcbiAgICAgIHZhciBjb250ZXh0ID0gc3RhdGUuY21kU3RhdGU7XG4gICAgICBmb3IgKHZhciBpID0gY29udGV4dC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgcGx1ZyA9IGNvbnRleHRbaV07XG4gICAgICAgIGlmIChwbHVnLm5hbWUgPT0gXCJERUZBVUxUXCIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGx1ZztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHN0eWxlSWRlbnRpZmllcjogZnVuY3Rpb24oKSB7IHJldHVybiBudWxsOyB9IH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkUGx1Z2luUGF0dGVybihwbHVnaW5OYW1lLCBjbWRTdHlsZSwgc3R5bGVzKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5hbWUgPSBwbHVnaW5OYW1lO1xuICAgICAgICB0aGlzLmJyYWNrZXRObyA9IDA7XG4gICAgICAgIHRoaXMuc3R5bGUgPSBjbWRTdHlsZTtcbiAgICAgICAgdGhpcy5zdHlsZXMgPSBzdHlsZXM7XG4gICAgICAgIHRoaXMuYXJndW1lbnQgPSBudWxsOyAgIC8vIFxcYmVnaW4gYW5kIFxcZW5kIGhhdmUgYXJndW1lbnRzIHRoYXQgZm9sbG93LiBUaGVzZSBhcmUgc3RvcmVkIGluIHRoZSBwbHVnaW5cblxuICAgICAgICB0aGlzLnN0eWxlSWRlbnRpZmllciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlc1t0aGlzLmJyYWNrZXRObyAtIDFdIHx8IG51bGw7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub3BlbkJyYWNrZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLmJyYWNrZXRObysrO1xuICAgICAgICAgIHJldHVybiBcImJyYWNrZXRcIjtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jbG9zZUJyYWNrZXQgPSBmdW5jdGlvbigpIHt9O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgcGx1Z2lucyA9IHt9O1xuXG4gICAgcGx1Z2luc1tcImltcG9ydG1vZHVsZVwiXSA9IGFkZFBsdWdpblBhdHRlcm4oXCJpbXBvcnRtb2R1bGVcIiwgXCJ0YWdcIiwgW1wic3RyaW5nXCIsIFwiYnVpbHRpblwiXSk7XG4gICAgcGx1Z2luc1tcImRvY3VtZW50Y2xhc3NcIl0gPSBhZGRQbHVnaW5QYXR0ZXJuKFwiZG9jdW1lbnRjbGFzc1wiLCBcInRhZ1wiLCBbXCJcIiwgXCJhdG9tXCJdKTtcbiAgICBwbHVnaW5zW1widXNlcGFja2FnZVwiXSA9IGFkZFBsdWdpblBhdHRlcm4oXCJ1c2VwYWNrYWdlXCIsIFwidGFnXCIsIFtcImF0b21cIl0pO1xuICAgIHBsdWdpbnNbXCJiZWdpblwiXSA9IGFkZFBsdWdpblBhdHRlcm4oXCJiZWdpblwiLCBcInRhZ1wiLCBbXCJhdG9tXCJdKTtcbiAgICBwbHVnaW5zW1wiZW5kXCJdID0gYWRkUGx1Z2luUGF0dGVybihcImVuZFwiLCBcInRhZ1wiLCBbXCJhdG9tXCJdKTtcblxuICAgIHBsdWdpbnNbXCJsYWJlbFwiICAgIF0gPSBhZGRQbHVnaW5QYXR0ZXJuKFwibGFiZWxcIiAgICAsIFwidGFnXCIsIFtcImF0b21cIl0pO1xuICAgIHBsdWdpbnNbXCJyZWZcIiAgICAgIF0gPSBhZGRQbHVnaW5QYXR0ZXJuKFwicmVmXCIgICAgICAsIFwidGFnXCIsIFtcImF0b21cIl0pO1xuICAgIHBsdWdpbnNbXCJlcXJlZlwiICAgIF0gPSBhZGRQbHVnaW5QYXR0ZXJuKFwiZXFyZWZcIiAgICAsIFwidGFnXCIsIFtcImF0b21cIl0pO1xuICAgIHBsdWdpbnNbXCJjaXRlXCIgICAgIF0gPSBhZGRQbHVnaW5QYXR0ZXJuKFwiY2l0ZVwiICAgICAsIFwidGFnXCIsIFtcImF0b21cIl0pO1xuICAgIHBsdWdpbnNbXCJiaWJpdGVtXCIgIF0gPSBhZGRQbHVnaW5QYXR0ZXJuKFwiYmliaXRlbVwiICAsIFwidGFnXCIsIFtcImF0b21cIl0pO1xuICAgIHBsdWdpbnNbXCJCaWJpdGVtXCIgIF0gPSBhZGRQbHVnaW5QYXR0ZXJuKFwiQmliaXRlbVwiICAsIFwidGFnXCIsIFtcImF0b21cIl0pO1xuICAgIHBsdWdpbnNbXCJSQmliaXRlbVwiIF0gPSBhZGRQbHVnaW5QYXR0ZXJuKFwiUkJpYml0ZW1cIiAsIFwidGFnXCIsIFtcImF0b21cIl0pO1xuXG4gICAgcGx1Z2luc1tcIkRFRkFVTFRcIl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLm5hbWUgPSBcIkRFRkFVTFRcIjtcbiAgICAgIHRoaXMuc3R5bGUgPSBcInRhZ1wiO1xuXG4gICAgICB0aGlzLnN0eWxlSWRlbnRpZmllciA9IHRoaXMub3BlbkJyYWNrZXQgPSB0aGlzLmNsb3NlQnJhY2tldCA9IGZ1bmN0aW9uKCkge307XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBmKSB7XG4gICAgICBzdGF0ZS5mID0gZjtcbiAgICB9XG5cbiAgICAvLyBjYWxsZWQgd2hlbiBpbiBhIG5vcm1hbCAobm8gZW52aXJvbm1lbnQpIGNvbnRleHRcbiAgICBmdW5jdGlvbiBub3JtYWwoc291cmNlLCBzdGF0ZSkge1xuICAgICAgdmFyIHBsdWc7XG4gICAgICAvLyBEbyB3ZSBsb29rIGxpa2UgJ1xcY29tbWFuZCcgPyAgSWYgc28sIGF0dGVtcHQgdG8gYXBwbHkgdGhlIHBsdWdpbiAnY29tbWFuZCdcbiAgICAgIGlmIChzb3VyY2UubWF0Y2goL15cXFxcW2EtekEtWkBdKy8pKSB7XG4gICAgICAgIHZhciBjbWROYW1lID0gc291cmNlLmN1cnJlbnQoKS5zbGljZSgxKTtcbiAgICAgICAgcGx1ZyA9IHBsdWdpbnMuaGFzT3duUHJvcGVydHkoY21kTmFtZSkgPyBwbHVnaW5zW2NtZE5hbWVdIDogcGx1Z2luc1tcIkRFRkFVTFRcIl07XG4gICAgICAgIHBsdWcgPSBuZXcgcGx1ZygpO1xuICAgICAgICBwdXNoQ29tbWFuZChzdGF0ZSwgcGx1Zyk7XG4gICAgICAgIHNldFN0YXRlKHN0YXRlLCBiZWdpblBhcmFtcyk7XG4gICAgICAgIHJldHVybiBwbHVnLnN0eWxlO1xuICAgICAgfVxuXG4gICAgICAvLyBlc2NhcGUgY2hhcmFjdGVyc1xuICAgICAgaWYgKHNvdXJjZS5tYXRjaCgvXlxcXFxbJCYlI3t9X10vKSkge1xuICAgICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICAgIH1cblxuICAgICAgLy8gd2hpdGUgc3BhY2UgY29udHJvbCBjaGFyYWN0ZXJzXG4gICAgICBpZiAoc291cmNlLm1hdGNoKC9eXFxcXFssOyFcXC9cXFxcXS8pKSB7XG4gICAgICAgIHJldHVybiBcInRhZ1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBmaW5kIGlmIHdlJ3JlIHN0YXJ0aW5nIHZhcmlvdXMgbWF0aCBtb2Rlc1xuICAgICAgaWYgKHNvdXJjZS5tYXRjaChcIlxcXFxbXCIpKSB7XG4gICAgICAgIHNldFN0YXRlKHN0YXRlLCBmdW5jdGlvbihzb3VyY2UsIHN0YXRlKXsgcmV0dXJuIGluTWF0aE1vZGUoc291cmNlLCBzdGF0ZSwgXCJcXFxcXVwiKTsgfSk7XG4gICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2UubWF0Y2goXCJcXFxcKFwiKSkge1xuICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgZnVuY3Rpb24oc291cmNlLCBzdGF0ZSl7IHJldHVybiBpbk1hdGhNb2RlKHNvdXJjZSwgc3RhdGUsIFwiXFxcXClcIik7IH0pO1xuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICB9XG4gICAgICBpZiAoc291cmNlLm1hdGNoKFwiJCRcIikpIHtcbiAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGZ1bmN0aW9uKHNvdXJjZSwgc3RhdGUpeyByZXR1cm4gaW5NYXRoTW9kZShzb3VyY2UsIHN0YXRlLCBcIiQkXCIpOyB9KTtcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZS5tYXRjaChcIiRcIikpIHtcbiAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGZ1bmN0aW9uKHNvdXJjZSwgc3RhdGUpeyByZXR1cm4gaW5NYXRoTW9kZShzb3VyY2UsIHN0YXRlLCBcIiRcIik7IH0pO1xuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaCA9IHNvdXJjZS5uZXh0KCk7XG4gICAgICBpZiAoY2ggPT0gXCIlXCIpIHtcbiAgICAgICAgc291cmNlLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9IGVsc2UgaWYgKGNoID09ICd9JyB8fCBjaCA9PSAnXScpIHtcbiAgICAgICAgcGx1ZyA9IHBlZWtDb21tYW5kKHN0YXRlKTtcbiAgICAgICAgaWYgKHBsdWcpIHtcbiAgICAgICAgICBwbHVnLmNsb3NlQnJhY2tldChjaCk7XG4gICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGJlZ2luUGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImJyYWNrZXRcIjtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ3snIHx8IGNoID09ICdbJykge1xuICAgICAgICBwbHVnID0gcGx1Z2luc1tcIkRFRkFVTFRcIl07XG4gICAgICAgIHBsdWcgPSBuZXcgcGx1ZygpO1xuICAgICAgICBwdXNoQ29tbWFuZChzdGF0ZSwgcGx1Zyk7XG4gICAgICAgIHJldHVybiBcImJyYWNrZXRcIjtcbiAgICAgIH0gZWxzZSBpZiAoL1xcZC8udGVzdChjaCkpIHtcbiAgICAgICAgc291cmNlLmVhdFdoaWxlKC9bXFx3LiVdLyk7XG4gICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvdXJjZS5lYXRXaGlsZSgvW1xcd1xcLV9dLyk7XG4gICAgICAgIHBsdWcgPSBnZXRNb3N0UG93ZXJmdWwoc3RhdGUpO1xuICAgICAgICBpZiAocGx1Zy5uYW1lID09ICdiZWdpbicpIHtcbiAgICAgICAgICBwbHVnLmFyZ3VtZW50ID0gc291cmNlLmN1cnJlbnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGx1Zy5zdHlsZUlkZW50aWZpZXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbk1hdGhNb2RlKHNvdXJjZSwgc3RhdGUsIGVuZE1vZGVTZXEpIHtcbiAgICAgIGlmIChzb3VyY2UuZWF0U3BhY2UoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChlbmRNb2RlU2VxICYmIHNvdXJjZS5tYXRjaChlbmRNb2RlU2VxKSkge1xuICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgbm9ybWFsKTtcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZS5tYXRjaCgvXlxcXFxbYS16QS1aQF0rLykpIHtcbiAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICB9XG4gICAgICBpZiAoc291cmNlLm1hdGNoKC9eW2EtekEtWl0rLykpIHtcbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGUtMlwiO1xuICAgICAgfVxuICAgICAgLy8gZXNjYXBlIGNoYXJhY3RlcnNcbiAgICAgIGlmIChzb3VyY2UubWF0Y2goL15cXFxcWyQmJSN7fV9dLykpIHtcbiAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICB9XG4gICAgICAvLyB3aGl0ZSBzcGFjZSBjb250cm9sIGNoYXJhY3RlcnNcbiAgICAgIGlmIChzb3VyY2UubWF0Y2goL15cXFxcWyw7IVxcL10vKSkge1xuICAgICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICAgIH1cbiAgICAgIC8vIHNwZWNpYWwgbWF0aC1tb2RlIGNoYXJhY3RlcnNcbiAgICAgIGlmIChzb3VyY2UubWF0Y2goL15bXFxeXyZdLykpIHtcbiAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICB9XG4gICAgICAvLyBub24tc3BlY2lhbCBjaGFyYWN0ZXJzXG4gICAgICBpZiAoc291cmNlLm1hdGNoKC9eWytcXC08Pnw9LFxcL0AhKjo7J1wiYH4jP10vKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2UubWF0Y2goL14oXFxkK1xcLlxcZCp8XFxkKlxcLlxcZCt8XFxkKykvKSkge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIHZhciBjaCA9IHNvdXJjZS5uZXh0KCk7XG4gICAgICBpZiAoY2ggPT0gXCJ7XCIgfHwgY2ggPT0gXCJ9XCIgfHwgY2ggPT0gXCJbXCIgfHwgY2ggPT0gXCJdXCIgfHwgY2ggPT0gXCIoXCIgfHwgY2ggPT0gXCIpXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiYnJhY2tldFwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2ggPT0gXCIlXCIpIHtcbiAgICAgICAgc291cmNlLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJlZ2luUGFyYW1zKHNvdXJjZSwgc3RhdGUpIHtcbiAgICAgIHZhciBjaCA9IHNvdXJjZS5wZWVrKCksIGxhc3RQbHVnO1xuICAgICAgaWYgKGNoID09ICd7JyB8fCBjaCA9PSAnWycpIHtcbiAgICAgICAgbGFzdFBsdWcgPSBwZWVrQ29tbWFuZChzdGF0ZSk7XG4gICAgICAgIGxhc3RQbHVnLm9wZW5CcmFja2V0KGNoKTtcbiAgICAgICAgc291cmNlLmVhdChjaCk7XG4gICAgICAgIHNldFN0YXRlKHN0YXRlLCBub3JtYWwpO1xuICAgICAgICByZXR1cm4gXCJicmFja2V0XCI7XG4gICAgICB9XG4gICAgICBpZiAoL1sgXFx0XFxyXS8udGVzdChjaCkpIHtcbiAgICAgICAgc291cmNlLmVhdChjaCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgc2V0U3RhdGUoc3RhdGUsIG5vcm1hbCk7XG4gICAgICBwb3BDb21tYW5kKHN0YXRlKTtcblxuICAgICAgcmV0dXJuIG5vcm1hbChzb3VyY2UsIHN0YXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmID0gcGFyc2VyQ29uZmlnLmluTWF0aE1vZGUgPyBmdW5jdGlvbihzb3VyY2UsIHN0YXRlKXsgcmV0dXJuIGluTWF0aE1vZGUoc291cmNlLCBzdGF0ZSk7IH0gOiBub3JtYWw7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY21kU3RhdGU6IFtdLFxuICAgICAgICAgIGY6IGZcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjbWRTdGF0ZTogcy5jbWRTdGF0ZS5zbGljZSgpLFxuICAgICAgICAgIGY6IHMuZlxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5mKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfSxcbiAgICAgIGJsYW5rTGluZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgc3RhdGUuZiA9IG5vcm1hbDtcbiAgICAgICAgc3RhdGUuY21kU3RhdGUubGVuZ3RoID0gMDtcbiAgICAgIH0sXG4gICAgICBsaW5lQ29tbWVudDogXCIlXCJcbiAgICB9O1xuICB9KTtcblxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtc3RleFwiLCBcInN0ZXhcIik7XG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1sYXRleFwiLCBcInN0ZXhcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSwgcmVxdWlyZShcIi4uL3B5dGhvbi9weXRob25cIiksIHJlcXVpcmUoXCIuLi9zdGV4L3N0ZXhcIiksIHJlcXVpcmUoXCIuLi8uLi9hZGRvbi9tb2RlL292ZXJsYXlcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi9weXRob24vcHl0aG9uXCIsIFwiLi4vc3RleC9zdGV4XCIsIFwiLi4vLi4vYWRkb24vbW9kZS9vdmVybGF5XCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgncnN0JywgZnVuY3Rpb24gKGNvbmZpZywgb3B0aW9ucykge1xuXG4gIHZhciByeF9zdHJvbmcgPSAvXlxcKlxcKlteXFwqXFxzXSg/OlteXFwqXSpbXlxcKlxcc10pP1xcKlxcKi87XG4gIHZhciByeF9lbXBoYXNpcyA9IC9eXFwqW15cXCpcXHNdKD86W15cXCpdKlteXFwqXFxzXSk/XFwqLztcbiAgdmFyIHJ4X2xpdGVyYWwgPSAvXmBgW15gXFxzXSg/OlteYF0qW15gXFxzXSlgYC87XG5cbiAgdmFyIHJ4X251bWJlciA9IC9eKD86W1xcZF0rKD86W1xcLixdXFxkKykqKS87XG4gIHZhciByeF9wb3NpdGl2ZSA9IC9eKD86XFxzXFwrW1xcZF0rKD86W1xcLixdXFxkKykqKS87XG4gIHZhciByeF9uZWdhdGl2ZSA9IC9eKD86XFxzXFwtW1xcZF0rKD86W1xcLixdXFxkKykqKS87XG5cbiAgdmFyIHJ4X3VyaV9wcm90b2NvbCA9IFwiW0hoXVtUdF1bVHRdW1BwXVtTc10/Oi8vXCI7XG4gIHZhciByeF91cmlfZG9tYWluID0gXCIoPzpbXFxcXGRcXFxcdy4tXSspXFxcXC4oPzpcXFxcd3syLDZ9KVwiO1xuICB2YXIgcnhfdXJpX3BhdGggPSBcIig/Oi9bXFxcXGRcXFxcd1xcXFwjXFxcXCVcXFxcJlxcXFwtXFxcXC5cXFxcLFxcXFwvXFxcXDpcXFxcPVxcXFw/XFxcXH5dKykqXCI7XG4gIHZhciByeF91cmkgPSBuZXcgUmVnRXhwKFwiXlwiICsgcnhfdXJpX3Byb3RvY29sICsgcnhfdXJpX2RvbWFpbiArIHJ4X3VyaV9wYXRoKTtcblxuICB2YXIgb3ZlcmxheSA9IHtcbiAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSkge1xuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHJ4X3N0cm9uZykgJiYgc3RyZWFtLm1hdGNoICgvXFxXK3wkLywgZmFsc2UpKVxuICAgICAgICByZXR1cm4gJ3N0cm9uZyc7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHJ4X2VtcGhhc2lzKSAmJiBzdHJlYW0ubWF0Y2ggKC9cXFcrfCQvLCBmYWxzZSkpXG4gICAgICAgIHJldHVybiAnZW0nO1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaChyeF9saXRlcmFsKSAmJiBzdHJlYW0ubWF0Y2ggKC9cXFcrfCQvLCBmYWxzZSkpXG4gICAgICAgIHJldHVybiAnc3RyaW5nLTInO1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaChyeF9udW1iZXIpKVxuICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHJ4X3Bvc2l0aXZlKSlcbiAgICAgICAgcmV0dXJuICdwb3NpdGl2ZSc7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHJ4X25lZ2F0aXZlKSlcbiAgICAgICAgcmV0dXJuICduZWdhdGl2ZSc7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHJ4X3VyaSkpXG4gICAgICAgIHJldHVybiAnbGluayc7XG5cbiAgICAgIHdoaWxlIChzdHJlYW0ubmV4dCgpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChyeF9zdHJvbmcsIGZhbHNlKSkgYnJlYWs7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocnhfZW1waGFzaXMsIGZhbHNlKSkgYnJlYWs7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocnhfbGl0ZXJhbCwgZmFsc2UpKSBicmVhaztcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChyeF9udW1iZXIsIGZhbHNlKSkgYnJlYWs7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocnhfcG9zaXRpdmUsIGZhbHNlKSkgYnJlYWs7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocnhfbmVnYXRpdmUsIGZhbHNlKSkgYnJlYWs7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocnhfdXJpLCBmYWxzZSkpIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdmFyIG1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoXG4gICAgY29uZmlnLCBvcHRpb25zLmJhY2tkcm9wIHx8ICdyc3QtYmFzZSdcbiAgKTtcblxuICByZXR1cm4gQ29kZU1pcnJvci5vdmVybGF5TW9kZShtb2RlLCBvdmVybGF5LCB0cnVlKTsgLy8gY29tYmluZVxufSwgJ3B5dGhvbicsICdzdGV4Jyk7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKCdyc3QtYmFzZScsIGZ1bmN0aW9uIChjb25maWcpIHtcblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gZm9ybWF0KHN0cmluZykge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL3soXFxkKyl9L2csIGZ1bmN0aW9uIChtYXRjaCwgbikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBhcmdzW25dICE9ICd1bmRlZmluZWQnID8gYXJnc1tuXSA6IG1hdGNoO1xuICAgIH0pO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIHZhciBtb2RlX3B5dGhvbiA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsICdweXRob24nKTtcbiAgdmFyIG1vZGVfc3RleCA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsICdzdGV4Jyk7XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIHZhciBTRVBBID0gXCJcXFxccytcIjtcbiAgdmFyIFRBSUwgPSBcIig/OlxcXFxzKnxcXFxcV3wkKVwiLFxuICByeF9UQUlMID0gbmV3IFJlZ0V4cChmb3JtYXQoJ157MH0nLCBUQUlMKSk7XG5cbiAgdmFyIE5BTUUgPVxuICAgIFwiKD86W15cXFxcV1xcXFxkX10oPzpbXFxcXHchXFxcIiMkJSYnKClcXFxcKlxcXFwrLFxcXFwtXFxcXC5cXC86Ozw9PlxcXFw/XSpbXlxcXFxXX10pPylcIixcbiAgcnhfTkFNRSA9IG5ldyBSZWdFeHAoZm9ybWF0KCdeezB9JywgTkFNRSkpO1xuICB2YXIgTkFNRV9XV1MgPVxuICAgIFwiKD86W15cXFxcV1xcXFxkX10oPzpbXFxcXHdcXFxccyFcXFwiIyQlJicoKVxcXFwqXFxcXCssXFxcXC1cXFxcLlxcLzo7PD0+XFxcXD9dKlteXFxcXFdfXSk/KVwiO1xuICB2YXIgUkVGX05BTUUgPSBmb3JtYXQoJyg/OnswfXxgezF9YCknLCBOQU1FLCBOQU1FX1dXUyk7XG5cbiAgdmFyIFRFWFQxID0gXCIoPzpbXlxcXFxzXFxcXHxdKD86W15cXFxcfF0qW15cXFxcc1xcXFx8XSk/KVwiO1xuICB2YXIgVEVYVDIgPSBcIig/OlteXFxcXGBdKylcIixcbiAgcnhfVEVYVDIgPSBuZXcgUmVnRXhwKGZvcm1hdCgnXnswfScsIFRFWFQyKSk7XG5cbiAgdmFyIHJ4X3NlY3Rpb24gPSBuZXcgUmVnRXhwKFxuICAgIFwiXihbIScjJCUmXFxcIigpKissLS4vOjs8PT4/QFxcXFxbXFxcXFxcXFxcXFxcXV5fYHt8fX5dKVxcXFwxezMsfVxcXFxzKiRcIik7XG4gIHZhciByeF9leHBsaWNpdCA9IG5ldyBSZWdFeHAoXG4gICAgZm9ybWF0KCdeXFxcXC5cXFxcLnswfScsIFNFUEEpKTtcbiAgdmFyIHJ4X2xpbmsgPSBuZXcgUmVnRXhwKFxuICAgIGZvcm1hdCgnXl97MH06ezF9fF5fXzp7MX0nLCBSRUZfTkFNRSwgVEFJTCkpO1xuICB2YXIgcnhfZGlyZWN0aXZlID0gbmV3IFJlZ0V4cChcbiAgICBmb3JtYXQoJ157MH06OnsxfScsIFJFRl9OQU1FLCBUQUlMKSk7XG4gIHZhciByeF9zdWJzdGl0dXRpb24gPSBuZXcgUmVnRXhwKFxuICAgIGZvcm1hdCgnXlxcXFx8ezB9XFxcXHx7MX17Mn06OnszfScsIFRFWFQxLCBTRVBBLCBSRUZfTkFNRSwgVEFJTCkpO1xuICB2YXIgcnhfZm9vdG5vdGUgPSBuZXcgUmVnRXhwKFxuICAgIGZvcm1hdCgnXlxcXFxbKD86XFxcXGQrfCN7MH0/fFxcXFwqKV17MX0nLCBSRUZfTkFNRSwgVEFJTCkpO1xuICB2YXIgcnhfY2l0YXRpb24gPSBuZXcgUmVnRXhwKFxuICAgIGZvcm1hdCgnXlxcXFxbezB9XFxcXF17MX0nLCBSRUZfTkFNRSwgVEFJTCkpO1xuXG4gIHZhciByeF9zdWJzdGl0dXRpb25fcmVmID0gbmV3IFJlZ0V4cChcbiAgICBmb3JtYXQoJ15cXFxcfHswfVxcXFx8JywgVEVYVDEpKTtcbiAgdmFyIHJ4X2Zvb3Rub3RlX3JlZiA9IG5ldyBSZWdFeHAoXG4gICAgZm9ybWF0KCdeXFxcXFsoPzpcXFxcZCt8I3swfT98XFxcXCopXV8nLCBSRUZfTkFNRSkpO1xuICB2YXIgcnhfY2l0YXRpb25fcmVmID0gbmV3IFJlZ0V4cChcbiAgICBmb3JtYXQoJ15cXFxcW3swfVxcXFxdXycsIFJFRl9OQU1FKSk7XG4gIHZhciByeF9saW5rX3JlZjEgPSBuZXcgUmVnRXhwKFxuICAgIGZvcm1hdCgnXnswfV9fPycsIFJFRl9OQU1FKSk7XG4gIHZhciByeF9saW5rX3JlZjIgPSBuZXcgUmVnRXhwKFxuICAgIGZvcm1hdCgnXmB7MH1gXycsIFRFWFQyKSk7XG5cbiAgdmFyIHJ4X3JvbGVfcHJlID0gbmV3IFJlZ0V4cChcbiAgICBmb3JtYXQoJ146ezB9OmB7MX1gezJ9JywgTkFNRSwgVEVYVDIsIFRBSUwpKTtcbiAgdmFyIHJ4X3JvbGVfc3VmID0gbmV3IFJlZ0V4cChcbiAgICBmb3JtYXQoJ15gezF9YDp7MH06ezJ9JywgTkFNRSwgVEVYVDIsIFRBSUwpKTtcbiAgdmFyIHJ4X3JvbGUgPSBuZXcgUmVnRXhwKFxuICAgIGZvcm1hdCgnXjp7MH06ezF9JywgTkFNRSwgVEFJTCkpO1xuXG4gIHZhciByeF9kaXJlY3RpdmVfbmFtZSA9IG5ldyBSZWdFeHAoZm9ybWF0KCdeezB9JywgUkVGX05BTUUpKTtcbiAgdmFyIHJ4X2RpcmVjdGl2ZV90YWlsID0gbmV3IFJlZ0V4cChmb3JtYXQoJ146OnswfScsIFRBSUwpKTtcbiAgdmFyIHJ4X3N1YnN0aXR1dGlvbl90ZXh0ID0gbmV3IFJlZ0V4cChmb3JtYXQoJ15cXFxcfHswfVxcXFx8JywgVEVYVDEpKTtcbiAgdmFyIHJ4X3N1YnN0aXR1dGlvbl9zZXBhID0gbmV3IFJlZ0V4cChmb3JtYXQoJ157MH0nLCBTRVBBKSk7XG4gIHZhciByeF9zdWJzdGl0dXRpb25fbmFtZSA9IG5ldyBSZWdFeHAoZm9ybWF0KCdeezB9JywgUkVGX05BTUUpKTtcbiAgdmFyIHJ4X3N1YnN0aXR1dGlvbl90YWlsID0gbmV3IFJlZ0V4cChmb3JtYXQoJ146OnswfScsIFRBSUwpKTtcbiAgdmFyIHJ4X2xpbmtfaGVhZCA9IG5ldyBSZWdFeHAoXCJeX1wiKTtcbiAgdmFyIHJ4X2xpbmtfbmFtZSA9IG5ldyBSZWdFeHAoZm9ybWF0KCdeezB9fF8nLCBSRUZfTkFNRSkpO1xuICB2YXIgcnhfbGlua190YWlsID0gbmV3IFJlZ0V4cChmb3JtYXQoJ146ezB9JywgVEFJTCkpO1xuXG4gIHZhciByeF92ZXJiYXRpbSA9IG5ldyBSZWdFeHAoJ146OlxcXFxzKiQnKTtcbiAgdmFyIHJ4X2V4YW1wbGVzID0gbmV3IFJlZ0V4cCgnXlxcXFxzKyg/Oj4+PnxJbiBcXFxcW1xcXFxkK1xcXFxdOilcXFxccycpO1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBmdW5jdGlvbiB0b19ub3JtYWwoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciB0b2tlbiA9IG51bGw7XG5cbiAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaChyeF9leGFtcGxlcywgZmFsc2UpKSB7XG4gICAgICBjaGFuZ2Uoc3RhdGUsIHRvX21vZGUsIHtcbiAgICAgICAgbW9kZTogbW9kZV9weXRob24sIGxvY2FsOiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUobW9kZV9weXRob24pXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHN0cmVhbS5zb2woKSAmJiBzdHJlYW0ubWF0Y2gocnhfZXhwbGljaXQpKSB7XG4gICAgICBjaGFuZ2Uoc3RhdGUsIHRvX2V4cGxpY2l0KTtcbiAgICAgIHRva2VuID0gJ21ldGEnO1xuICAgIH0gZWxzZSBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaChyeF9zZWN0aW9uKSkge1xuICAgICAgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwpO1xuICAgICAgdG9rZW4gPSAnaGVhZGVyJztcbiAgICB9IGVsc2UgaWYgKHBoYXNlKHN0YXRlKSA9PSByeF9yb2xlX3ByZSB8fFxuICAgICAgICAgICAgICAgc3RyZWFtLm1hdGNoKHJ4X3JvbGVfcHJlLCBmYWxzZSkpIHtcblxuICAgICAgc3dpdGNoIChzdGFnZShzdGF0ZSkpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwsIGNvbnRleHQocnhfcm9sZV9wcmUsIDEpKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eOi8pO1xuICAgICAgICB0b2tlbiA9ICdtZXRhJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsLCBjb250ZXh0KHJ4X3JvbGVfcHJlLCAyKSk7XG4gICAgICAgIHN0cmVhbS5tYXRjaChyeF9OQU1FKTtcbiAgICAgICAgdG9rZW4gPSAna2V5d29yZCc7XG5cbiAgICAgICAgaWYgKHN0cmVhbS5jdXJyZW50KCkubWF0Y2goL14oPzptYXRofGxhdGV4KS8pKSB7XG4gICAgICAgICAgc3RhdGUudG1wX3N0ZXggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCwgY29udGV4dChyeF9yb2xlX3ByZSwgMykpO1xuICAgICAgICBzdHJlYW0ubWF0Y2goL146YC8pO1xuICAgICAgICB0b2tlbiA9ICdtZXRhJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGlmIChzdGF0ZS50bXBfc3RleCkge1xuICAgICAgICAgIHN0YXRlLnRtcF9zdGV4ID0gdW5kZWZpbmVkOyBzdGF0ZS50bXAgPSB7XG4gICAgICAgICAgICBtb2RlOiBtb2RlX3N0ZXgsIGxvY2FsOiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUobW9kZV9zdGV4KVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUudG1wKSB7XG4gICAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gJ2AnKSB7XG4gICAgICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCwgY29udGV4dChyeF9yb2xlX3ByZSwgNCkpO1xuICAgICAgICAgICAgc3RhdGUudG1wID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9rZW4gPSBzdGF0ZS50bXAubW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLnRtcC5sb2NhbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCwgY29udGV4dChyeF9yb2xlX3ByZSwgNCkpO1xuICAgICAgICBzdHJlYW0ubWF0Y2gocnhfVEVYVDIpO1xuICAgICAgICB0b2tlbiA9ICdzdHJpbmcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDpcbiAgICAgICAgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwsIGNvbnRleHQocnhfcm9sZV9wcmUsIDUpKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eYC8pO1xuICAgICAgICB0b2tlbiA9ICdtZXRhJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDU6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsLCBjb250ZXh0KHJ4X3JvbGVfcHJlLCA2KSk7XG4gICAgICAgIHN0cmVhbS5tYXRjaChyeF9UQUlMKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwaGFzZShzdGF0ZSkgPT0gcnhfcm9sZV9zdWYgfHxcbiAgICAgICAgICAgICAgIHN0cmVhbS5tYXRjaChyeF9yb2xlX3N1ZiwgZmFsc2UpKSB7XG5cbiAgICAgIHN3aXRjaCAoc3RhZ2Uoc3RhdGUpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsLCBjb250ZXh0KHJ4X3JvbGVfc3VmLCAxKSk7XG4gICAgICAgIHN0cmVhbS5tYXRjaCgvXmAvKTtcbiAgICAgICAgdG9rZW4gPSAnbWV0YSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCwgY29udGV4dChyeF9yb2xlX3N1ZiwgMikpO1xuICAgICAgICBzdHJlYW0ubWF0Y2gocnhfVEVYVDIpO1xuICAgICAgICB0b2tlbiA9ICdzdHJpbmcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwsIGNvbnRleHQocnhfcm9sZV9zdWYsIDMpKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eYDovKTtcbiAgICAgICAgdG9rZW4gPSAnbWV0YSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCwgY29udGV4dChyeF9yb2xlX3N1ZiwgNCkpO1xuICAgICAgICBzdHJlYW0ubWF0Y2gocnhfTkFNRSk7XG4gICAgICAgIHRva2VuID0gJ2tleXdvcmQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDpcbiAgICAgICAgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwsIGNvbnRleHQocnhfcm9sZV9zdWYsIDUpKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eOi8pO1xuICAgICAgICB0b2tlbiA9ICdtZXRhJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDU6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsLCBjb250ZXh0KHJ4X3JvbGVfc3VmLCA2KSk7XG4gICAgICAgIHN0cmVhbS5tYXRjaChyeF9UQUlMKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwaGFzZShzdGF0ZSkgPT0gcnhfcm9sZSB8fCBzdHJlYW0ubWF0Y2gocnhfcm9sZSwgZmFsc2UpKSB7XG5cbiAgICAgIHN3aXRjaCAoc3RhZ2Uoc3RhdGUpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsLCBjb250ZXh0KHJ4X3JvbGUsIDEpKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eOi8pO1xuICAgICAgICB0b2tlbiA9ICdtZXRhJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsLCBjb250ZXh0KHJ4X3JvbGUsIDIpKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKHJ4X05BTUUpO1xuICAgICAgICB0b2tlbiA9ICdrZXl3b3JkJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsLCBjb250ZXh0KHJ4X3JvbGUsIDMpKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eOi8pO1xuICAgICAgICB0b2tlbiA9ICdtZXRhJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsLCBjb250ZXh0KHJ4X3JvbGUsIDQpKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKHJ4X1RBSUwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBoYXNlKHN0YXRlKSA9PSByeF9zdWJzdGl0dXRpb25fcmVmIHx8XG4gICAgICAgICAgICAgICBzdHJlYW0ubWF0Y2gocnhfc3Vic3RpdHV0aW9uX3JlZiwgZmFsc2UpKSB7XG5cbiAgICAgIHN3aXRjaCAoc3RhZ2Uoc3RhdGUpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsLCBjb250ZXh0KHJ4X3N1YnN0aXR1dGlvbl9yZWYsIDEpKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKHJ4X3N1YnN0aXR1dGlvbl90ZXh0KTtcbiAgICAgICAgdG9rZW4gPSAndmFyaWFibGUtMic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCwgY29udGV4dChyeF9zdWJzdGl0dXRpb25fcmVmLCAyKSk7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15fP18/LykpIHRva2VuID0gJ2xpbmsnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChyeF9mb290bm90ZV9yZWYpKSB7XG4gICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCk7XG4gICAgICB0b2tlbiA9ICdxdW90ZSc7XG4gICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2gocnhfY2l0YXRpb25fcmVmKSkge1xuICAgICAgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwpO1xuICAgICAgdG9rZW4gPSAncXVvdGUnO1xuICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKHJ4X2xpbmtfcmVmMSkpIHtcbiAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsKTtcbiAgICAgIGlmICghc3RyZWFtLnBlZWsoKSB8fCBzdHJlYW0ucGVlaygpLm1hdGNoKC9eXFxXJC8pKSB7XG4gICAgICAgIHRva2VuID0gJ2xpbmsnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocGhhc2Uoc3RhdGUpID09IHJ4X2xpbmtfcmVmMiB8fFxuICAgICAgICAgICAgICAgc3RyZWFtLm1hdGNoKHJ4X2xpbmtfcmVmMiwgZmFsc2UpKSB7XG5cbiAgICAgIHN3aXRjaCAoc3RhZ2Uoc3RhdGUpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGlmICghc3RyZWFtLnBlZWsoKSB8fCBzdHJlYW0ucGVlaygpLm1hdGNoKC9eXFxXJC8pKSB7XG4gICAgICAgICAgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwsIGNvbnRleHQocnhfbGlua19yZWYyLCAxKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyZWFtLm1hdGNoKHJ4X2xpbmtfcmVmMik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsLCBjb250ZXh0KHJ4X2xpbmtfcmVmMiwgMikpO1xuICAgICAgICBzdHJlYW0ubWF0Y2goL15gLyk7XG4gICAgICAgIHRva2VuID0gJ2xpbmsnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwsIGNvbnRleHQocnhfbGlua19yZWYyLCAzKSk7XG4gICAgICAgIHN0cmVhbS5tYXRjaChyeF9URVhUMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCwgY29udGV4dChyeF9saW5rX3JlZjIsIDQpKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eYF8vKTtcbiAgICAgICAgdG9rZW4gPSAnbGluayc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKHJ4X3ZlcmJhdGltKSkge1xuICAgICAgY2hhbmdlKHN0YXRlLCB0b192ZXJiYXRpbSk7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICBpZiAoc3RyZWFtLm5leHQoKSkgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwpO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBmdW5jdGlvbiB0b19leHBsaWNpdChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIHRva2VuID0gbnVsbDtcblxuICAgIGlmIChwaGFzZShzdGF0ZSkgPT0gcnhfc3Vic3RpdHV0aW9uIHx8XG4gICAgICAgIHN0cmVhbS5tYXRjaChyeF9zdWJzdGl0dXRpb24sIGZhbHNlKSkge1xuXG4gICAgICBzd2l0Y2ggKHN0YWdlKHN0YXRlKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX2V4cGxpY2l0LCBjb250ZXh0KHJ4X3N1YnN0aXR1dGlvbiwgMSkpO1xuICAgICAgICBzdHJlYW0ubWF0Y2gocnhfc3Vic3RpdHV0aW9uX3RleHQpO1xuICAgICAgICB0b2tlbiA9ICd2YXJpYWJsZS0yJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fZXhwbGljaXQsIGNvbnRleHQocnhfc3Vic3RpdHV0aW9uLCAyKSk7XG4gICAgICAgIHN0cmVhbS5tYXRjaChyeF9zdWJzdGl0dXRpb25fc2VwYSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX2V4cGxpY2l0LCBjb250ZXh0KHJ4X3N1YnN0aXR1dGlvbiwgMykpO1xuICAgICAgICBzdHJlYW0ubWF0Y2gocnhfc3Vic3RpdHV0aW9uX25hbWUpO1xuICAgICAgICB0b2tlbiA9ICdrZXl3b3JkJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fZXhwbGljaXQsIGNvbnRleHQocnhfc3Vic3RpdHV0aW9uLCA0KSk7XG4gICAgICAgIHN0cmVhbS5tYXRjaChyeF9zdWJzdGl0dXRpb25fdGFpbCk7XG4gICAgICAgIHRva2VuID0gJ21ldGEnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBoYXNlKHN0YXRlKSA9PSByeF9kaXJlY3RpdmUgfHxcbiAgICAgICAgICAgICAgIHN0cmVhbS5tYXRjaChyeF9kaXJlY3RpdmUsIGZhbHNlKSkge1xuXG4gICAgICBzd2l0Y2ggKHN0YWdlKHN0YXRlKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX2V4cGxpY2l0LCBjb250ZXh0KHJ4X2RpcmVjdGl2ZSwgMSkpO1xuICAgICAgICBzdHJlYW0ubWF0Y2gocnhfZGlyZWN0aXZlX25hbWUpO1xuICAgICAgICB0b2tlbiA9ICdrZXl3b3JkJztcblxuICAgICAgICBpZiAoc3RyZWFtLmN1cnJlbnQoKS5tYXRjaCgvXig/Om1hdGh8bGF0ZXgpLykpXG4gICAgICAgICAgc3RhdGUudG1wX3N0ZXggPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChzdHJlYW0uY3VycmVudCgpLm1hdGNoKC9ecHl0aG9uLykpXG4gICAgICAgICAgc3RhdGUudG1wX3B5ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fZXhwbGljaXQsIGNvbnRleHQocnhfZGlyZWN0aXZlLCAyKSk7XG4gICAgICAgIHN0cmVhbS5tYXRjaChyeF9kaXJlY3RpdmVfdGFpbCk7XG4gICAgICAgIHRva2VuID0gJ21ldGEnO1xuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15sYXRleFxccyokLykgfHwgc3RhdGUudG1wX3N0ZXgpIHtcbiAgICAgICAgICBzdGF0ZS50bXBfc3RleCA9IHVuZGVmaW5lZDsgY2hhbmdlKHN0YXRlLCB0b19tb2RlLCB7XG4gICAgICAgICAgICBtb2RlOiBtb2RlX3N0ZXgsIGxvY2FsOiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUobW9kZV9zdGV4KVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX2V4cGxpY2l0LCBjb250ZXh0KHJ4X2RpcmVjdGl2ZSwgMykpO1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ecHl0aG9uXFxzKiQvKSB8fCBzdGF0ZS50bXBfcHkpIHtcbiAgICAgICAgICBzdGF0ZS50bXBfcHkgPSB1bmRlZmluZWQ7IGNoYW5nZShzdGF0ZSwgdG9fbW9kZSwge1xuICAgICAgICAgICAgbW9kZTogbW9kZV9weXRob24sIGxvY2FsOiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUobW9kZV9weXRob24pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwaGFzZShzdGF0ZSkgPT0gcnhfbGluayB8fCBzdHJlYW0ubWF0Y2gocnhfbGluaywgZmFsc2UpKSB7XG5cbiAgICAgIHN3aXRjaCAoc3RhZ2Uoc3RhdGUpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGNoYW5nZShzdGF0ZSwgdG9fZXhwbGljaXQsIGNvbnRleHQocnhfbGluaywgMSkpO1xuICAgICAgICBzdHJlYW0ubWF0Y2gocnhfbGlua19oZWFkKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKHJ4X2xpbmtfbmFtZSk7XG4gICAgICAgIHRva2VuID0gJ2xpbmsnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgY2hhbmdlKHN0YXRlLCB0b19leHBsaWNpdCwgY29udGV4dChyeF9saW5rLCAyKSk7XG4gICAgICAgIHN0cmVhbS5tYXRjaChyeF9saW5rX3RhaWwpO1xuICAgICAgICB0b2tlbiA9ICdtZXRhJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2gocnhfZm9vdG5vdGUpKSB7XG4gICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCk7XG4gICAgICB0b2tlbiA9ICdxdW90ZSc7XG4gICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2gocnhfY2l0YXRpb24pKSB7XG4gICAgICBjaGFuZ2Uoc3RhdGUsIHRvX25vcm1hbCk7XG4gICAgICB0b2tlbiA9ICdxdW90ZSc7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICBzdHJlYW0uZWF0U3BhY2UoKTtcbiAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICBjaGFuZ2Uoc3RhdGUsIHRvX2NvbW1lbnQpO1xuICAgICAgICB0b2tlbiA9ICdjb21tZW50JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gdG9fY29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgcmV0dXJuIGFzX2Jsb2NrKHN0cmVhbSwgc3RhdGUsICdjb21tZW50Jyk7XG4gIH1cblxuICBmdW5jdGlvbiB0b192ZXJiYXRpbShzdHJlYW0sIHN0YXRlKSB7XG4gICAgcmV0dXJuIGFzX2Jsb2NrKHN0cmVhbSwgc3RhdGUsICdtZXRhJyk7XG4gIH1cblxuICBmdW5jdGlvbiBhc19ibG9jayhzdHJlYW0sIHN0YXRlLCB0b2tlbikge1xuICAgIGlmIChzdHJlYW0uZW9sKCkgfHwgc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIHRvX21vZGUoc3RyZWFtLCBzdGF0ZSkge1xuXG4gICAgaWYgKHN0YXRlLmN0eC5tb2RlICYmIHN0YXRlLmN0eC5sb2NhbCkge1xuXG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgIGlmICghc3RyZWFtLmVhdFNwYWNlKCkpIGNoYW5nZShzdGF0ZSwgdG9fbm9ybWFsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGF0ZS5jdHgubW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmN0eC5sb2NhbCk7XG4gICAgfVxuXG4gICAgY2hhbmdlKHN0YXRlLCB0b19ub3JtYWwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGNvbnRleHQocGhhc2UsIHN0YWdlLCBtb2RlLCBsb2NhbCkge1xuICAgIHJldHVybiB7cGhhc2U6IHBoYXNlLCBzdGFnZTogc3RhZ2UsIG1vZGU6IG1vZGUsIGxvY2FsOiBsb2NhbH07XG4gIH1cblxuICBmdW5jdGlvbiBjaGFuZ2Uoc3RhdGUsIHRvaywgY3R4KSB7XG4gICAgc3RhdGUudG9rID0gdG9rO1xuICAgIHN0YXRlLmN0eCA9IGN0eCB8fCB7fTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YWdlKHN0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlLmN0eC5zdGFnZSB8fCAwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGhhc2Uoc3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGUuY3R4LnBoYXNlO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHt0b2s6IHRvX25vcm1hbCwgY3R4OiBjb250ZXh0KHVuZGVmaW5lZCwgMCl9O1xuICAgIH0sXG5cbiAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgdmFyIGN0eCA9IHN0YXRlLmN0eCwgdG1wID0gc3RhdGUudG1wO1xuICAgICAgaWYgKGN0eC5sb2NhbClcbiAgICAgICAgY3R4ID0ge21vZGU6IGN0eC5tb2RlLCBsb2NhbDogQ29kZU1pcnJvci5jb3B5U3RhdGUoY3R4Lm1vZGUsIGN0eC5sb2NhbCl9O1xuICAgICAgaWYgKHRtcClcbiAgICAgICAgdG1wID0ge21vZGU6IHRtcC5tb2RlLCBsb2NhbDogQ29kZU1pcnJvci5jb3B5U3RhdGUodG1wLm1vZGUsIHRtcC5sb2NhbCl9O1xuICAgICAgcmV0dXJuIHt0b2s6IHN0YXRlLnRvaywgY3R4OiBjdHgsIHRtcDogdG1wfTtcbiAgICB9LFxuXG4gICAgaW5uZXJNb2RlOiBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS50bXAgICAgICA/IHtzdGF0ZTogc3RhdGUudG1wLmxvY2FsLCBtb2RlOiBzdGF0ZS50bXAubW9kZX1cbiAgICAgIDogc3RhdGUuY3R4Lm1vZGUgPyB7c3RhdGU6IHN0YXRlLmN0eC5sb2NhbCwgbW9kZTogc3RhdGUuY3R4Lm1vZGV9XG4gICAgICA6IG51bGw7XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLnRvayhzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH07XG59LCAncHl0aG9uJywgJ3N0ZXgnKTtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoJ3RleHQveC1yc3QnLCAncnN0Jyk7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4vLi4vYWRkb24vbW9kZS9zaW1wbGVcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi8uLi9hZGRvbi9tb2RlL3NpbXBsZVwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZVNpbXBsZU1vZGUoXCJydXN0XCIse1xuICBzdGFydDogW1xuICAgIC8vIHN0cmluZyBhbmQgYnl0ZSBzdHJpbmdcbiAgICB7cmVnZXg6IC9iP1wiLywgdG9rZW46IFwic3RyaW5nXCIsIG5leHQ6IFwic3RyaW5nXCJ9LFxuICAgIC8vIHJhdyBzdHJpbmcgYW5kIHJhdyBieXRlIHN0cmluZ1xuICAgIHtyZWdleDogL2I/clwiLywgdG9rZW46IFwic3RyaW5nXCIsIG5leHQ6IFwic3RyaW5nX3Jhd1wifSxcbiAgICB7cmVnZXg6IC9iP3IjK1wiLywgdG9rZW46IFwic3RyaW5nXCIsIG5leHQ6IFwic3RyaW5nX3Jhd19oYXNoXCJ9LFxuICAgIC8vIGNoYXJhY3RlclxuICAgIHtyZWdleDogLycoPzpbXidcXFxcXXxcXFxcKD86W25ydDAnXCJdfHhbXFxkYS1mQS1GXXsyfXx1XFx7W1xcZGEtZkEtRl17Nn1cXH0pKScvLCB0b2tlbjogXCJzdHJpbmctMlwifSxcbiAgICAvLyBieXRlXG4gICAge3JlZ2V4OiAvYicoPzpbXiddfFxcXFwoPzpbJ1xcXFxucnQwXXx4W1xcZGEtZkEtRl17Mn0pKScvLCB0b2tlbjogXCJzdHJpbmctMlwifSxcblxuICAgIHtyZWdleDogLyg/Oig/OlswLTldWzAtOV9dKikoPzooPzpbRWVdWystXT9bMC05X10rKXxcXC5bMC05X10rKD86W0VlXVsrLV0/WzAtOV9dKyk/KSg/OmYzMnxmNjQpPyl8KD86MCg/OmJbMDFfXSt8KD86b1swLTdfXSspfCg/OnhbMC05YS1mQS1GX10rKSl8KD86WzAtOV1bMC05X10qKSkoPzp1OHx1MTZ8dTMyfHU2NHxpOHxpMTZ8aTMyfGk2NHxpc2l6ZXx1c2l6ZSk/LyxcbiAgICAgdG9rZW46IFwibnVtYmVyXCJ9LFxuICAgIHtyZWdleDogLyhsZXQoPzpcXHMrbXV0KT98Zm58ZW51bXxtb2R8c3RydWN0fHR5cGV8dW5pb24pKFxccyspKFthLXpBLVpfXVthLXpBLVowLTlfXSopLywgdG9rZW46IFtcImtleXdvcmRcIiwgbnVsbCwgXCJkZWZcIl19LFxuICAgIHtyZWdleDogLyg/OmFic3RyYWN0fGFsaWdub2Z8YXN8YXN5bmN8YXdhaXR8Ym94fGJyZWFrfGNvbnRpbnVlfGNvbnN0fGNyYXRlfGRvfGR5bnxlbHNlfGVudW18ZXh0ZXJufGZufGZvcnxmaW5hbHxpZnxpbXBsfGlufGxvb3B8bWFjcm98bWF0Y2h8bW9kfG1vdmV8b2Zmc2V0b2Z8b3ZlcnJpZGV8cHJpdnxwcm9jfHB1YnxwdXJlfHJlZnxyZXR1cm58c2VsZnxzaXplb2Z8c3RhdGljfHN0cnVjdHxzdXBlcnx0cmFpdHx0eXBlfHR5cGVvZnx1bmlvbnx1bnNhZmV8dW5zaXplZHx1c2V8dmlydHVhbHx3aGVyZXx3aGlsZXx5aWVsZClcXGIvLCB0b2tlbjogXCJrZXl3b3JkXCJ9LFxuICAgIHtyZWdleDogL1xcYig/OlNlbGZ8aXNpemV8dXNpemV8Y2hhcnxib29sfHU4fHUxNnx1MzJ8dTY0fGYxNnxmMzJ8ZjY0fGk4fGkxNnxpMzJ8aTY0fHN0cnxPcHRpb24pXFxiLywgdG9rZW46IFwiYXRvbVwifSxcbiAgICB7cmVnZXg6IC9cXGIoPzp0cnVlfGZhbHNlfFNvbWV8Tm9uZXxPa3xFcnIpXFxiLywgdG9rZW46IFwiYnVpbHRpblwifSxcbiAgICB7cmVnZXg6IC9cXGIoZm4pKFxccyspKFthLXpBLVpfXVthLXpBLVowLTlfXSopLyxcbiAgICAgdG9rZW46IFtcImtleXdvcmRcIiwgbnVsbCAsXCJkZWZcIl19LFxuICAgIHtyZWdleDogLyMhP1xcWy4qXFxdLywgdG9rZW46IFwibWV0YVwifSxcbiAgICB7cmVnZXg6IC9cXC9cXC8uKi8sIHRva2VuOiBcImNvbW1lbnRcIn0sXG4gICAge3JlZ2V4OiAvXFwvXFwqLywgdG9rZW46IFwiY29tbWVudFwiLCBuZXh0OiBcImNvbW1lbnRcIn0sXG4gICAge3JlZ2V4OiAvWy0rXFwvKj08PiFdKy8sIHRva2VuOiBcIm9wZXJhdG9yXCJ9LFxuICAgIHtyZWdleDogL1thLXpBLVpfXVxcdyohLyx0b2tlbjogXCJ2YXJpYWJsZS0zXCJ9LFxuICAgIHtyZWdleDogL1thLXpBLVpfXVxcdyovLCB0b2tlbjogXCJ2YXJpYWJsZVwifSxcbiAgICB7cmVnZXg6IC9bXFx7XFxbXFwoXS8sIGluZGVudDogdHJ1ZX0sXG4gICAge3JlZ2V4OiAvW1xcfVxcXVxcKV0vLCBkZWRlbnQ6IHRydWV9XG4gIF0sXG4gIHN0cmluZzogW1xuICAgIHtyZWdleDogL1wiLywgdG9rZW46IFwic3RyaW5nXCIsIG5leHQ6IFwic3RhcnRcIn0sXG4gICAge3JlZ2V4OiAvKD86W15cXFxcXCJdfFxcXFwoPzoufCQpKSovLCB0b2tlbjogXCJzdHJpbmdcIn1cbiAgXSxcbiAgc3RyaW5nX3JhdzogW1xuICAgIHtyZWdleDogL1wiLywgdG9rZW46IFwic3RyaW5nXCIsIG5leHQ6IFwic3RhcnRcIn0sXG4gICAge3JlZ2V4OiAvW15cIl0qLywgdG9rZW46IFwic3RyaW5nXCJ9XG4gIF0sXG4gIHN0cmluZ19yYXdfaGFzaDogW1xuICAgIHtyZWdleDogL1wiIysvLCB0b2tlbjogXCJzdHJpbmdcIiwgbmV4dDogXCJzdGFydFwifSxcbiAgICB7cmVnZXg6IC8oPzpbXlwiXXxcIig/ISMpKSovLCB0b2tlbjogXCJzdHJpbmdcIn1cbiAgXSxcbiAgY29tbWVudDogW1xuICAgIHtyZWdleDogLy4qP1xcKlxcLy8sIHRva2VuOiBcImNvbW1lbnRcIiwgbmV4dDogXCJzdGFydFwifSxcbiAgICB7cmVnZXg6IC8uKi8sIHRva2VuOiBcImNvbW1lbnRcIn1cbiAgXSxcbiAgbWV0YToge1xuICAgIGRvbnRJbmRlbnRTdGF0ZXM6IFtcImNvbW1lbnRcIl0sXG4gICAgZWxlY3RyaWNJbnB1dDogL15cXHMqXFx9JC8sXG4gICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiLypcIixcbiAgICBibG9ja0NvbW1lbnRFbmQ6IFwiKi9cIixcbiAgICBsaW5lQ29tbWVudDogXCIvL1wiLFxuICAgIGZvbGQ6IFwiYnJhY2VcIlxuICB9XG59KTtcblxuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtcnVzdHNyY1wiLCBcInJ1c3RcIik7XG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3J1c3RcIiwgXCJydXN0XCIpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG5cbi8vIFNBUyBtb2RlIGNvcHlyaWdodCAoYykgMjAxNiBKYXJlZCBEZWFuLCBTQVMgSW5zdGl0dXRlXG4vLyBDcmVhdGVkIGJ5IEphcmVkIERlYW5cblxuLy8gVE9ET1xuLy8gaW5kZW50IGFuZCBkZS1pbmRlbnRcbi8vIGlkZW50aWZ5IG1hY3JvIHZhcmlhYmxlc1xuXG5cbi8vRGVmaW5pdGlvbnNcbi8vICBjb21tZW50IC0tIHRleHQgd2l0aGluICogOyBvciAvKiAqL1xuLy8gIGtleXdvcmQgLS0gU0FTIGxhbmd1YWdlIHZhcmlhYmxlXG4vLyAgdmFyaWFibGUgLS0gbWFjcm8gdmFyaWFibGVzIHN0YXJ0cyB3aXRoICcmJyBvciB2YXJpYWJsZSBmb3JtYXRzXG4vLyAgdmFyaWFibGUtMiAtLSBEQVRBIFN0ZXAsIHByb2MsIG9yIG1hY3JvIG5hbWVzXG4vLyAgc3RyaW5nIC0tIHRleHQgd2l0aGluICcgJyBvciBcIiBcIlxuLy8gIG9wZXJhdG9yIC0tIG51bWVyaWMgb3BlcmF0b3IgKyAvIC0gKiAqKiBsZSBlcSBnZSAuLi4gYW5kIHNvIG9uXG4vLyAgYnVpbHRpbiAtLSBwcm9jICVtYWNybyBkYXRhIHJ1biBtZW5kXG4vLyAgYXRvbVxuLy8gIGRlZlxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJzYXNcIiwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB3b3JkcyA9IHt9O1xuICAgIHZhciBpc0RvdWJsZU9wZXJhdG9yU3ltID0ge1xuICAgICAgZXE6ICdvcGVyYXRvcicsXG4gICAgICBsdDogJ29wZXJhdG9yJyxcbiAgICAgIGxlOiAnb3BlcmF0b3InLFxuICAgICAgZ3Q6ICdvcGVyYXRvcicsXG4gICAgICBnZTogJ29wZXJhdG9yJyxcbiAgICAgIFwiaW5cIjogJ29wZXJhdG9yJyxcbiAgICAgIG5lOiAnb3BlcmF0b3InLFxuICAgICAgb3I6ICdvcGVyYXRvcidcbiAgICB9O1xuICAgIHZhciBpc0RvdWJsZU9wZXJhdG9yQ2hhciA9IC8oPD18Pj18IT18PD4pLztcbiAgICB2YXIgaXNTaW5nbGVPcGVyYXRvckNoYXIgPSAvWz1cXCg6XFwpLHt9Lio8PitcXC1cXC9eXFxbXFxdXS87XG5cbiAgICAvLyBUYWtlcyBhIHN0cmluZyBvZiB3b3JkcyBzZXBhcmF0ZWQgYnkgc3BhY2VzIGFuZCBhZGRzIHRoZW0gYXNcbiAgICAvLyBrZXlzIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCAnc3R5bGUnXG4gICAgZnVuY3Rpb24gZGVmaW5lKHN0eWxlLCBzdHJpbmcsIGNvbnRleHQpIHtcbiAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgIHZhciBzcGxpdCA9IHN0cmluZy5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwbGl0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgd29yZHNbc3BsaXRbaV1dID0ge3N0eWxlOiBzdHlsZSwgc3RhdGU6IGNvbnRleHR9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vZGF0YXN0ZXBcbiAgICBkZWZpbmUoJ2RlZicsICdzdGFjayBwZ20gdmlldyBzb3VyY2UgZGVidWcgbmVzdGluZyBub2xpc3QnLCBbJ2luRGF0YVN0ZXAnXSk7XG4gICAgZGVmaW5lKCdkZWYnLCAnaWYgd2hpbGUgdW50aWwgZm9yIGRvIGRvOyBlbmQgZW5kOyB0aGVuIGVsc2UgY2FuY2VsJywgWydpbkRhdGFTdGVwJ10pO1xuICAgIGRlZmluZSgnZGVmJywgJ2xhYmVsIGZvcm1hdCBfbl8gX2Vycm9yXycsIFsnaW5EYXRhU3RlcCddKTtcbiAgICBkZWZpbmUoJ2RlZicsICdBTFRFUiBCVUZOTyBCVUZTSVpFIENOVExMRVYgQ09NUFJFU1MgRExETUdBQ1RJT04gRU5DUllQVCBFTkNSWVBUS0VZIEVYVEVORE9CU0NPVU5URVIgR0VOTUFYIEdFTk5VTSBJTkRFWCBMQUJFTCBPQlNCVUYgT1VUUkVQIFBXIFBXUkVRIFJFQUQgUkVQRU1QVFkgUkVQTEFDRSBSRVVTRSBST0xFIFNPUlRFREJZIFNQSUxMIFRPQlNOTyBUWVBFIFdSSVRFIEZJTEVDTE9TRSBGSVJTVE9CUyBJTiBPQlMgUE9JTlRPQlMgV0hFUkUgV0hFUkVVUCBJRFhOQU1FIElEWFdIRVJFIERST1AgS0VFUCBSRU5BTUUnLCBbJ2luRGF0YVN0ZXAnXSk7XG4gICAgZGVmaW5lKCdkZWYnLCAnZmlsZXZhciBmaW5mbyBmaW52IGZpcG5hbWUgZmlwbmFtZWwgZmlwc3RhdGUgZmlyc3QgZmlyc3RvYnMgZmxvb3InLCBbJ2luRGF0YVN0ZXAnXSk7XG4gICAgZGVmaW5lKCdkZWYnLCAndmFyZm10IHZhcmluZm10IHZhcmxhYmVsIHZhcmxlbiB2YXJuYW1lIHZhcm51bSB2YXJyYXkgdmFycmF5eCB2YXJ0eXBlIHZlcmlmeSB2Zm9ybWF0IHZmb3JtYXRkIHZmb3JtYXRkeCB2Zm9ybWF0biB2Zm9ybWF0bnggdmZvcm1hdHcgdmZvcm1hdHd4IHZmb3JtYXR4IHZpbmFycmF5IHZpbmFycmF5eCB2aW5mb3JtYXQgdmluZm9ybWF0ZCB2aW5mb3JtYXRkeCB2aW5mb3JtYXRuIHZpbmZvcm1hdG54IHZpbmZvcm1hdHcgdmluZm9ybWF0d3ggdmluZm9ybWF0eCB2bGFiZWwgdmxhYmVseCB2bGVuZ3RoIHZsZW5ndGh4IHZuYW1lIHZuYW1leCB2bmZlcnIgdnR5cGUgdnR5cGV4IHdlZWtkYXknLCBbJ2luRGF0YVN0ZXAnXSk7XG4gICAgZGVmaW5lKCdkZWYnLCAnemlwZmlwcyB6aXBuYW1lIHppcG5hbWVsIHppcHN0YXRlJywgWydpbkRhdGFTdGVwJ10pO1xuICAgIGRlZmluZSgnZGVmJywgJ3B1dCBwdXRjIHB1dG4nLCBbJ2luRGF0YVN0ZXAnXSk7XG4gICAgZGVmaW5lKCdidWlsdGluJywgJ2RhdGEgcnVuJywgWydpbkRhdGFTdGVwJ10pO1xuXG5cbiAgICAvL3Byb2NcbiAgICBkZWZpbmUoJ2RlZicsICdkYXRhJywgWydpblByb2MnXSk7XG5cbiAgICAvLyBmbG93IGNvbnRyb2wgZm9yIG1hY3Jvc1xuICAgIGRlZmluZSgnZGVmJywgJyVpZiAlZW5kICVlbmQ7ICVlbHNlICVlbHNlOyAlZG8gJWRvOyAldGhlbicsIFsnaW5NYWNybyddKTtcblxuICAgIC8vZXZlcnl3aGVyZVxuICAgIGRlZmluZSgnYnVpbHRpbicsICdwcm9jIHJ1bjsgcXVpdDsgbGlibmFtZSBmaWxlbmFtZSAlbWFjcm8gJW1lbmQgb3B0aW9uIG9wdGlvbnMnLCBbJ0FMTCddKTtcblxuICAgIGRlZmluZSgnZGVmJywgJ2Zvb3Rub3RlIHRpdGxlIGxpYm5hbWUgb2RzJywgWydBTEwnXSk7XG4gICAgZGVmaW5lKCdkZWYnLCAnJWxldCAlcHV0ICVnbG9iYWwgJXN5c2Z1bmMgJWV2YWwgJywgWydBTEwnXSk7XG4gICAgLy8gYXV0b21hdGljIG1hY3JvIHZhcmlhYmxlcyBodHRwOi8vc3VwcG9ydC5zYXMuY29tL2RvY3VtZW50YXRpb24vY2RsL2VuL21jcm9scmVmLzYxODg1L0hUTUwvZGVmYXVsdC92aWV3ZXIuaHRtI2EwMDMxNjcwMjMuaHRtXG4gICAgZGVmaW5lKCd2YXJpYWJsZScsICcmc3lzYnVmZnIgJnN5c2NjICZzeXNjaGFyd2lkdGggJnN5c2NtZCAmc3lzZGF0ZSAmc3lzZGF0ZTkgJnN5c2RheSAmc3lzZGV2aWMgJnN5c2RtZyAmc3lzZHNuICZzeXNlbmNvZGluZyAmc3lzZW52ICZzeXNlcnIgJnN5c2Vycm9ydGV4dCAmc3lzZmlscmMgJnN5c2hvc3RuYW1lICZzeXNpbmRleCAmc3lzaW5mbyAmc3lzam9iaWQgJnN5c2xhc3QgJnN5c2xja3JjICZzeXNsaWJyYyAmc3lzbG9nYXBwbG5hbWUgJnN5c21hY3JvbmFtZSAmc3lzbWVudiAmc3lzbXNnICZzeXNuY3B1ICZzeXNvZHNwYXRoICZzeXNwYXJtICZzeXNwYnVmZiAmc3lzcHJvY2Vzc2lkICZzeXNwcm9jZXNzbmFtZSAmc3lzcHJvY25hbWUgJnN5c3JjICZzeXNzY3AgJnN5c3NjcGwgJnN5c3NjcGwgJnN5c3NpdGUgJnN5c3N0YXJ0aWQgJnN5c3N0YXJ0bmFtZSAmc3lzdGNwaXBob3N0bmFtZSAmc3lzdGltZSAmc3lzdXNlcmlkICZzeXN2ZXIgJnN5c3Zsb25nICZzeXN2bG9uZzQgJnN5c3dhcm5pbmd0ZXh0JywgWydBTEwnXSk7XG5cbiAgICAvL2Zvb3Rub3RlWzEtOV0/IHRpdGxlWzEtOV0/XG5cbiAgICAvL29wdGlvbnMgc3RhdGVtZW50XG4gICAgZGVmaW5lKCdkZWYnLCAnc291cmNlMiBub3NvdXJjZTIgcGFnZSBwYWdlbm8gcGFnZXNpemUnLCBbJ0FMTCddKTtcblxuICAgIC8vcHJvYyBhbmQgZGF0YXN0ZXBcbiAgICBkZWZpbmUoJ2RlZicsICdfYWxsXyBfY2hhcmFjdGVyXyBfY21kXyBfZnJlcV8gX2lfIF9pbmZpbGVfIF9sYXN0XyBfbXNnXyBfbnVsbF8gX251bWVyaWNfIF90ZW1wb3JhcnlfIF90eXBlXyBhYm9ydCBhYnMgYWRkciBhZGpyc3EgYWlyeSBhbHBoYSBhbHRlciBhbHRsb2cgYWx0cHJpbnQgYW5kIGFyY29zIGFycmF5IGFyc2luIGFzIGF0YW4gYXR0cmMgYXR0cmliIGF0dHJuIGF1dGhzZXJ2ZXIgYXV0b2V4ZWMgYXdzY29udHJvbCBhd3NkZWYgYXdzbWVudSBhd3NtZW51bWVyZ2UgYXdzdGl0bGUgYmFja3dhcmQgYmFuZCBiYXNlIGJldGFpbnYgYmV0d2VlbiBibG9ja3NpemUgYmxzaGlmdCBibm90IGJvciBicnNoaWZ0IGJ1Zm5vIGJ1ZnNpemUgYnhvciBieSBieWVyciBieWxpbmUgYnl0ZSBjYWxjdWxhdGVkIGNhbGwgY2FyZHMgY2FyZHM0IGNhdGNhY2hlIGNidWZubyBjZGYgY2VpbCBjZW50ZXIgY2V4aXN0IGNoYW5nZSBjaGlzcSBjaW52IGNsYXNzIGNsZWFudXAgY2xvc2UgY25vbmN0IGNudGxsZXYgY29hbGVzY2UgY29kZWdlbiBjb2wgY29sbGF0ZSBjb2xsaW4gY29sdW1uIGNvbWFtaWQgY29tYXV4MSBjb21hdXgyIGNvbWRlZiBjb21wYmwgY29tcG91bmQgY29tcHJlc3MgY29uZmlnIGNvbnRpbnVlIGNvbnZlcnQgY29zIGNvc2ggY3B1aWQgY3JlYXRlIGNyb3NzIGNyb3NzdGFiIGNzcyBjdXJvYnMgY3YgZGFjY2RiIGRhY2NkYnNsIGRhY2NzbCBkYWNjc3lkIGRhY2N0YWIgZGFpcnkgZGF0YWxpbmVzIGRhdGFsaW5lczQgZGF0ZWp1bCBkYXRlcGFydCBkYXRldGltZSBkYXkgZGJjc2xhbmcgZGJjc3R5cGUgZGNsb3NlIGRkZm0gZGRtIGRlbGV0ZSBkZWxpbWl0ZXIgZGVwZGIgZGVwZGJzbCBkZXBzbCBkZXBzeWQgZGVwdGFiIGRlcXVvdGUgZGVzY2VuZGluZyBkZXNjcmlwdCBkZXNpZ249IGRldmljZSBkZmxhbmcgZGhtcyBkaWYgZGlnYW1tYSBkaW0gZGluZm8gZGlzcGxheSBkaXN0aW5jdCBka3JpY29uZCBka3JvY29uZCBkbG0gZG51bSBkbyBkb3BlbiBkb3B0bmFtZSBkb3B0bnVtIGRyZWFkIGRyb3AgZHJvcG5vdGUgZHNuYW1lIGRzbmZlcnIgZWNobyBlbHNlIGVtYWlsZGxnIGVtYWlsaWQgZW1haWxwdyBlbWFpbHNlcnZlciBlbWFpbHN5cyBlbmNyeXB0IGVuZCBlbmRzYXMgZW5naW5lIGVvZiBlb3YgZXJmIGVyZmMgZXJyb3IgZXJyb3JjaGVjayBlcnJvcnMgZXhpc3QgZXhwIGZhcHBlbmQgZmNsb3NlIGZjb2wgZmRlbGV0ZSBmZWVkYmFjayBmZXRjaCBmZXRjaG9icyBmZXhpc3QgZmdldCBmaWxlIGZpbGVjbG9zZSBmaWxlZXhpc3QgZmlsZWZtdCBmaWxlbmFtZSBmaWxlcmVmICBmbXRlcnIgZm10c2VhcmNoIGZub25jdCBmbm90ZSBmb250IGZvbnRhbGlhcyAgZm9wZW4gZm9wdG5hbWUgZm9wdG51bSBmb3JjZSBmb3JtYXR0ZWQgZm9ybWNoYXIgZm9ybWRlbGltIGZvcm1kbGltIGZvcndhcmQgZnBvaW50IGZwb3MgZnB1dCBmcmVhZCBmcmV3aW5kIGZybGVuIGZyb20gZnNlcCBmdXp6IGZ3cml0ZSBnYW1pbnYgZ2FtbWEgZ2V0b3B0aW9uIGdldHZhcmMgZ2V0dmFybiBnbyBnb3RvIGdyb3VwIGd3aW5kb3cgaGJhciBoYm91bmQgaGVscGVudiBoZWxwbG9jIGhtcyBob25vcmFwcGVhcmFuY2UgaG9zdGhlbHAgaG9zdHByaW50IGhvdXIgaHBjdCBodG1sIGh2YXIgaWJlc3NlbCBpYnIgaWQgaWYgaW5kZXggaW5kZXhjIGluZGV4dyBpbml0Y21kIGluaXRzdG10IGlubmVyIGlucHV0IGlucHV0YyBpbnB1dG4gaW5yIGluc2VydCBpbnQgaW50Y2sgaW50bnggaW50byBpbnRyciBpbnZhbGlkZGF0YSBpcnIgaXMgamJlc3NlbCBqb2luIGp1bGRhdGUga2VlcCBrZW50YiBrdXJ0b3NpcyBsYWJlbCBsYWcgbGFzdCBsYm91bmQgbGVhdmUgbGVmdCBsZW5ndGggbGV2ZWxzIGxnYW1tYSBsaWIgIGxpYnJhcnkgbGlicmVmIGxpbmUgbGluZXNpemUgbGluayBsaXN0IGxvZyBsb2cxMCBsb2cyIGxvZ3BkZiBsb2dwbWYgbG9nc2RmIGxvc3RjYXJkIGxvd2Nhc2UgbHJlY2wgbHMgbWFjcm8gbWFjcm9nZW4gbWFwcyBtYXV0b3NvdXJjZSBtYXggbWF4ZGVjIG1heHIgbWR5IG1lYW4gbWVhc3VyZXMgbWVkaWFuIG1lbXR5cGUgbWVyZ2UgbWVycm9yIG1pbiBtaW51dGUgbWlzc2luZyBtaXNzb3ZlciBtbG9naWMgbW9kIG1vZGUgbW9kZWwgbW9kaWZ5IG1vbnRoIG1vcGVuIG1vcnQgbXByaW50IG1yZWNhbGwgbXNnbGV2ZWwgbXN5bXRhYm1heCBtdmFyc2l6ZSBteXkgbiBuZXN0IG5ldHB2IG5ldyBuZXdzIG5taXNzIG5vIG5vYmF0Y2ggbm9icyBub2NhcHMgbm9jYXJkaW1hZ2Ugbm9jZW50ZXIgbm9jaGFyY29kZSBub2NtZG1hYyBub2NvbCBub2N1bSBub2RhdGUgbm9kYmNzIG5vZGV0YWlscyBub2RtciBub2RtcyBub2Rtc2JhdGNoIG5vZHVwIG5vZHVwa2V5IG5vZHVwbGljYXRlcyBub2VjaG9hdXRvIG5vZXF1YWxzIG5vZXJyb3JhYmVuZCBub2V4aXR3aW5kb3dzIG5vZnVsbHN0aW1lciBub2ljb24gbm9pbXBsbWFjIG5vaW50IG5vbGlzdCBub2xvYWRsaXN0IG5vbWlzcyBub21sb2dpYyBub21wcmludCBub21yZWNhbGwgbm9tc2djYXNlIG5vbXN0b3JlZCBub211bHRlbnZhcHBsIG5vbm90ZXMgbm9udW1iZXIgbm9vYnMgbm9vdnAgbm9wYWQgbm9wZXJjZW50IG5vcHJpbnQgbm9wcmludGluaXQgbm9ybWFsIG5vcm93IG5vcnNhc3VzZXIgbm9zZXRpbml0ICBub3NwbGFzaCBub3N5bWJvbGdlbiBub3RlIG5vdGVzIG5vdGl0bGUgbm90aXRsZXMgbm90c29ydGVkIG5vdmVyYm9zZSBub3hzeW5jIG5veHdhaXQgbnB2IG51bGwgbnVtYmVyIG51bWtleXMgbnVtbW91c2VrZXlzIG53YXkgb2JzICBvbiBvcGVuICAgICBvcmRlciBvcmRpbmFsIG90aGVyd2lzZSBvdXQgb3V0ZXIgb3V0cD0gb3V0cHV0IG92ZXIgb3ZwIHAoMSA1IDEwIDI1IDUwIDc1IDkwIDk1IDk5KSBwYWQgcGFkMiAgcGFpcmVkIHBhcm0gcGFybWNhcmRzIHBhdGggcGF0aGRsbCBwYXRobmFtZSBwZGYgcGVlayBwZWVrYyBwZmtleSBwbWYgcG9pbnQgcG9pc3NvbiBwb2tlIHBvc2l0aW9uIHByaW50ZXIgcHJvYmJldGEgcHJvYmJubWwgcHJvYmNoaSBwcm9iZiBwcm9iZ2FtIHByb2JoeXByIHByb2JpdCBwcm9ibmVnYiBwcm9ibm9ybSBwcm9ic2lnIHByb2J0IHByb2NsZWF2ZSBwcnQgcHMgIHB3IHB3cmVxIHF0ciBxdW90ZSByIHJhbmJpbiByYW5jYXUgcmFuZG9tIHJhbmV4cCByYW5nYW0gcmFuZ2UgcmFua3MgcmFubm9yIHJhbnBvaSByYW50YmwgcmFudHJpIHJhbnVuaSByY29yciByZWFkIHJlY2ZtIHJlZ2lzdGVyIHJlZ3IgcmVtb3RlIHJlbW92ZSByZW5hbWUgcmVwZWF0IHJlcGVhdGVkIHJlcGxhY2UgcmVzb2x2ZSByZXRhaW4gcmV0dXJuIHJldXNlIHJldmVyc2UgcmV3aW5kIHJpZ2h0IHJvdW5kIHJzcXVhcmUgcnRmIHJ0cmFjZSBydHJhY2Vsb2MgcyBzMiBzYW1wbG9jIHNhc2F1dG9zIHNhc2NvbnRyb2wgc2FzZnJzY3Igc2FzbXNnIHNhc21zdG9yZSBzYXNzY3JpcHQgc2FzdXNlciBzYXZpbmcgc2NhbiBzZGYgc2Vjb25kIHNlbGVjdCBzZWxlY3Rpb24gc2VwYXJhdGVkIHNlcSBzZXJyb3Igc2V0IHNldGNvbW0gc2V0b3Qgc2lnbiBzaW1wbGUgc2luIHNpbmggc2l0ZWluZm8gc2tld25lc3Mgc2tpcCBzbGUgc2xzIHNvcnRlZGJ5IHNvcnRwZ20gc29ydHNlcSBzb3J0c2l6ZSBzb3VuZGV4ICBzcGVkaXMgc3BsYXNobG9jYXRpb24gc3BsaXQgc3Bvb2wgc3FydCBzdGFydCBzdGQgc3RkZXJyIHN0ZGluIHN0ZmlwcyBzdGltZXIgc3RuYW1lIHN0bmFtZWwgc3RvcCBzdG9wb3ZlciBzdWIgc3ViZ3JvdXAgc3VicG9wbiBzdWJzdHIgc3VtIHN1bXdndCBzeW1ib2wgc3ltYm9sZ2VuIHN5bWdldCBzeW1wdXQgc3lzZ2V0IHN5c2luIHN5c2xlYXZlIHN5c21zZyBzeXNwYXJtIHN5c3ByaW50IHN5c3ByaW50Zm9udCBzeXNwcm9kIHN5c3JjIHN5c3RlbSB0IHRhYmxlIHRhYmxlcyB0YW4gdGFuaCB0YXBlY2xvc2UgdGJ1ZnNpemUgdGVybWluYWwgdGVzdCB0aGVuIHRpbWVwYXJ0IHRpbnYgIHRub25jdCB0byB0b2RheSB0b2wgdG9vbGRlZiB0b3RwZXIgdHJhbnNmb3Jtb3V0IHRyYW5zbGF0ZSB0cmFudGFiIHRyYW53cmQgdHJpZ2FtbWEgdHJpbSB0cmltbiB0cnVuYyB0cnVuY292ZXIgdHlwZSB1bmZvcm1hdHRlZCB1bmlmb3JtIHVuaW9uIHVudGlsIHVwY2FzZSB1cGRhdGUgdXNlciB1c2VyaWNvbiB1c3MgdmFsaWRhdGUgdmFsdWUgdmFyICB3ZWlnaHQgd2hlbiB3aGVyZSB3aGlsZSB3aW5jaGFyc2V0IHdpbmRvdyB3b3JrIHdvcmtpbml0IHdvcmt0ZXJtIHdyaXRlIHdzdW0geHN5bmMgeHdhaXQgeWVhcmN1dG9mZiB5ZXMgeXlxICBtaW4gbWF4JywgWydpbkRhdGFTdGVwJywgJ2luUHJvYyddKTtcbiAgICBkZWZpbmUoJ29wZXJhdG9yJywgJ2FuZCBub3QgJywgWydpbkRhdGFTdGVwJywgJ2luUHJvYyddKTtcblxuICAgIC8vIE1haW4gZnVuY3Rpb25cbiAgICBmdW5jdGlvbiB0b2tlbml6ZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAvLyBGaW5hbGx5IGFkdmFuY2UgdGhlIHN0cmVhbVxuICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgICAgLy8gQkxPQ0tDT01NRU5UXG4gICAgICBpZiAoY2ggPT09ICcvJyAmJiBzdHJlYW0uZWF0KCcqJykpIHtcbiAgICAgICAgc3RhdGUuY29udGludWVDb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5jb250aW51ZUNvbW1lbnQgPT09IHRydWUpIHsgLy8gaW4gY29tbWVudCBibG9ja1xuICAgICAgICAvL2NvbW1lbnQgZW5kcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lXG4gICAgICAgIGlmIChjaCA9PT0gJyonICYmIHN0cmVhbS5wZWVrKCkgPT09ICcvJykge1xuICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgc3RhdGUuY29udGludWVDb21tZW50ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLnNraXBUbygnKicpKSB7IC8vY29tbWVudCBpcyBwb3RlbnRpYWxseSBsYXRlciBpbiBsaW5lXG4gICAgICAgICAgc3RyZWFtLnNraXBUbygnKicpO1xuICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgaWYgKHN0cmVhbS5lYXQoJy8nKSlcbiAgICAgICAgICAgIHN0YXRlLmNvbnRpbnVlQ29tbWVudCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaCA9PSBcIipcIiAmJiBzdHJlYW0uY29sdW1uKCkgPT0gc3RyZWFtLmluZGVudGF0aW9uKCkpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpXG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIlxuICAgICAgfVxuXG4gICAgICAvLyBEb3VibGVPcGVyYXRvciBtYXRjaFxuICAgICAgdmFyIGRvdWJsZU9wZXJhdG9yID0gY2ggKyBzdHJlYW0ucGVlaygpO1xuXG4gICAgICBpZiAoKGNoID09PSAnXCInIHx8IGNoID09PSBcIidcIikgJiYgIXN0YXRlLmNvbnRpbnVlU3RyaW5nKSB7XG4gICAgICAgIHN0YXRlLmNvbnRpbnVlU3RyaW5nID0gY2hcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCJcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuY29udGludWVTdHJpbmcpIHtcbiAgICAgICAgaWYgKHN0YXRlLmNvbnRpbnVlU3RyaW5nID09IGNoKSB7XG4gICAgICAgICAgc3RhdGUuY29udGludWVTdHJpbmcgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5za2lwVG8oc3RhdGUuY29udGludWVTdHJpbmcpKSB7XG4gICAgICAgICAgLy8gcXVvdGUgZm91bmQgb24gdGhpcyBsaW5lXG4gICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICBzdGF0ZS5jb250aW51ZVN0cmluZyA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5jb250aW51ZVN0cmluZyAhPT0gbnVsbCAmJiBzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUbyhzdGF0ZS5jb250aW51ZVN0cmluZykgfHwgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH0gZWxzZSBpZiAoL1tcXGRcXC5dLy50ZXN0KGNoKSkgeyAvL2ZpbmQgbnVtYmVyc1xuICAgICAgICBpZiAoY2ggPT09IFwiLlwiKVxuICAgICAgICAgIHN0cmVhbS5tYXRjaCgvXlswLTldKyhbZUVdW1xcLStdP1swLTldKyk/Lyk7XG4gICAgICAgIGVsc2UgaWYgKGNoID09PSBcIjBcIilcbiAgICAgICAgICBzdHJlYW0ubWF0Y2goL15beFhdWzAtOWEtZkEtRl0rLykgfHwgc3RyZWFtLm1hdGNoKC9eMFswLTddKy8pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgc3RyZWFtLm1hdGNoKC9eWzAtOV0qXFwuP1swLTldKihbZUVdW1xcLStdP1swLTldKyk/Lyk7XG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgfSBlbHNlIGlmIChpc0RvdWJsZU9wZXJhdG9yQ2hhci50ZXN0KGNoICsgc3RyZWFtLnBlZWsoKSkpIHsgLy8gVFdPIFNZTUJPTCBUT0tFTlNcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgIH0gZWxzZSBpZiAoaXNEb3VibGVPcGVyYXRvclN5bS5oYXNPd25Qcm9wZXJ0eShkb3VibGVPcGVyYXRvcikpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICcgJylcbiAgICAgICAgICByZXR1cm4gaXNEb3VibGVPcGVyYXRvclN5bVtkb3VibGVPcGVyYXRvci50b0xvd2VyQ2FzZSgpXTtcbiAgICAgIH0gZWxzZSBpZiAoaXNTaW5nbGVPcGVyYXRvckNoYXIudGVzdChjaCkpIHsgLy8gU0lOR0xFIFNZTUJPTCBUT0tFTlNcbiAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgIH1cblxuICAgICAgLy8gTWF0Y2hlcyBvbmUgd2hvbGUgd29yZCAtLSBldmVuIGlmIHRoZSB3b3JkIGlzIGEgY2hhcmFjdGVyXG4gICAgICB2YXIgd29yZDtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1slJjtcXHddKy8sIGZhbHNlKSAhPSBudWxsKSB7XG4gICAgICAgIHdvcmQgPSBjaCArIHN0cmVhbS5tYXRjaCgvWyUmO1xcd10rLywgdHJ1ZSk7XG4gICAgICAgIGlmICgvJi8udGVzdCh3b3JkKSkgcmV0dXJuICd2YXJpYWJsZSdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdvcmQgPSBjaDtcbiAgICAgIH1cbiAgICAgIC8vIHRoZSB3b3JkIGFmdGVyIERBVEEgUFJPQyBvciBNQUNST1xuICAgICAgaWYgKHN0YXRlLm5leHR3b3JkKSB7XG4gICAgICAgIHN0cmVhbS5tYXRjaCgvW1xcd10rLyk7XG4gICAgICAgIC8vIG1hdGNoIG1lbW5hbWUubGlibmFtZVxuICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJy4nKSBzdHJlYW0uc2tpcFRvKCcgJyk7XG4gICAgICAgIHN0YXRlLm5leHR3b3JkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiAndmFyaWFibGUtMic7XG4gICAgICB9XG5cbiAgICAgIHdvcmQgPSB3b3JkLnRvTG93ZXJDYXNlKClcbiAgICAgIC8vIEFyZSB3ZSBpbiBhIERBVEEgU3RlcD9cbiAgICAgIGlmIChzdGF0ZS5pbkRhdGFTdGVwKSB7XG4gICAgICAgIGlmICh3b3JkID09PSAncnVuOycgfHwgc3RyZWFtLm1hdGNoKC9ydW5cXHM7LykpIHtcbiAgICAgICAgICBzdGF0ZS5pbkRhdGFTdGVwID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuICdidWlsdGluJztcbiAgICAgICAgfVxuICAgICAgICAvLyB2YXJpYWJsZSBmb3JtYXRzXG4gICAgICAgIGlmICgod29yZCkgJiYgc3RyZWFtLm5leHQoKSA9PT0gJy4nKSB7XG4gICAgICAgICAgLy9laXRoZXIgYSBmb3JtYXQgb3IgbGlibmFtZS5tZW1uYW1lXG4gICAgICAgICAgaWYgKC9cXHcvLnRlc3Qoc3RyZWFtLnBlZWsoKSkpIHJldHVybiAndmFyaWFibGUtMic7XG4gICAgICAgICAgZWxzZSByZXR1cm4gJ3ZhcmlhYmxlJztcbiAgICAgICAgfVxuICAgICAgICAvLyBkbyB3ZSBoYXZlIGEgREFUQSBTdGVwIGtleXdvcmRcbiAgICAgICAgaWYgKHdvcmQgJiYgd29yZHMuaGFzT3duUHJvcGVydHkod29yZCkgJiZcbiAgICAgICAgICAgICh3b3Jkc1t3b3JkXS5zdGF0ZS5pbmRleE9mKFwiaW5EYXRhU3RlcFwiKSAhPT0gLTEgfHxcbiAgICAgICAgICAgICB3b3Jkc1t3b3JkXS5zdGF0ZS5pbmRleE9mKFwiQUxMXCIpICE9PSAtMSkpIHtcbiAgICAgICAgICAvL2JhY2t1cCB0byB0aGUgc3RhcnQgb2YgdGhlIHdvcmRcbiAgICAgICAgICBpZiAoc3RyZWFtLnN0YXJ0IDwgc3RyZWFtLnBvcylcbiAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoc3RyZWFtLnBvcyAtIHN0cmVhbS5zdGFydCk7XG4gICAgICAgICAgLy9hZHZhbmNlIHRoZSBsZW5ndGggb2YgdGhlIHdvcmQgYW5kIHJldHVyblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZC5sZW5ndGg7ICsraSkgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICByZXR1cm4gd29yZHNbd29yZF0uc3R5bGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFyZSB3ZSBpbiBhbiBQcm9jIHN0YXRlbWVudD9cbiAgICAgIGlmIChzdGF0ZS5pblByb2MpIHtcbiAgICAgICAgaWYgKHdvcmQgPT09ICdydW47JyB8fCB3b3JkID09PSAncXVpdDsnKSB7XG4gICAgICAgICAgc3RhdGUuaW5Qcm9jID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuICdidWlsdGluJztcbiAgICAgICAgfVxuICAgICAgICAvLyBkbyB3ZSBoYXZlIGEgcHJvYyBrZXl3b3JkXG4gICAgICAgIGlmICh3b3JkICYmIHdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpICYmXG4gICAgICAgICAgICAod29yZHNbd29yZF0uc3RhdGUuaW5kZXhPZihcImluUHJvY1wiKSAhPT0gLTEgfHxcbiAgICAgICAgICAgICB3b3Jkc1t3b3JkXS5zdGF0ZS5pbmRleE9mKFwiQUxMXCIpICE9PSAtMSkpIHtcbiAgICAgICAgICBzdHJlYW0ubWF0Y2goL1tcXHddKy8pO1xuICAgICAgICAgIHJldHVybiB3b3Jkc1t3b3JkXS5zdHlsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQXJlIHdlIGluIGEgTWFjcm8gc3RhdGVtZW50P1xuICAgICAgaWYgKHN0YXRlLmluTWFjcm8pIHtcbiAgICAgICAgaWYgKHdvcmQgPT09ICclbWVuZCcpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJzsnKSBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIHN0YXRlLmluTWFjcm8gPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gJ2J1aWx0aW4nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3b3JkICYmIHdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpICYmXG4gICAgICAgICAgICAod29yZHNbd29yZF0uc3RhdGUuaW5kZXhPZihcImluTWFjcm9cIikgIT09IC0xIHx8XG4gICAgICAgICAgICAgd29yZHNbd29yZF0uc3RhdGUuaW5kZXhPZihcIkFMTFwiKSAhPT0gLTEpKSB7XG4gICAgICAgICAgc3RyZWFtLm1hdGNoKC9bXFx3XSsvKTtcbiAgICAgICAgICByZXR1cm4gd29yZHNbd29yZF0uc3R5bGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJ2F0b20nO1xuICAgICAgfVxuICAgICAgLy8gRG8gd2UgaGF2ZSBLZXl3b3JkcyBzcGVjaWZpYyB3b3Jkcz9cbiAgICAgIGlmICh3b3JkICYmIHdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKSB7XG4gICAgICAgIC8vIE5lZ2F0ZXMgdGhlIGluaXRpYWwgbmV4dCgpXG4gICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgIC8vIEFjdHVhbGx5IG1vdmUgdGhlIHN0cmVhbVxuICAgICAgICBzdHJlYW0ubWF0Y2goL1tcXHddKy8pO1xuICAgICAgICBpZiAod29yZCA9PT0gJ2RhdGEnICYmIC89Ly50ZXN0KHN0cmVhbS5wZWVrKCkpID09PSBmYWxzZSkge1xuICAgICAgICAgIHN0YXRlLmluRGF0YVN0ZXAgPSB0cnVlO1xuICAgICAgICAgIHN0YXRlLm5leHR3b3JkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gJ2J1aWx0aW4nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3b3JkID09PSAncHJvYycpIHtcbiAgICAgICAgICBzdGF0ZS5pblByb2MgPSB0cnVlO1xuICAgICAgICAgIHN0YXRlLm5leHR3b3JkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gJ2J1aWx0aW4nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3b3JkID09PSAnJW1hY3JvJykge1xuICAgICAgICAgIHN0YXRlLmluTWFjcm8gPSB0cnVlO1xuICAgICAgICAgIHN0YXRlLm5leHR3b3JkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gJ2J1aWx0aW4nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvdGl0bGVbMS05XS8udGVzdCh3b3JkKSkgcmV0dXJuICdkZWYnO1xuXG4gICAgICAgIGlmICh3b3JkID09PSAnZm9vdG5vdGUnKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdCgvWzEtOV0vKTtcbiAgICAgICAgICByZXR1cm4gJ2RlZic7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm5zIHRoZWlyIHZhbHVlIGFzIHN0YXRlIGluIHRoZSBwcmlvciBkZWZpbmUgbWV0aG9kc1xuICAgICAgICBpZiAoc3RhdGUuaW5EYXRhU3RlcCA9PT0gdHJ1ZSAmJiB3b3Jkc1t3b3JkXS5zdGF0ZS5pbmRleE9mKFwiaW5EYXRhU3RlcFwiKSAhPT0gLTEpXG4gICAgICAgICAgcmV0dXJuIHdvcmRzW3dvcmRdLnN0eWxlO1xuICAgICAgICBpZiAoc3RhdGUuaW5Qcm9jID09PSB0cnVlICYmIHdvcmRzW3dvcmRdLnN0YXRlLmluZGV4T2YoXCJpblByb2NcIikgIT09IC0xKVxuICAgICAgICAgIHJldHVybiB3b3Jkc1t3b3JkXS5zdHlsZTtcbiAgICAgICAgaWYgKHN0YXRlLmluTWFjcm8gPT09IHRydWUgJiYgd29yZHNbd29yZF0uc3RhdGUuaW5kZXhPZihcImluTWFjcm9cIikgIT09IC0xKVxuICAgICAgICAgIHJldHVybiB3b3Jkc1t3b3JkXS5zdHlsZTtcbiAgICAgICAgaWYgKHdvcmRzW3dvcmRdLnN0YXRlLmluZGV4T2YoXCJBTExcIikgIT09IC0xKVxuICAgICAgICAgIHJldHVybiB3b3Jkc1t3b3JkXS5zdHlsZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvLyBVbnJlY29nbml6ZWQgc3ludGF4XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGluRGF0YVN0ZXA6IGZhbHNlLFxuICAgICAgICAgIGluUHJvYzogZmFsc2UsXG4gICAgICAgICAgaW5NYWNybzogZmFsc2UsXG4gICAgICAgICAgbmV4dHdvcmQ6IGZhbHNlLFxuICAgICAgICAgIGNvbnRpbnVlU3RyaW5nOiBudWxsLFxuICAgICAgICAgIGNvbnRpbnVlQ29tbWVudDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgLy8gU3RyaXAgdGhlIHNwYWNlcywgYnV0IHJlZ2V4IHdpbGwgYWNjb3VudCBmb3IgdGhlbSBlaXRoZXIgd2F5XG4gICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIG1haW4gcHJvY2Vzc1xuICAgICAgICByZXR1cm4gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9LFxuXG4gICAgICBibG9ja0NvbW1lbnRTdGFydDogXCIvKlwiLFxuICAgICAgYmxvY2tDb21tZW50RW5kOiBcIiovXCJcbiAgICB9O1xuXG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1zYXNcIiwgXCJzYXNcIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi9jc3MvY3NzXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIsIFwiLi4vY3NzL2Nzc1wiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJzYXNzXCIsIGZ1bmN0aW9uKGNvbmZpZykge1xuICB2YXIgY3NzTW9kZSA9IENvZGVNaXJyb3IubWltZU1vZGVzW1widGV4dC9jc3NcIl07XG4gIHZhciBwcm9wZXJ0eUtleXdvcmRzID0gY3NzTW9kZS5wcm9wZXJ0eUtleXdvcmRzIHx8IHt9LFxuICAgICAgY29sb3JLZXl3b3JkcyA9IGNzc01vZGUuY29sb3JLZXl3b3JkcyB8fCB7fSxcbiAgICAgIHZhbHVlS2V5d29yZHMgPSBjc3NNb2RlLnZhbHVlS2V5d29yZHMgfHwge30sXG4gICAgICBmb250UHJvcGVydGllcyA9IGNzc01vZGUuZm9udFByb3BlcnRpZXMgfHwge307XG5cbiAgZnVuY3Rpb24gdG9rZW5SZWdleHAod29yZHMpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cIiArIHdvcmRzLmpvaW4oXCJ8XCIpKTtcbiAgfVxuXG4gIHZhciBrZXl3b3JkcyA9IFtcInRydWVcIiwgXCJmYWxzZVwiLCBcIm51bGxcIiwgXCJhdXRvXCJdO1xuICB2YXIga2V5d29yZHNSZWdleHAgPSBuZXcgUmVnRXhwKFwiXlwiICsga2V5d29yZHMuam9pbihcInxcIikpO1xuXG4gIHZhciBvcGVyYXRvcnMgPSBbXCJcXFxcKFwiLCBcIlxcXFwpXCIsIFwiPVwiLCBcIj5cIiwgXCI8XCIsIFwiPT1cIiwgXCI+PVwiLCBcIjw9XCIsIFwiXFxcXCtcIiwgXCItXCIsXG4gICAgICAgICAgICAgICAgICAgXCJcXFxcIT1cIiwgXCIvXCIsIFwiXFxcXCpcIiwgXCIlXCIsIFwiYW5kXCIsIFwib3JcIiwgXCJub3RcIiwgXCI7XCIsXCJcXFxce1wiLFwiXFxcXH1cIixcIjpcIl07XG4gIHZhciBvcFJlZ2V4cCA9IHRva2VuUmVnZXhwKG9wZXJhdG9ycyk7XG5cbiAgdmFyIHBzZXVkb0VsZW1lbnRzUmVnZXhwID0gL146Oj9bYS16QS1aX11bXFx3XFwtXSovO1xuXG4gIHZhciB3b3JkO1xuXG4gIGZ1bmN0aW9uIGlzRW5kTGluZShzdHJlYW0pIHtcbiAgICByZXR1cm4gIXN0cmVhbS5wZWVrKCkgfHwgc3RyZWFtLm1hdGNoKC9cXHMrJC8sIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVybFRva2VucyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTtcblxuICAgIGlmIChjaCA9PT0gXCIpXCIpIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICBzdGF0ZS50b2tlbml6ZXIgPSB0b2tlbkJhc2U7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiKFwiKSB7XG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7XG5cbiAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCInXCIgfHwgY2ggPT09ICdcIicpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplciA9IGJ1aWxkU3RyaW5nVG9rZW5pemVyKHN0cmVhbS5uZXh0KCkpO1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnRva2VuaXplciA9IGJ1aWxkU3RyaW5nVG9rZW5pemVyKFwiKVwiLCBmYWxzZSk7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY29tbWVudChpbmRlbnRhdGlvbiwgbXVsdGlMaW5lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uc29sKCkgJiYgc3RyZWFtLmluZGVudGF0aW9uKCkgPD0gaW5kZW50YXRpb24pIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemVyID0gdG9rZW5CYXNlO1xuICAgICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobXVsdGlMaW5lICYmIHN0cmVhbS5za2lwVG8oXCIqL1wiKSkge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBzdGF0ZS50b2tlbml6ZXIgPSB0b2tlbkJhc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRTdHJpbmdUb2tlbml6ZXIocXVvdGUsIGdyZWVkeSkge1xuICAgIGlmIChncmVlZHkgPT0gbnVsbCkgeyBncmVlZHkgPSB0cnVlOyB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdUb2tlbml6ZXIoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIG5leHRDaGFyID0gc3RyZWFtLm5leHQoKTtcbiAgICAgIHZhciBwZWVrQ2hhciA9IHN0cmVhbS5wZWVrKCk7XG4gICAgICB2YXIgcHJldmlvdXNDaGFyID0gc3RyZWFtLnN0cmluZy5jaGFyQXQoc3RyZWFtLnBvcy0yKTtcblxuICAgICAgdmFyIGVuZGluZ1N0cmluZyA9ICgobmV4dENoYXIgIT09IFwiXFxcXFwiICYmIHBlZWtDaGFyID09PSBxdW90ZSkgfHwgKG5leHRDaGFyID09PSBxdW90ZSAmJiBwcmV2aW91c0NoYXIgIT09IFwiXFxcXFwiKSk7XG5cbiAgICAgIGlmIChlbmRpbmdTdHJpbmcpIHtcbiAgICAgICAgaWYgKG5leHRDaGFyICE9PSBxdW90ZSAmJiBncmVlZHkpIHsgc3RyZWFtLm5leHQoKTsgfVxuICAgICAgICBpZiAoaXNFbmRMaW5lKHN0cmVhbSkpIHtcbiAgICAgICAgICBzdGF0ZS5jdXJzb3JIYWxmID0gMDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS50b2tlbml6ZXIgPSB0b2tlbkJhc2U7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfSBlbHNlIGlmIChuZXh0Q2hhciA9PT0gXCIjXCIgJiYgcGVla0NoYXIgPT09IFwie1wiKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplciA9IGJ1aWxkSW50ZXJwb2xhdGlvblRva2VuaXplcihzdHJpbmdUb2tlbml6ZXIpO1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZ1Rva2VuaXplcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkSW50ZXJwb2xhdGlvblRva2VuaXplcihjdXJyZW50VG9rZW5pemVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSBcIn1cIikge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBzdGF0ZS50b2tlbml6ZXIgPSBjdXJyZW50VG9rZW5pemVyO1xuICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5kZW50KHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmluZGVudENvdW50ID09IDApIHtcbiAgICAgIHN0YXRlLmluZGVudENvdW50Kys7XG4gICAgICB2YXIgbGFzdFNjb3BlT2Zmc2V0ID0gc3RhdGUuc2NvcGVzWzBdLm9mZnNldDtcbiAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gbGFzdFNjb3BlT2Zmc2V0ICsgY29uZmlnLmluZGVudFVuaXQ7XG4gICAgICBzdGF0ZS5zY29wZXMudW5zaGlmdCh7IG9mZnNldDpjdXJyZW50T2Zmc2V0IH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZGVudChzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoID09IDEpIHJldHVybjtcblxuICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdHJlYW0ucGVlaygpO1xuXG4gICAgLy8gQ29tbWVudFxuICAgIGlmIChzdHJlYW0ubWF0Y2goXCIvKlwiKSkge1xuICAgICAgc3RhdGUudG9rZW5pemVyID0gY29tbWVudChzdHJlYW0uaW5kZW50YXRpb24oKSwgdHJ1ZSk7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemVyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoc3RyZWFtLm1hdGNoKFwiLy9cIikpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplciA9IGNvbW1lbnQoc3RyZWFtLmluZGVudGF0aW9uKCksIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgLy8gSW50ZXJwb2xhdGlvblxuICAgIGlmIChzdHJlYW0ubWF0Y2goXCIje1wiKSkge1xuICAgICAgc3RhdGUudG9rZW5pemVyID0gYnVpbGRJbnRlcnBvbGF0aW9uVG9rZW5pemVyKHRva2VuQmFzZSk7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH1cblxuICAgIC8vIFN0cmluZ3NcbiAgICBpZiAoY2ggPT09ICdcIicgfHwgY2ggPT09IFwiJ1wiKSB7XG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgc3RhdGUudG9rZW5pemVyID0gYnVpbGRTdHJpbmdUb2tlbml6ZXIoY2gpO1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfVxuXG4gICAgaWYoIXN0YXRlLmN1cnNvckhhbGYpey8vIHN0YXRlLmN1cnNvckhhbGYgPT09IDBcbiAgICAvLyBmaXJzdCBoYWxmIGkuZS4gYmVmb3JlIDogZm9yIGtleS12YWx1ZSBwYWlyc1xuICAgIC8vIGluY2x1ZGluZyBzZWxlY3RvcnNcblxuICAgICAgaWYgKGNoID09PSBcIi1cIikge1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLVxcdystLykpIHtcbiAgICAgICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNoID09PSBcIi5cIikge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW1xcdy1dKy8pKSB7XG4gICAgICAgICAgaW5kZW50KHN0YXRlKTtcbiAgICAgICAgICByZXR1cm4gXCJxdWFsaWZpZXJcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ucGVlaygpID09PSBcIiNcIikge1xuICAgICAgICAgIGluZGVudChzdGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNoID09PSBcIiNcIikge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAvLyBJRCBzZWxlY3RvcnNcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXltcXHctXSsvKSkge1xuICAgICAgICAgIGluZGVudChzdGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIFwiYnVpbHRpblwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSBcIiNcIikge1xuICAgICAgICAgIGluZGVudChzdGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVmFyaWFibGVzXG4gICAgICBpZiAoY2ggPT09IFwiJFwiKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcdy1dLyk7XG4gICAgICAgIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICAgIH1cblxuICAgICAgLy8gTnVtYmVyc1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/WzAtOVxcLl0rLykpXG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuXG4gICAgICAvLyBVbml0c1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXihweHxlbXxpbilcXGIvKSlcbiAgICAgICAgcmV0dXJuIFwidW5pdFwiO1xuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzUmVnZXhwKSlcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9edXJsLykgJiYgc3RyZWFtLnBlZWsoKSA9PT0gXCIoXCIpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemVyID0gdXJsVG9rZW5zO1xuICAgICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaCA9PT0gXCI9XCIpIHtcbiAgICAgICAgLy8gTWF0Y2ggc2hvcnRjdXQgbWl4aW4gZGVmaW5pdGlvblxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePVtcXHctXSsvKSkge1xuICAgICAgICAgIGluZGVudChzdGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaCA9PT0gXCIrXCIpIHtcbiAgICAgICAgLy8gTWF0Y2ggc2hvcnRjdXQgbWl4aW4gZGVmaW5pdGlvblxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFwrW1xcdy1dKy8pKXtcbiAgICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0zXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoY2ggPT09IFwiQFwiKXtcbiAgICAgICAgaWYoc3RyZWFtLm1hdGNoKC9AZXh0ZW5kLykpe1xuICAgICAgICAgIGlmKCFzdHJlYW0ubWF0Y2goL1xccypbXFx3XS8pKVxuICAgICAgICAgICAgZGVkZW50KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG5cbiAgICAgIC8vIEluZGVudCBEaXJlY3RpdmVzXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eQChlbHNlIGlmfGlmfG1lZGlhfGVsc2V8Zm9yfGVhY2h8d2hpbGV8bWl4aW58ZnVuY3Rpb24pLykpIHtcbiAgICAgICAgaW5kZW50KHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIFwiZGVmXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyIERpcmVjdGl2ZXNcbiAgICAgIGlmIChjaCA9PT0gXCJAXCIpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3LV0vKTtcbiAgICAgICAgcmV0dXJuIFwiZGVmXCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdHJlYW0uZWF0V2hpbGUoL1tcXHctXS8pKXtcbiAgICAgICAgaWYoc3RyZWFtLm1hdGNoKC8gKjogKltcXHctXFwrXFwkIyFcXChcIiddLyxmYWxzZSkpe1xuICAgICAgICAgIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdmFyIHByb3AgPSBzdGF0ZS5wcmV2UHJvcCArIFwiLVwiICsgd29yZDtcbiAgICAgICAgICBpZiAocHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwicHJvcGVydHlcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHtcbiAgICAgICAgICAgIHN0YXRlLnByZXZQcm9wID0gd29yZDtcbiAgICAgICAgICAgIHJldHVybiBcInByb3BlcnR5XCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChmb250UHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwicHJvcGVydHlcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihzdHJlYW0ubWF0Y2goLyAqOi8sZmFsc2UpKXtcbiAgICAgICAgICBpbmRlbnQoc3RhdGUpO1xuICAgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAxO1xuICAgICAgICAgIHN0YXRlLnByZXZQcm9wID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHJldHVybiBcInByb3BlcnR5XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihzdHJlYW0ubWF0Y2goLyAqLC8sZmFsc2UpKXtcbiAgICAgICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIGluZGVudChzdGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoY2ggPT09IFwiOlwiKXtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChwc2V1ZG9FbGVtZW50c1JlZ2V4cCkpeyAvLyBjb3VsZCBiZSBhIHBzZXVkby1lbGVtZW50XG4gICAgICAgICAgcmV0dXJuIFwidmFyaWFibGUtM1wiO1xuICAgICAgICB9XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHN0YXRlLmN1cnNvckhhbGY9MTtcbiAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgIH1cblxuICAgIH0gLy8gY3Vyc29ySGFsZj09PTAgZW5kcyBoZXJlXG4gICAgZWxzZXtcblxuICAgICAgaWYgKGNoID09PSBcIiNcIikge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAvLyBIZXggbnVtYmVyc1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9bMC05YS1mQS1GXXs2fXxbMC05YS1mQS1GXXszfS8pKXtcbiAgICAgICAgICBpZiAoaXNFbmRMaW5lKHN0cmVhbSkpIHtcbiAgICAgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBOdW1iZXJzXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLT9bMC05XFwuXSsvKSl7XG4gICAgICAgIGlmIChpc0VuZExpbmUoc3RyZWFtKSkge1xuICAgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgfVxuXG4gICAgICAvLyBVbml0c1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXihweHxlbXxpbilcXGIvKSl7XG4gICAgICAgIGlmIChpc0VuZExpbmUoc3RyZWFtKSkge1xuICAgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcInVuaXRcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5tYXRjaChrZXl3b3Jkc1JlZ2V4cCkpe1xuICAgICAgICBpZiAoaXNFbmRMaW5lKHN0cmVhbSkpIHtcbiAgICAgICAgICBzdGF0ZS5jdXJzb3JIYWxmID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL151cmwvKSAmJiBzdHJlYW0ucGVlaygpID09PSBcIihcIikge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZXIgPSB1cmxUb2tlbnM7XG4gICAgICAgIGlmIChpc0VuZExpbmUoc3RyZWFtKSkge1xuICAgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgIH1cblxuICAgICAgLy8gVmFyaWFibGVzXG4gICAgICBpZiAoY2ggPT09IFwiJFwiKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcdy1dLyk7XG4gICAgICAgIGlmIChpc0VuZExpbmUoc3RyZWFtKSkge1xuICAgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICAgIH1cblxuICAgICAgLy8gYmFuZyBjaGFyYWN0ZXIgZm9yICFpbXBvcnRhbnQsICFkZWZhdWx0LCBldGMuXG4gICAgICBpZiAoY2ggPT09IFwiIVwiKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwO1xuICAgICAgICByZXR1cm4gc3RyZWFtLm1hdGNoKC9eW1xcd10rLykgPyBcImtleXdvcmRcIjogXCJvcGVyYXRvclwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKG9wUmVnZXhwKSl7XG4gICAgICAgIGlmIChpc0VuZExpbmUoc3RyZWFtKSkge1xuICAgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIGF0dHJpYnV0ZXNcbiAgICAgIGlmIChzdHJlYW0uZWF0V2hpbGUoL1tcXHctXS8pKSB7XG4gICAgICAgIGlmIChpc0VuZExpbmUoc3RyZWFtKSkge1xuICAgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh2YWx1ZUtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKSB7XG4gICAgICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbG9yS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHtcbiAgICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkge1xuICAgICAgICAgIHN0YXRlLnByZXZQcm9wID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHJldHVybiBcInByb3BlcnR5XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy9zdHJlYW0uZWF0U3BhY2UoKTtcbiAgICAgIGlmIChpc0VuZExpbmUoc3RyZWFtKSkge1xuICAgICAgICBzdGF0ZS5jdXJzb3JIYWxmID0gMDtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICB9IC8vIGVsc2UgZW5kcyBoZXJlXG5cbiAgICBpZiAoc3RyZWFtLm1hdGNoKG9wUmVnZXhwKSlcbiAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG5cbiAgICAvLyBJZiB3ZSBoYXZlbid0IHJldHVybmVkIGJ5IG5vdywgd2UgbW92ZSAxIGNoYXJhY3RlclxuICAgIC8vIGFuZCByZXR1cm4gYW4gZXJyb3JcbiAgICBzdHJlYW0ubmV4dCgpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5MZXhlcihzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5zb2woKSkgc3RhdGUuaW5kZW50Q291bnQgPSAwO1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplcihzdHJlYW0sIHN0YXRlKTtcbiAgICB2YXIgY3VycmVudCA9IHN0cmVhbS5jdXJyZW50KCk7XG5cbiAgICBpZiAoY3VycmVudCA9PT0gXCJAcmV0dXJuXCIgfHwgY3VycmVudCA9PT0gXCJ9XCIpe1xuICAgICAgZGVkZW50KHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBzdGFydE9mVG9rZW4gPSBzdHJlYW0ucG9zIC0gY3VycmVudC5sZW5ndGg7XG5cbiAgICAgIHZhciB3aXRoQ3VycmVudEluZGVudCA9IHN0YXJ0T2ZUb2tlbiArIChjb25maWcuaW5kZW50VW5pdCAqIHN0YXRlLmluZGVudENvdW50KTtcblxuICAgICAgdmFyIG5ld1Njb3BlcyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnNjb3Blcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2NvcGUgPSBzdGF0ZS5zY29wZXNbaV07XG5cbiAgICAgICAgaWYgKHNjb3BlLm9mZnNldCA8PSB3aXRoQ3VycmVudEluZGVudClcbiAgICAgICAgICBuZXdTY29wZXMucHVzaChzY29wZSk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLnNjb3BlcyA9IG5ld1Njb3BlcztcbiAgICB9XG5cblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbml6ZXI6IHRva2VuQmFzZSxcbiAgICAgICAgc2NvcGVzOiBbe29mZnNldDogMCwgdHlwZTogXCJzYXNzXCJ9XSxcbiAgICAgICAgaW5kZW50Q291bnQ6IDAsXG4gICAgICAgIGN1cnNvckhhbGY6IDAsICAvLyBjdXJzb3IgaGFsZiB0ZWxscyB1cyBpZiBjdXJzb3IgbGllcyBhZnRlciAoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGJlZm9yZSAoMCkgY29sb24gKHdlbGwuLi4gbW9yZSBvciBsZXNzKVxuICAgICAgICBkZWZpbmVkVmFyczogW10sXG4gICAgICAgIGRlZmluZWRNaXhpbnM6IFtdXG4gICAgICB9O1xuICAgIH0sXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBzdHlsZSA9IHRva2VuTGV4ZXIoc3RyZWFtLCBzdGF0ZSk7XG5cbiAgICAgIHN0YXRlLmxhc3RUb2tlbiA9IHsgc3R5bGU6IHN0eWxlLCBjb250ZW50OiBzdHJlYW0uY3VycmVudCgpIH07XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQ7XG4gICAgfVxuICB9O1xufSwgXCJjc3NcIik7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1zYXNzXCIsIFwic2Fzc1wiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vKipcbiAqIEF1dGhvcjogS29oIFppIEhhbiwgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgS29oIFppIENodW5cbiAqL1xuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInNjaGVtZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIEJVSUxUSU4gPSBcImJ1aWx0aW5cIiwgQ09NTUVOVCA9IFwiY29tbWVudFwiLCBTVFJJTkcgPSBcInN0cmluZ1wiLFxuICAgICAgICBBVE9NID0gXCJhdG9tXCIsIE5VTUJFUiA9IFwibnVtYmVyXCIsIEJSQUNLRVQgPSBcImJyYWNrZXRcIjtcbiAgICB2YXIgSU5ERU5UX1dPUkRfU0tJUCA9IDI7XG5cbiAgICBmdW5jdGlvbiBtYWtlS2V5d29yZHMoc3RyKSB7XG4gICAgICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoXCIgXCIpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKSBvYmpbd29yZHNbaV1dID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICB2YXIga2V5d29yZHMgPSBtYWtlS2V5d29yZHMoXCLOuyBjYXNlLWxhbWJkYSBjYWxsL2NjIGNsYXNzIGRlZmluZS1jbGFzcyBleGl0LWhhbmRsZXIgZmllbGQgaW1wb3J0IGluaGVyaXQgaW5pdC1maWVsZCBpbnRlcmZhY2UgbGV0Ki12YWx1ZXMgbGV0LXZhbHVlcyBsZXQvZWMgbWl4aW4gb3B0LWxhbWJkYSBvdmVycmlkZSBwcm90ZWN0IHByb3ZpZGUgcHVibGljIHJlbmFtZSByZXF1aXJlIHJlcXVpcmUtZm9yLXN5bnRheCBzeW50YXggc3ludGF4LWNhc2Ugc3ludGF4LWVycm9yIHVuaXQvc2lnIHVubGVzcyB3aGVuIHdpdGgtc3ludGF4IGFuZCBiZWdpbiBjYWxsLXdpdGgtY3VycmVudC1jb250aW51YXRpb24gY2FsbC13aXRoLWlucHV0LWZpbGUgY2FsbC13aXRoLW91dHB1dC1maWxlIGNhc2UgY29uZCBkZWZpbmUgZGVmaW5lLXN5bnRheCBkZWxheSBkbyBkeW5hbWljLXdpbmQgZWxzZSBmb3ItZWFjaCBpZiBsYW1iZGEgbGV0IGxldCogbGV0LXN5bnRheCBsZXRyZWMgbGV0cmVjLXN5bnRheCBtYXAgb3Igc3ludGF4LXJ1bGVzIGFicyBhY29zIGFuZ2xlIGFwcGVuZCBhcHBseSBhc2luIGFzc29jIGFzc3EgYXNzdiBhdGFuIGJvb2xlYW4/IGNhYXIgY2FkciBjYWxsLXdpdGgtaW5wdXQtZmlsZSBjYWxsLXdpdGgtb3V0cHV0LWZpbGUgY2FsbC13aXRoLXZhbHVlcyBjYXIgY2RkZGFyIGNkZGRkciBjZHIgY2VpbGluZyBjaGFyLT5pbnRlZ2VyIGNoYXItYWxwaGFiZXRpYz8gY2hhci1jaTw9PyBjaGFyLWNpPD8gY2hhci1jaT0/IGNoYXItY2k+PT8gY2hhci1jaT4/IGNoYXItZG93bmNhc2UgY2hhci1sb3dlci1jYXNlPyBjaGFyLW51bWVyaWM/IGNoYXItcmVhZHk/IGNoYXItdXBjYXNlIGNoYXItdXBwZXItY2FzZT8gY2hhci13aGl0ZXNwYWNlPyBjaGFyPD0/IGNoYXI8PyBjaGFyPT8gY2hhcj49PyBjaGFyPj8gY2hhcj8gY2xvc2UtaW5wdXQtcG9ydCBjbG9zZS1vdXRwdXQtcG9ydCBjb21wbGV4PyBjb25zIGNvcyBjdXJyZW50LWlucHV0LXBvcnQgY3VycmVudC1vdXRwdXQtcG9ydCBkZW5vbWluYXRvciBkaXNwbGF5IGVvZi1vYmplY3Q/IGVxPyBlcXVhbD8gZXF2PyBldmFsIGV2ZW4/IGV4YWN0LT5pbmV4YWN0IGV4YWN0PyBleHAgZXhwdCAjZiBmbG9vciBmb3JjZSBnY2QgaW1hZy1wYXJ0IGluZXhhY3QtPmV4YWN0IGluZXhhY3Q/IGlucHV0LXBvcnQ/IGludGVnZXItPmNoYXIgaW50ZWdlcj8gaW50ZXJhY3Rpb24tZW52aXJvbm1lbnQgbGNtIGxlbmd0aCBsaXN0IGxpc3QtPnN0cmluZyBsaXN0LT52ZWN0b3IgbGlzdC1yZWYgbGlzdC10YWlsIGxpc3Q/IGxvYWQgbG9nIG1hZ25pdHVkZSBtYWtlLXBvbGFyIG1ha2UtcmVjdGFuZ3VsYXIgbWFrZS1zdHJpbmcgbWFrZS12ZWN0b3IgbWF4IG1lbWJlciBtZW1xIG1lbXYgbWluIG1vZHVsbyBuZWdhdGl2ZT8gbmV3bGluZSBub3QgbnVsbC1lbnZpcm9ubWVudCBudWxsPyBudW1iZXItPnN0cmluZyBudW1iZXI/IG51bWVyYXRvciBvZGQ/IG9wZW4taW5wdXQtZmlsZSBvcGVuLW91dHB1dC1maWxlIG91dHB1dC1wb3J0PyBwYWlyPyBwZWVrLWNoYXIgcG9ydD8gcG9zaXRpdmU/IHByb2NlZHVyZT8gcXVhc2lxdW90ZSBxdW90ZSBxdW90aWVudCByYXRpb25hbD8gcmF0aW9uYWxpemUgcmVhZCByZWFkLWNoYXIgcmVhbC1wYXJ0IHJlYWw/IHJlbWFpbmRlciByZXZlcnNlIHJvdW5kIHNjaGVtZS1yZXBvcnQtZW52aXJvbm1lbnQgc2V0ISBzZXQtY2FyISBzZXQtY2RyISBzaW4gc3FydCBzdHJpbmcgc3RyaW5nLT5saXN0IHN0cmluZy0+bnVtYmVyIHN0cmluZy0+c3ltYm9sIHN0cmluZy1hcHBlbmQgc3RyaW5nLWNpPD0/IHN0cmluZy1jaTw/IHN0cmluZy1jaT0/IHN0cmluZy1jaT49PyBzdHJpbmctY2k+PyBzdHJpbmctY29weSBzdHJpbmctZmlsbCEgc3RyaW5nLWxlbmd0aCBzdHJpbmctcmVmIHN0cmluZy1zZXQhIHN0cmluZzw9PyBzdHJpbmc8PyBzdHJpbmc9PyBzdHJpbmc+PT8gc3RyaW5nPj8gc3RyaW5nPyBzdWJzdHJpbmcgc3ltYm9sLT5zdHJpbmcgc3ltYm9sPyAjdCB0YW4gdHJhbnNjcmlwdC1vZmYgdHJhbnNjcmlwdC1vbiB0cnVuY2F0ZSB2YWx1ZXMgdmVjdG9yIHZlY3Rvci0+bGlzdCB2ZWN0b3ItZmlsbCEgdmVjdG9yLWxlbmd0aCB2ZWN0b3ItcmVmIHZlY3Rvci1zZXQhIHdpdGgtaW5wdXQtZnJvbS1maWxlIHdpdGgtb3V0cHV0LXRvLWZpbGUgd3JpdGUgd3JpdGUtY2hhciB6ZXJvP1wiKTtcbiAgICB2YXIgaW5kZW50S2V5cyA9IG1ha2VLZXl3b3JkcyhcImRlZmluZSBsZXQgbGV0cmVjIGxldCogbGFtYmRhXCIpO1xuXG4gICAgZnVuY3Rpb24gc3RhdGVTdGFjayhpbmRlbnQsIHR5cGUsIHByZXYpIHsgLy8gcmVwcmVzZW50cyBhIHN0YXRlIHN0YWNrIG9iamVjdFxuICAgICAgICB0aGlzLmluZGVudCA9IGluZGVudDtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5wcmV2ID0gcHJldjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoU3RhY2soc3RhdGUsIGluZGVudCwgdHlwZSkge1xuICAgICAgICBzdGF0ZS5pbmRlbnRTdGFjayA9IG5ldyBzdGF0ZVN0YWNrKGluZGVudCwgdHlwZSwgc3RhdGUuaW5kZW50U3RhY2spO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvcFN0YWNrKHN0YXRlKSB7XG4gICAgICAgIHN0YXRlLmluZGVudFN0YWNrID0gc3RhdGUuaW5kZW50U3RhY2sucHJldjtcbiAgICB9XG5cbiAgICB2YXIgYmluYXJ5TWF0Y2hlciA9IG5ldyBSZWdFeHAoL14oPzpbLStdaXxbLStdWzAxXSsjKig/OlxcL1swMV0rIyopP2l8Wy0rXT9bMDFdKyMqKD86XFwvWzAxXSsjKik/QFstK10/WzAxXSsjKig/OlxcL1swMV0rIyopP3xbLStdP1swMV0rIyooPzpcXC9bMDFdKyMqKT9bLStdKD86WzAxXSsjKig/OlxcL1swMV0rIyopPyk/aXxbLStdP1swMV0rIyooPzpcXC9bMDFdKyMqKT8pKD89WygpXFxzO1wiXXwkKS9pKTtcbiAgICB2YXIgb2N0YWxNYXRjaGVyID0gbmV3IFJlZ0V4cCgvXig/OlstK11pfFstK11bMC03XSsjKig/OlxcL1swLTddKyMqKT9pfFstK10/WzAtN10rIyooPzpcXC9bMC03XSsjKik/QFstK10/WzAtN10rIyooPzpcXC9bMC03XSsjKik/fFstK10/WzAtN10rIyooPzpcXC9bMC03XSsjKik/Wy0rXSg/OlswLTddKyMqKD86XFwvWzAtN10rIyopPyk/aXxbLStdP1swLTddKyMqKD86XFwvWzAtN10rIyopPykoPz1bKClcXHM7XCJdfCQpL2kpO1xuICAgIHZhciBoZXhNYXRjaGVyID0gbmV3IFJlZ0V4cCgvXig/OlstK11pfFstK11bXFxkYS1mXSsjKig/OlxcL1tcXGRhLWZdKyMqKT9pfFstK10/W1xcZGEtZl0rIyooPzpcXC9bXFxkYS1mXSsjKik/QFstK10/W1xcZGEtZl0rIyooPzpcXC9bXFxkYS1mXSsjKik/fFstK10/W1xcZGEtZl0rIyooPzpcXC9bXFxkYS1mXSsjKik/Wy0rXSg/OltcXGRhLWZdKyMqKD86XFwvW1xcZGEtZl0rIyopPyk/aXxbLStdP1tcXGRhLWZdKyMqKD86XFwvW1xcZGEtZl0rIyopPykoPz1bKClcXHM7XCJdfCQpL2kpO1xuICAgIHZhciBkZWNpbWFsTWF0Y2hlciA9IG5ldyBSZWdFeHAoL14oPzpbLStdaXxbLStdKD86KD86KD86XFxkKyMrXFwuPyMqfFxcZCtcXC5cXGQqIyp8XFwuXFxkKyMqfFxcZCspKD86W2VzZmRsXVstK10/XFxkKyk/KXxcXGQrIypcXC9cXGQrIyopaXxbLStdPyg/Oig/Oig/OlxcZCsjK1xcLj8jKnxcXGQrXFwuXFxkKiMqfFxcLlxcZCsjKnxcXGQrKSg/Oltlc2ZkbF1bLStdP1xcZCspPyl8XFxkKyMqXFwvXFxkKyMqKUBbLStdPyg/Oig/Oig/OlxcZCsjK1xcLj8jKnxcXGQrXFwuXFxkKiMqfFxcLlxcZCsjKnxcXGQrKSg/Oltlc2ZkbF1bLStdP1xcZCspPyl8XFxkKyMqXFwvXFxkKyMqKXxbLStdPyg/Oig/Oig/OlxcZCsjK1xcLj8jKnxcXGQrXFwuXFxkKiMqfFxcLlxcZCsjKnxcXGQrKSg/Oltlc2ZkbF1bLStdP1xcZCspPyl8XFxkKyMqXFwvXFxkKyMqKVstK10oPzooPzooPzpcXGQrIytcXC4/Iyp8XFxkK1xcLlxcZCojKnxcXC5cXGQrIyp8XFxkKykoPzpbZXNmZGxdWy0rXT9cXGQrKT8pfFxcZCsjKlxcL1xcZCsjKik/aXwoPzooPzooPzpcXGQrIytcXC4/Iyp8XFxkK1xcLlxcZCojKnxcXC5cXGQrIyp8XFxkKykoPzpbZXNmZGxdWy0rXT9cXGQrKT8pfFxcZCsjKlxcL1xcZCsjKikpKD89WygpXFxzO1wiXXwkKS9pKTtcblxuICAgIGZ1bmN0aW9uIGlzQmluYXJ5TnVtYmVyIChzdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5tYXRjaChiaW5hcnlNYXRjaGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09jdGFsTnVtYmVyIChzdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5tYXRjaChvY3RhbE1hdGNoZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGVjaW1hbE51bWJlciAoc3RyZWFtLCBiYWNrdXApIHtcbiAgICAgICAgaWYgKGJhY2t1cCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyZWFtLm1hdGNoKGRlY2ltYWxNYXRjaGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0hleE51bWJlciAoc3RyZWFtKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0ubWF0Y2goaGV4TWF0Y2hlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbmRlbnRTdGFjazogbnVsbCxcbiAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbjogMCxcbiAgICAgICAgICAgICAgICBtb2RlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzRXhwckNvbW1lbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNFeHByUXVvdGU6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrID09IG51bGwgJiYgc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGluZGVudGF0aW9uLCBidXQgb25seSBpZiBpbmRlbnRTdGFjayBpcyBlbXB0eVxuICAgICAgICAgICAgICAgIHN0YXRlLmluZGVudGF0aW9uID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNraXAgc3BhY2VzXG4gICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciByZXR1cm5UeXBlID0gbnVsbDtcblxuICAgICAgICAgICAgc3dpdGNoKHN0YXRlLm1vZGUpe1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjogLy8gbXVsdGktbGluZSBzdHJpbmcgcGFyc2luZyBtb2RlXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0LCBlc2NhcGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09IFwiXFxcIlwiICYmICFlc2NhcGVkKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gU1RSSU5HOyAvLyBjb250aW51ZSBvbiBpbiBzY2hlbWUtc3RyaW5nIG1vZGVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbW1lbnRcIjogLy8gY29tbWVudCBwYXJzaW5nIG1vZGVcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQsIG1heWJlRW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09IFwiI1wiICYmIG1heWJlRW5kKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXliZUVuZCA9IChuZXh0ID09IFwifFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInMtZXhwci1jb21tZW50XCI6IC8vIHMtZXhwciBjb21tZW50aW5nIG1vZGVcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZihzdHJlYW0ucGVlaygpID09IFwiKFwiIHx8IHN0cmVhbS5wZWVrKCkgPT0gXCJbXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWN0dWFsbHkgc3RhcnQgc2NoZW1lIHMtZXhwciBjb21tZW50aW5nIG1vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNFeHByQ29tbWVudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IHdlIGp1c3QgY29tbWVudCB0aGUgZW50aXJlIG9mIHRoZSBuZXh0IHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teXFxzXFwoXFwpXFxbXFxdXS8pOyAvLyBlYXQgc3ltYm9sIGF0b21cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAvLyBkZWZhdWx0IHBhcnNpbmcgbW9kZVxuICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSBcIlxcXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IFwic3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gU1RSSU5HO1xuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCInXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09IFwiKFwiIHx8IHN0cmVhbS5wZWVrKCkgPT0gXCJbXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGUuc0V4cHJRdW90ZSAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNFeHByUXVvdGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gZWxzZSBhbHJlYWR5IGluIGEgcXVvdGVkIGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQVRPTTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3X1xcLSEkJSYqK1xcLlxcLzo8PT4/QFxcXn5dLyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEFUT007XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVhdChcInxcIikpIHsgICAgICAgICAgICAgICAgICAgIC8vIE11bHRpLWxpbmUgY29tbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBcImNvbW1lbnRcIjsgLy8gdG9nZ2xlIHRvIGNvbW1lbnQgbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KC9bdGZdL2kpKSB7ICAgICAgICAgICAgLy8gI3QvI2YgKGF0b20pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEFUT007XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoJzsnKSkgeyAgICAgICAgICAgICAgICAvLyBTLUV4cHIgY29tbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBcInMtZXhwci1jb21tZW50XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IENPTU1FTlQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1UZXN0ID0gbnVsbCwgaGFzRXhhY3RuZXNzID0gZmFsc2UsIGhhc1JhZGl4ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVhdCgvW2VpXS9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNFeGFjdG5lc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7ICAgICAgIC8vIG11c3QgYmUgcmFkaXggc3BlY2lmaWVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14jYi9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1UZXN0ID0gaXNCaW5hcnlOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL14jby9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1UZXN0ID0gaXNPY3RhbE51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXiN4L2kpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVRlc3QgPSBpc0hleE51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXiNkL2kpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVRlc3QgPSBpc0RlY2ltYWxOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15bLSswLTkuXS8sIGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNSYWRpeCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1UZXN0ID0gaXNEZWNpbWFsTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlLWNvbnN1bWUgdGhlIGludGlhbCAjIGlmIGFsbCBtYXRjaGVzIGZhaWxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc0V4YWN0bmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KCcjJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1UZXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JhZGl4ICYmICFoYXNFeGFjdG5lc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnN1bWUgb3B0aW9uYWwgZXhhY3RuZXNzIGFmdGVyIHJhZGl4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ubWF0Y2goL14jW2VpXS9pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtVGVzdChzdHJlYW0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IE5VTUJFUjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL15bLSswLTkuXS8udGVzdChjaCkgJiYgaXNEZWNpbWFsTnVtYmVyKHN0cmVhbSwgdHJ1ZSkpIHsgLy8gbWF0Y2ggbm9uLXByZWZpeGVkIG51bWJlciwgbXVzdCBiZSBkZWNpbWFsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gTlVNQkVSO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09IFwiO1wiKSB7IC8vIGNvbW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsgLy8gcmVzdCBvZiB0aGUgbGluZSBpcyBhIGNvbW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09IFwiKFwiIHx8IGNoID09IFwiW1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGtleVdvcmQgPSAnJzsgdmFyIGluZGVudFRlbXAgPSBzdHJlYW0uY29sdW1uKCksIGxldHRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgRWl0aGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5kZW50LXdvcmQgLi5cbiAgICAgICAgICAgICAgICAgICAgICAgIChub24taW5kZW50LXdvcmQgLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICg7c29tZXRoaW5nIGVsc2UsIGJyYWNrZXQsIGV0Yy5cbiAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgobGV0dGVyID0gc3RyZWFtLmVhdCgvW15cXHNcXChcXFtcXDtcXClcXF1dLykpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlXb3JkICs9IGxldHRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleVdvcmQubGVuZ3RoID4gMCAmJiBpbmRlbnRLZXlzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGtleVdvcmQpKSB7IC8vIGluZGVudC13b3JkXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoU3RhY2soc3RhdGUsIGluZGVudFRlbXAgKyBJTkRFTlRfV09SRF9TS0lQLCBjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBub24taW5kZW50IHdvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjb250aW51ZSBlYXRpbmcgdGhlIHNwYWNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRTcGFjZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uZW9sKCkgfHwgc3RyZWFtLnBlZWsoKSA9PSBcIjtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3RoaW5nIHNpZ25pZmljYW50IGFmdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlc3RhcnQgaW5kZW50YXRpb24gMSBzcGFjZSBhZnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoU3RhY2soc3RhdGUsIGluZGVudFRlbXAgKyAxLCBjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnRUZW1wICsgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGgsIGNoKTsgLy8gZWxzZSB3ZSBtYXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGggLSAxKTsgLy8gdW5kbyBhbGwgdGhlIGVhdGluZ1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2Ygc3RhdGUuc0V4cHJDb21tZW50ID09IFwibnVtYmVyXCIpIHN0YXRlLnNFeHByQ29tbWVudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN0YXRlLnNFeHByUXVvdGUgPT0gXCJudW1iZXJcIikgc3RhdGUuc0V4cHJRdW90ZSsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQlJBQ0tFVDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSBcIilcIiB8fCBjaCA9PSBcIl1cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEJSQUNLRVQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaW5kZW50U3RhY2sgIT0gbnVsbCAmJiBzdGF0ZS5pbmRlbnRTdGFjay50eXBlID09IChjaCA9PSBcIilcIiA/IFwiKFwiIDogXCJbXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wU3RhY2soc3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN0YXRlLnNFeHByQ29tbWVudCA9PSBcIm51bWJlclwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoLS1zdGF0ZS5zRXhwckNvbW1lbnQgPT0gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDsgLy8gZmluYWwgY2xvc2luZyBicmFja2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zRXhwckNvbW1lbnQgPSBmYWxzZTsgLy8gdHVybiBvZmYgcy1leHByIGNvbW1lbnRpbmcgbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBzdGF0ZS5zRXhwclF1b3RlID09IFwibnVtYmVyXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigtLXN0YXRlLnNFeHByUXVvdGUgPT0gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQVRPTTsgLy8gZmluYWwgY2xvc2luZyBicmFja2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zRXhwclF1b3RlID0gZmFsc2U7IC8vIHR1cm4gb2ZmIHMtZXhwciBxdW90ZSBtb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdfXFwtISQlJiorXFwuXFwvOjw9Pj9AXFxefl0vKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEJVSUxUSU47XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuVHlwZSA9IFwidmFyaWFibGVcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICh0eXBlb2Ygc3RhdGUuc0V4cHJDb21tZW50ID09IFwibnVtYmVyXCIpID8gQ09NTUVOVCA6ICgodHlwZW9mIHN0YXRlLnNFeHByUXVvdGUgPT0gXCJudW1iZXJcIikgPyBBVE9NIDogcmV0dXJuVHlwZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaW5kZW50OiBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRlbnRTdGFjayA9PSBudWxsKSByZXR1cm4gc3RhdGUuaW5kZW50YXRpb247XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuaW5kZW50U3RhY2suaW5kZW50O1xuICAgICAgICB9LFxuXG4gICAgICAgIGNsb3NlQnJhY2tldHM6IHtwYWlyczogXCIoKVtde31cXFwiXFxcIlwifSxcbiAgICAgICAgbGluZUNvbW1lbnQ6IFwiOztcIlxuICAgIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXNjaGVtZVwiLCBcInNjaGVtZVwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgnc2hlbGwnLCBmdW5jdGlvbigpIHtcblxuICB2YXIgd29yZHMgPSB7fTtcbiAgZnVuY3Rpb24gZGVmaW5lKHN0eWxlLCBkaWN0KSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGRpY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHdvcmRzW2RpY3RbaV1dID0gc3R5bGU7XG4gICAgfVxuICB9O1xuXG4gIHZhciBjb21tb25BdG9tcyA9IFtcInRydWVcIiwgXCJmYWxzZVwiXTtcbiAgdmFyIGNvbW1vbktleXdvcmRzID0gW1wiaWZcIiwgXCJ0aGVuXCIsIFwiZG9cIiwgXCJlbHNlXCIsIFwiZWxpZlwiLCBcIndoaWxlXCIsIFwidW50aWxcIiwgXCJmb3JcIiwgXCJpblwiLCBcImVzYWNcIiwgXCJmaVwiLFxuICAgIFwiZmluXCIsIFwiZmlsXCIsIFwiZG9uZVwiLCBcImV4aXRcIiwgXCJzZXRcIiwgXCJ1bnNldFwiLCBcImV4cG9ydFwiLCBcImZ1bmN0aW9uXCJdO1xuICB2YXIgY29tbW9uQ29tbWFuZHMgPSBbXCJhYlwiLCBcImF3a1wiLCBcImJhc2hcIiwgXCJiZWVwXCIsIFwiY2F0XCIsIFwiY2NcIiwgXCJjZFwiLCBcImNob3duXCIsIFwiY2htb2RcIiwgXCJjaHJvb3RcIiwgXCJjbGVhclwiLFxuICAgIFwiY3BcIiwgXCJjdXJsXCIsIFwiY3V0XCIsIFwiZGlmZlwiLCBcImVjaG9cIiwgXCJmaW5kXCIsIFwiZ2F3a1wiLCBcImdjY1wiLCBcImdldFwiLCBcImdpdFwiLCBcImdyZXBcIiwgXCJoZ1wiLCBcImtpbGxcIiwgXCJraWxsYWxsXCIsXG4gICAgXCJsblwiLCBcImxzXCIsIFwibWFrZVwiLCBcIm1rZGlyXCIsIFwib3BlbnNzbFwiLCBcIm12XCIsIFwibmNcIiwgXCJubFwiLCBcIm5vZGVcIiwgXCJucG1cIiwgXCJwaW5nXCIsIFwicHNcIiwgXCJyZXN0YXJ0XCIsIFwicm1cIixcbiAgICBcInJtZGlyXCIsIFwic2VkXCIsIFwic2VydmljZVwiLCBcInNoXCIsIFwic2hvcHRcIiwgXCJzaHJlZFwiLCBcInNvdXJjZVwiLCBcInNvcnRcIiwgXCJzbGVlcFwiLCBcInNzaFwiLCBcInN0YXJ0XCIsIFwic3RvcFwiLFxuICAgIFwic3VcIiwgXCJzdWRvXCIsIFwic3ZuXCIsIFwidGVlXCIsIFwidGVsbmV0XCIsIFwidG9wXCIsIFwidG91Y2hcIiwgXCJ2aVwiLCBcInZpbVwiLCBcIndhbGxcIiwgXCJ3Y1wiLCBcIndnZXRcIiwgXCJ3aG9cIiwgXCJ3cml0ZVwiLFxuICAgIFwieWVzXCIsIFwienNoXCJdO1xuXG4gIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJoaW50V29yZHNcIiwgXCJzaGVsbFwiLCBjb21tb25BdG9tcy5jb25jYXQoY29tbW9uS2V5d29yZHMsIGNvbW1vbkNvbW1hbmRzKSk7XG5cbiAgZGVmaW5lKCdhdG9tJywgY29tbW9uQXRvbXMpO1xuICBkZWZpbmUoJ2tleXdvcmQnLCBjb21tb25LZXl3b3Jkcyk7XG4gIGRlZmluZSgnYnVpbHRpbicsIGNvbW1vbkNvbW1hbmRzKTtcblxuICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgc29sID0gc3RyZWFtLnNvbCgpO1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG5cbiAgICBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoY2ggPT09ICdcXCcnIHx8IGNoID09PSAnXCInIHx8IGNoID09PSAnYCcpIHtcbiAgICAgIHN0YXRlLnRva2Vucy51bnNoaWZ0KHRva2VuU3RyaW5nKGNoLCBjaCA9PT0gXCJgXCIgPyBcInF1b3RlXCIgOiBcInN0cmluZ1wiKSk7XG4gICAgICByZXR1cm4gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChjaCA9PT0gJyMnKSB7XG4gICAgICBpZiAoc29sICYmIHN0cmVhbS5lYXQoJyEnKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiAnbWV0YSc7IC8vICdjb21tZW50Jz9cbiAgICAgIH1cbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiAnY29tbWVudCc7XG4gICAgfVxuICAgIGlmIChjaCA9PT0gJyQnKSB7XG4gICAgICBzdGF0ZS50b2tlbnMudW5zaGlmdCh0b2tlbkRvbGxhcik7XG4gICAgICByZXR1cm4gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnPScpIHtcbiAgICAgIHJldHVybiAnb3BlcmF0b3InO1xuICAgIH1cbiAgICBpZiAoY2ggPT09ICctJykge1xuICAgICAgc3RyZWFtLmVhdCgnLScpO1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9cXHcvKTtcbiAgICAgIHJldHVybiAnYXR0cmlidXRlJztcbiAgICB9XG4gICAgaWYgKC9cXGQvLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1xcZC8pO1xuICAgICAgaWYoc3RyZWFtLmVvbCgpIHx8ICEvXFx3Ly50ZXN0KHN0cmVhbS5wZWVrKCkpKSB7XG4gICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICAgIH1cbiAgICB9XG4gICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3LV0vKTtcbiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJz0nICYmIC9cXHcrLy50ZXN0KGN1cikpIHJldHVybiAnZGVmJztcbiAgICByZXR1cm4gd29yZHMuaGFzT3duUHJvcGVydHkoY3VyKSA/IHdvcmRzW2N1cl0gOiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUsIHN0eWxlKSB7XG4gICAgdmFyIGNsb3NlID0gcXVvdGUgPT0gXCIoXCIgPyBcIilcIiA6IHF1b3RlID09IFwie1wiID8gXCJ9XCIgOiBxdW90ZVxuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgbmV4dCwgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dCA9PT0gY2xvc2UgJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbnMuc2hpZnQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChuZXh0ID09PSAnJCcgJiYgIWVzY2FwZWQgJiYgcXVvdGUgIT09IFwiJ1wiICYmIHN0cmVhbS5wZWVrKCkgIT0gY2xvc2UpIHtcbiAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpO1xuICAgICAgICAgIHN0YXRlLnRva2Vucy51bnNoaWZ0KHRva2VuRG9sbGFyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghZXNjYXBlZCAmJiBxdW90ZSAhPT0gY2xvc2UgJiYgbmV4dCA9PT0gcXVvdGUpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbnMudW5zaGlmdCh0b2tlblN0cmluZyhxdW90ZSwgc3R5bGUpKVxuICAgICAgICAgIHJldHVybiB0b2tlbml6ZShzdHJlYW0sIHN0YXRlKVxuICAgICAgICB9IGVsc2UgaWYgKCFlc2NhcGVkICYmIC9bJ1wiXS8udGVzdChuZXh0KSAmJiAhL1snXCJdLy50ZXN0KHF1b3RlKSkge1xuICAgICAgICAgIHN0YXRlLnRva2Vucy51bnNoaWZ0KHRva2VuU3RyaW5nU3RhcnQobmV4dCwgXCJzdHJpbmdcIikpO1xuICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT09ICdcXFxcJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHRva2VuU3RyaW5nU3RhcnQocXVvdGUsIHN0eWxlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHN0YXRlLnRva2Vuc1swXSA9IHRva2VuU3RyaW5nKHF1b3RlLCBzdHlsZSlcbiAgICAgIHN0cmVhbS5uZXh0KClcbiAgICAgIHJldHVybiB0b2tlbml6ZShzdHJlYW0sIHN0YXRlKVxuICAgIH1cbiAgfVxuXG4gIHZhciB0b2tlbkRvbGxhciA9IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUudG9rZW5zLmxlbmd0aCA+IDEpIHN0cmVhbS5lYXQoJyQnKTtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpXG4gICAgaWYgKC9bJ1wiKHtdLy50ZXN0KGNoKSkge1xuICAgICAgc3RhdGUudG9rZW5zWzBdID0gdG9rZW5TdHJpbmcoY2gsIGNoID09IFwiKFwiID8gXCJxdW90ZVwiIDogY2ggPT0gXCJ7XCIgPyBcImRlZlwiIDogXCJzdHJpbmdcIik7XG4gICAgICByZXR1cm4gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmICghL1xcZC8udGVzdChjaCkpIHN0cmVhbS5lYXRXaGlsZSgvXFx3Lyk7XG4gICAgc3RhdGUudG9rZW5zLnNoaWZ0KCk7XG4gICAgcmV0dXJuICdkZWYnO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHRva2VuaXplKHN0cmVhbSwgc3RhdGUpIHtcbiAgICByZXR1cm4gKHN0YXRlLnRva2Vuc1swXSB8fCB0b2tlbkJhc2UpIChzdHJlYW0sIHN0YXRlKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge3JldHVybiB7dG9rZW5zOltdfTt9LFxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICByZXR1cm4gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSxcbiAgICBjbG9zZUJyYWNrZXRzOiBcIigpW117fScnXFxcIlxcXCJgYFwiLFxuICAgIGxpbmVDb21tZW50OiAnIycsXG4gICAgZm9sZDogXCJicmFjZVwiXG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKCd0ZXh0L3gtc2gnLCAnc2hlbGwnKTtcbi8vIEFwYWNoZSB1c2VzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IE1lZGlhIFR5cGUgZm9yIFNoZWxsIHNjcmlwdHNcbi8vIGh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaHR0cGQvaHR0cGQvdHJ1bmsvZG9jcy9jb25mL21pbWUudHlwZXNcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgnYXBwbGljYXRpb24veC1zaCcsICdzaGVsbCcpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwic2lldmVcIiwgZnVuY3Rpb24oY29uZmlnKSB7XG4gIGZ1bmN0aW9uIHdvcmRzKHN0cikge1xuICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoXCIgXCIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIga2V5d29yZHMgPSB3b3JkcyhcImlmIGVsc2lmIGVsc2Ugc3RvcCByZXF1aXJlXCIpO1xuICB2YXIgYXRvbXMgPSB3b3JkcyhcInRydWUgZmFsc2Ugbm90XCIpO1xuICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0O1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG5cbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgIGlmIChjaCA9PSBcIi9cIiAmJiBzdHJlYW0uZWF0KFwiKlwiKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50O1xuICAgICAgcmV0dXJuIHRva2VuQ0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAnIycpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT0gXCJcXFwiXCIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PSBcIihcIikge1xuICAgICAgc3RhdGUuX2luZGVudC5wdXNoKFwiKFwiKTtcbiAgICAgIC8vIGFkZCB2aXJ0dWFsIGFuZ2VsIHdpbmdzIHNvIHRoYXQgZWRpdG9yIGJlaGF2ZXMuLi5cbiAgICAgIC8vIC4uLm1vcmUgc2FuZSBpbmNhc2Ugb2YgYnJva2VuIGJyYWNrZXRzXG4gICAgICBzdGF0ZS5faW5kZW50LnB1c2goXCJ7XCIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSBcIntcIikge1xuICAgICAgc3RhdGUuX2luZGVudC5wdXNoKFwie1wiKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChjaCA9PSBcIilcIikgIHtcbiAgICAgIHN0YXRlLl9pbmRlbnQucG9wKCk7XG4gICAgICBzdGF0ZS5faW5kZW50LnBvcCgpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gXCJ9XCIpIHtcbiAgICAgIHN0YXRlLl9pbmRlbnQucG9wKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT0gXCIsXCIpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGlmIChjaCA9PSBcIjtcIilcbiAgICAgIHJldHVybiBudWxsO1xuXG5cbiAgICBpZiAoL1t7fVxcKFxcKSw7XS8udGVzdChjaCkpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIC8vIDEqRElHSVQgXCJLXCIgLyBcIk1cIiAvIFwiR1wiXG4gICAgaWYgKC9cXGQvLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXGRdLyk7XG4gICAgICBzdHJlYW0uZWF0KC9bS2tNbUdnXS8pO1xuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgfVxuXG4gICAgLy8gXCI6XCIgKEFMUEhBIC8gXCJfXCIpICooQUxQSEEgLyBESUdJVCAvIFwiX1wiKVxuICAgIGlmIChjaCA9PSBcIjpcIikge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bYS16QS1aX10vKTtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW2EtekEtWjAtOV9dLyk7XG5cbiAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgfVxuXG4gICAgc3RyZWFtLmVhdFdoaWxlKC9cXHcvKTtcbiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcblxuICAgIC8vIFwidGV4dDpcIiAqKFNQIC8gSFRBQikgKGhhc2gtY29tbWVudCAvIENSTEYpXG4gICAgLy8gKihtdWx0aWxpbmUtbGl0ZXJhbCAvIG11bHRpbGluZS1kb3RzdGFydClcbiAgICAvLyBcIi5cIiBDUkxGXG4gICAgaWYgKChjdXIgPT0gXCJ0ZXh0XCIpICYmIHN0cmVhbS5lYXQoXCI6XCIpKVxuICAgIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5NdWx0aUxpbmVTdHJpbmc7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9XG5cbiAgICBpZiAoa2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSlcbiAgICAgIHJldHVybiBcImtleXdvcmRcIjtcblxuICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKVxuICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbk11bHRpTGluZVN0cmluZyhzdHJlYW0sIHN0YXRlKVxuICB7XG4gICAgc3RhdGUuX211bHRpTGluZVN0cmluZyA9IHRydWU7XG4gICAgLy8gdGhlIGZpcnN0IGxpbmUgaXMgc3BlY2lhbCBpdCBtYXkgY29udGFpbiBhIGNvbW1lbnRcbiAgICBpZiAoIXN0cmVhbS5zb2woKSkge1xuICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7XG5cbiAgICAgIGlmIChzdHJlYW0ucGVlaygpID09IFwiI1wiKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfVxuXG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9XG5cbiAgICBpZiAoKHN0cmVhbS5uZXh0KCkgPT0gXCIuXCIpICAmJiAoc3RyZWFtLmVvbCgpKSlcbiAgICB7XG4gICAgICBzdGF0ZS5fbXVsdGlMaW5lU3RyaW5nID0gZmFsc2U7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDtcbiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgaWYgKG1heWJlRW5kICYmIGNoID09IFwiL1wiKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG1heWJlRW5kID0gKGNoID09IFwiKlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7XG4gICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2ggPT0gcXVvdGUgJiYgIWVzY2FwZWQpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmICghZXNjYXBlZCkgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7XG4gICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsXG4gICAgICAgICAgICAgIGJhc2VJbmRlbnQ6IGJhc2UgfHwgMCxcbiAgICAgICAgICAgICAgX2luZGVudDogW119O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIChzdGF0ZS50b2tlbml6ZSB8fCB0b2tlbkJhc2UpKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCBfdGV4dEFmdGVyKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gc3RhdGUuX2luZGVudC5sZW5ndGg7XG4gICAgICBpZiAoX3RleHRBZnRlciAmJiAoX3RleHRBZnRlclswXSA9PSBcIn1cIikpXG4gICAgICAgIGxlbmd0aC0tO1xuXG4gICAgICBpZiAobGVuZ3RoIDwwKVxuICAgICAgICBsZW5ndGggPSAwO1xuXG4gICAgICByZXR1cm4gbGVuZ3RoICogaW5kZW50VW5pdDtcbiAgICB9LFxuXG4gICAgZWxlY3RyaWNDaGFyczogXCJ9XCJcbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi9zaWV2ZVwiLCBcInNpZXZlXCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8vIFNsaW0gSGlnaGxpZ2h0aW5nIGZvciBDb2RlTWlycm9yIGNvcHlyaWdodCAoYykgSGlja25IYWNrIFNvZnR3YXJlIEdtYmhcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSwgcmVxdWlyZShcIi4uL2h0bWxtaXhlZC9odG1sbWl4ZWRcIiksIHJlcXVpcmUoXCIuLi9ydWJ5L3J1YnlcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi9odG1sbWl4ZWQvaHRtbG1peGVkXCIsIFwiLi4vcnVieS9ydWJ5XCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwic2xpbVwiLCBmdW5jdGlvbihjb25maWcpIHtcbiAgICB2YXIgaHRtbE1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCB7bmFtZTogXCJodG1sbWl4ZWRcIn0pO1xuICAgIHZhciBydWJ5TW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwicnVieVwiKTtcbiAgICB2YXIgbW9kZXMgPSB7IGh0bWw6IGh0bWxNb2RlLCBydWJ5OiBydWJ5TW9kZSB9O1xuICAgIHZhciBlbWJlZGRlZCA9IHtcbiAgICAgIHJ1Ynk6IFwicnVieVwiLFxuICAgICAgamF2YXNjcmlwdDogXCJqYXZhc2NyaXB0XCIsXG4gICAgICBjc3M6IFwidGV4dC9jc3NcIixcbiAgICAgIHNhc3M6IFwidGV4dC94LXNhc3NcIixcbiAgICAgIHNjc3M6IFwidGV4dC94LXNjc3NcIixcbiAgICAgIGxlc3M6IFwidGV4dC94LWxlc3NcIixcbiAgICAgIHN0eWw6IFwidGV4dC94LXN0eWxcIiwgLy8gbm8gaGlnaGxpZ2h0aW5nIHNvIGZhclxuICAgICAgY29mZmVlOiBcImNvZmZlZXNjcmlwdFwiLFxuICAgICAgYXNjaWlkb2M6IFwidGV4dC94LWFzY2lpZG9jXCIsXG4gICAgICBtYXJrZG93bjogXCJ0ZXh0L3gtbWFya2Rvd25cIixcbiAgICAgIHRleHRpbGU6IFwidGV4dC94LXRleHRpbGVcIiwgLy8gbm8gaGlnaGxpZ2h0aW5nIHNvIGZhclxuICAgICAgY3Jlb2xlOiBcInRleHQveC1jcmVvbGVcIiwgLy8gbm8gaGlnaGxpZ2h0aW5nIHNvIGZhclxuICAgICAgd2lraTogXCJ0ZXh0L3gtd2lraVwiLCAvLyBubyBoaWdobGlnaHRpbmcgc28gZmFyXG4gICAgICBtZWRpYXdpa2k6IFwidGV4dC94LW1lZGlhd2lraVwiLCAvLyBubyBoaWdobGlnaHRpbmcgc28gZmFyXG4gICAgICByZG9jOiBcInRleHQveC1yZG9jXCIsIC8vIG5vIGhpZ2hsaWdodGluZyBzbyBmYXJcbiAgICAgIGJ1aWxkZXI6IFwidGV4dC94LWJ1aWxkZXJcIiwgLy8gbm8gaGlnaGxpZ2h0aW5nIHNvIGZhclxuICAgICAgbm9rb2dpcmk6IFwidGV4dC94LW5va29naXJpXCIsIC8vIG5vIGhpZ2hsaWdodGluZyBzbyBmYXJcbiAgICAgIGVyYjogXCJhcHBsaWNhdGlvbi94LWVyYlwiXG4gICAgfTtcbiAgICB2YXIgZW1iZWRkZWRSZWdleHAgPSBmdW5jdGlvbihtYXApe1xuICAgICAgdmFyIGFyciA9IFtdO1xuICAgICAgZm9yKHZhciBrZXkgaW4gbWFwKSBhcnIucHVzaChrZXkpO1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKFwiK2Fyci5qb2luKCd8JykrXCIpOlwiKTtcbiAgICB9KGVtYmVkZGVkKTtcblxuICAgIHZhciBzdHlsZU1hcCA9IHtcbiAgICAgIFwiY29tbWVudExpbmVcIjogXCJjb21tZW50XCIsXG4gICAgICBcInNsaW1Td2l0Y2hcIjogXCJvcGVyYXRvciBzcGVjaWFsXCIsXG4gICAgICBcInNsaW1UYWdcIjogXCJ0YWdcIixcbiAgICAgIFwic2xpbUlkXCI6IFwiYXR0cmlidXRlIGRlZlwiLFxuICAgICAgXCJzbGltQ2xhc3NcIjogXCJhdHRyaWJ1dGUgcXVhbGlmaWVyXCIsXG4gICAgICBcInNsaW1BdHRyaWJ1dGVcIjogXCJhdHRyaWJ1dGVcIixcbiAgICAgIFwic2xpbVN1Ym1vZGVcIjogXCJrZXl3b3JkIHNwZWNpYWxcIixcbiAgICAgIFwiY2xvc2VBdHRyaWJ1dGVUYWdcIjogbnVsbCxcbiAgICAgIFwic2xpbURvY3R5cGVcIjogbnVsbCxcbiAgICAgIFwibGluZUNvbnRpbnVhdGlvblwiOiBudWxsXG4gICAgfTtcbiAgICB2YXIgY2xvc2luZyA9IHtcbiAgICAgIFwie1wiOiBcIn1cIixcbiAgICAgIFwiW1wiOiBcIl1cIixcbiAgICAgIFwiKFwiOiBcIilcIlxuICAgIH07XG5cbiAgICB2YXIgbmFtZVN0YXJ0Q2hhciA9IFwiX2EtekEtWlxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXCI7XG4gICAgdmFyIG5hbWVDaGFyID0gbmFtZVN0YXJ0Q2hhciArIFwiXFxcXC0wLTlcXHhCN1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MFwiO1xuICAgIHZhciBuYW1lUmVnZXhwID0gbmV3IFJlZ0V4cChcIl5bOlwiK25hbWVTdGFydENoYXIrXCJdKD86OltcIituYW1lQ2hhcitcIl18W1wiK25hbWVDaGFyK1wiXSopXCIpO1xuICAgIHZhciBhdHRyaWJ1dGVOYW1lUmVnZXhwID0gbmV3IFJlZ0V4cChcIl5bOlwiK25hbWVTdGFydENoYXIrXCJdWzpcXFxcLlwiK25hbWVDaGFyK1wiXSooPz1cXFxccyo9KVwiKTtcbiAgICB2YXIgd3JhcHBlZEF0dHJpYnV0ZU5hbWVSZWdleHAgPSBuZXcgUmVnRXhwKFwiXls6XCIrbmFtZVN0YXJ0Q2hhcitcIl1bOlxcXFwuXCIrbmFtZUNoYXIrXCJdKlwiKTtcbiAgICB2YXIgY2xhc3NOYW1lUmVnZXhwID0gL15cXC4tP1tfYS16QS1aXStbXFx3XFwtXSovO1xuICAgIHZhciBjbGFzc0lkUmVnZXhwID0gL14jW19hLXpBLVpdK1tcXHdcXC1dKi87XG5cbiAgICBmdW5jdGlvbiBiYWNrdXAocG9zLCB0b2tlbml6ZSwgc3R5bGUpIHtcbiAgICAgIHZhciByZXN0b3JlID0gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuaXplO1xuICAgICAgICBpZiAoc3RyZWFtLnBvcyA8IHBvcykge1xuICAgICAgICAgIHN0cmVhbS5wb3MgPSBwb3M7XG4gICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHJlc3RvcmU7XG4gICAgICAgIHJldHVybiB0b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF5YmVCYWNrdXAoc3RyZWFtLCBzdGF0ZSwgcGF0LCBvZmZzZXQsIHN0eWxlKSB7XG4gICAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgIHZhciBpZHggPSBjdXIuc2VhcmNoKHBhdCk7XG4gICAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBiYWNrdXAoc3RyZWFtLnBvcywgc3RhdGUudG9rZW5pemUsIHN0eWxlKTtcbiAgICAgICAgc3RyZWFtLmJhY2tVcChjdXIubGVuZ3RoIC0gaWR4IC0gb2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb250aW51ZUxpbmUoc3RhdGUsIGNvbHVtbikge1xuICAgICAgc3RhdGUuc3RhY2sgPSB7XG4gICAgICAgIHBhcmVudDogc3RhdGUuc3RhY2ssXG4gICAgICAgIHN0eWxlOiBcImNvbnRpbnVhdGlvblwiLFxuICAgICAgICBpbmRlbnRlZDogY29sdW1uLFxuICAgICAgICB0b2tlbml6ZTogc3RhdGUubGluZVxuICAgICAgfTtcbiAgICAgIHN0YXRlLmxpbmUgPSBzdGF0ZS50b2tlbml6ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluaXNoQ29udGludWUoc3RhdGUpIHtcbiAgICAgIGlmIChzdGF0ZS5saW5lID09IHN0YXRlLnRva2VuaXplKSB7XG4gICAgICAgIHN0YXRlLmxpbmUgPSBzdGF0ZS5zdGFjay50b2tlbml6ZTtcbiAgICAgICAgc3RhdGUuc3RhY2sgPSBzdGF0ZS5zdGFjay5wYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZUNvbnRpbnVhYmxlKGNvbHVtbiwgdG9rZW5pemUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGZpbmlzaENvbnRpbnVlKHN0YXRlKTtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxcXFwkLykpIHtcbiAgICAgICAgICBjb250aW51ZUxpbmUoc3RhdGUsIGNvbHVtbik7XG4gICAgICAgICAgcmV0dXJuIFwibGluZUNvbnRpbnVhdGlvblwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdHlsZSA9IHRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICBpZiAoc3RyZWFtLmVvbCgpICYmIHN0cmVhbS5jdXJyZW50KCkubWF0Y2goLyg/Ol58W15cXFxcXSkoPzpcXFxcXFxcXCkqXFxcXCQvKSkge1xuICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWFDb250aW51YWJsZShjb2x1bW4sIHRva2VuaXplKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBmaW5pc2hDb250aW51ZShzdGF0ZSk7XG4gICAgICAgIHZhciBzdHlsZSA9IHRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICBpZiAoc3RyZWFtLmVvbCgpICYmIHN0cmVhbS5jdXJyZW50KCkubWF0Y2goLywkLykpIHtcbiAgICAgICAgICBjb250aW51ZUxpbmUoc3RhdGUsIGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydWJ5SW5RdW90ZShlbmRRdW90ZSwgdG9rZW5pemUpIHtcbiAgICAgIC8vIFRPRE86IGFkZCBtdWx0aSBsaW5lIHN1cHBvcnRcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7XG4gICAgICAgIGlmIChjaCA9PSBlbmRRdW90ZSAmJiBzdGF0ZS5ydWJ5U3RhdGUudG9rZW5pemUubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAvLyBzdGVwIG91dCBvZiBydWJ5IGNvbnRleHQgYXMgaXQgc2VlbXMgdG8gY29tcGxldGUgcHJvY2Vzc2luZyBhbGwgdGhlIGJyYWNlc1xuICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbml6ZTtcbiAgICAgICAgICByZXR1cm4gXCJjbG9zZUF0dHJpYnV0ZVRhZ1wiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBydWJ5KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydFJ1YnlTcGxhdCh0b2tlbml6ZSkge1xuICAgICAgdmFyIHJ1YnlTdGF0ZTtcbiAgICAgIHZhciBydW5TcGxhdCA9IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLnJ1YnlTdGF0ZS50b2tlbml6ZS5sZW5ndGggPT0gMSAmJiAhc3RhdGUucnVieVN0YXRlLmNvbnRleHQucHJldikge1xuICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICAgICAgICBzdGF0ZS5ydWJ5U3RhdGUgPSBydWJ5U3RhdGU7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuaXplO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydWJ5KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHJ1YnlTdGF0ZSA9IHN0YXRlLnJ1YnlTdGF0ZTtcbiAgICAgICAgc3RhdGUucnVieVN0YXRlID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKHJ1YnlNb2RlKTtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBydW5TcGxhdDtcbiAgICAgICAgcmV0dXJuIHJ1Ynkoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1Ynkoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgcmV0dXJuIHJ1YnlNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUucnVieVN0YXRlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodG1sTGluZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFxcXCQvKSkge1xuICAgICAgICByZXR1cm4gXCJsaW5lQ29udGludWF0aW9uXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gaHRtbChzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHRtbChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eI1xcey8pKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gcnVieUluUXVvdGUoXCJ9XCIsIHN0YXRlLnRva2VuaXplKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF5YmVCYWNrdXAoc3RyZWFtLCBzdGF0ZSwgL1teXFxcXF0jXFx7LywgMSwgaHRtbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGFydEh0bWxMaW5lKGxhc3RUb2tlbml6ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gaHRtbExpbmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHN0YXRlLnRva2VuaXplID0gbGFzdFRva2VuaXplO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0SHRtbE1vZGUoc3RyZWFtLCBzdGF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzdGF0ZS5zdGFjayA9IHtcbiAgICAgICAgcGFyZW50OiBzdGF0ZS5zdGFjayxcbiAgICAgICAgc3R5bGU6IFwiaHRtbFwiLFxuICAgICAgICBpbmRlbnRlZDogc3RyZWFtLmNvbHVtbigpICsgb2Zmc2V0LCAvLyBwaXBlICsgc3BhY2VcbiAgICAgICAgdG9rZW5pemU6IHN0YXRlLmxpbmVcbiAgICAgIH07XG4gICAgICBzdGF0ZS5saW5lID0gc3RhdGUudG9rZW5pemUgPSBodG1sO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gc3RhdGUuc3RhY2suc3R5bGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWVudE1vZGUoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgc3RhdGUuc3RhY2sgPSB7XG4gICAgICAgIHBhcmVudDogc3RhdGUuc3RhY2ssXG4gICAgICAgIHN0eWxlOiBcImNvbW1lbnRcIixcbiAgICAgICAgaW5kZW50ZWQ6IHN0YXRlLmluZGVudGVkICsgMSxcbiAgICAgICAgdG9rZW5pemU6IHN0YXRlLmxpbmVcbiAgICAgIH07XG4gICAgICBzdGF0ZS5saW5lID0gY29tbWVudDtcbiAgICAgIHJldHVybiBjb21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZVdyYXBwZXIoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoc3RhdGUuc3RhY2suZW5kUXVvdGUpKSB7XG4gICAgICAgIHN0YXRlLmxpbmUgPSBzdGF0ZS5zdGFjay5saW5lO1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHN0YXRlLnN0YWNrLnRva2VuaXplO1xuICAgICAgICBzdGF0ZS5zdGFjayA9IHN0YXRlLnN0YWNrLnBhcmVudDtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHdyYXBwZWRBdHRyaWJ1dGVOYW1lUmVnZXhwKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGF0dHJpYnV0ZVdyYXBwZXJBc3NpZ247XG4gICAgICAgIHJldHVybiBcInNsaW1BdHRyaWJ1dGVcIjtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0cmlidXRlV3JhcHBlckFzc2lnbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePT0/LykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBhdHRyaWJ1dGVXcmFwcGVyVmFsdWU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZVdyYXBwZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZVdyYXBwZXJWYWx1ZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY2ggPSBzdHJlYW0ucGVlaygpO1xuICAgICAgaWYgKGNoID09ICdcIicgfHwgY2ggPT0gXCJcXCdcIikge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHJlYWRRdW90ZWQoY2gsIFwic3RyaW5nXCIsIHRydWUsIGZhbHNlLCBhdHRyaWJ1dGVXcmFwcGVyKTtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKGNoID09ICdbJykge1xuICAgICAgICByZXR1cm4gc3RhcnRSdWJ5U3BsYXQoYXR0cmlidXRlV3JhcHBlcikoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKHRydWV8ZmFsc2V8bmlsKVxcYi8pKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gYXR0cmlidXRlV3JhcHBlcjtcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXJ0UnVieVNwbGF0KGF0dHJpYnV0ZVdyYXBwZXIpKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0QXR0cmlidXRlV3JhcHBlck1vZGUoc3RhdGUsIGVuZFF1b3RlLCB0b2tlbml6ZSkge1xuICAgICAgc3RhdGUuc3RhY2sgPSB7XG4gICAgICAgIHBhcmVudDogc3RhdGUuc3RhY2ssXG4gICAgICAgIHN0eWxlOiBcIndyYXBwZXJcIixcbiAgICAgICAgaW5kZW50ZWQ6IHN0YXRlLmluZGVudGVkICsgMSxcbiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplLFxuICAgICAgICBsaW5lOiBzdGF0ZS5saW5lLFxuICAgICAgICBlbmRRdW90ZTogZW5kUXVvdGVcbiAgICAgIH07XG4gICAgICBzdGF0ZS5saW5lID0gc3RhdGUudG9rZW5pemUgPSBhdHRyaWJ1dGVXcmFwcGVyO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ViKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14jXFx7LykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBydWJ5SW5RdW90ZShcIn1cIiwgc3RhdGUudG9rZW5pemUpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBzdWJTdHJlYW0gPSBuZXcgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0oc3RyZWFtLnN0cmluZy5zbGljZShzdGF0ZS5zdGFjay5pbmRlbnRlZCksIHN0cmVhbS50YWJTaXplKTtcbiAgICAgIHN1YlN0cmVhbS5wb3MgPSBzdHJlYW0ucG9zIC0gc3RhdGUuc3RhY2suaW5kZW50ZWQ7XG4gICAgICBzdWJTdHJlYW0uc3RhcnQgPSBzdHJlYW0uc3RhcnQgLSBzdGF0ZS5zdGFjay5pbmRlbnRlZDtcbiAgICAgIHN1YlN0cmVhbS5sYXN0Q29sdW1uUG9zID0gc3RyZWFtLmxhc3RDb2x1bW5Qb3MgLSBzdGF0ZS5zdGFjay5pbmRlbnRlZDtcbiAgICAgIHN1YlN0cmVhbS5sYXN0Q29sdW1uVmFsdWUgPSBzdHJlYW0ubGFzdENvbHVtblZhbHVlIC0gc3RhdGUuc3RhY2suaW5kZW50ZWQ7XG4gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdWJNb2RlLnRva2VuKHN1YlN0cmVhbSwgc3RhdGUuc3ViU3RhdGUpO1xuICAgICAgc3RyZWFtLnBvcyA9IHN1YlN0cmVhbS5wb3MgKyBzdGF0ZS5zdGFjay5pbmRlbnRlZDtcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmlyc3RTdWIoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgc3RhdGUuc3RhY2suaW5kZW50ZWQgPSBzdHJlYW0uY29sdW1uKCk7XG4gICAgICBzdGF0ZS5saW5lID0gc3RhdGUudG9rZW5pemUgPSBzdWI7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTW9kZShtb2RlKSB7XG4gICAgICB2YXIgcXVlcnkgPSBlbWJlZGRlZFttb2RlXTtcbiAgICAgIHZhciBzcGVjID0gQ29kZU1pcnJvci5taW1lTW9kZXNbcXVlcnldO1xuICAgICAgaWYgKHNwZWMpIHtcbiAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHNwZWMpO1xuICAgICAgfVxuICAgICAgdmFyIGZhY3RvcnkgPSBDb2RlTWlycm9yLm1vZGVzW3F1ZXJ5XTtcbiAgICAgIGlmIChmYWN0b3J5KSB7XG4gICAgICAgIHJldHVybiBmYWN0b3J5KGNvbmZpZywge25hbWU6IHF1ZXJ5fSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJudWxsXCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldE1vZGUobW9kZSkge1xuICAgICAgaWYgKCFtb2Rlcy5oYXNPd25Qcm9wZXJ0eShtb2RlKSkge1xuICAgICAgICByZXR1cm4gbW9kZXNbbW9kZV0gPSBjcmVhdGVNb2RlKG1vZGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1vZGVzW21vZGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0U3ViTW9kZShtb2RlLCBzdGF0ZSkge1xuICAgICAgdmFyIHN1Yk1vZGUgPSBnZXRNb2RlKG1vZGUpO1xuICAgICAgdmFyIHN1YlN0YXRlID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKHN1Yk1vZGUpO1xuXG4gICAgICBzdGF0ZS5zdWJNb2RlID0gc3ViTW9kZTtcbiAgICAgIHN0YXRlLnN1YlN0YXRlID0gc3ViU3RhdGU7XG5cbiAgICAgIHN0YXRlLnN0YWNrID0ge1xuICAgICAgICBwYXJlbnQ6IHN0YXRlLnN0YWNrLFxuICAgICAgICBzdHlsZTogXCJzdWJcIixcbiAgICAgICAgaW5kZW50ZWQ6IHN0YXRlLmluZGVudGVkICsgMSxcbiAgICAgICAgdG9rZW5pemU6IHN0YXRlLmxpbmVcbiAgICAgIH07XG4gICAgICBzdGF0ZS5saW5lID0gc3RhdGUudG9rZW5pemUgPSBmaXJzdFN1YjtcbiAgICAgIHJldHVybiBcInNsaW1TdWJtb2RlXCI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZG9jdHlwZUxpbmUoc3RyZWFtLCBfc3RhdGUpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiBcInNsaW1Eb2N0eXBlXCI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRMaW5lKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7XG4gICAgICBpZiAoY2ggPT0gJzwnKSB7XG4gICAgICAgIHJldHVybiAoc3RhdGUudG9rZW5pemUgPSBzdGFydEh0bWxMaW5lKHN0YXRlLnRva2VuaXplKSkoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW3wnXS8pKSB7XG4gICAgICAgIHJldHVybiBzdGFydEh0bWxNb2RlKHN0cmVhbSwgc3RhdGUsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxcLyghfFxcW1xcdytdKT8vKSkge1xuICAgICAgICByZXR1cm4gY29tbWVudE1vZGUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKC18PT0/Wzw+XT8pLykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBsaW5lQ29udGludWFibGUoc3RyZWFtLmNvbHVtbigpLCBjb21tYUNvbnRpbnVhYmxlKHN0cmVhbS5jb2x1bW4oKSwgcnVieSkpO1xuICAgICAgICByZXR1cm4gXCJzbGltU3dpdGNoXCI7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eZG9jdHlwZVxcYi8pKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gZG9jdHlwZUxpbmU7XG4gICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIG0gPSBzdHJlYW0ubWF0Y2goZW1iZWRkZWRSZWdleHApO1xuICAgICAgaWYgKG0pIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0U3ViTW9kZShtWzFdLCBzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzbGltVGFnKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNsaW0oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLnN0YXJ0T2ZMaW5lKSB7XG4gICAgICAgIHJldHVybiBzdGFydExpbmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2xpbVRhZyhzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzbGltVGFnKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KCcqJykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzdGFydFJ1YnlTcGxhdChzbGltVGFnRXh0cmFzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKG5hbWVSZWdleHApKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gc2xpbVRhZ0V4dHJhcztcbiAgICAgICAgcmV0dXJuIFwic2xpbVRhZ1wiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNsaW1DbGFzcyhzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2xpbVRhZ0V4dHJhcyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKDw+P3w+PD8pLykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzbGltQ2xhc3M7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNsaW1DbGFzcyhzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2xpbUNsYXNzKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goY2xhc3NJZFJlZ2V4cCkpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzbGltQ2xhc3M7XG4gICAgICAgIHJldHVybiBcInNsaW1JZFwiO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5tYXRjaChjbGFzc05hbWVSZWdleHApKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gc2xpbUNsYXNzO1xuICAgICAgICByZXR1cm4gXCJzbGltQ2xhc3NcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzbGltQXR0cmlidXRlKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzbGltQXR0cmlidXRlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14oW1xcW1xce1xcKF0pLykpIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0QXR0cmlidXRlV3JhcHBlck1vZGUoc3RhdGUsIGNsb3NpbmdbUmVnRXhwLiQxXSwgc2xpbUF0dHJpYnV0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKGF0dHJpYnV0ZU5hbWVSZWdleHApKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gc2xpbUF0dHJpYnV0ZUFzc2lnbjtcbiAgICAgICAgcmV0dXJuIFwic2xpbUF0dHJpYnV0ZVwiO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gJyonKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gc3RhcnRSdWJ5U3BsYXQoc2xpbUNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzbGltQ29udGVudChzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2xpbUF0dHJpYnV0ZUFzc2lnbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePT0/LykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzbGltQXR0cmlidXRlVmFsdWU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbiwgYmVjYXVzZSBvZiBmb3J3YXJkIGxvb2t1cFxuICAgICAgcmV0dXJuIHNsaW1BdHRyaWJ1dGUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2xpbUF0dHJpYnV0ZVZhbHVlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7XG4gICAgICBpZiAoY2ggPT0gJ1wiJyB8fCBjaCA9PSBcIlxcJ1wiKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gcmVhZFF1b3RlZChjaCwgXCJzdHJpbmdcIiwgdHJ1ZSwgZmFsc2UsIHNsaW1BdHRyaWJ1dGUpO1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT0gJ1snKSB7XG4gICAgICAgIHJldHVybiBzdGFydFJ1YnlTcGxhdChzbGltQXR0cmlidXRlKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PSAnOicpIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0UnVieVNwbGF0KHNsaW1BdHRyaWJ1dGVTeW1ib2xzKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14odHJ1ZXxmYWxzZXxuaWwpXFxiLykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzbGltQXR0cmlidXRlO1xuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhcnRSdWJ5U3BsYXQoc2xpbUF0dHJpYnV0ZSkoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNsaW1BdHRyaWJ1dGVTeW1ib2xzKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW15cXHNdLCg/PTopLykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzdGFydFJ1YnlTcGxhdChzbGltQXR0cmlidXRlU3ltYm9scyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIHJldHVybiBzbGltQXR0cmlidXRlKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkUXVvdGVkKHF1b3RlLCBzdHlsZSwgZW1iZWQsIHVuZXNjYXBlZCwgbmV4dFRva2VuaXplKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBmaW5pc2hDb250aW51ZShzdGF0ZSk7XG4gICAgICAgIHZhciBmcmVzaCA9IHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoID09IDA7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXFxcJC8sIGZyZXNoKSkge1xuICAgICAgICAgIGlmICghZnJlc2gpIHJldHVybiBzdHlsZTtcbiAgICAgICAgICBjb250aW51ZUxpbmUoc3RhdGUsIHN0YXRlLmluZGVudGVkKTtcbiAgICAgICAgICByZXR1cm4gXCJsaW5lQ29udGludWF0aW9uXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXiNcXHsvLCBmcmVzaCkpIHtcbiAgICAgICAgICBpZiAoIWZyZXNoKSByZXR1cm4gc3R5bGU7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBydWJ5SW5RdW90ZShcIn1cIiwgc3RhdGUudG9rZW5pemUpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIGNoO1xuICAgICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAodW5lc2NhcGVkIHx8ICFlc2NhcGVkKSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBuZXh0VG9rZW5pemU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVtYmVkICYmIGNoID09IFwiI1wiICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgICBpZiAoc3RyZWFtLmVhdChcIntcIikpIHtcbiAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcCgyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSBcIlxcXFxcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyZWFtLmVvbCgpICYmIGVzY2FwZWQpIHtcbiAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNsaW1Db250ZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL149PT8vKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHJ1Ynk7XG4gICAgICAgIHJldHVybiBcInNsaW1Td2l0Y2hcIjtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXC8kLykpIHsgLy8gdGFnIGNsb3NlIGhpbnRcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzbGltO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL146LykpIHsgLy8gaW5saW5lIHRhZ1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHNsaW1UYWc7XG4gICAgICAgIHJldHVybiBcInNsaW1Td2l0Y2hcIjtcbiAgICAgIH1cbiAgICAgIHN0YXJ0SHRtbE1vZGUoc3RyZWFtLCBzdGF0ZSwgMCk7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgdmFyIG1vZGUgPSB7XG4gICAgICAvLyBkZWZhdWx0IHRvIGh0bWwgbW9kZVxuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBodG1sU3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoaHRtbE1vZGUpO1xuICAgICAgICB2YXIgcnVieVN0YXRlID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKHJ1YnlNb2RlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBodG1sU3RhdGU6IGh0bWxTdGF0ZSxcbiAgICAgICAgICBydWJ5U3RhdGU6IHJ1YnlTdGF0ZSxcbiAgICAgICAgICBzdGFjazogbnVsbCxcbiAgICAgICAgICBsYXN0OiBudWxsLFxuICAgICAgICAgIHRva2VuaXplOiBzbGltLFxuICAgICAgICAgIGxpbmU6IHNsaW0sXG4gICAgICAgICAgaW5kZW50ZWQ6IDBcbiAgICAgICAgfTtcbiAgICAgIH0sXG5cbiAgICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBodG1sU3RhdGUgOiBDb2RlTWlycm9yLmNvcHlTdGF0ZShodG1sTW9kZSwgc3RhdGUuaHRtbFN0YXRlKSxcbiAgICAgICAgICBydWJ5U3RhdGU6IENvZGVNaXJyb3IuY29weVN0YXRlKHJ1YnlNb2RlLCBzdGF0ZS5ydWJ5U3RhdGUpLFxuICAgICAgICAgIHN1Yk1vZGU6IHN0YXRlLnN1Yk1vZGUsXG4gICAgICAgICAgc3ViU3RhdGU6IHN0YXRlLnN1Yk1vZGUgJiYgQ29kZU1pcnJvci5jb3B5U3RhdGUoc3RhdGUuc3ViTW9kZSwgc3RhdGUuc3ViU3RhdGUpLFxuICAgICAgICAgIHN0YWNrOiBzdGF0ZS5zdGFjayxcbiAgICAgICAgICBsYXN0OiBzdGF0ZS5sYXN0LFxuICAgICAgICAgIHRva2VuaXplOiBzdGF0ZS50b2tlbml6ZSxcbiAgICAgICAgICBsaW5lOiBzdGF0ZS5saW5lXG4gICAgICAgIH07XG4gICAgICB9LFxuXG4gICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzdGF0ZS5saW5lO1xuICAgICAgICAgIHdoaWxlIChzdGF0ZS5zdGFjayAmJiBzdGF0ZS5zdGFjay5pbmRlbnRlZCA+IHN0YXRlLmluZGVudGVkICYmIHN0YXRlLmxhc3QgIT0gXCJzbGltU3VibW9kZVwiKSB7XG4gICAgICAgICAgICBzdGF0ZS5saW5lID0gc3RhdGUudG9rZW5pemUgPSBzdGF0ZS5zdGFjay50b2tlbml6ZTtcbiAgICAgICAgICAgIHN0YXRlLnN0YWNrID0gc3RhdGUuc3RhY2sucGFyZW50O1xuICAgICAgICAgICAgc3RhdGUuc3ViTW9kZSA9IG51bGw7XG4gICAgICAgICAgICBzdGF0ZS5zdWJTdGF0ZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlO1xuICAgICAgICBpZiAoc3R5bGUpIHN0YXRlLmxhc3QgPSBzdHlsZTtcbiAgICAgICAgcmV0dXJuIHN0eWxlTWFwLmhhc093blByb3BlcnR5KHN0eWxlKSA/IHN0eWxlTWFwW3N0eWxlXSA6IHN0eWxlO1xuICAgICAgfSxcblxuICAgICAgYmxhbmtMaW5lOiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgICBpZiAoc3RhdGUuc3ViTW9kZSAmJiBzdGF0ZS5zdWJNb2RlLmJsYW5rTGluZSkge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5zdWJNb2RlLmJsYW5rTGluZShzdGF0ZS5zdWJTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGlubmVyTW9kZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLnN1Yk1vZGUpIHJldHVybiB7c3RhdGU6IHN0YXRlLnN1YlN0YXRlLCBtb2RlOiBzdGF0ZS5zdWJNb2RlfTtcbiAgICAgICAgcmV0dXJuIHtzdGF0ZTogc3RhdGUsIG1vZGU6IG1vZGV9O1xuICAgICAgfVxuXG4gICAgICAvL2luZGVudDogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIC8vICByZXR1cm4gc3RhdGUuaW5kZW50ZWQ7XG4gICAgICAvL31cbiAgICB9O1xuICAgIHJldHVybiBtb2RlO1xuICB9LCBcImh0bWxtaXhlZFwiLCBcInJ1YnlcIik7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXNsaW1cIiwgXCJzbGltXCIpO1xuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi94LXNsaW1cIiwgXCJzbGltXCIpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgnc21hbGx0YWxrJywgZnVuY3Rpb24oY29uZmlnKSB7XG5cbiAgdmFyIHNwZWNpYWxDaGFycyA9IC9bK1xcLVxcL1xcXFwqfjw+PUAlfCY/IS4sOjteXS87XG4gIHZhciBrZXl3b3JkcyA9IC90cnVlfGZhbHNlfG5pbHxzZWxmfHN1cGVyfHRoaXNDb250ZXh0LztcblxuICB2YXIgQ29udGV4dCA9IGZ1bmN0aW9uKHRva2VuaXplciwgcGFyZW50KSB7XG4gICAgdGhpcy5uZXh0ID0gdG9rZW5pemVyO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICB9O1xuXG4gIHZhciBUb2tlbiA9IGZ1bmN0aW9uKG5hbWUsIGNvbnRleHQsIGVvcykge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLmVvcyA9IGVvcztcbiAgfTtcblxuICB2YXIgU3RhdGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgQ29udGV4dChuZXh0LCBudWxsKTtcbiAgICB0aGlzLmV4cGVjdFZhcmlhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmluZGVudGF0aW9uID0gMDtcbiAgICB0aGlzLnVzZXJJbmRlbnRhdGlvbkRlbHRhID0gMDtcbiAgfTtcblxuICBTdGF0ZS5wcm90b3R5cGUudXNlckluZGVudCA9IGZ1bmN0aW9uKGluZGVudGF0aW9uKSB7XG4gICAgdGhpcy51c2VySW5kZW50YXRpb25EZWx0YSA9IGluZGVudGF0aW9uID4gMCA/IChpbmRlbnRhdGlvbiAvIGNvbmZpZy5pbmRlbnRVbml0IC0gdGhpcy5pbmRlbnRhdGlvbikgOiAwO1xuICB9O1xuXG4gIHZhciBuZXh0ID0gZnVuY3Rpb24oc3RyZWFtLCBjb250ZXh0LCBzdGF0ZSkge1xuICAgIHZhciB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBjb250ZXh0LCBmYWxzZSk7XG4gICAgdmFyIGFDaGFyID0gc3RyZWFtLm5leHQoKTtcblxuICAgIGlmIChhQ2hhciA9PT0gJ1wiJykge1xuICAgICAgdG9rZW4gPSBuZXh0Q29tbWVudChzdHJlYW0sIG5ldyBDb250ZXh0KG5leHRDb21tZW50LCBjb250ZXh0KSk7XG5cbiAgICB9IGVsc2UgaWYgKGFDaGFyID09PSAnXFwnJykge1xuICAgICAgdG9rZW4gPSBuZXh0U3RyaW5nKHN0cmVhbSwgbmV3IENvbnRleHQobmV4dFN0cmluZywgY29udGV4dCkpO1xuXG4gICAgfSBlbHNlIGlmIChhQ2hhciA9PT0gJyMnKSB7XG4gICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJ1xcJycpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgdG9rZW4gPSBuZXh0U3ltYm9sKHN0cmVhbSwgbmV3IENvbnRleHQobmV4dFN5bWJvbCwgY29udGV4dCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXRXaGlsZSgvW15cXHMue31cXFtcXF0oKV0vKSlcbiAgICAgICAgICB0b2tlbi5uYW1lID0gJ3N0cmluZy0yJztcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRva2VuLm5hbWUgPSAnbWV0YSc7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGFDaGFyID09PSAnJCcpIHtcbiAgICAgIGlmIChzdHJlYW0ubmV4dCgpID09PSAnPCcpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXlxccz5dLyk7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5uYW1lID0gJ3N0cmluZy0yJztcblxuICAgIH0gZWxzZSBpZiAoYUNoYXIgPT09ICd8JyAmJiBzdGF0ZS5leHBlY3RWYXJpYWJsZSkge1xuICAgICAgdG9rZW4uY29udGV4dCA9IG5ldyBDb250ZXh0KG5leHRUZW1wb3JhcmllcywgY29udGV4dCk7XG5cbiAgICB9IGVsc2UgaWYgKC9bXFxbXFxde30oKV0vLnRlc3QoYUNoYXIpKSB7XG4gICAgICB0b2tlbi5uYW1lID0gJ2JyYWNrZXQnO1xuICAgICAgdG9rZW4uZW9zID0gL1tcXFt7KF0vLnRlc3QoYUNoYXIpO1xuXG4gICAgICBpZiAoYUNoYXIgPT09ICdbJykge1xuICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbisrO1xuICAgICAgfSBlbHNlIGlmIChhQ2hhciA9PT0gJ10nKSB7XG4gICAgICAgIHN0YXRlLmluZGVudGF0aW9uID0gTWF0aC5tYXgoMCwgc3RhdGUuaW5kZW50YXRpb24gLSAxKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoc3BlY2lhbENoYXJzLnRlc3QoYUNoYXIpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoc3BlY2lhbENoYXJzKTtcbiAgICAgIHRva2VuLm5hbWUgPSAnb3BlcmF0b3InO1xuICAgICAgdG9rZW4uZW9zID0gYUNoYXIgIT09ICc7JzsgLy8gOyBjYXNjYWRlZCBtZXNzYWdlIGV4cHJlc3Npb25cblxuICAgIH0gZWxzZSBpZiAoL1xcZC8udGVzdChhQ2hhcikpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcZF0vKTtcbiAgICAgIHRva2VuLm5hbWUgPSAnbnVtYmVyJztcblxuICAgIH0gZWxzZSBpZiAoL1tcXHdfXS8udGVzdChhQ2hhcikpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcZF9dLyk7XG4gICAgICB0b2tlbi5uYW1lID0gc3RhdGUuZXhwZWN0VmFyaWFibGUgPyAoa2V5d29yZHMudGVzdChzdHJlYW0uY3VycmVudCgpKSA/ICdrZXl3b3JkJyA6ICd2YXJpYWJsZScpIDogbnVsbDtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0b2tlbi5lb3MgPSBzdGF0ZS5leHBlY3RWYXJpYWJsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH07XG5cbiAgdmFyIG5leHRDb21tZW50ID0gZnVuY3Rpb24oc3RyZWFtLCBjb250ZXh0KSB7XG4gICAgc3RyZWFtLmVhdFdoaWxlKC9bXlwiXS8pO1xuICAgIHJldHVybiBuZXcgVG9rZW4oJ2NvbW1lbnQnLCBzdHJlYW0uZWF0KCdcIicpID8gY29udGV4dC5wYXJlbnQgOiBjb250ZXh0LCB0cnVlKTtcbiAgfTtcblxuICB2YXIgbmV4dFN0cmluZyA9IGZ1bmN0aW9uKHN0cmVhbSwgY29udGV4dCkge1xuICAgIHN0cmVhbS5lYXRXaGlsZSgvW14nXS8pO1xuICAgIHJldHVybiBuZXcgVG9rZW4oJ3N0cmluZycsIHN0cmVhbS5lYXQoJ1xcJycpID8gY29udGV4dC5wYXJlbnQgOiBjb250ZXh0LCBmYWxzZSk7XG4gIH07XG5cbiAgdmFyIG5leHRTeW1ib2wgPSBmdW5jdGlvbihzdHJlYW0sIGNvbnRleHQpIHtcbiAgICBzdHJlYW0uZWF0V2hpbGUoL1teJ10vKTtcbiAgICByZXR1cm4gbmV3IFRva2VuKCdzdHJpbmctMicsIHN0cmVhbS5lYXQoJ1xcJycpID8gY29udGV4dC5wYXJlbnQgOiBjb250ZXh0LCBmYWxzZSk7XG4gIH07XG5cbiAgdmFyIG5leHRUZW1wb3JhcmllcyA9IGZ1bmN0aW9uKHN0cmVhbSwgY29udGV4dCkge1xuICAgIHZhciB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBjb250ZXh0LCBmYWxzZSk7XG4gICAgdmFyIGFDaGFyID0gc3RyZWFtLm5leHQoKTtcblxuICAgIGlmIChhQ2hhciA9PT0gJ3wnKSB7XG4gICAgICB0b2tlbi5jb250ZXh0ID0gY29udGV4dC5wYXJlbnQ7XG4gICAgICB0b2tlbi5lb3MgPSB0cnVlO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW158XS8pO1xuICAgICAgdG9rZW4ubmFtZSA9ICd2YXJpYWJsZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IFN0YXRlO1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgc3RhdGUudXNlckluZGVudChzdHJlYW0uaW5kZW50YXRpb24oKSk7XG5cbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHRva2VuID0gc3RhdGUuY29udGV4dC5uZXh0KHN0cmVhbSwgc3RhdGUuY29udGV4dCwgc3RhdGUpO1xuICAgICAgc3RhdGUuY29udGV4dCA9IHRva2VuLmNvbnRleHQ7XG4gICAgICBzdGF0ZS5leHBlY3RWYXJpYWJsZSA9IHRva2VuLmVvcztcblxuICAgICAgcmV0dXJuIHRva2VuLm5hbWU7XG4gICAgfSxcblxuICAgIGJsYW5rTGluZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIHN0YXRlLnVzZXJJbmRlbnQoMCk7XG4gICAgfSxcblxuICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikge1xuICAgICAgdmFyIGkgPSBzdGF0ZS5jb250ZXh0Lm5leHQgPT09IG5leHQgJiYgdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCkgPT09ICddJyA/IC0xIDogc3RhdGUudXNlckluZGVudGF0aW9uRGVsdGE7XG4gICAgICByZXR1cm4gKHN0YXRlLmluZGVudGF0aW9uICsgaSkgKiBjb25maWcuaW5kZW50VW5pdDtcbiAgICB9LFxuXG4gICAgZWxlY3RyaWNDaGFyczogJ10nXG4gIH07XG5cbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoJ3RleHQveC1zdHNyYycsIHtuYW1lOiAnc21hbGx0YWxrJ30pO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8qKlxuICogU21hcnR5IDIgYW5kIDMgbW9kZS5cbiAqL1xuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJzbWFydHlcIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25mKSB7XG4gICAgdmFyIHJpZ2h0RGVsaW1pdGVyID0gcGFyc2VyQ29uZi5yaWdodERlbGltaXRlciB8fCBcIn1cIjtcbiAgICB2YXIgbGVmdERlbGltaXRlciA9IHBhcnNlckNvbmYubGVmdERlbGltaXRlciB8fCBcIntcIjtcbiAgICB2YXIgdmVyc2lvbiA9IHBhcnNlckNvbmYudmVyc2lvbiB8fCAyO1xuICAgIHZhciBiYXNlTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHBhcnNlckNvbmYuYmFzZU1vZGUgfHwgXCJudWxsXCIpO1xuXG4gICAgdmFyIGtleUZ1bmN0aW9ucyA9IFtcImRlYnVnXCIsIFwiZXh0ZW5kc1wiLCBcImZ1bmN0aW9uXCIsIFwiaW5jbHVkZVwiLCBcImxpdGVyYWxcIl07XG4gICAgdmFyIHJlZ3MgPSB7XG4gICAgICBvcGVyYXRvckNoYXJzOiAvWytcXC0qJiU9PD4hP10vLFxuICAgICAgdmFsaWRJZGVudGlmaWVyOiAvW2EtekEtWjAtOV9dLyxcbiAgICAgIHN0cmluZ0NoYXI6IC9bJ1wiXS9cbiAgICB9O1xuXG4gICAgdmFyIGxhc3Q7XG4gICAgZnVuY3Rpb24gY29udChzdHlsZSwgbGFzdFR5cGUpIHtcbiAgICAgIGxhc3QgPSBsYXN0VHlwZTtcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBwYXJzZXIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VyO1xuICAgICAgcmV0dXJuIHBhcnNlcihzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG5cbiAgICAvLyBTbWFydHkgMyBhbGxvd3MgeyBhbmQgfSBzdXJyb3VuZGVkIGJ5IHdoaXRlc3BhY2UgdG8gTk9UIHNsaXAgaW50byBTbWFydHkgbW9kZVxuICAgIGZ1bmN0aW9uIGRvZXNOb3RDb3VudChzdHJlYW0sIHBvcykge1xuICAgICAgaWYgKHBvcyA9PSBudWxsKSBwb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgcmV0dXJuIHZlcnNpb24gPT09IDMgJiYgbGVmdERlbGltaXRlciA9PSBcIntcIiAmJlxuICAgICAgICAocG9zID09IHN0cmVhbS5zdHJpbmcubGVuZ3RoIHx8IC9cXHMvLnRlc3Qoc3RyZWFtLnN0cmluZy5jaGFyQXQocG9zKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRva2VuVG9wKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBzdHJlYW0uc3RyaW5nO1xuICAgICAgZm9yICh2YXIgc2NhbiA9IHN0cmVhbS5wb3M7Oykge1xuICAgICAgICB2YXIgbmV4dE1hdGNoID0gc3RyaW5nLmluZGV4T2YobGVmdERlbGltaXRlciwgc2Nhbik7XG4gICAgICAgIHNjYW4gPSBuZXh0TWF0Y2ggKyBsZWZ0RGVsaW1pdGVyLmxlbmd0aDtcbiAgICAgICAgaWYgKG5leHRNYXRjaCA9PSAtMSB8fCAhZG9lc05vdENvdW50KHN0cmVhbSwgbmV4dE1hdGNoICsgbGVmdERlbGltaXRlci5sZW5ndGgpKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChuZXh0TWF0Y2ggPT0gc3RyZWFtLnBvcykge1xuICAgICAgICBzdHJlYW0ubWF0Y2gobGVmdERlbGltaXRlcik7XG4gICAgICAgIGlmIChzdHJlYW0uZWF0KFwiKlwiKSkge1xuICAgICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlbkJsb2NrKFwiY29tbWVudFwiLCBcIipcIiArIHJpZ2h0RGVsaW1pdGVyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUuZGVwdGgrKztcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU21hcnR5O1xuICAgICAgICAgIGxhc3QgPSBcInN0YXJ0VGFnXCI7XG4gICAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5leHRNYXRjaCA+IC0xKSBzdHJlYW0uc3RyaW5nID0gc3RyaW5nLnNsaWNlKDAsIG5leHRNYXRjaCk7XG4gICAgICB2YXIgdG9rZW4gPSBiYXNlTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmJhc2UpO1xuICAgICAgaWYgKG5leHRNYXRjaCA+IC0xKSBzdHJlYW0uc3RyaW5nID0gc3RyaW5nO1xuICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cblxuICAgIC8vIHBhcnNpbmcgU21hcnR5IGNvbnRlbnRcbiAgICBmdW5jdGlvbiB0b2tlblNtYXJ0eShzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHJpZ2h0RGVsaW1pdGVyLCB0cnVlKSkge1xuICAgICAgICBpZiAodmVyc2lvbiA9PT0gMykge1xuICAgICAgICAgIHN0YXRlLmRlcHRoLS07XG4gICAgICAgICAgaWYgKHN0YXRlLmRlcHRoIDw9IDApIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Ub3A7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Ub3A7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnQoXCJ0YWdcIiwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2gobGVmdERlbGltaXRlciwgdHJ1ZSkpIHtcbiAgICAgICAgc3RhdGUuZGVwdGgrKztcbiAgICAgICAgcmV0dXJuIGNvbnQoXCJ0YWdcIiwgXCJzdGFydFRhZ1wiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICAgIGlmIChjaCA9PSBcIiRcIikge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUocmVncy52YWxpZElkZW50aWZpZXIpO1xuICAgICAgICByZXR1cm4gY29udChcInZhcmlhYmxlLTJcIiwgXCJ2YXJpYWJsZVwiKTtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCJ8XCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbnQoXCJvcGVyYXRvclwiLCBcInBpcGVcIik7XG4gICAgICB9IGVsc2UgaWYgKGNoID09IFwiLlwiKSB7XG4gICAgICAgIHJldHVybiBjb250KFwib3BlcmF0b3JcIiwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgIH0gZWxzZSBpZiAocmVncy5zdHJpbmdDaGFyLnRlc3QoY2gpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5BdHRyaWJ1dGUoY2gpO1xuICAgICAgICByZXR1cm4gY29udChcInN0cmluZ1wiLCBcInN0cmluZ1wiKTtcbiAgICAgIH0gZWxzZSBpZiAocmVncy5vcGVyYXRvckNoYXJzLnRlc3QoY2gpKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZShyZWdzLm9wZXJhdG9yQ2hhcnMpO1xuICAgICAgICByZXR1cm4gY29udChcIm9wZXJhdG9yXCIsIFwib3BlcmF0b3JcIik7XG4gICAgICB9IGVsc2UgaWYgKGNoID09IFwiW1wiIHx8IGNoID09IFwiXVwiKSB7XG4gICAgICAgIHJldHVybiBjb250KFwiYnJhY2tldFwiLCBcImJyYWNrZXRcIik7XG4gICAgICB9IGVsc2UgaWYgKGNoID09IFwiKFwiIHx8IGNoID09IFwiKVwiKSB7XG4gICAgICAgIHJldHVybiBjb250KFwiYnJhY2tldFwiLCBcIm9wZXJhdG9yXCIpO1xuICAgICAgfSBlbHNlIGlmICgvXFxkLy50ZXN0KGNoKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1xcZC8pO1xuICAgICAgICByZXR1cm4gY29udChcIm51bWJlclwiLCBcIm51bWJlclwiKTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT0gXCJ2YXJpYWJsZVwiKSB7XG4gICAgICAgICAgaWYgKGNoID09IFwiQFwiKSB7XG4gICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUocmVncy52YWxpZElkZW50aWZpZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnQoXCJwcm9wZXJ0eVwiLCBcInByb3BlcnR5XCIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCJ8XCIpIHtcbiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShyZWdzLnZhbGlkSWRlbnRpZmllcik7XG4gICAgICAgICAgICByZXR1cm4gY29udChcInF1YWxpZmllclwiLCBcIm1vZGlmaWVyXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sYXN0ID09IFwicGlwZVwiKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKHJlZ3MudmFsaWRJZGVudGlmaWVyKTtcbiAgICAgICAgICByZXR1cm4gY29udChcInF1YWxpZmllclwiLCBcIm1vZGlmaWVyXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxhc3QgPT0gXCJ3aGl0ZXNwYWNlXCIpIHtcbiAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUocmVncy52YWxpZElkZW50aWZpZXIpO1xuICAgICAgICAgIHJldHVybiBjb250KFwiYXR0cmlidXRlXCIsIFwibW9kaWZpZXJcIik7XG4gICAgICAgIH0gaWYgKHN0YXRlLmxhc3QgPT0gXCJwcm9wZXJ0eVwiKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKHJlZ3MudmFsaWRJZGVudGlmaWVyKTtcbiAgICAgICAgICByZXR1cm4gY29udChcInByb3BlcnR5XCIsIG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKC9cXHMvLnRlc3QoY2gpKSB7XG4gICAgICAgICAgbGFzdCA9IFwid2hpdGVzcGFjZVwiO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgICAgIGlmIChjaCAhPSBcIi9cIikge1xuICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYyA9IG51bGw7XG4gICAgICAgIHdoaWxlIChjID0gc3RyZWFtLmVhdChyZWdzLnZhbGlkSWRlbnRpZmllcikpIHtcbiAgICAgICAgICBzdHIgKz0gYztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpPTAsIGo9a2V5RnVuY3Rpb25zLmxlbmd0aDsgaTxqOyBpKyspIHtcbiAgICAgICAgICBpZiAoa2V5RnVuY3Rpb25zW2ldID09IHN0cikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnQoXCJrZXl3b3JkXCIsIFwia2V5d29yZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC9cXHMvLnRlc3QoY2gpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnQoXCJ0YWdcIiwgXCJ0YWdcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5BdHRyaWJ1dGUocXVvdGUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHZhciBwcmV2Q2hhciA9IG51bGw7XG4gICAgICAgIHZhciBjdXJyQ2hhciA9IG51bGw7XG4gICAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgICAgY3VyckNoYXIgPSBzdHJlYW0ucGVlaygpO1xuICAgICAgICAgIGlmIChzdHJlYW0ubmV4dCgpID09IHF1b3RlICYmIHByZXZDaGFyICE9PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TbWFydHk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJldkNoYXIgPSBjdXJyQ2hhcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5CbG9jayhzdHlsZSwgdGVybWluYXRvcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRlcm1pbmF0b3IpKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuVG9wO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYmFzZTogQ29kZU1pcnJvci5zdGFydFN0YXRlKGJhc2VNb2RlKSxcbiAgICAgICAgICB0b2tlbml6ZTogdG9rZW5Ub3AsXG4gICAgICAgICAgbGFzdDogbnVsbCxcbiAgICAgICAgICBkZXB0aDogMFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBiYXNlOiBDb2RlTWlycm9yLmNvcHlTdGF0ZShiYXNlTW9kZSwgc3RhdGUuYmFzZSksXG4gICAgICAgICAgdG9rZW5pemU6IHN0YXRlLnRva2VuaXplLFxuICAgICAgICAgIGxhc3Q6IHN0YXRlLmxhc3QsXG4gICAgICAgICAgZGVwdGg6IHN0YXRlLmRlcHRoXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgaW5uZXJNb2RlOiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgPT0gdG9rZW5Ub3ApXG4gICAgICAgICAgcmV0dXJuIHttb2RlOiBiYXNlTW9kZSwgc3RhdGU6IHN0YXRlLmJhc2V9O1xuICAgICAgfSxcbiAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICBzdGF0ZS5sYXN0ID0gbGFzdDtcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSxcbiAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHQsIGxpbmUpIHtcbiAgICAgICAgaWYgKHN0YXRlLnRva2VuaXplID09IHRva2VuVG9wICYmIGJhc2VNb2RlLmluZGVudClcbiAgICAgICAgICByZXR1cm4gYmFzZU1vZGUuaW5kZW50KHN0YXRlLmJhc2UsIHRleHQsIGxpbmUpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIH0sXG4gICAgICBibG9ja0NvbW1lbnRTdGFydDogbGVmdERlbGltaXRlciArIFwiKlwiLFxuICAgICAgYmxvY2tDb21tZW50RW5kOiBcIipcIiArIHJpZ2h0RGVsaW1pdGVyXG4gICAgfTtcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXNtYXJ0eVwiLCBcInNtYXJ0eVwiKTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJzb2xyXCIsIGZ1bmN0aW9uKCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgaXNTdHJpbmdDaGFyID0gL1teXFxzXFx8XFwhXFwrXFwtXFwqXFw/XFx+XFxeXFwmXFw6XFwoXFwpXFxbXFxdXFx7XFx9XFxcIlxcXFxdLztcbiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1tcXHxcXCFcXCtcXC1cXCpcXD9cXH5cXF5cXCZdLztcbiAgdmFyIGlzT3BlcmF0b3JTdHJpbmcgPSAvXihPUnxBTkR8Tk9UfFRPKSQvaTtcblxuICBmdW5jdGlvbiBpc051bWJlcih3b3JkKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQod29yZCkudG9TdHJpbmcoKSA9PT0gd29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQ7XG4gICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSBicmVhaztcbiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gXCJcXFxcXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICghZXNjYXBlZCkgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5PcGVyYXRvcihvcGVyYXRvcikge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgc3R5bGUgPSBcIm9wZXJhdG9yXCI7XG4gICAgICBpZiAob3BlcmF0b3IgPT0gXCIrXCIpXG4gICAgICAgIHN0eWxlICs9IFwiIHBvc2l0aXZlXCI7XG4gICAgICBlbHNlIGlmIChvcGVyYXRvciA9PSBcIi1cIilcbiAgICAgICAgc3R5bGUgKz0gXCIgbmVnYXRpdmVcIjtcbiAgICAgIGVsc2UgaWYgKG9wZXJhdG9yID09IFwifFwiKVxuICAgICAgICBzdHJlYW0uZWF0KC9cXHwvKTtcbiAgICAgIGVsc2UgaWYgKG9wZXJhdG9yID09IFwiJlwiKVxuICAgICAgICBzdHJlYW0uZWF0KC9cXCYvKTtcbiAgICAgIGVsc2UgaWYgKG9wZXJhdG9yID09IFwiXlwiKVxuICAgICAgICBzdHlsZSArPSBcIiBib29zdFwiO1xuXG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5Xb3JkKGNoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciB3b3JkID0gY2g7XG4gICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLnBlZWsoKSkgJiYgY2gubWF0Y2goaXNTdHJpbmdDaGFyKSAhPSBudWxsKSB7XG4gICAgICAgIHdvcmQgKz0gc3RyZWFtLm5leHQoKTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICBpZiAoaXNPcGVyYXRvclN0cmluZy50ZXN0KHdvcmQpKVxuICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgZWxzZSBpZiAoaXNOdW1iZXIod29yZCkpXG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgZWxzZSBpZiAoc3RyZWFtLnBlZWsoKSA9PSBcIjpcIilcbiAgICAgICAgcmV0dXJuIFwiZmllbGRcIjtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gJ1wiJylcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpO1xuICAgIGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKVxuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbk9wZXJhdG9yKGNoKTtcbiAgICBlbHNlIGlmIChpc1N0cmluZ0NoYXIudGVzdChjaCkpXG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuV29yZChjaCk7XG5cbiAgICByZXR1cm4gKHN0YXRlLnRva2VuaXplICE9IHRva2VuQmFzZSkgPyBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKSA6IG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZVxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1zb2xyXCIsIFwic29sclwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4vaHRtbG1peGVkL2h0bWxtaXhlZFwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4uL2h0bWxtaXhlZC9odG1sbWl4ZWRcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBwYXJhbURhdGEgPSB7IG5vRW5kVGFnOiB0cnVlLCBzb3lTdGF0ZTogXCJwYXJhbS1kZWZcIiB9O1xuICB2YXIgdGFncyA9IHtcbiAgICBcImFsaWFzXCI6IHsgbm9FbmRUYWc6IHRydWUgfSxcbiAgICBcImRlbHBhY2thZ2VcIjogeyBub0VuZFRhZzogdHJ1ZSB9LFxuICAgIFwibmFtZXNwYWNlXCI6IHsgbm9FbmRUYWc6IHRydWUsIHNveVN0YXRlOiBcIm5hbWVzcGFjZS1kZWZcIiB9LFxuICAgIFwiQHBhcmFtXCI6IHBhcmFtRGF0YSxcbiAgICBcIkBwYXJhbT9cIjogcGFyYW1EYXRhLFxuICAgIFwiQGluamVjdFwiOiBwYXJhbURhdGEsXG4gICAgXCJAaW5qZWN0P1wiOiBwYXJhbURhdGEsXG4gICAgXCJAc3RhdGVcIjogcGFyYW1EYXRhLFxuICAgIFwidGVtcGxhdGVcIjogeyBzb3lTdGF0ZTogXCJ0ZW1wbC1kZWZcIiwgdmFyaWFibGVTY29wZTogdHJ1ZX0sXG4gICAgXCJsaXRlcmFsXCI6IHsgfSxcbiAgICBcIm1zZ1wiOiB7fSxcbiAgICBcImZhbGxiYWNrbXNnXCI6IHsgbm9FbmRUYWc6IHRydWUsIHJlZHVjZUluZGVudDogdHJ1ZX0sXG4gICAgXCJzZWxlY3RcIjoge30sXG4gICAgXCJwbHVyYWxcIjoge30sXG4gICAgXCJsZXRcIjogeyBzb3lTdGF0ZTogXCJ2YXItZGVmXCIgfSxcbiAgICBcImlmXCI6IHt9LFxuICAgIFwiZWxzZWlmXCI6IHsgbm9FbmRUYWc6IHRydWUsIHJlZHVjZUluZGVudDogdHJ1ZX0sXG4gICAgXCJlbHNlXCI6IHsgbm9FbmRUYWc6IHRydWUsIHJlZHVjZUluZGVudDogdHJ1ZX0sXG4gICAgXCJzd2l0Y2hcIjoge30sXG4gICAgXCJjYXNlXCI6IHsgbm9FbmRUYWc6IHRydWUsIHJlZHVjZUluZGVudDogdHJ1ZX0sXG4gICAgXCJkZWZhdWx0XCI6IHsgbm9FbmRUYWc6IHRydWUsIHJlZHVjZUluZGVudDogdHJ1ZX0sXG4gICAgXCJmb3JlYWNoXCI6IHsgdmFyaWFibGVTY29wZTogdHJ1ZSwgc295U3RhdGU6IFwiZm9yLWxvb3BcIiB9LFxuICAgIFwiaWZlbXB0eVwiOiB7IG5vRW5kVGFnOiB0cnVlLCByZWR1Y2VJbmRlbnQ6IHRydWV9LFxuICAgIFwiZm9yXCI6IHsgdmFyaWFibGVTY29wZTogdHJ1ZSwgc295U3RhdGU6IFwiZm9yLWxvb3BcIiB9LFxuICAgIFwiY2FsbFwiOiB7IHNveVN0YXRlOiBcInRlbXBsLXJlZlwiIH0sXG4gICAgXCJwYXJhbVwiOiB7IHNveVN0YXRlOiBcInBhcmFtLXJlZlwifSxcbiAgICBcInByaW50XCI6IHsgbm9FbmRUYWc6IHRydWUgfSxcbiAgICBcImRlbHRlbXBsYXRlXCI6IHsgc295U3RhdGU6IFwidGVtcGwtZGVmXCIsIHZhcmlhYmxlU2NvcGU6IHRydWV9LFxuICAgIFwiZGVsY2FsbFwiOiB7IHNveVN0YXRlOiBcInRlbXBsLXJlZlwiIH0sXG4gICAgXCJsb2dcIjoge30sXG4gICAgXCJlbGVtZW50XCI6IHsgdmFyaWFibGVTY29wZTogdHJ1ZSB9LFxuICB9O1xuXG4gIHZhciBpbmRlbnRpbmdUYWdzID0gT2JqZWN0LmtleXModGFncykuZmlsdGVyKGZ1bmN0aW9uKHRhZykge1xuICAgIHJldHVybiAhdGFnc1t0YWddLm5vRW5kVGFnIHx8IHRhZ3NbdGFnXS5yZWR1Y2VJbmRlbnQ7XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcInNveVwiLCBmdW5jdGlvbihjb25maWcpIHtcbiAgICB2YXIgdGV4dE1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcInRleHQvcGxhaW5cIik7XG4gICAgdmFyIG1vZGVzID0ge1xuICAgICAgaHRtbDogQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywge25hbWU6IFwidGV4dC9odG1sXCIsIG11bHRpbGluZVRhZ0luZGVudEZhY3RvcjogMiwgbXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZzogZmFsc2V9KSxcbiAgICAgIGF0dHJpYnV0ZXM6IHRleHRNb2RlLFxuICAgICAgdGV4dDogdGV4dE1vZGUsXG4gICAgICB1cmk6IHRleHRNb2RlLFxuICAgICAgdHJ1c3RlZF9yZXNvdXJjZV91cmk6IHRleHRNb2RlLFxuICAgICAgY3NzOiBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcInRleHQvY3NzXCIpLFxuICAgICAganM6IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHtuYW1lOiBcInRleHQvamF2YXNjcmlwdFwiLCBzdGF0ZW1lbnRJbmRlbnQ6IDIgKiBjb25maWcuaW5kZW50VW5pdH0pXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgICAgIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlblVudGlsKHN0cmVhbSwgc3RhdGUsIHVudGlsUmVnRXhwKSB7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgIGZvciAodmFyIGluZGVudCA9IDA7IGluZGVudCA8IHN0YXRlLmluZGVudDsgaW5kZW50KyspIHtcbiAgICAgICAgICBpZiAoIXN0cmVhbS5lYXQoL1xccy8pKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZW50KSByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBvbGRTdHJpbmcgPSBzdHJlYW0uc3RyaW5nO1xuICAgICAgdmFyIG1hdGNoID0gdW50aWxSZWdFeHAuZXhlYyhvbGRTdHJpbmcuc3Vic3RyKHN0cmVhbS5wb3MpKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAvLyBXZSBkb24ndCB1c2UgYmFja1VwIGJlY2F1c2UgaXQgYmFja3MgdXAganVzdCB0aGUgcG9zaXRpb24sIG5vdCB0aGUgc3RhdGUuXG4gICAgICAgIC8vIFRoaXMgdXNlcyBhbiB1bmRvY3VtZW50ZWQgQVBJLlxuICAgICAgICBzdHJlYW0uc3RyaW5nID0gb2xkU3RyaW5nLnN1YnN0cigwLCBzdHJlYW0ucG9zICsgbWF0Y2guaW5kZXgpO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHN0cmVhbS5oaWRlRmlyc3RDaGFycyhzdGF0ZS5pbmRlbnQsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbG9jYWxTdGF0ZSA9IGxhc3Qoc3RhdGUubG9jYWxTdGF0ZXMpO1xuICAgICAgICByZXR1cm4gbG9jYWxTdGF0ZS5tb2RlLnRva2VuKHN0cmVhbSwgbG9jYWxTdGF0ZS5zdGF0ZSk7XG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5zdHJpbmcgPSBvbGRTdHJpbmc7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnRhaW5zKGxpc3QsIGVsZW1lbnQpIHtcbiAgICAgIHdoaWxlIChsaXN0KSB7XG4gICAgICAgIGlmIChsaXN0LmVsZW1lbnQgPT09IGVsZW1lbnQpIHJldHVybiB0cnVlO1xuICAgICAgICBsaXN0ID0gbGlzdC5uZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBlbmQobGlzdCwgZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgbmV4dDogbGlzdFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3Bjb250ZXh0KHN0YXRlKSB7XG4gICAgICBpZiAoIXN0YXRlLmNvbnRleHQpIHJldHVybjtcbiAgICAgIGlmIChzdGF0ZS5jb250ZXh0LnNjb3BlKSB7XG4gICAgICAgIHN0YXRlLnZhcmlhYmxlcyA9IHN0YXRlLmNvbnRleHQuc2NvcGU7XG4gICAgICB9XG4gICAgICBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2aW91c0NvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gUmVmZXJlbmNlIGEgdmFyaWFibGUgYG5hbWVgIGluIGBsaXN0YC5cbiAgICAvLyBMZXQgYGxvb3NlYCBiZSB0cnV0aHkgdG8gaWdub3JlIG1pc3NpbmcgaWRlbnRpZmllcnMuXG4gICAgZnVuY3Rpb24gcmVmKGxpc3QsIG5hbWUsIGxvb3NlKSB7XG4gICAgICByZXR1cm4gY29udGFpbnMobGlzdCwgbmFtZSkgPyBcInZhcmlhYmxlLTJcIiA6IChsb29zZSA/IFwidmFyaWFibGVcIiA6IFwidmFyaWFibGUtMiBlcnJvclwiKTtcbiAgICB9XG5cbiAgICAvLyBEYXRhIGZvciBhbiBvcGVuIHNveSB0YWcuXG4gICAgZnVuY3Rpb24gQ29udGV4dChwcmV2aW91c0NvbnRleHQsIHRhZywgc2NvcGUpIHtcbiAgICAgIHRoaXMucHJldmlvdXNDb250ZXh0ID0gcHJldmlvdXNDb250ZXh0O1xuICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICB0aGlzLmtpbmQgPSBudWxsO1xuICAgICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cHJlc3Npb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIG1hdGNoO1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvW1tdLykpIHtcbiAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaChcImxpc3QtbGl0ZXJhbFwiKTtcbiAgICAgICAgc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLmNvbnRleHQsIFwibGlzdC1saXRlcmFsXCIsIHN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICAgIHN0YXRlLmxvb2t1cFZhcmlhYmxlcyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9tYXBcXGIvKSkge1xuICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wdXNoKFwibWFwLWxpdGVyYWxcIik7XG4gICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9yZWNvcmRcXGIvKSkge1xuICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wdXNoKFwicmVjb3JkLWxpdGVyYWxcIik7XG4gICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC8oW1xcd10rKSg/PVxcKCkvKSkge1xuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZSBjYWxsZWVcIjtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2goL15bXCInXS8pKSB7XG4gICAgICAgIHN0YXRlLnNveVN0YXRlLnB1c2goXCJzdHJpbmdcIik7XG4gICAgICAgIHN0YXRlLnF1b3RlS2luZCA9IG1hdGNoWzBdO1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eWyhdLykpIHtcbiAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaChcIm9wZW4tcGFyZW50aGVzZXNcIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goLyhudWxsfHRydWV8ZmFsc2UpKD8hXFx3KS8pIHx8XG4gICAgICAgICAgc3RyZWFtLm1hdGNoKC8weChbMC05YS1mQS1GXXsyLH0pLykgfHxcbiAgICAgICAgICBzdHJlYW0ubWF0Y2goLy0/KFswLTldKlsuXSk/WzAtOV0rKGVbMC05XSopPy8pKSB7XG4gICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC8oXFx8fFsrXFwtKlxcLyVdfFs9IV09fFxcPzp8Wzw+XT0/KS8pKSB7XG4gICAgICAgIC8vIFRva2VuaXplIGZpbHRlciwgYmluYXJ5LCBudWxsIHByb3BhZ2F0b3IsIGFuZCBlcXVhbGl0eSBvcGVyYXRvcnMuXG4gICAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKC9eXFwkKFtcXHddKykvKSkge1xuICAgICAgICByZXR1cm4gcmVmKHN0YXRlLnZhcmlhYmxlcywgbWF0Y2hbMV0sICFzdGF0ZS5sb29rdXBWYXJpYWJsZXMpO1xuICAgICAgfSBlbHNlIGlmIChtYXRjaCA9IHN0cmVhbS5tYXRjaCgvXlxcdysvKSkge1xuICAgICAgICByZXR1cm4gL14oPzphc3xhbmR8b3J8bm90fGlufGlmKSQvLnRlc3QobWF0Y2hbMF0pID8gXCJrZXl3b3JkXCIgOiBudWxsO1xuICAgICAgfVxuXG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNveVN0YXRlOiBbXSxcbiAgICAgICAgICB2YXJpYWJsZXM6IHByZXBlbmQobnVsbCwgJ2lqJyksXG4gICAgICAgICAgc2NvcGVzOiBudWxsLFxuICAgICAgICAgIGluZGVudDogMCxcbiAgICAgICAgICBxdW90ZUtpbmQ6IG51bGwsXG4gICAgICAgICAgY29udGV4dDogbnVsbCxcbiAgICAgICAgICBsb29rdXBWYXJpYWJsZXM6IHRydWUsIC8vIElzIHVua25vd24gdmFyaWFibGVzIGNvbnNpZGVyZWQgYW4gZXJyb3JcbiAgICAgICAgICBsb2NhbFN0YXRlczogW3tcbiAgICAgICAgICAgIG1vZGU6IG1vZGVzLmh0bWwsXG4gICAgICAgICAgICBzdGF0ZTogQ29kZU1pcnJvci5zdGFydFN0YXRlKG1vZGVzLmh0bWwpXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0sXG5cbiAgICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0YWc6IHN0YXRlLnRhZywgLy8gTGFzdCBzZWVuIFNveSB0YWcuXG4gICAgICAgICAgc295U3RhdGU6IHN0YXRlLnNveVN0YXRlLmNvbmNhdChbXSksXG4gICAgICAgICAgdmFyaWFibGVzOiBzdGF0ZS52YXJpYWJsZXMsXG4gICAgICAgICAgY29udGV4dDogc3RhdGUuY29udGV4dCxcbiAgICAgICAgICBpbmRlbnQ6IHN0YXRlLmluZGVudCwgLy8gSW5kZW50YXRpb24gb2YgdGhlIGZvbGxvd2luZyBsaW5lLlxuICAgICAgICAgIHF1b3RlS2luZDogc3RhdGUucXVvdGVLaW5kLFxuICAgICAgICAgIGxvb2t1cFZhcmlhYmxlczogc3RhdGUubG9va3VwVmFyaWFibGVzLFxuICAgICAgICAgIGxvY2FsU3RhdGVzOiBzdGF0ZS5sb2NhbFN0YXRlcy5tYXAoZnVuY3Rpb24obG9jYWxTdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbW9kZTogbG9jYWxTdGF0ZS5tb2RlLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29kZU1pcnJvci5jb3B5U3RhdGUobG9jYWxTdGF0ZS5tb2RlLCBsb2NhbFN0YXRlLnN0YXRlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfSxcblxuICAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgdmFyIG1hdGNoO1xuXG4gICAgICAgIHN3aXRjaCAobGFzdChzdGF0ZS5zb3lTdGF0ZSkpIHtcbiAgICAgICAgICBjYXNlIFwiY29tbWVudFwiOlxuICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi4qP1xcKlxcLy8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdGF0ZS5jb250ZXh0IHx8ICFzdGF0ZS5jb250ZXh0LnNjb3BlKSB7XG4gICAgICAgICAgICAgIHZhciBwYXJhbVJlID0gL0BwYXJhbVxcPz9cXHMrKFxcUyspL2c7XG4gICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbWF0Y2g7IChtYXRjaCA9IHBhcmFtUmUuZXhlYyhjdXJyZW50KSk7ICkge1xuICAgICAgICAgICAgICAgIHN0YXRlLnZhcmlhYmxlcyA9IHByZXBlbmQoc3RhdGUudmFyaWFibGVzLCBtYXRjaFsxXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcblxuICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IHN0cmVhbS5tYXRjaCgvXi4qPyhbXCInXXxcXFxcW1xcc1xcU10pLyk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hbMV0gPT0gc3RhdGUucXVvdGVLaW5kKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnF1b3RlS2luZCA9IG51bGw7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXRlLnNveVN0YXRlLmxlbmd0aCB8fCBsYXN0KHN0YXRlLnNveVN0YXRlKSAhPSBcImxpdGVyYWxcIikge1xuICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXC9cXCovKSkge1xuICAgICAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaChcImNvbW1lbnRcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goc3RyZWFtLnNvbCgpID8gL15cXHMqXFwvXFwvLiovIDogL15cXHMrXFwvXFwvLiovKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAobGFzdChzdGF0ZS5zb3lTdGF0ZSkpIHtcbiAgICAgICAgICBjYXNlIFwidGVtcGwtZGVmXCI6XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2goL15cXC4/KFtcXHddKyg/IVxcLltcXHddKykqKS8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnBvcCgpO1xuICAgICAgICAgICAgICByZXR1cm4gXCJkZWZcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIGNhc2UgXCJ0ZW1wbC1yZWZcIjpcbiAgICAgICAgICAgIGlmIChtYXRjaCA9IHN0cmVhbS5tYXRjaCgvKFxcLj9bYS16QS1aX11bYS16QS1aXzAtOV0rKSsvKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wb3AoKTtcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyAnLicsIGl0IGNhbiBvbmx5IGJlIGEgbG9jYWwgdGVtcGxhdGUuXG4gICAgICAgICAgICAgIGlmIChtYXRjaFswXVswXSA9PSAnLicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBPdGhlcndpc2VcbiAgICAgICAgICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IHN0cmVhbS5tYXRjaCgvXlxcJChbXFx3XSspLykpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc295U3RhdGUucG9wKCk7XG4gICAgICAgICAgICAgIHJldHVybiByZWYoc3RhdGUudmFyaWFibGVzLCBtYXRjaFsxXSwgIXN0YXRlLmxvb2t1cFZhcmlhYmxlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIGNhc2UgXCJuYW1lc3BhY2UtZGVmXCI6XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2goL15cXC4/KFtcXHdcXC5dKykvKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wb3AoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIGNhc2UgXCJwYXJhbS1kZWZcIjpcbiAgICAgICAgICAgIGlmIChtYXRjaCA9IHN0cmVhbS5tYXRjaCgvXlxcdysvKSkge1xuICAgICAgICAgICAgICBzdGF0ZS52YXJpYWJsZXMgPSBwcmVwZW5kKHN0YXRlLnZhcmlhYmxlcywgbWF0Y2hbMF0pO1xuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wb3AoKTtcbiAgICAgICAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaChcInBhcmFtLXR5cGVcIik7XG4gICAgICAgICAgICAgIHJldHVybiBcImRlZlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgY2FzZSBcInBhcmFtLXJlZlwiOlxuICAgICAgICAgICAgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKC9eXFx3Ky8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnBvcCgpO1xuICAgICAgICAgICAgICByZXR1cm4gXCJwcm9wZXJ0eVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgY2FzZSBcIm9wZW4tcGFyZW50aGVzZXNcIjpcbiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1spXS8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnBvcCgpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBleHByZXNzaW9uKHN0cmVhbSwgc3RhdGUpO1xuXG4gICAgICAgICAgY2FzZSBcInBhcmFtLXR5cGVcIjpcbiAgICAgICAgICAgIHZhciBwZWVrQ2hhciA9IHN0cmVhbS5wZWVrKCk7XG4gICAgICAgICAgICBpZiAoXCJ9XT0+LFwiLmluZGV4T2YocGVla0NoYXIpICE9IC0xKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnBvcCgpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGVla0NoYXIgPT0gXCJbXCIpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaCgncGFyYW0tdHlwZS1yZWNvcmQnKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBlZWtDaGFyID09IFwiKFwiKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnB1c2goJ3BhcmFtLXR5cGUtdGVtcGxhdGUnKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBlZWtDaGFyID09IFwiPFwiKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnB1c2goJ3BhcmFtLXR5cGUtcGFyYW1ldGVyJyk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCA9IHN0cmVhbS5tYXRjaCgvXihbXFx3XSt8Wz9dKS8pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcInR5cGVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIGNhc2UgXCJwYXJhbS10eXBlLXJlY29yZFwiOlxuICAgICAgICAgICAgdmFyIHBlZWtDaGFyID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgICAgICAgIGlmIChwZWVrQ2hhciA9PSBcIl1cIikge1xuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wb3AoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFx3Ky8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnB1c2goJ3BhcmFtLXR5cGUnKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFwicHJvcGVydHlcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIGNhc2UgXCJwYXJhbS10eXBlLXBhcmFtZXRlclwiOlxuICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXls+XS8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnBvcCgpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bPCxdLykpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaCgncGFyYW0tdHlwZScpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIGNhc2UgXCJwYXJhbS10eXBlLXRlbXBsYXRlXCI6XG4gICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9bPl0vKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wb3AoKTtcbiAgICAgICAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaCgncGFyYW0tdHlwZScpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXHcrLykpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaCgncGFyYW0tdHlwZScpO1xuICAgICAgICAgICAgICByZXR1cm4gXCJkZWZcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIGNhc2UgXCJ2YXItZGVmXCI6XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2goL15cXCQoW1xcd10rKS8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnZhcmlhYmxlcyA9IHByZXBlbmQoc3RhdGUudmFyaWFibGVzLCBtYXRjaFsxXSk7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnBvcCgpO1xuICAgICAgICAgICAgICByZXR1cm4gXCJkZWZcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIGNhc2UgXCJmb3ItbG9vcFwiOlxuICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXFxiaW5cXGIvKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wb3AoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gXCIkXCIpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaCgndmFyLWRlZicpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIGNhc2UgXCJyZWNvcmQtbGl0ZXJhbFwiOlxuICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlspXS8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnBvcCgpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1soLF0vKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wdXNoKFwibWFwLXZhbHVlXCIpXG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnB1c2goXCJyZWNvcmQta2V5XCIpXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyZWFtLm5leHQoKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICBjYXNlIFwibWFwLWxpdGVyYWxcIjpcbiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bKV0vKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wb3AoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9bKCxdLykpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaChcIm1hcC12YWx1ZVwiKVxuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wdXNoKFwibWFwLXZhbHVlXCIpXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyZWFtLm5leHQoKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICBjYXNlIFwibGlzdC1saXRlcmFsXCI6XG4gICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXF0vKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wb3AoKTtcbiAgICAgICAgICAgICAgc3RhdGUubG9va3VwVmFyaWFibGVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcG9wY29udGV4dChzdGF0ZSk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXFxiZm9yXFxiLykpIHtcbiAgICAgICAgICAgICAgc3RhdGUubG9va3VwVmFyaWFibGVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaCgnZm9yLWxvb3AnKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24oc3RyZWFtLCBzdGF0ZSk7XG5cbiAgICAgICAgICBjYXNlIFwicmVjb3JkLWtleVwiOlxuICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvW1xcd10rLykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFwicHJvcGVydHlcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bOl0vKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wb3AoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICBjYXNlIFwibWFwLXZhbHVlXCI6XG4gICAgICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSBcIilcIiB8fCBzdHJlYW0ucGVlaygpID09IFwiLFwiIHx8IHN0cmVhbS5tYXRjaCgvXls6KV0vKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wb3AoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwcmVzc2lvbihzdHJlYW0sIHN0YXRlKTtcblxuICAgICAgICAgIGNhc2UgXCJpbXBvcnRcIjpcbiAgICAgICAgICAgIGlmIChzdHJlYW0uZWF0KFwiO1wiKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wb3AoKTtcbiAgICAgICAgICAgICAgc3RhdGUuaW5kZW50IC09IDIgKiBjb25maWcuaW5kZW50VW5pdDtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXHcrKD89XFxzK2FzKS8pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2goL1xcdysvKSkge1xuICAgICAgICAgICAgICByZXR1cm4gLyhmcm9tfGFzKS8udGVzdChtYXRjaFswXSkgPyBcImtleXdvcmRcIiA6IFwiZGVmXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2goL15bXCInXS8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnB1c2goXCJzdHJpbmdcIik7XG4gICAgICAgICAgICAgIHN0YXRlLnF1b3RlS2luZCA9IG1hdGNoWzBdO1xuICAgICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIGNhc2UgXCJ0YWdcIjpcbiAgICAgICAgICAgIHZhciBlbmRUYWcgPSBzdGF0ZS50YWdbMF0gPT0gXCIvXCI7XG4gICAgICAgICAgICB2YXIgdGFnTmFtZSA9IGVuZFRhZyA/IHN0YXRlLnRhZy5zdWJzdHJpbmcoMSkgOiBzdGF0ZS50YWc7XG4gICAgICAgICAgICB2YXIgdGFnID0gdGFnc1t0YWdOYW1lXTtcbiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXC8/fS8pKSB7XG4gICAgICAgICAgICAgIHZhciBzZWxmQ2xvc2VkID0gc3RyZWFtLmN1cnJlbnQoKSA9PSBcIi99XCI7XG4gICAgICAgICAgICAgIGlmIChzZWxmQ2xvc2VkICYmICFlbmRUYWcpIHtcbiAgICAgICAgICAgICAgICBwb3Bjb250ZXh0KHN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoc3RhdGUudGFnID09IFwiL3RlbXBsYXRlXCIgfHwgc3RhdGUudGFnID09IFwiL2RlbHRlbXBsYXRlXCIpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS52YXJpYWJsZXMgPSBwcmVwZW5kKG51bGwsICdpaicpO1xuICAgICAgICAgICAgICAgIHN0YXRlLmluZGVudCA9IDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuaW5kZW50IC09IGNvbmZpZy5pbmRlbnRVbml0ICpcbiAgICAgICAgICAgICAgICAgICAgKHNlbGZDbG9zZWQgfHwgaW5kZW50aW5nVGFncy5pbmRleE9mKHN0YXRlLnRhZykgPT0gLTEgPyAyIDogMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3RhdGUuc295U3RhdGUucG9wKCk7XG4gICAgICAgICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eKFtcXHc/XSspKD89PSkvKSkge1xuICAgICAgICAgICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnRhZyA9PSB0YWdOYW1lICYmIHN0cmVhbS5jdXJyZW50KCkgPT0gXCJraW5kXCIgJiYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKC9ePVwiKFteXCJdKykvLCBmYWxzZSkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtpbmQgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5jb250ZXh0LmtpbmQgPSBraW5kO1xuICAgICAgICAgICAgICAgIHZhciBtb2RlID0gbW9kZXNba2luZF0gfHwgbW9kZXMuaHRtbDtcbiAgICAgICAgICAgICAgICB2YXIgbG9jYWxTdGF0ZSA9IGxhc3Qoc3RhdGUubG9jYWxTdGF0ZXMpO1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbFN0YXRlLm1vZGUuaW5kZW50KSB7XG4gICAgICAgICAgICAgICAgICBzdGF0ZS5pbmRlbnQgKz0gbG9jYWxTdGF0ZS5tb2RlLmluZGVudChsb2NhbFN0YXRlLnN0YXRlLCBcIlwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RhdGUubG9jYWxTdGF0ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBtb2RlOiBtb2RlLFxuICAgICAgICAgICAgICAgICAgc3RhdGU6IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShtb2RlKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24oc3RyZWFtLCBzdGF0ZSk7XG5cbiAgICAgICAgICBjYXNlIFwibGl0ZXJhbFwiOlxuICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXig/PVxce1xcL2xpdGVyYWx9KS8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNveVN0YXRlLnBvcCgpO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbihzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0b2tlblVudGlsKHN0cmVhbSwgc3RhdGUsIC9cXHtcXC9saXRlcmFsfS8pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxce2xpdGVyYWx9LykpIHtcbiAgICAgICAgICBzdGF0ZS5pbmRlbnQgKz0gY29uZmlnLmluZGVudFVuaXQ7XG4gICAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaChcImxpdGVyYWxcIik7XG4gICAgICAgICAgc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLmNvbnRleHQsIFwibGl0ZXJhbFwiLCBzdGF0ZS52YXJpYWJsZXMpO1xuICAgICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcblxuICAgICAgICAvLyBBIHRhZy1rZXl3b3JkIG11c3QgYmUgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZSwgY29tbWVudCBvciBhIGNsb3NpbmcgdGFnLlxuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKC9eXFx7KFsvQFxcXFxdP1xcdytcXD8/KSg/PSR8W1xcc31dfFxcL1svKl0pLykpIHtcbiAgICAgICAgICB2YXIgcHJldlRhZyA9IHN0YXRlLnRhZztcbiAgICAgICAgICBzdGF0ZS50YWcgPSBtYXRjaFsxXTtcbiAgICAgICAgICB2YXIgZW5kVGFnID0gc3RhdGUudGFnWzBdID09IFwiL1wiO1xuICAgICAgICAgIHZhciBpbmRlbnRpbmdUYWcgPSAhIXRhZ3Nbc3RhdGUudGFnXTtcbiAgICAgICAgICB2YXIgdGFnTmFtZSA9IGVuZFRhZyA/IHN0YXRlLnRhZy5zdWJzdHJpbmcoMSkgOiBzdGF0ZS50YWc7XG4gICAgICAgICAgdmFyIHRhZyA9IHRhZ3NbdGFnTmFtZV07XG4gICAgICAgICAgaWYgKHN0YXRlLnRhZyAhPSBcIi9zd2l0Y2hcIilcbiAgICAgICAgICAgIHN0YXRlLmluZGVudCArPSAoKGVuZFRhZyB8fCB0YWcgJiYgdGFnLnJlZHVjZUluZGVudCkgJiYgcHJldlRhZyAhPSBcInN3aXRjaFwiID8gMSA6IDIpICogY29uZmlnLmluZGVudFVuaXQ7XG5cbiAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wdXNoKFwidGFnXCIpO1xuICAgICAgICAgIHZhciB0YWdFcnJvciA9IGZhbHNlO1xuICAgICAgICAgIGlmICh0YWcpIHtcbiAgICAgICAgICAgIGlmICghZW5kVGFnKSB7XG4gICAgICAgICAgICAgIGlmICh0YWcuc295U3RhdGUpIHN0YXRlLnNveVN0YXRlLnB1c2godGFnLnNveVN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIGEgbmV3IHRhZywgb3BlbiBhIG5ldyBjb250ZXh0LlxuICAgICAgICAgICAgaWYgKCF0YWcubm9FbmRUYWcgJiYgKGluZGVudGluZ1RhZyB8fCAhZW5kVGFnKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUuY29udGV4dCwgc3RhdGUudGFnLCB0YWcudmFyaWFibGVTY29wZSA/IHN0YXRlLnZhcmlhYmxlcyA6IG51bGwpO1xuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGNsb3NlIHRoZSBjdXJyZW50IGNvbnRleHQuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuZFRhZykge1xuICAgICAgICAgICAgICBpZiAoIXN0YXRlLmNvbnRleHQgfHwgc3RhdGUuY29udGV4dC50YWcgIT0gdGFnTmFtZSkge1xuICAgICAgICAgICAgICAgIHRhZ0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmNvbnRleHQua2luZCkge1xuICAgICAgICAgICAgICAgICAgc3RhdGUubG9jYWxTdGF0ZXMucG9wKCk7XG4gICAgICAgICAgICAgICAgICB2YXIgbG9jYWxTdGF0ZSA9IGxhc3Qoc3RhdGUubG9jYWxTdGF0ZXMpO1xuICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsU3RhdGUubW9kZS5pbmRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuaW5kZW50IC09IGxvY2FsU3RhdGUubW9kZS5pbmRlbnQobG9jYWxTdGF0ZS5zdGF0ZSwgXCJcIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBvcGNvbnRleHQoc3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChlbmRUYWcpIHtcbiAgICAgICAgICAgIC8vIEFzc3VtZSBhbGwgdGFncyB3aXRoIGEgY2xvc2luZyB0YWcgYXJlIGRlZmluZWQgaW4gdGhlIGNvbmZpZy5cbiAgICAgICAgICAgIHRhZ0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh0YWdFcnJvciA/IFwiZXJyb3IgXCIgOiBcIlwiKSArIFwia2V5d29yZFwiO1xuXG4gICAgICAgIC8vIE5vdCBhIHRhZy1rZXl3b3JkOyBpdCdzIGFuIGltcGxpY2l0IHByaW50IHRhZy5cbiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KCd7JykpIHtcbiAgICAgICAgICBzdGF0ZS50YWcgPSBcInByaW50XCI7XG4gICAgICAgICAgc3RhdGUuaW5kZW50ICs9IDIgKiBjb25maWcuaW5kZW50VW5pdDtcbiAgICAgICAgICBzdGF0ZS5zb3lTdGF0ZS5wdXNoKFwidGFnXCIpO1xuICAgICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgfSBlbHNlIGlmICghc3RhdGUuY29udGV4dCAmJiBzdHJlYW0ubWF0Y2goL1xcYmltcG9ydFxcYi8pKSB7XG4gICAgICAgICAgc3RhdGUuc295U3RhdGUucHVzaChcImltcG9ydFwiKTtcbiAgICAgICAgICBzdGF0ZS5pbmRlbnQgKz0gMiAqIGNvbmZpZy5pbmRlbnRVbml0O1xuICAgICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b2tlblVudGlsKHN0cmVhbSwgc3RhdGUsIC9cXHt8XFxzK1xcL1xcL3xcXC9cXCovKTtcbiAgICAgIH0sXG5cbiAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlciwgbGluZSkge1xuICAgICAgICB2YXIgaW5kZW50ID0gc3RhdGUuaW5kZW50LCB0b3AgPSBsYXN0KHN0YXRlLnNveVN0YXRlKTtcbiAgICAgICAgaWYgKHRvcCA9PSBcImNvbW1lbnRcIikgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcblxuICAgICAgICBpZiAodG9wID09IFwibGl0ZXJhbFwiKSB7XG4gICAgICAgICAgaWYgKC9eXFx7XFwvbGl0ZXJhbH0vLnRlc3QodGV4dEFmdGVyKSkgaW5kZW50IC09IGNvbmZpZy5pbmRlbnRVbml0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgvXlxccypcXHtcXC8odGVtcGxhdGV8ZGVsdGVtcGxhdGUpXFxiLy50ZXN0KHRleHRBZnRlcikpIHJldHVybiAwO1xuICAgICAgICAgIGlmICgvXlxceyhcXC98KGZhbGxiYWNrbXNnfGVsc2VpZnxlbHNlfGlmZW1wdHkpXFxiKS8udGVzdCh0ZXh0QWZ0ZXIpKSBpbmRlbnQgLT0gY29uZmlnLmluZGVudFVuaXQ7XG4gICAgICAgICAgaWYgKHN0YXRlLnRhZyAhPSBcInN3aXRjaFwiICYmIC9eXFx7KGNhc2V8ZGVmYXVsdClcXGIvLnRlc3QodGV4dEFmdGVyKSkgaW5kZW50IC09IGNvbmZpZy5pbmRlbnRVbml0O1xuICAgICAgICAgIGlmICgvXlxce1xcL3N3aXRjaFxcYi8udGVzdCh0ZXh0QWZ0ZXIpKSBpbmRlbnQgLT0gY29uZmlnLmluZGVudFVuaXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxvY2FsU3RhdGUgPSBsYXN0KHN0YXRlLmxvY2FsU3RhdGVzKTtcbiAgICAgICAgaWYgKGluZGVudCAmJiBsb2NhbFN0YXRlLm1vZGUuaW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50ICs9IGxvY2FsU3RhdGUubW9kZS5pbmRlbnQobG9jYWxTdGF0ZS5zdGF0ZSwgdGV4dEFmdGVyLCBsaW5lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZW50O1xuICAgICAgfSxcblxuICAgICAgaW5uZXJNb2RlOiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgICBpZiAoc3RhdGUuc295U3RhdGUubGVuZ3RoICYmIGxhc3Qoc3RhdGUuc295U3RhdGUpICE9IFwibGl0ZXJhbFwiKSByZXR1cm4gbnVsbDtcbiAgICAgICAgZWxzZSByZXR1cm4gbGFzdChzdGF0ZS5sb2NhbFN0YXRlcyk7XG4gICAgICB9LFxuXG4gICAgICBlbGVjdHJpY0lucHV0OiAvXlxccypcXHsoXFwvfFxcL3RlbXBsYXRlfFxcL2RlbHRlbXBsYXRlfFxcL3N3aXRjaHxmYWxsYmFja21zZ3xlbHNlaWZ8ZWxzZXxjYXNlfGRlZmF1bHR8aWZlbXB0eXxcXC9saXRlcmFsXFx9KSQvLFxuICAgICAgbGluZUNvbW1lbnQ6IFwiLy9cIixcbiAgICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIi8qXCIsXG4gICAgICBibG9ja0NvbW1lbnRFbmQ6IFwiKi9cIixcbiAgICAgIGJsb2NrQ29tbWVudENvbnRpbnVlOiBcIiAqIFwiLFxuICAgICAgdXNlSW5uZXJDb21tZW50czogZmFsc2UsXG4gICAgICBmb2xkOiBcImluZGVudFwiXG4gICAgfTtcbiAgfSwgXCJodG1sbWl4ZWRcIik7XG5cbiAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcIndvcmRDaGFyc1wiLCBcInNveVwiLCAvW1xcdyRdLyk7XG5cbiAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImhpbnRXb3Jkc1wiLCBcInNveVwiLCBPYmplY3Qua2V5cyh0YWdzKS5jb25jYXQoXG4gICAgICBbXCJjc3NcIiwgXCJkZWJ1Z2dlclwiXSkpO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1zb3lcIiwgXCJzb3lcIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwic3BhcnFsXCIsIGZ1bmN0aW9uKGNvbmZpZykge1xuICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0O1xuICB2YXIgY3VyUHVuYztcblxuICBmdW5jdGlvbiB3b3JkUmVnZXhwKHdvcmRzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyB3b3Jkcy5qb2luKFwifFwiKSArIFwiKSRcIiwgXCJpXCIpO1xuICB9XG4gIHZhciBvcHMgPSB3b3JkUmVnZXhwKFtcInN0clwiLCBcImxhbmdcIiwgXCJsYW5nbWF0Y2hlc1wiLCBcImRhdGF0eXBlXCIsIFwiYm91bmRcIiwgXCJzYW1ldGVybVwiLCBcImlzaXJpXCIsIFwiaXN1cmlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaXJpXCIsIFwidXJpXCIsIFwiYm5vZGVcIiwgXCJjb3VudFwiLCBcInN1bVwiLCBcIm1pblwiLCBcIm1heFwiLCBcImF2Z1wiLCBcInNhbXBsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJncm91cF9jb25jYXRcIiwgXCJyYW5kXCIsIFwiYWJzXCIsIFwiY2VpbFwiLCBcImZsb29yXCIsIFwicm91bmRcIiwgXCJjb25jYXRcIiwgXCJzdWJzdHJcIiwgXCJzdHJsZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmVwbGFjZVwiLCBcInVjYXNlXCIsIFwibGNhc2VcIiwgXCJlbmNvZGVfZm9yX3VyaVwiLCBcImNvbnRhaW5zXCIsIFwic3Ryc3RhcnRzXCIsIFwic3RyZW5kc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJiZWZvcmVcIiwgXCJzdHJhZnRlclwiLCBcInllYXJcIiwgXCJtb250aFwiLCBcImRheVwiLCBcImhvdXJzXCIsIFwibWludXRlc1wiLCBcInNlY29uZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGltZXpvbmVcIiwgXCJ0elwiLCBcIm5vd1wiLCBcInV1aWRcIiwgXCJzdHJ1dWlkXCIsIFwibWQ1XCIsIFwic2hhMVwiLCBcInNoYTI1NlwiLCBcInNoYTM4NFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzaGE1MTJcIiwgXCJjb2FsZXNjZVwiLCBcImlmXCIsIFwic3RybGFuZ1wiLCBcInN0cmR0XCIsIFwiaXNudW1lcmljXCIsIFwicmVnZXhcIiwgXCJleGlzdHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNibGFua1wiLCBcImlzbGl0ZXJhbFwiLCBcImFcIiwgXCJiaW5kXCJdKTtcbiAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChbXCJiYXNlXCIsIFwicHJlZml4XCIsIFwic2VsZWN0XCIsIFwiZGlzdGluY3RcIiwgXCJyZWR1Y2VkXCIsIFwiY29uc3RydWN0XCIsIFwiZGVzY3JpYmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2tcIiwgXCJmcm9tXCIsIFwibmFtZWRcIiwgXCJ3aGVyZVwiLCBcIm9yZGVyXCIsIFwibGltaXRcIiwgXCJvZmZzZXRcIiwgXCJmaWx0ZXJcIiwgXCJvcHRpb25hbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBoXCIsIFwiYnlcIiwgXCJhc2NcIiwgXCJkZXNjXCIsIFwiYXNcIiwgXCJoYXZpbmdcIiwgXCJ1bmRlZlwiLCBcInZhbHVlc1wiLCBcImdyb3VwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWludXNcIiwgXCJpblwiLCBcIm5vdFwiLCBcInNlcnZpY2VcIiwgXCJzaWxlbnRcIiwgXCJ1c2luZ1wiLCBcImluc2VydFwiLCBcImRlbGV0ZVwiLCBcInVuaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHJ1ZVwiLCBcImZhbHNlXCIsIFwid2l0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGFcIiwgXCJjb3B5XCIsIFwidG9cIiwgXCJtb3ZlXCIsIFwiYWRkXCIsIFwiY3JlYXRlXCIsIFwiZHJvcFwiLCBcImNsZWFyXCIsIFwibG9hZFwiXSk7XG4gIHZhciBvcGVyYXRvckNoYXJzID0gL1sqK1xcLTw+PSZ8XFxeXFwvIVxcP10vO1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBjdXJQdW5jID0gbnVsbDtcbiAgICBpZiAoY2ggPT0gXCIkXCIgfHwgY2ggPT0gXCI/XCIpIHtcbiAgICAgIGlmKGNoID09IFwiP1wiICYmIHN0cmVhbS5tYXRjaCgvXFxzLywgZmFsc2UpKXtcbiAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5tYXRjaCgvXltBLVphLXowLTlfXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXVtBLVphLXowLTlfXFx1MDBCN1xcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwM0YtXFx1MjA0MFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRF0qLyk7XG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoID09IFwiPFwiICYmICFzdHJlYW0ubWF0Y2goL15bXFxzXFx1MDBhMD1dLywgZmFsc2UpKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goL15bXlxcc1xcdTAwYTA+XSo+Py8pO1xuICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChjaCA9PSBcIlxcXCJcIiB8fCBjaCA9PSBcIidcIikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkxpdGVyYWwoY2gpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlIGlmICgvW3t9XFwoXFwpLFxcLjtcXFtcXF1dLy50ZXN0KGNoKSkge1xuICAgICAgY3VyUHVuYyA9IGNoO1xuICAgICAgcmV0dXJuIFwiYnJhY2tldFwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChjaCA9PSBcIiNcIikge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChjaCA9PT0gXCJeXCIpIHtcbiAgICAgIGNoID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgIGlmIChjaCA9PT0gXCJeXCIpIHN0cmVhbS5lYXQoXCJeXCIpO1xuICAgICAgZWxzZSBzdHJlYW0uZWF0V2hpbGUob3BlcmF0b3JDaGFycyk7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChvcGVyYXRvckNoYXJzLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUob3BlcmF0b3JDaGFycyk7XG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChjaCA9PSBcIjpcIikge1xuICAgICAgZWF0UG5Mb2NhbChzdHJlYW0pO1xuICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChjaCA9PSBcIkBcIikge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bYS16XFxkXFwtXS9pKTtcbiAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tfXFx3XFxkXS8pO1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCI6XCIpKSB7XG4gICAgICAgIGVhdFBuTG9jYWwoc3RyZWFtKTtcbiAgICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgfVxuICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgICAgaWYgKG9wcy50ZXN0KHdvcmQpKVxuICAgICAgICByZXR1cm4gXCJidWlsdGluXCI7XG4gICAgICBlbHNlIGlmIChrZXl3b3Jkcy50ZXN0KHdvcmQpKVxuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZWF0UG5Mb2NhbChzdHJlYW0pIHtcbiAgICB3aGlsZSAoc3RyZWFtLm1hdGNoKC8oWzpcXHdcXGQuXy1dfFxcXFxbLVxcXFxffi4hJCYnKCkqKyw7PS8/I0AlXXwlW2EtZkEtRjAtOV1bYS1mQS1GMC05XSkvKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkxpdGVyYWwocXVvdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7XG4gICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2ggPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gXCJcXFxcXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIHR5cGUsIGNvbCkge1xuICAgIHN0YXRlLmNvbnRleHQgPSB7cHJldjogc3RhdGUuY29udGV4dCwgaW5kZW50OiBzdGF0ZS5pbmRlbnQsIGNvbDogY29sLCB0eXBlOiB0eXBlfTtcbiAgfVxuICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7XG4gICAgc3RhdGUuaW5kZW50ID0gc3RhdGUuY29udGV4dC5pbmRlbnQ7XG4gICAgc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IG51bGwsXG4gICAgICAgICAgICAgIGluZGVudDogMCxcbiAgICAgICAgICAgICAgY29sOiAwfTtcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgaWYgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC5hbGlnbiA9PSBudWxsKSBzdGF0ZS5jb250ZXh0LmFsaWduID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmluZGVudCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuXG4gICAgICBpZiAoc3R5bGUgIT0gXCJjb21tZW50XCIgJiYgc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LmFsaWduID09IG51bGwgJiYgc3RhdGUuY29udGV4dC50eXBlICE9IFwicGF0dGVyblwiKSB7XG4gICAgICAgIHN0YXRlLmNvbnRleHQuYWxpZ24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VyUHVuYyA9PSBcIihcIikgcHVzaENvbnRleHQoc3RhdGUsIFwiKVwiLCBzdHJlYW0uY29sdW1uKCkpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIltcIikgcHVzaENvbnRleHQoc3RhdGUsIFwiXVwiLCBzdHJlYW0uY29sdW1uKCkpO1xuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIntcIikgcHVzaENvbnRleHQoc3RhdGUsIFwifVwiLCBzdHJlYW0uY29sdW1uKCkpO1xuICAgICAgZWxzZSBpZiAoL1tcXF1cXH1cXCldLy50ZXN0KGN1clB1bmMpKSB7XG4gICAgICAgIHdoaWxlIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQudHlwZSA9PSBcInBhdHRlcm5cIikgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIGN1clB1bmMgPT0gc3RhdGUuY29udGV4dC50eXBlKSB7XG4gICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICAgICAgaWYgKGN1clB1bmMgPT0gXCJ9XCIgJiYgc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gXCJwYXR0ZXJuXCIpXG4gICAgICAgICAgICBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIi5cIiAmJiBzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQudHlwZSA9PSBcInBhdHRlcm5cIikgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICBlbHNlIGlmICgvYXRvbXxzdHJpbmd8dmFyaWFibGUvLnRlc3Qoc3R5bGUpICYmIHN0YXRlLmNvbnRleHQpIHtcbiAgICAgICAgaWYgKC9bXFx9XFxdXS8udGVzdChzdGF0ZS5jb250ZXh0LnR5cGUpKVxuICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBcInBhdHRlcm5cIiwgc3RyZWFtLmNvbHVtbigpKTtcbiAgICAgICAgZWxzZSBpZiAoc3RhdGUuY29udGV4dC50eXBlID09IFwicGF0dGVyblwiICYmICFzdGF0ZS5jb250ZXh0LmFsaWduKSB7XG4gICAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7XG4gICAgICAgICAgc3RhdGUuY29udGV4dC5jb2wgPSBzdHJlYW0uY29sdW1uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTtcbiAgICAgIHZhciBjb250ZXh0ID0gc3RhdGUuY29udGV4dDtcbiAgICAgIGlmICgvW1xcXVxcfV0vLnRlc3QoZmlyc3RDaGFyKSlcbiAgICAgICAgd2hpbGUgKGNvbnRleHQgJiYgY29udGV4dC50eXBlID09IFwicGF0dGVyblwiKSBjb250ZXh0ID0gY29udGV4dC5wcmV2O1xuXG4gICAgICB2YXIgY2xvc2luZyA9IGNvbnRleHQgJiYgZmlyc3RDaGFyID09IGNvbnRleHQudHlwZTtcbiAgICAgIGlmICghY29udGV4dClcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT0gXCJwYXR0ZXJuXCIpXG4gICAgICAgIHJldHVybiBjb250ZXh0LmNvbDtcbiAgICAgIGVsc2UgaWYgKGNvbnRleHQuYWxpZ24pXG4gICAgICAgIHJldHVybiBjb250ZXh0LmNvbCArIChjbG9zaW5nID8gMCA6IDEpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gY29udGV4dC5pbmRlbnQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KTtcbiAgICB9LFxuXG4gICAgbGluZUNvbW1lbnQ6IFwiI1wiXG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vc3BhcnFsLXF1ZXJ5XCIsIFwic3BhcnFsXCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcInNwcmVhZHNoZWV0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0cmluZ1R5cGU6IG51bGwsXG4gICAgICAgICAgc3RhY2s6IFtdXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgdG9rZW46IGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RyZWFtKSByZXR1cm47XG5cbiAgICAgICAgLy9jaGVjayBmb3Igc3RhdGUgY2hhbmdlc1xuICAgICAgICBpZiAoc3RhdGUuc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy9zdHJpbmdzXG4gICAgICAgICAgaWYgKChzdHJlYW0ucGVlaygpID09ICdcIicpIHx8IChzdHJlYW0ucGVlaygpID09IFwiJ1wiKSkge1xuICAgICAgICAgICAgc3RhdGUuc3RyaW5nVHlwZSA9IHN0cmVhbS5wZWVrKCk7XG4gICAgICAgICAgICBzdHJlYW0ubmV4dCgpOyAvLyBTa2lwIHF1b3RlXG4gICAgICAgICAgICBzdGF0ZS5zdGFjay51bnNoaWZ0KFwic3RyaW5nXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vcmV0dXJuIHN0YXRlXG4gICAgICAgIC8vc3RhY2sgaGFzXG4gICAgICAgIHN3aXRjaCAoc3RhdGUuc3RhY2tbMF0pIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIHdoaWxlIChzdGF0ZS5zdGFja1swXSA9PT0gXCJzdHJpbmdcIiAmJiAhc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gc3RhdGUuc3RyaW5nVHlwZSkge1xuICAgICAgICAgICAgICBzdHJlYW0ubmV4dCgpOyAvLyBTa2lwIHF1b3RlXG4gICAgICAgICAgICAgIHN0YXRlLnN0YWNrLnNoaWZ0KCk7IC8vIENsZWFyIGZsYWdcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0cmVhbS5tYXRjaCgvXi5bXlxcXFxcXFwiXFwnXSovKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG5cbiAgICAgICAgY2FzZSBcImNoYXJhY3RlckNsYXNzXCI6XG4gICAgICAgICAgd2hpbGUgKHN0YXRlLnN0YWNrWzBdID09PSBcImNoYXJhY3RlckNsYXNzXCIgJiYgIXN0cmVhbS5lb2woKSkge1xuICAgICAgICAgICAgaWYgKCEoc3RyZWFtLm1hdGNoKC9eW15cXF1cXFxcXSsvKSB8fCBzdHJlYW0ubWF0Y2goL15cXFxcLi8pKSlcbiAgICAgICAgICAgICAgc3RhdGUuc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwZWVrID0gc3RyZWFtLnBlZWsoKTtcblxuICAgICAgICAvL25vIHN0YWNrXG4gICAgICAgIHN3aXRjaCAocGVlaykge1xuICAgICAgICBjYXNlIFwiW1wiOlxuICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgc3RhdGUuc3RhY2sudW5zaGlmdChcImNoYXJhY3RlckNsYXNzXCIpO1xuICAgICAgICAgIHJldHVybiBcImJyYWNrZXRcIjtcbiAgICAgICAgY2FzZSBcIjpcIjpcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgICAgIGNhc2UgXCJcXFxcXCI6XG4gICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXFxcXFthLXpdKy8pKSByZXR1cm4gXCJzdHJpbmctMlwiO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCIuXCI6XG4gICAgICAgIGNhc2UgXCIsXCI6XG4gICAgICAgIGNhc2UgXCI7XCI6XG4gICAgICAgIGNhc2UgXCIqXCI6XG4gICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgIGNhc2UgXCIrXCI6XG4gICAgICAgIGNhc2UgXCJeXCI6XG4gICAgICAgIGNhc2UgXCI8XCI6XG4gICAgICAgIGNhc2UgXCIvXCI6XG4gICAgICAgIGNhc2UgXCI9XCI6XG4gICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgICAgIGNhc2UgXCIkXCI6XG4gICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICByZXR1cm4gXCJidWlsdGluXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXGQrLykpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFx3Ky8pKSByZXR1cm4gXCJlcnJvclwiO1xuICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXlthLXpBLVpfXVxcdyovKSkge1xuICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goLyg/PVtcXCguXSkvLCBmYWxzZSkpIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoW1wiW1wiLCBcIl1cIiwgXCIoXCIsIFwiKVwiLCBcIntcIiwgXCJ9XCJdLmluZGV4T2YocGVlaykgIT0gLTEpIHtcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIHJldHVybiBcImJyYWNrZXRcIjtcbiAgICAgICAgfSBlbHNlIGlmICghc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1zcHJlYWRzaGVldFwiLCBcInNwcmVhZHNoZWV0XCIpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInNxbFwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykge1xuICB2YXIgY2xpZW50ICAgICAgICAgPSBwYXJzZXJDb25maWcuY2xpZW50IHx8IHt9LFxuICAgICAgYXRvbXMgICAgICAgICAgPSBwYXJzZXJDb25maWcuYXRvbXMgfHwge1wiZmFsc2VcIjogdHJ1ZSwgXCJ0cnVlXCI6IHRydWUsIFwibnVsbFwiOiB0cnVlfSxcbiAgICAgIGJ1aWx0aW4gICAgICAgID0gcGFyc2VyQ29uZmlnLmJ1aWx0aW4gfHwgc2V0KGRlZmF1bHRCdWlsdGluKSxcbiAgICAgIGtleXdvcmRzICAgICAgID0gcGFyc2VyQ29uZmlnLmtleXdvcmRzIHx8IHNldChzcWxLZXl3b3JkcyksXG4gICAgICBvcGVyYXRvckNoYXJzICA9IHBhcnNlckNvbmZpZy5vcGVyYXRvckNoYXJzIHx8IC9eWyorXFwtJTw+IT0mfH5eXFwvXS8sXG4gICAgICBzdXBwb3J0ICAgICAgICA9IHBhcnNlckNvbmZpZy5zdXBwb3J0IHx8IHt9LFxuICAgICAgaG9va3MgICAgICAgICAgPSBwYXJzZXJDb25maWcuaG9va3MgfHwge30sXG4gICAgICBkYXRlU1FMICAgICAgICA9IHBhcnNlckNvbmZpZy5kYXRlU1FMIHx8IHtcImRhdGVcIiA6IHRydWUsIFwidGltZVwiIDogdHJ1ZSwgXCJ0aW1lc3RhbXBcIiA6IHRydWV9LFxuICAgICAgYmFja3NsYXNoU3RyaW5nRXNjYXBlcyA9IHBhcnNlckNvbmZpZy5iYWNrc2xhc2hTdHJpbmdFc2NhcGVzICE9PSBmYWxzZSxcbiAgICAgIGJyYWNrZXRzICAgICAgID0gcGFyc2VyQ29uZmlnLmJyYWNrZXRzIHx8IC9eW1xce31cXChcXClcXFtcXF1dLyxcbiAgICAgIHB1bmN0dWF0aW9uICAgID0gcGFyc2VyQ29uZmlnLnB1bmN0dWF0aW9uIHx8IC9eWzsuLDpdL1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgIC8vIGNhbGwgaG9va3MgZnJvbSB0aGUgbWltZSB0eXBlXG4gICAgaWYgKGhvb2tzW2NoXSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGhvb2tzW2NoXShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0LmhleE51bWJlciAmJlxuICAgICAgKChjaCA9PSBcIjBcIiAmJiBzdHJlYW0ubWF0Y2goL15beFhdWzAtOWEtZkEtRl0rLykpXG4gICAgICB8fCAoY2ggPT0gXCJ4XCIgfHwgY2ggPT0gXCJYXCIpICYmIHN0cmVhbS5tYXRjaCgvXidbMC05YS1mQS1GXSsnLykpKSB7XG4gICAgICAvLyBoZXhcbiAgICAgIC8vIHJlZjogaHR0cDovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjUvZW4vaGV4YWRlY2ltYWwtbGl0ZXJhbHMuaHRtbFxuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJpbmFyeU51bWJlciAmJlxuICAgICAgKCgoY2ggPT0gXCJiXCIgfHwgY2ggPT0gXCJCXCIpICYmIHN0cmVhbS5tYXRjaCgvXidbMDFdKycvKSlcbiAgICAgIHx8IChjaCA9PSBcIjBcIiAmJiBzdHJlYW0ubWF0Y2goL15iWzAxXSsvKSkpKSB7XG4gICAgICAvLyBiaXRzdHJpbmdcbiAgICAgIC8vIHJlZjogaHR0cDovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjUvZW4vYml0LWZpZWxkLWxpdGVyYWxzLmh0bWxcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAoY2guY2hhckNvZGVBdCgwKSA+IDQ3ICYmIGNoLmNoYXJDb2RlQXQoMCkgPCA1OCkge1xuICAgICAgLy8gbnVtYmVyc1xuICAgICAgLy8gcmVmOiBodHRwOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzUuNS9lbi9udW1iZXItbGl0ZXJhbHMuaHRtbFxuICAgICAgc3RyZWFtLm1hdGNoKC9eWzAtOV0qKFxcLlswLTldKyk/KFtlRV1bLStdP1swLTldKyk/Lyk7XG4gICAgICBzdXBwb3J0LmRlY2ltYWxsZXNzRmxvYXQgJiYgc3RyZWFtLm1hdGNoKC9eXFwuKD8hXFwuKS8pO1xuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIj9cIiAmJiAoc3RyZWFtLmVhdFNwYWNlKCkgfHwgc3RyZWFtLmVvbCgpIHx8IHN0cmVhbS5lYXQoXCI7XCIpKSkge1xuICAgICAgLy8gcGxhY2Vob2xkZXJzXG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZS0zXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIidcIiB8fCAoY2ggPT0gJ1wiJyAmJiBzdXBwb3J0LmRvdWJsZVF1b3RlKSkge1xuICAgICAgLy8gc3RyaW5nc1xuICAgICAgLy8gcmVmOiBodHRwOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzUuNS9lbi9zdHJpbmctbGl0ZXJhbHMuaHRtbFxuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkxpdGVyYWwoY2gpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoKCgoc3VwcG9ydC5uQ2hhckNhc3QgJiYgKGNoID09IFwiblwiIHx8IGNoID09IFwiTlwiKSlcbiAgICAgICAgfHwgKHN1cHBvcnQuY2hhcnNldENhc3QgJiYgY2ggPT0gXCJfXCIgJiYgc3RyZWFtLm1hdGNoKC9bYS16XVthLXowLTldKi9pKSkpXG4gICAgICAgICYmIChzdHJlYW0ucGVlaygpID09IFwiJ1wiIHx8IHN0cmVhbS5wZWVrKCkgPT0gJ1wiJykpKSB7XG4gICAgICAvLyBjaGFyc2V0IGNhc3Rpbmc6IF91dGY4J3N0cicsIE4nc3RyJywgbidzdHInXG4gICAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL3N0cmluZy1saXRlcmFscy5odG1sXG4gICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmVzY2FwZUNvbnN0YW50ICYmIChjaCA9PSBcImVcIiB8fCBjaCA9PSBcIkVcIilcbiAgICAgICAgJiYgKHN0cmVhbS5wZWVrKCkgPT0gXCInXCIgfHwgKHN0cmVhbS5wZWVrKCkgPT0gJ1wiJyAmJiBzdXBwb3J0LmRvdWJsZVF1b3RlKSkpIHtcbiAgICAgIC8vIGVzY2FwZSBjb25zdGFudDogRSdzdHInLCBlJ3N0cidcbiAgICAgIC8vIHJlZjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3NxbC1zeW50YXgtbGV4aWNhbC5odG1sI1NRTC1TWU5UQVgtU1RSSU5HUy1FU0NBUEVcbiAgICAgIHN0YXRlLnRva2VuaXplID0gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICByZXR1cm4gKHN0YXRlLnRva2VuaXplID0gdG9rZW5MaXRlcmFsKHN0cmVhbS5uZXh0KCksIHRydWUpKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuY29tbWVudFNsYXNoU2xhc2ggJiYgY2ggPT0gXCIvXCIgJiYgc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgIC8vIDEtbGluZSBjb21tZW50XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgfSBlbHNlIGlmICgoc3VwcG9ydC5jb21tZW50SGFzaCAmJiBjaCA9PSBcIiNcIilcbiAgICAgICAgfHwgKGNoID09IFwiLVwiICYmIHN0cmVhbS5lYXQoXCItXCIpICYmICghc3VwcG9ydC5jb21tZW50U3BhY2VSZXF1aXJlZCB8fCBzdHJlYW0uZWF0KFwiIFwiKSkpKSB7XG4gICAgICAvLyAxLWxpbmUgY29tbWVudHNcbiAgICAgIC8vIHJlZjogaHR0cHM6Ly9rYi5hc2ttb250eS5vcmcvZW4vY29tbWVudC1zeW50YXgvXG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIi9cIiAmJiBzdHJlYW0uZWF0KFwiKlwiKSkge1xuICAgICAgLy8gbXVsdGktbGluZSBjb21tZW50c1xuICAgICAgLy8gcmVmOiBodHRwczovL2tiLmFza21vbnR5Lm9yZy9lbi9jb21tZW50LXN5bnRheC9cbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50KDEpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIuXCIpIHtcbiAgICAgIC8vIC4xIGZvciAwLjFcbiAgICAgIGlmIChzdXBwb3J0Lnplcm9sZXNzRmxvYXQgJiYgc3RyZWFtLm1hdGNoKC9eKD86XFxkKyg/OmVbKy1dP1xcZCspPykvaSkpXG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxcLisvKSlcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIC8vIC50YWJsZV9uYW1lIChPREJDKVxuICAgICAgLy8gLy8gcmVmOiBodHRwOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzUuNi9lbi9pZGVudGlmaWVyLXF1YWxpZmllcnMuaHRtbFxuICAgICAgaWYgKHN1cHBvcnQuT0RCQ2RvdFRhYmxlICYmIHN0cmVhbS5tYXRjaCgvXltcXHdcXGRfJCNdKy8pKVxuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgfSBlbHNlIGlmIChvcGVyYXRvckNoYXJzLnRlc3QoY2gpKSB7XG4gICAgICAvLyBvcGVyYXRvcnNcbiAgICAgIHN0cmVhbS5lYXRXaGlsZShvcGVyYXRvckNoYXJzKTtcbiAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgfSBlbHNlIGlmIChicmFja2V0cy50ZXN0KGNoKSkge1xuICAgICAgLy8gYnJhY2tldHNcbiAgICAgIHJldHVybiBcImJyYWNrZXRcIjtcbiAgICB9IGVsc2UgaWYgKHB1bmN0dWF0aW9uLnRlc3QoY2gpKSB7XG4gICAgICAvLyBwdW5jdHVhdGlvblxuICAgICAgc3RyZWFtLmVhdFdoaWxlKHB1bmN0dWF0aW9uKTtcbiAgICAgIHJldHVybiBcInB1bmN0dWF0aW9uXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PSAneycgJiZcbiAgICAgICAgKHN0cmVhbS5tYXRjaCgvXiggKSooZHxEfHR8VHx0c3xUUykoICkqJ1teJ10qJyggKSp9LykgfHwgc3RyZWFtLm1hdGNoKC9eKCApKihkfER8dHxUfHRzfFRTKSggKSpcIlteXCJdKlwiKCApKn0vKSkpIHtcbiAgICAgIC8vIGRhdGVzICh3ZWlyZCBPREJDIHN5bnRheClcbiAgICAgIC8vIHJlZjogaHR0cDovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjUvZW4vZGF0ZS1hbmQtdGltZS1saXRlcmFscy5odG1sXG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9eW19cXHdcXGRdLyk7XG4gICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIC8vIGRhdGVzIChzdGFuZGFyZCBTUUwgc3ludGF4KVxuICAgICAgLy8gcmVmOiBodHRwOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzUuNS9lbi9kYXRlLWFuZC10aW1lLWxpdGVyYWxzLmh0bWxcbiAgICAgIGlmIChkYXRlU1FMLmhhc093blByb3BlcnR5KHdvcmQpICYmIChzdHJlYW0ubWF0Y2goL14oICkrJ1teJ10qJy8pIHx8IHN0cmVhbS5tYXRjaCgvXiggKStcIlteXCJdKlwiLykpKVxuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIGlmIChhdG9tcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgaWYgKGJ1aWx0aW4uaGFzT3duUHJvcGVydHkod29yZCkpIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgICAgIGlmIChrZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgaWYgKGNsaWVudC5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkgcmV0dXJuIFwic3RyaW5nLTJcIjtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vICdzdHJpbmcnLCB3aXRoIGNoYXIgc3BlY2lmaWVkIGluIHF1b3RlIGVzY2FwZWQgYnkgJ1xcJ1xuICBmdW5jdGlvbiB0b2tlbkxpdGVyYWwocXVvdGUsIGJhY2tzbGFzaEVzY2FwZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7XG4gICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2ggPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlc2NhcGVkID0gKGJhY2tzbGFzaFN0cmluZ0VzY2FwZXMgfHwgYmFja3NsYXNoRXNjYXBlcykgJiYgIWVzY2FwZWQgJiYgY2ggPT0gXCJcXFxcXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChkZXB0aCkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgbSA9IHN0cmVhbS5tYXRjaCgvXi4qPyhcXC9cXCp8XFwqXFwvKS8pXG4gICAgICBpZiAoIW0pIHN0cmVhbS5za2lwVG9FbmQoKVxuICAgICAgZWxzZSBpZiAobVsxXSA9PSBcIi8qXCIpIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50KGRlcHRoICsgMSlcbiAgICAgIGVsc2UgaWYgKGRlcHRoID4gMSkgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQoZGVwdGggLSAxKVxuICAgICAgZWxzZSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZVxuICAgICAgcmV0dXJuIFwiY29tbWVudFwiXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RyZWFtLCBzdGF0ZSwgdHlwZSkge1xuICAgIHN0YXRlLmNvbnRleHQgPSB7XG4gICAgICBwcmV2OiBzdGF0ZS5jb250ZXh0LFxuICAgICAgaW5kZW50OiBzdHJlYW0uaW5kZW50YXRpb24oKSxcbiAgICAgIGNvbDogc3RyZWFtLmNvbHVtbigpLFxuICAgICAgdHlwZTogdHlwZVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7XG4gICAgc3RhdGUuaW5kZW50ID0gc3RhdGUuY29udGV4dC5pbmRlbnQ7XG4gICAgc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsIGNvbnRleHQ6IG51bGx9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LmFsaWduID09IG51bGwpXG4gICAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnRva2VuaXplID09IHRva2VuQmFzZSAmJiBzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG5cbiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHN0eWxlID09IFwiY29tbWVudFwiKSByZXR1cm4gc3R5bGU7XG5cbiAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbClcbiAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7XG5cbiAgICAgIHZhciB0b2sgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgICAgaWYgKHRvayA9PSBcIihcIilcbiAgICAgICAgcHVzaENvbnRleHQoc3RyZWFtLCBzdGF0ZSwgXCIpXCIpO1xuICAgICAgZWxzZSBpZiAodG9rID09IFwiW1wiKVxuICAgICAgICBwdXNoQ29udGV4dChzdHJlYW0sIHN0YXRlLCBcIl1cIik7XG4gICAgICBlbHNlIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQudHlwZSA9PSB0b2spXG4gICAgICAgIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIHZhciBjeCA9IHN0YXRlLmNvbnRleHQ7XG4gICAgICBpZiAoIWN4KSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgdmFyIGNsb3NpbmcgPSB0ZXh0QWZ0ZXIuY2hhckF0KDApID09IGN4LnR5cGU7XG4gICAgICBpZiAoY3guYWxpZ24pIHJldHVybiBjeC5jb2wgKyAoY2xvc2luZyA/IDAgOiAxKTtcbiAgICAgIGVsc2UgcmV0dXJuIGN4LmluZGVudCArIChjbG9zaW5nID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KTtcbiAgICB9LFxuXG4gICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiLypcIixcbiAgICBibG9ja0NvbW1lbnRFbmQ6IFwiKi9cIixcbiAgICBsaW5lQ29tbWVudDogc3VwcG9ydC5jb21tZW50U2xhc2hTbGFzaCA/IFwiLy9cIiA6IHN1cHBvcnQuY29tbWVudEhhc2ggPyBcIiNcIiA6IFwiLS1cIixcbiAgICBjbG9zZUJyYWNrZXRzOiBcIigpW117fScnXFxcIlxcXCJgYFwiXG4gIH07XG59KTtcblxuICAvLyBgaWRlbnRpZmllcmBcbiAgZnVuY3Rpb24gaG9va0lkZW50aWZpZXIoc3RyZWFtKSB7XG4gICAgLy8gTXlTUUwvTWFyaWFEQiBpZGVudGlmaWVyc1xuICAgIC8vIHJlZjogaHR0cDovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjYvZW4vaWRlbnRpZmllci1xdWFsaWZpZXJzLmh0bWxcbiAgICB2YXIgY2g7XG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmIChjaCA9PSBcImBcIiAmJiAhc3RyZWFtLmVhdChcImBcIikpIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICB9XG4gICAgc3RyZWFtLmJhY2tVcChzdHJlYW0uY3VycmVudCgpLmxlbmd0aCAtIDEpO1xuICAgIHJldHVybiBzdHJlYW0uZWF0V2hpbGUoL1xcdy8pID8gXCJ2YXJpYWJsZS0yXCIgOiBudWxsO1xuICB9XG5cbiAgLy8gXCJpZGVudGlmaWVyXCJcbiAgZnVuY3Rpb24gaG9va0lkZW50aWZpZXJEb3VibGVxdW90ZShzdHJlYW0pIHtcbiAgICAvLyBTdGFuZGFyZCBTUUwgL1NRTGl0ZSBpZGVudGlmaWVyc1xuICAgIC8vIHJlZjogaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA4MTMxODUxMzIvaHR0cDovL3NhdmFnZS5uZXQuYXUvU1FML3NxbC05OS5ibmYuaHRtbCNkZWxpbWl0ZWQlMjBpZGVudGlmaWVyXG4gICAgLy8gcmVmOiBodHRwOi8vc3FsaXRlLm9yZy9sYW5nX2tleXdvcmRzLmh0bWxcbiAgICB2YXIgY2g7XG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmIChjaCA9PSBcIlxcXCJcIiAmJiAhc3RyZWFtLmVhdChcIlxcXCJcIikpIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICB9XG4gICAgc3RyZWFtLmJhY2tVcChzdHJlYW0uY3VycmVudCgpLmxlbmd0aCAtIDEpO1xuICAgIHJldHVybiBzdHJlYW0uZWF0V2hpbGUoL1xcdy8pID8gXCJ2YXJpYWJsZS0yXCIgOiBudWxsO1xuICB9XG5cbiAgLy8gdmFyaWFibGUgdG9rZW5cbiAgZnVuY3Rpb24gaG9va1ZhcihzdHJlYW0pIHtcbiAgICAvLyB2YXJpYWJsZXNcbiAgICAvLyBAQHByZWZpeC52YXJOYW1lIEB2YXJOYW1lXG4gICAgLy8gdmFyTmFtZSBjYW4gYmUgcXVvdGVkIHdpdGggYCBvciAnIG9yIFwiXG4gICAgLy8gcmVmOiBodHRwOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzUuNS9lbi91c2VyLXZhcmlhYmxlcy5odG1sXG4gICAgaWYgKHN0cmVhbS5lYXQoXCJAXCIpKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goL15zZXNzaW9uXFwuLyk7XG4gICAgICBzdHJlYW0ubWF0Y2goL15sb2NhbFxcLi8pO1xuICAgICAgc3RyZWFtLm1hdGNoKC9eZ2xvYmFsXFwuLyk7XG4gICAgfVxuXG4gICAgaWYgKHN0cmVhbS5lYXQoXCInXCIpKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goL14uKicvKTtcbiAgICAgIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoJ1wiJykpIHtcbiAgICAgIHN0cmVhbS5tYXRjaCgvXi4qXCIvKTtcbiAgICAgIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoXCJgXCIpKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goL14uKmAvKTtcbiAgICAgIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXlswLTlhLXpBLVokXFwuXFxfXSsvKSkge1xuICAgICAgcmV0dXJuIFwidmFyaWFibGUtMlwiO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICAvLyBzaG9ydCBjbGllbnQga2V5d29yZCB0b2tlblxuICBmdW5jdGlvbiBob29rQ2xpZW50KHN0cmVhbSkge1xuICAgIC8vIFxcTiBtZWFucyBOVUxMXG4gICAgLy8gcmVmOiBodHRwOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzUuNS9lbi9udWxsLXZhbHVlcy5odG1sXG4gICAgaWYgKHN0cmVhbS5lYXQoXCJOXCIpKSB7XG4gICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICB9XG4gICAgLy8gXFxnLCBldGNcbiAgICAvLyByZWY6IGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL215c3FsLWNvbW1hbmRzLmh0bWxcbiAgICByZXR1cm4gc3RyZWFtLm1hdGNoKC9eW2EtekEtWi4jIT9dLykgPyBcInZhcmlhYmxlLTJcIiA6IG51bGw7XG4gIH1cblxuICAvLyB0aGVzZSBrZXl3b3JkcyBhcmUgdXNlZCBieSBhbGwgU1FMIGRpYWxlY3RzIChob3dldmVyLCBhIG1vZGUgY2FuIHN0aWxsIG92ZXJ3cml0ZSBpdClcbiAgdmFyIHNxbEtleXdvcmRzID0gXCJhbHRlciBhbmQgYXMgYXNjIGJldHdlZW4gYnkgY291bnQgY3JlYXRlIGRlbGV0ZSBkZXNjIGRpc3RpbmN0IGRyb3AgZnJvbSBncm91cCBoYXZpbmcgaW4gaW5zZXJ0IGludG8gaXMgam9pbiBsaWtlIG5vdCBvbiBvciBvcmRlciBzZWxlY3Qgc2V0IHRhYmxlIHVuaW9uIHVwZGF0ZSB2YWx1ZXMgd2hlcmUgbGltaXQgXCI7XG5cbiAgLy8gdHVybiBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IGludG8gYW4gYXJyYXlcbiAgZnVuY3Rpb24gc2V0KHN0cikge1xuICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoXCIgXCIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgZGVmYXVsdEJ1aWx0aW4gPSBcImJvb2wgYm9vbGVhbiBiaXQgYmxvYiBlbnVtIGxvbmcgbG9uZ2Jsb2IgbG9uZ3RleHQgbWVkaXVtIG1lZGl1bWJsb2IgbWVkaXVtaW50IG1lZGl1bXRleHQgdGltZSB0aW1lc3RhbXAgdGlueWJsb2IgdGlueWludCB0aW55dGV4dCB0ZXh0IGJpZ2ludCBpbnQgaW50MSBpbnQyIGludDMgaW50NCBpbnQ4IGludGVnZXIgZmxvYXQgZmxvYXQ0IGZsb2F0OCBkb3VibGUgY2hhciB2YXJiaW5hcnkgdmFyY2hhciB2YXJjaGFyYWN0ZXIgcHJlY2lzaW9uIHJlYWwgZGF0ZSBkYXRldGltZSB5ZWFyIHVuc2lnbmVkIHNpZ25lZCBkZWNpbWFsIG51bWVyaWNcIlxuXG4gIC8vIEEgZ2VuZXJpYyBTUUwgTW9kZS4gSXQncyBub3QgYSBzdGFuZGFyZCwgaXQganVzdCB0cnkgdG8gc3VwcG9ydCB3aGF0IGlzIGdlbmVyYWxseSBzdXBwb3J0ZWRcbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXNxbFwiLCB7XG4gICAgbmFtZTogXCJzcWxcIixcbiAgICBrZXl3b3Jkczogc2V0KHNxbEtleXdvcmRzICsgXCJiZWdpblwiKSxcbiAgICBidWlsdGluOiBzZXQoZGVmYXVsdEJ1aWx0aW4pLFxuICAgIGF0b21zOiBzZXQoXCJmYWxzZSB0cnVlIG51bGwgdW5rbm93blwiKSxcbiAgICBkYXRlU1FMOiBzZXQoXCJkYXRlIHRpbWUgdGltZXN0YW1wXCIpLFxuICAgIHN1cHBvcnQ6IHNldChcIk9EQkNkb3RUYWJsZSBkb3VibGVRdW90ZSBiaW5hcnlOdW1iZXIgaGV4TnVtYmVyXCIpXG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1tc3NxbFwiLCB7XG4gICAgbmFtZTogXCJzcWxcIixcbiAgICBjbGllbnQ6IHNldChcIiRwYXJ0aXRpb24gYmluYXJ5X2NoZWNrc3VtIGNoZWNrc3VtIGNvbm5lY3Rpb25wcm9wZXJ0eSBjb250ZXh0X2luZm8gY3VycmVudF9yZXF1ZXN0X2lkIGVycm9yX2xpbmUgZXJyb3JfbWVzc2FnZSBlcnJvcl9udW1iZXIgZXJyb3JfcHJvY2VkdXJlIGVycm9yX3NldmVyaXR5IGVycm9yX3N0YXRlIGZvcm1hdG1lc3NhZ2UgZ2V0X2ZpbGVzdHJlYW1fdHJhbnNhY3Rpb25fY29udGV4dCBnZXRhbnNpbnVsbCBob3N0X2lkIGhvc3RfbmFtZSBpc251bGwgaXNudW1lcmljIG1pbl9hY3RpdmVfcm93dmVyc2lvbiBuZXdpZCBuZXdzZXF1ZW50aWFsaWQgcm93Y291bnRfYmlnIHhhY3Rfc3RhdGUgb2JqZWN0X2lkXCIpLFxuICAgIGtleXdvcmRzOiBzZXQoc3FsS2V5d29yZHMgKyBcImJlZ2luIHRyaWdnZXIgcHJvYyB2aWV3IGluZGV4IGZvciBhZGQgY29uc3RyYWludCBrZXkgcHJpbWFyeSBmb3JlaWduIGNvbGxhdGUgY2x1c3RlcmVkIG5vbmNsdXN0ZXJlZCBkZWNsYXJlIGV4ZWMgZ28gaWYgdXNlIGluZGV4IGhvbGRsb2NrIG5vbG9jayBub3dhaXQgcGFnbG9jayByZWFkY29tbWl0dGVkIHJlYWRjb21taXR0ZWRsb2NrIHJlYWRwYXN0IHJlYWR1bmNvbW1pdHRlZCByZXBlYXRhYmxlcmVhZCByb3dsb2NrIHNlcmlhbGl6YWJsZSBzbmFwc2hvdCB0YWJsb2NrIHRhYmxvY2t4IHVwZGxvY2sgd2l0aFwiKSxcbiAgICBidWlsdGluOiBzZXQoXCJiaWdpbnQgbnVtZXJpYyBiaXQgc21hbGxpbnQgZGVjaW1hbCBzbWFsbG1vbmV5IGludCB0aW55aW50IG1vbmV5IGZsb2F0IHJlYWwgY2hhciB2YXJjaGFyIHRleHQgbmNoYXIgbnZhcmNoYXIgbnRleHQgYmluYXJ5IHZhcmJpbmFyeSBpbWFnZSBjdXJzb3IgdGltZXN0YW1wIGhpZXJhcmNoeWlkIHVuaXF1ZWlkZW50aWZpZXIgc3FsX3ZhcmlhbnQgeG1sIHRhYmxlIFwiKSxcbiAgICBhdG9tczogc2V0KFwiaXMgbm90IG51bGwgbGlrZSBhbmQgb3IgaW4gbGVmdCByaWdodCBiZXR3ZWVuIGlubmVyIG91dGVyIGpvaW4gYWxsIGFueSBzb21lIGNyb3NzIHVucGl2b3QgcGl2b3QgZXhpc3RzXCIpLFxuICAgIG9wZXJhdG9yQ2hhcnM6IC9eWyorXFwtJTw+IT1eXFwmfFxcL10vLFxuICAgIGJyYWNrZXRzOiAvXltcXHt9XFwoXFwpXS8sXG4gICAgcHVuY3R1YXRpb246IC9eWzsuLDovXS8sXG4gICAgYmFja3NsYXNoU3RyaW5nRXNjYXBlczogZmFsc2UsXG4gICAgZGF0ZVNRTDogc2V0KFwiZGF0ZSBkYXRldGltZW9mZnNldCBkYXRldGltZTIgc21hbGxkYXRldGltZSBkYXRldGltZSB0aW1lXCIpLFxuICAgIGhvb2tzOiB7XG4gICAgICBcIkBcIjogICBob29rVmFyXG4gICAgfVxuICB9KTtcblxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtbXlzcWxcIiwge1xuICAgIG5hbWU6IFwic3FsXCIsXG4gICAgY2xpZW50OiBzZXQoXCJjaGFyc2V0IGNsZWFyIGNvbm5lY3QgZWRpdCBlZ28gZXhpdCBnbyBoZWxwIG5vcGFnZXIgbm90ZWUgbm93YXJuaW5nIHBhZ2VyIHByaW50IHByb21wdCBxdWl0IHJlaGFzaCBzb3VyY2Ugc3RhdHVzIHN5c3RlbSB0ZWVcIiksXG4gICAga2V5d29yZHM6IHNldChzcWxLZXl3b3JkcyArIFwiYWNjZXNzaWJsZSBhY3Rpb24gYWRkIGFmdGVyIGFsZ29yaXRobSBhbGwgYW5hbHl6ZSBhc2Vuc2l0aXZlIGF0IGF1dGhvcnMgYXV0b19pbmNyZW1lbnQgYXV0b2NvbW1pdCBhdmcgYXZnX3Jvd19sZW5ndGggYmVmb3JlIGJpbmFyeSBiaW5sb2cgYm90aCBidHJlZSBjYWNoZSBjYWxsIGNhc2NhZGUgY2FzY2FkZWQgY2FzZSBjYXRhbG9nX25hbWUgY2hhaW4gY2hhbmdlIGNoYW5nZWQgY2hhcmFjdGVyIGNoZWNrIGNoZWNrcG9pbnQgY2hlY2tzdW0gY2xhc3Nfb3JpZ2luIGNsaWVudF9zdGF0aXN0aWNzIGNsb3NlIGNvYWxlc2NlIGNvZGUgY29sbGF0ZSBjb2xsYXRpb24gY29sbGF0aW9ucyBjb2x1bW4gY29sdW1ucyBjb21tZW50IGNvbW1pdCBjb21taXR0ZWQgY29tcGxldGlvbiBjb25jdXJyZW50IGNvbmRpdGlvbiBjb25uZWN0aW9uIGNvbnNpc3RlbnQgY29uc3RyYWludCBjb250YWlucyBjb250aW51ZSBjb250cmlidXRvcnMgY29udmVydCBjcm9zcyBjdXJyZW50IGN1cnJlbnRfZGF0ZSBjdXJyZW50X3RpbWUgY3VycmVudF90aW1lc3RhbXAgY3VycmVudF91c2VyIGN1cnNvciBkYXRhIGRhdGFiYXNlIGRhdGFiYXNlcyBkYXlfaG91ciBkYXlfbWljcm9zZWNvbmQgZGF5X21pbnV0ZSBkYXlfc2Vjb25kIGRlYWxsb2NhdGUgZGVjIGRlY2xhcmUgZGVmYXVsdCBkZWxheV9rZXlfd3JpdGUgZGVsYXllZCBkZWxpbWl0ZXIgZGVzX2tleV9maWxlIGRlc2NyaWJlIGRldGVybWluaXN0aWMgZGV2X3BvcCBkZXZfc2FtcCBkZXZpYW5jZSBkaWFnbm9zdGljcyBkaXJlY3RvcnkgZGlzYWJsZSBkaXNjYXJkIGRpc3RpbmN0cm93IGRpdiBkdWFsIGR1bXBmaWxlIGVhY2ggZWxzZWlmIGVuYWJsZSBlbmNsb3NlZCBlbmQgZW5kcyBlbmdpbmUgZW5naW5lcyBlbnVtIGVycm9ycyBlc2NhcGUgZXNjYXBlZCBldmVuIGV2ZW50IGV2ZW50cyBldmVyeSBleGVjdXRlIGV4aXN0cyBleGl0IGV4cGxhaW4gZXh0ZW5kZWQgZmFzdCBmZXRjaCBmaWVsZCBmaWVsZHMgZmlyc3QgZmx1c2ggZm9yIGZvcmNlIGZvcmVpZ24gZm91bmRfcm93cyBmdWxsIGZ1bGx0ZXh0IGZ1bmN0aW9uIGdlbmVyYWwgZ2V0IGdsb2JhbCBncmFudCBncmFudHMgZ3JvdXAgZ3JvdXBfY29uY2F0IGhhbmRsZXIgaGFzaCBoZWxwIGhpZ2hfcHJpb3JpdHkgaG9zdHMgaG91cl9taWNyb3NlY29uZCBob3VyX21pbnV0ZSBob3VyX3NlY29uZCBpZiBpZ25vcmUgaWdub3JlX3NlcnZlcl9pZHMgaW1wb3J0IGluZGV4IGluZGV4X3N0YXRpc3RpY3MgaW5maWxlIGlubmVyIGlubm9kYiBpbm91dCBpbnNlbnNpdGl2ZSBpbnNlcnRfbWV0aG9kIGluc3RhbGwgaW50ZXJ2YWwgaW52b2tlciBpc29sYXRpb24gaXRlcmF0ZSBrZXkga2V5cyBraWxsIGxhbmd1YWdlIGxhc3QgbGVhZGluZyBsZWF2ZSBsZWZ0IGxldmVsIGxpbWl0IGxpbmVhciBsaW5lcyBsaXN0IGxvYWQgbG9jYWwgbG9jYWx0aW1lIGxvY2FsdGltZXN0YW1wIGxvY2sgbG9ncyBsb3dfcHJpb3JpdHkgbWFzdGVyIG1hc3Rlcl9oZWFydGJlYXRfcGVyaW9kIG1hc3Rlcl9zc2xfdmVyaWZ5X3NlcnZlcl9jZXJ0IG1hc3RlcnMgbWF0Y2ggbWF4IG1heF9yb3dzIG1heHZhbHVlIG1lc3NhZ2VfdGV4dCBtaWRkbGVpbnQgbWlncmF0ZSBtaW4gbWluX3Jvd3MgbWludXRlX21pY3Jvc2Vjb25kIG1pbnV0ZV9zZWNvbmQgbW9kIG1vZGUgbW9kaWZpZXMgbW9kaWZ5IG11dGV4IG15c3FsX2Vycm5vIG5hdHVyYWwgbmV4dCBubyBub193cml0ZV90b19iaW5sb2cgb2ZmbGluZSBvZmZzZXQgb25lIG9ubGluZSBvcGVuIG9wdGltaXplIG9wdGlvbiBvcHRpb25hbGx5IG91dCBvdXRlciBvdXRmaWxlIHBhY2tfa2V5cyBwYXJzZXIgcGFydGl0aW9uIHBhcnRpdGlvbnMgcGFzc3dvcmQgcGhhc2UgcGx1Z2luIHBsdWdpbnMgcHJlcGFyZSBwcmVzZXJ2ZSBwcmV2IHByaW1hcnkgcHJpdmlsZWdlcyBwcm9jZWR1cmUgcHJvY2Vzc2xpc3QgcHJvZmlsZSBwcm9maWxlcyBwdXJnZSBxdWVyeSBxdWljayByYW5nZSByZWFkIHJlYWRfd3JpdGUgcmVhZHMgcmVhbCByZWJ1aWxkIHJlY292ZXIgcmVmZXJlbmNlcyByZWdleHAgcmVsYXlsb2cgcmVsZWFzZSByZW1vdmUgcmVuYW1lIHJlb3JnYW5pemUgcmVwYWlyIHJlcGVhdGFibGUgcmVwbGFjZSByZXF1aXJlIHJlc2lnbmFsIHJlc3RyaWN0IHJlc3VtZSByZXR1cm4gcmV0dXJucyByZXZva2UgcmlnaHQgcmxpa2Ugcm9sbGJhY2sgcm9sbHVwIHJvdyByb3dfZm9ybWF0IHJ0cmVlIHNhdmVwb2ludCBzY2hlZHVsZSBzY2hlbWEgc2NoZW1hX25hbWUgc2NoZW1hcyBzZWNvbmRfbWljcm9zZWNvbmQgc2VjdXJpdHkgc2Vuc2l0aXZlIHNlcGFyYXRvciBzZXJpYWxpemFibGUgc2VydmVyIHNlc3Npb24gc2hhcmUgc2hvdyBzaWduYWwgc2xhdmUgc2xvdyBzbWFsbGludCBzbmFwc2hvdCBzb25hbWUgc3BhdGlhbCBzcGVjaWZpYyBzcWwgc3FsX2JpZ19yZXN1bHQgc3FsX2J1ZmZlcl9yZXN1bHQgc3FsX2NhY2hlIHNxbF9jYWxjX2ZvdW5kX3Jvd3Mgc3FsX25vX2NhY2hlIHNxbF9zbWFsbF9yZXN1bHQgc3FsZXhjZXB0aW9uIHNxbHN0YXRlIHNxbHdhcm5pbmcgc3NsIHN0YXJ0IHN0YXJ0aW5nIHN0YXJ0cyBzdGF0dXMgc3RkIHN0ZGRldiBzdGRkZXZfcG9wIHN0ZGRldl9zYW1wIHN0b3JhZ2Ugc3RyYWlnaHRfam9pbiBzdWJjbGFzc19vcmlnaW4gc3VtIHN1c3BlbmQgdGFibGVfbmFtZSB0YWJsZV9zdGF0aXN0aWNzIHRhYmxlcyB0YWJsZXNwYWNlIHRlbXBvcmFyeSB0ZXJtaW5hdGVkIHRvIHRyYWlsaW5nIHRyYW5zYWN0aW9uIHRyaWdnZXIgdHJpZ2dlcnMgdHJ1bmNhdGUgdW5jb21taXR0ZWQgdW5kbyB1bmluc3RhbGwgdW5pcXVlIHVubG9jayB1cGdyYWRlIHVzYWdlIHVzZSB1c2VfZnJtIHVzZXIgdXNlcl9yZXNvdXJjZXMgdXNlcl9zdGF0aXN0aWNzIHVzaW5nIHV0Y19kYXRlIHV0Y190aW1lIHV0Y190aW1lc3RhbXAgdmFsdWUgdmFyaWFibGVzIHZhcnlpbmcgdmlldyB2aWV3cyB3YXJuaW5ncyB3aGVuIHdoaWxlIHdpdGggd29yayB3cml0ZSB4YSB4b3IgeWVhcl9tb250aCB6ZXJvZmlsbCBiZWdpbiBkbyB0aGVuIGVsc2UgbG9vcCByZXBlYXRcIiksXG4gICAgYnVpbHRpbjogc2V0KFwiYm9vbCBib29sZWFuIGJpdCBibG9iIGRlY2ltYWwgZG91YmxlIGZsb2F0IGxvbmcgbG9uZ2Jsb2IgbG9uZ3RleHQgbWVkaXVtIG1lZGl1bWJsb2IgbWVkaXVtaW50IG1lZGl1bXRleHQgdGltZSB0aW1lc3RhbXAgdGlueWJsb2IgdGlueWludCB0aW55dGV4dCB0ZXh0IGJpZ2ludCBpbnQgaW50MSBpbnQyIGludDMgaW50NCBpbnQ4IGludGVnZXIgZmxvYXQgZmxvYXQ0IGZsb2F0OCBkb3VibGUgY2hhciB2YXJiaW5hcnkgdmFyY2hhciB2YXJjaGFyYWN0ZXIgcHJlY2lzaW9uIGRhdGUgZGF0ZXRpbWUgeWVhciB1bnNpZ25lZCBzaWduZWQgbnVtZXJpY1wiKSxcbiAgICBhdG9tczogc2V0KFwiZmFsc2UgdHJ1ZSBudWxsIHVua25vd25cIiksXG4gICAgb3BlcmF0b3JDaGFyczogL15bKitcXC0lPD4hPSZ8Xl0vLFxuICAgIGRhdGVTUUw6IHNldChcImRhdGUgdGltZSB0aW1lc3RhbXBcIiksXG4gICAgc3VwcG9ydDogc2V0KFwiT0RCQ2RvdFRhYmxlIGRlY2ltYWxsZXNzRmxvYXQgemVyb2xlc3NGbG9hdCBiaW5hcnlOdW1iZXIgaGV4TnVtYmVyIGRvdWJsZVF1b3RlIG5DaGFyQ2FzdCBjaGFyc2V0Q2FzdCBjb21tZW50SGFzaCBjb21tZW50U3BhY2VSZXF1aXJlZFwiKSxcbiAgICBob29rczoge1xuICAgICAgXCJAXCI6ICAgaG9va1ZhcixcbiAgICAgIFwiYFwiOiAgIGhvb2tJZGVudGlmaWVyLFxuICAgICAgXCJcXFxcXCI6ICBob29rQ2xpZW50XG4gICAgfVxuICB9KTtcblxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtbWFyaWFkYlwiLCB7XG4gICAgbmFtZTogXCJzcWxcIixcbiAgICBjbGllbnQ6IHNldChcImNoYXJzZXQgY2xlYXIgY29ubmVjdCBlZGl0IGVnbyBleGl0IGdvIGhlbHAgbm9wYWdlciBub3RlZSBub3dhcm5pbmcgcGFnZXIgcHJpbnQgcHJvbXB0IHF1aXQgcmVoYXNoIHNvdXJjZSBzdGF0dXMgc3lzdGVtIHRlZVwiKSxcbiAgICBrZXl3b3Jkczogc2V0KHNxbEtleXdvcmRzICsgXCJhY2Nlc3NpYmxlIGFjdGlvbiBhZGQgYWZ0ZXIgYWxnb3JpdGhtIGFsbCBhbHdheXMgYW5hbHl6ZSBhc2Vuc2l0aXZlIGF0IGF1dGhvcnMgYXV0b19pbmNyZW1lbnQgYXV0b2NvbW1pdCBhdmcgYXZnX3Jvd19sZW5ndGggYmVmb3JlIGJpbmFyeSBiaW5sb2cgYm90aCBidHJlZSBjYWNoZSBjYWxsIGNhc2NhZGUgY2FzY2FkZWQgY2FzZSBjYXRhbG9nX25hbWUgY2hhaW4gY2hhbmdlIGNoYW5nZWQgY2hhcmFjdGVyIGNoZWNrIGNoZWNrcG9pbnQgY2hlY2tzdW0gY2xhc3Nfb3JpZ2luIGNsaWVudF9zdGF0aXN0aWNzIGNsb3NlIGNvYWxlc2NlIGNvZGUgY29sbGF0ZSBjb2xsYXRpb24gY29sbGF0aW9ucyBjb2x1bW4gY29sdW1ucyBjb21tZW50IGNvbW1pdCBjb21taXR0ZWQgY29tcGxldGlvbiBjb25jdXJyZW50IGNvbmRpdGlvbiBjb25uZWN0aW9uIGNvbnNpc3RlbnQgY29uc3RyYWludCBjb250YWlucyBjb250aW51ZSBjb250cmlidXRvcnMgY29udmVydCBjcm9zcyBjdXJyZW50IGN1cnJlbnRfZGF0ZSBjdXJyZW50X3RpbWUgY3VycmVudF90aW1lc3RhbXAgY3VycmVudF91c2VyIGN1cnNvciBkYXRhIGRhdGFiYXNlIGRhdGFiYXNlcyBkYXlfaG91ciBkYXlfbWljcm9zZWNvbmQgZGF5X21pbnV0ZSBkYXlfc2Vjb25kIGRlYWxsb2NhdGUgZGVjIGRlY2xhcmUgZGVmYXVsdCBkZWxheV9rZXlfd3JpdGUgZGVsYXllZCBkZWxpbWl0ZXIgZGVzX2tleV9maWxlIGRlc2NyaWJlIGRldGVybWluaXN0aWMgZGV2X3BvcCBkZXZfc2FtcCBkZXZpYW5jZSBkaWFnbm9zdGljcyBkaXJlY3RvcnkgZGlzYWJsZSBkaXNjYXJkIGRpc3RpbmN0cm93IGRpdiBkdWFsIGR1bXBmaWxlIGVhY2ggZWxzZWlmIGVuYWJsZSBlbmNsb3NlZCBlbmQgZW5kcyBlbmdpbmUgZW5naW5lcyBlbnVtIGVycm9ycyBlc2NhcGUgZXNjYXBlZCBldmVuIGV2ZW50IGV2ZW50cyBldmVyeSBleGVjdXRlIGV4aXN0cyBleGl0IGV4cGxhaW4gZXh0ZW5kZWQgZmFzdCBmZXRjaCBmaWVsZCBmaWVsZHMgZmlyc3QgZmx1c2ggZm9yIGZvcmNlIGZvcmVpZ24gZm91bmRfcm93cyBmdWxsIGZ1bGx0ZXh0IGZ1bmN0aW9uIGdlbmVyYWwgZ2VuZXJhdGVkIGdldCBnbG9iYWwgZ3JhbnQgZ3JhbnRzIGdyb3VwIGdyb3VwYnlfY29uY2F0IGhhbmRsZXIgaGFyZCBoYXNoIGhlbHAgaGlnaF9wcmlvcml0eSBob3N0cyBob3VyX21pY3Jvc2Vjb25kIGhvdXJfbWludXRlIGhvdXJfc2Vjb25kIGlmIGlnbm9yZSBpZ25vcmVfc2VydmVyX2lkcyBpbXBvcnQgaW5kZXggaW5kZXhfc3RhdGlzdGljcyBpbmZpbGUgaW5uZXIgaW5ub2RiIGlub3V0IGluc2Vuc2l0aXZlIGluc2VydF9tZXRob2QgaW5zdGFsbCBpbnRlcnZhbCBpbnZva2VyIGlzb2xhdGlvbiBpdGVyYXRlIGtleSBrZXlzIGtpbGwgbGFuZ3VhZ2UgbGFzdCBsZWFkaW5nIGxlYXZlIGxlZnQgbGV2ZWwgbGltaXQgbGluZWFyIGxpbmVzIGxpc3QgbG9hZCBsb2NhbCBsb2NhbHRpbWUgbG9jYWx0aW1lc3RhbXAgbG9jayBsb2dzIGxvd19wcmlvcml0eSBtYXN0ZXIgbWFzdGVyX2hlYXJ0YmVhdF9wZXJpb2QgbWFzdGVyX3NzbF92ZXJpZnlfc2VydmVyX2NlcnQgbWFzdGVycyBtYXRjaCBtYXggbWF4X3Jvd3MgbWF4dmFsdWUgbWVzc2FnZV90ZXh0IG1pZGRsZWludCBtaWdyYXRlIG1pbiBtaW5fcm93cyBtaW51dGVfbWljcm9zZWNvbmQgbWludXRlX3NlY29uZCBtb2QgbW9kZSBtb2RpZmllcyBtb2RpZnkgbXV0ZXggbXlzcWxfZXJybm8gbmF0dXJhbCBuZXh0IG5vIG5vX3dyaXRlX3RvX2JpbmxvZyBvZmZsaW5lIG9mZnNldCBvbmUgb25saW5lIG9wZW4gb3B0aW1pemUgb3B0aW9uIG9wdGlvbmFsbHkgb3V0IG91dGVyIG91dGZpbGUgcGFja19rZXlzIHBhcnNlciBwYXJ0aXRpb24gcGFydGl0aW9ucyBwYXNzd29yZCBwZXJzaXN0ZW50IHBoYXNlIHBsdWdpbiBwbHVnaW5zIHByZXBhcmUgcHJlc2VydmUgcHJldiBwcmltYXJ5IHByaXZpbGVnZXMgcHJvY2VkdXJlIHByb2Nlc3NsaXN0IHByb2ZpbGUgcHJvZmlsZXMgcHVyZ2UgcXVlcnkgcXVpY2sgcmFuZ2UgcmVhZCByZWFkX3dyaXRlIHJlYWRzIHJlYWwgcmVidWlsZCByZWNvdmVyIHJlZmVyZW5jZXMgcmVnZXhwIHJlbGF5bG9nIHJlbGVhc2UgcmVtb3ZlIHJlbmFtZSByZW9yZ2FuaXplIHJlcGFpciByZXBlYXRhYmxlIHJlcGxhY2UgcmVxdWlyZSByZXNpZ25hbCByZXN0cmljdCByZXN1bWUgcmV0dXJuIHJldHVybnMgcmV2b2tlIHJpZ2h0IHJsaWtlIHJvbGxiYWNrIHJvbGx1cCByb3cgcm93X2Zvcm1hdCBydHJlZSBzYXZlcG9pbnQgc2NoZWR1bGUgc2NoZW1hIHNjaGVtYV9uYW1lIHNjaGVtYXMgc2Vjb25kX21pY3Jvc2Vjb25kIHNlY3VyaXR5IHNlbnNpdGl2ZSBzZXBhcmF0b3Igc2VyaWFsaXphYmxlIHNlcnZlciBzZXNzaW9uIHNoYXJlIHNob3cgc2h1dGRvd24gc2lnbmFsIHNsYXZlIHNsb3cgc21hbGxpbnQgc25hcHNob3Qgc29mdCBzb25hbWUgc3BhdGlhbCBzcGVjaWZpYyBzcWwgc3FsX2JpZ19yZXN1bHQgc3FsX2J1ZmZlcl9yZXN1bHQgc3FsX2NhY2hlIHNxbF9jYWxjX2ZvdW5kX3Jvd3Mgc3FsX25vX2NhY2hlIHNxbF9zbWFsbF9yZXN1bHQgc3FsZXhjZXB0aW9uIHNxbHN0YXRlIHNxbHdhcm5pbmcgc3NsIHN0YXJ0IHN0YXJ0aW5nIHN0YXJ0cyBzdGF0dXMgc3RkIHN0ZGRldiBzdGRkZXZfcG9wIHN0ZGRldl9zYW1wIHN0b3JhZ2Ugc3RyYWlnaHRfam9pbiBzdWJjbGFzc19vcmlnaW4gc3VtIHN1c3BlbmQgdGFibGVfbmFtZSB0YWJsZV9zdGF0aXN0aWNzIHRhYmxlcyB0YWJsZXNwYWNlIHRlbXBvcmFyeSB0ZXJtaW5hdGVkIHRvIHRyYWlsaW5nIHRyYW5zYWN0aW9uIHRyaWdnZXIgdHJpZ2dlcnMgdHJ1bmNhdGUgdW5jb21taXR0ZWQgdW5kbyB1bmluc3RhbGwgdW5pcXVlIHVubG9jayB1cGdyYWRlIHVzYWdlIHVzZSB1c2VfZnJtIHVzZXIgdXNlcl9yZXNvdXJjZXMgdXNlcl9zdGF0aXN0aWNzIHVzaW5nIHV0Y19kYXRlIHV0Y190aW1lIHV0Y190aW1lc3RhbXAgdmFsdWUgdmFyaWFibGVzIHZhcnlpbmcgdmlldyB2aWV3cyB2aXJ0dWFsIHdhcm5pbmdzIHdoZW4gd2hpbGUgd2l0aCB3b3JrIHdyaXRlIHhhIHhvciB5ZWFyX21vbnRoIHplcm9maWxsIGJlZ2luIGRvIHRoZW4gZWxzZSBsb29wIHJlcGVhdFwiKSxcbiAgICBidWlsdGluOiBzZXQoXCJib29sIGJvb2xlYW4gYml0IGJsb2IgZGVjaW1hbCBkb3VibGUgZmxvYXQgbG9uZyBsb25nYmxvYiBsb25ndGV4dCBtZWRpdW0gbWVkaXVtYmxvYiBtZWRpdW1pbnQgbWVkaXVtdGV4dCB0aW1lIHRpbWVzdGFtcCB0aW55YmxvYiB0aW55aW50IHRpbnl0ZXh0IHRleHQgYmlnaW50IGludCBpbnQxIGludDIgaW50MyBpbnQ0IGludDggaW50ZWdlciBmbG9hdCBmbG9hdDQgZmxvYXQ4IGRvdWJsZSBjaGFyIHZhcmJpbmFyeSB2YXJjaGFyIHZhcmNoYXJhY3RlciBwcmVjaXNpb24gZGF0ZSBkYXRldGltZSB5ZWFyIHVuc2lnbmVkIHNpZ25lZCBudW1lcmljXCIpLFxuICAgIGF0b21zOiBzZXQoXCJmYWxzZSB0cnVlIG51bGwgdW5rbm93blwiKSxcbiAgICBvcGVyYXRvckNoYXJzOiAvXlsqK1xcLSU8PiE9JnxeXS8sXG4gICAgZGF0ZVNRTDogc2V0KFwiZGF0ZSB0aW1lIHRpbWVzdGFtcFwiKSxcbiAgICBzdXBwb3J0OiBzZXQoXCJPREJDZG90VGFibGUgZGVjaW1hbGxlc3NGbG9hdCB6ZXJvbGVzc0Zsb2F0IGJpbmFyeU51bWJlciBoZXhOdW1iZXIgZG91YmxlUXVvdGUgbkNoYXJDYXN0IGNoYXJzZXRDYXN0IGNvbW1lbnRIYXNoIGNvbW1lbnRTcGFjZVJlcXVpcmVkXCIpLFxuICAgIGhvb2tzOiB7XG4gICAgICBcIkBcIjogICBob29rVmFyLFxuICAgICAgXCJgXCI6ICAgaG9va0lkZW50aWZpZXIsXG4gICAgICBcIlxcXFxcIjogIGhvb2tDbGllbnRcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3ZpZGVkIGJ5IHRoZSBwaHBMaXRlQWRtaW4gcHJvamVjdCAtIHBocGxpdGVhZG1pbi5vcmdcbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXNxbGl0ZVwiLCB7XG4gICAgbmFtZTogXCJzcWxcIixcbiAgICAvLyBjb21tYW5kcyBvZiB0aGUgb2ZmaWNpYWwgU1FMaXRlIGNsaWVudCwgcmVmOiBodHRwczovL3d3dy5zcWxpdGUub3JnL2NsaS5odG1sI2RvdGNtZFxuICAgIGNsaWVudDogc2V0KFwiYXV0aCBiYWNrdXAgYmFpbCBiaW5hcnkgY2hhbmdlcyBjaGVjayBjbG9uZSBkYXRhYmFzZXMgZGJpbmZvIGR1bXAgZWNobyBlcXAgZXhpdCBleHBsYWluIGZ1bGxzY2hlbWEgaGVhZGVycyBoZWxwIGltcG9ydCBpbXBvc3RlciBpbmRleGVzIGlvdHJhY2UgbGltaXQgbGludCBsb2FkIGxvZyBtb2RlIG51bGx2YWx1ZSBvbmNlIG9wZW4gb3V0cHV0IHByaW50IHByb21wdCBxdWl0IHJlYWQgcmVzdG9yZSBzYXZlIHNjYW5zdGF0cyBzY2hlbWEgc2VwYXJhdG9yIHNlc3Npb24gc2hlbGwgc2hvdyBzdGF0cyBzeXN0ZW0gdGFibGVzIHRlc3RjYXNlIHRpbWVvdXQgdGltZXIgdHJhY2UgdmZzaW5mbyB2ZnNsaXN0IHZmc25hbWUgd2lkdGhcIiksXG4gICAgLy8gcmVmOiBodHRwOi8vc3FsaXRlLm9yZy9sYW5nX2tleXdvcmRzLmh0bWxcbiAgICBrZXl3b3Jkczogc2V0KHNxbEtleXdvcmRzICsgXCJhYm9ydCBhY3Rpb24gYWRkIGFmdGVyIGFsbCBhbmFseXplIGF0dGFjaCBhdXRvaW5jcmVtZW50IGJlZm9yZSBiZWdpbiBjYXNjYWRlIGNhc2UgY2FzdCBjaGVjayBjb2xsYXRlIGNvbHVtbiBjb21taXQgY29uZmxpY3QgY29uc3RyYWludCBjcm9zcyBjdXJyZW50X2RhdGUgY3VycmVudF90aW1lIGN1cnJlbnRfdGltZXN0YW1wIGRhdGFiYXNlIGRlZmF1bHQgZGVmZXJyYWJsZSBkZWZlcnJlZCBkZXRhY2ggZWFjaCBlbHNlIGVuZCBlc2NhcGUgZXhjZXB0IGV4Y2x1c2l2ZSBleGlzdHMgZXhwbGFpbiBmYWlsIGZvciBmb3JlaWduIGZ1bGwgZ2xvYiBpZiBpZ25vcmUgaW1tZWRpYXRlIGluZGV4IGluZGV4ZWQgaW5pdGlhbGx5IGlubmVyIGluc3RlYWQgaW50ZXJzZWN0IGlzbnVsbCBrZXkgbGVmdCBsaW1pdCBtYXRjaCBuYXR1cmFsIG5vIG5vdG51bGwgbnVsbCBvZiBvZmZzZXQgb3V0ZXIgcGxhbiBwcmFnbWEgcHJpbWFyeSBxdWVyeSByYWlzZSByZWN1cnNpdmUgcmVmZXJlbmNlcyByZWdleHAgcmVpbmRleCByZWxlYXNlIHJlbmFtZSByZXBsYWNlIHJlc3RyaWN0IHJpZ2h0IHJvbGxiYWNrIHJvdyBzYXZlcG9pbnQgdGVtcCB0ZW1wb3JhcnkgdGhlbiB0byB0cmFuc2FjdGlvbiB0cmlnZ2VyIHVuaXF1ZSB1c2luZyB2YWN1dW0gdmlldyB2aXJ0dWFsIHdoZW4gd2l0aCB3aXRob3V0XCIpLFxuICAgIC8vIFNRTGl0ZSBpcyB3ZWFrbHkgdHlwZWQsIHJlZjogaHR0cDovL3NxbGl0ZS5vcmcvZGF0YXR5cGUzLmh0bWwuIFRoaXMgaXMganVzdCBhIGxpc3Qgb2Ygc29tZSBjb21tb24gdHlwZXMuXG4gICAgYnVpbHRpbjogc2V0KFwiYm9vbCBib29sZWFuIGJpdCBibG9iIGRlY2ltYWwgZG91YmxlIGZsb2F0IGxvbmcgbG9uZ2Jsb2IgbG9uZ3RleHQgbWVkaXVtIG1lZGl1bWJsb2IgbWVkaXVtaW50IG1lZGl1bXRleHQgdGltZSB0aW1lc3RhbXAgdGlueWJsb2IgdGlueWludCB0aW55dGV4dCB0ZXh0IGNsb2IgYmlnaW50IGludCBpbnQyIGludDggaW50ZWdlciBmbG9hdCBkb3VibGUgY2hhciB2YXJjaGFyIGRhdGUgZGF0ZXRpbWUgeWVhciB1bnNpZ25lZCBzaWduZWQgbnVtZXJpYyByZWFsXCIpLFxuICAgIC8vIHJlZjogaHR0cDovL3NxbGl0ZS5vcmcvc3ludGF4L2xpdGVyYWwtdmFsdWUuaHRtbFxuICAgIGF0b21zOiBzZXQoXCJudWxsIGN1cnJlbnRfZGF0ZSBjdXJyZW50X3RpbWUgY3VycmVudF90aW1lc3RhbXBcIiksXG4gICAgLy8gcmVmOiBodHRwOi8vc3FsaXRlLm9yZy9sYW5nX2V4cHIuaHRtbCNiaW5hcnlvcHNcbiAgICBvcGVyYXRvckNoYXJzOiAvXlsqK1xcLSU8PiE9Jnwvfl0vLFxuICAgIC8vIFNRTGl0ZSBpcyB3ZWFrbHkgdHlwZWQsIHJlZjogaHR0cDovL3NxbGl0ZS5vcmcvZGF0YXR5cGUzLmh0bWwuIFRoaXMgaXMganVzdCBhIGxpc3Qgb2Ygc29tZSBjb21tb24gdHlwZXMuXG4gICAgZGF0ZVNRTDogc2V0KFwiZGF0ZSB0aW1lIHRpbWVzdGFtcCBkYXRldGltZVwiKSxcbiAgICBzdXBwb3J0OiBzZXQoXCJkZWNpbWFsbGVzc0Zsb2F0IHplcm9sZXNzRmxvYXRcIiksXG4gICAgaWRlbnRpZmllclF1b3RlOiBcIlxcXCJcIiwgIC8vcmVmOiBodHRwOi8vc3FsaXRlLm9yZy9sYW5nX2tleXdvcmRzLmh0bWxcbiAgICBob29rczoge1xuICAgICAgLy8gYmluZC1wYXJhbWV0ZXJzIHJlZjpodHRwOi8vc3FsaXRlLm9yZy9sYW5nX2V4cHIuaHRtbCN2YXJwYXJhbVxuICAgICAgXCJAXCI6ICAgaG9va1ZhcixcbiAgICAgIFwiOlwiOiAgIGhvb2tWYXIsXG4gICAgICBcIj9cIjogICBob29rVmFyLFxuICAgICAgXCIkXCI6ICAgaG9va1ZhcixcbiAgICAgIC8vIFRoZSBwcmVmZXJyZWQgd2F5IHRvIGVzY2FwZSBJZGVudGlmaWVycyBpcyB1c2luZyBkb3VibGUgcXVvdGVzLCByZWY6IGh0dHA6Ly9zcWxpdGUub3JnL2xhbmdfa2V5d29yZHMuaHRtbFxuICAgICAgXCJcXFwiXCI6ICAgaG9va0lkZW50aWZpZXJEb3VibGVxdW90ZSxcbiAgICAgIC8vIHRoZXJlIGlzIGFsc28gc3VwcG9ydCBmb3IgYmFja3RpY3MsIHJlZjogaHR0cDovL3NxbGl0ZS5vcmcvbGFuZ19rZXl3b3Jkcy5odG1sXG4gICAgICBcImBcIjogICBob29rSWRlbnRpZmllclxuICAgIH1cbiAgfSk7XG5cbiAgLy8gdGhlIHF1ZXJ5IGxhbmd1YWdlIHVzZWQgYnkgQXBhY2hlIENhc3NhbmRyYSBpcyBjYWxsZWQgQ1FMLCBidXQgdGhpcyBtaW1lIHR5cGVcbiAgLy8gaXMgY2FsbGVkIENhc3NhbmRyYSB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBDb250ZXh0dWFsIFF1ZXJ5IExhbmd1YWdlXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1jYXNzYW5kcmFcIiwge1xuICAgIG5hbWU6IFwic3FsXCIsXG4gICAgY2xpZW50OiB7IH0sXG4gICAga2V5d29yZHM6IHNldChcImFkZCBhbGwgYWxsb3cgYWx0ZXIgYW5kIGFueSBhcHBseSBhcyBhc2MgYXV0aG9yaXplIGJhdGNoIGJlZ2luIGJ5IGNsdXN0ZXJpbmcgY29sdW1uZmFtaWx5IGNvbXBhY3QgY29uc2lzdGVuY3kgY291bnQgY3JlYXRlIGN1c3RvbSBkZWxldGUgZGVzYyBkaXN0aW5jdCBkcm9wIGVhY2hfcXVvcnVtIGV4aXN0cyBmaWx0ZXJpbmcgZnJvbSBncmFudCBpZiBpbiBpbmRleCBpbnNlcnQgaW50byBrZXkga2V5c3BhY2Uga2V5c3BhY2VzIGxldmVsIGxpbWl0IGxvY2FsX29uZSBsb2NhbF9xdW9ydW0gbW9kaWZ5IG5hbiBub3JlY3Vyc2l2ZSBub3N1cGVydXNlciBub3Qgb2Ygb24gb25lIG9yZGVyIHBhc3N3b3JkIHBlcm1pc3Npb24gcGVybWlzc2lvbnMgcHJpbWFyeSBxdW9ydW0gcmVuYW1lIHJldm9rZSBzY2hlbWEgc2VsZWN0IHNldCBzdG9yYWdlIHN1cGVydXNlciB0YWJsZSB0aHJlZSB0byB0b2tlbiB0cnVuY2F0ZSB0dGwgdHdvIHR5cGUgdW5sb2dnZWQgdXBkYXRlIHVzZSB1c2VyIHVzZXJzIHVzaW5nIHZhbHVlcyB3aGVyZSB3aXRoIHdyaXRldGltZVwiKSxcbiAgICBidWlsdGluOiBzZXQoXCJhc2NpaSBiaWdpbnQgYmxvYiBib29sZWFuIGNvdW50ZXIgZGVjaW1hbCBkb3VibGUgZmxvYXQgZnJvemVuIGluZXQgaW50IGxpc3QgbWFwIHN0YXRpYyB0ZXh0IHRpbWVzdGFtcCB0aW1ldXVpZCB0dXBsZSB1dWlkIHZhcmNoYXIgdmFyaW50XCIpLFxuICAgIGF0b21zOiBzZXQoXCJmYWxzZSB0cnVlIGluZmluaXR5IE5hTlwiKSxcbiAgICBvcGVyYXRvckNoYXJzOiAvXls8Pj1dLyxcbiAgICBkYXRlU1FMOiB7IH0sXG4gICAgc3VwcG9ydDogc2V0KFwiY29tbWVudFNsYXNoU2xhc2ggZGVjaW1hbGxlc3NGbG9hdFwiKSxcbiAgICBob29rczogeyB9XG4gIH0pO1xuXG4gIC8vIHRoaXMgaXMgYmFzZWQgb24gUGV0ZXIgUmFnYW5pdHNjaCdzICdwbHNxbCcgbW9kZVxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtcGxzcWxcIiwge1xuICAgIG5hbWU6ICAgICAgIFwic3FsXCIsXG4gICAgY2xpZW50OiAgICAgc2V0KFwiYXBwaW5mbyBhcnJheXNpemUgYXV0b2NvbW1pdCBhdXRvcHJpbnQgYXV0b3JlY292ZXJ5IGF1dG90cmFjZSBibG9ja3Rlcm1pbmF0b3IgYnJlYWsgYnRpdGxlIGNtZHNlcCBjb2xzZXAgY29tcGF0aWJpbGl0eSBjb21wdXRlIGNvbmNhdCBjb3B5Y29tbWl0IGNvcHl0eXBlY2hlY2sgZGVmaW5lIGRlc2NyaWJlIGVjaG8gZWRpdGZpbGUgZW1iZWRkZWQgZXNjYXBlIGV4ZWMgZXhlY3V0ZSBmZWVkYmFjayBmbGFnZ2VyIGZsdXNoIGhlYWRpbmcgaGVhZHNlcCBpbnN0YW5jZSBsaW5lc2l6ZSBsbm8gbG9ib2Zmc2V0IGxvZ3NvdXJjZSBsb25nIGxvbmdjaHVua3NpemUgbWFya3VwIG5hdGl2ZSBuZXdwYWdlIG51bWZvcm1hdCBudW13aWR0aCBwYWdlc2l6ZSBwYXVzZSBwbm8gcmVjc2VwIHJlY3NlcGNoYXIgcmVsZWFzZSByZXBmb290ZXIgcmVwaGVhZGVyIHNlcnZlcm91dHB1dCBzaGlmdGlub3V0IHNob3cgc2hvd21vZGUgc2l6ZSBzcG9vbCBzcWxibGFua2xpbmVzIHNxbGNhc2Ugc3FsY29kZSBzcWxjb250aW51ZSBzcWxudW1iZXIgc3FscGx1c2NvbXBhdGliaWxpdHkgc3FscHJlZml4IHNxbHByb21wdCBzcWx0ZXJtaW5hdG9yIHN1ZmZpeCB0YWIgdGVybSB0ZXJtb3V0IHRpbWUgdGltaW5nIHRyaW1vdXQgdHJpbXNwb29sIHR0aXRsZSB1bmRlcmxpbmUgdmVyaWZ5IHZlcnNpb24gd3JhcFwiKSxcbiAgICBrZXl3b3JkczogICBzZXQoXCJhYm9ydCBhY2NlcHQgYWNjZXNzIGFkZCBhbGwgYWx0ZXIgYW5kIGFueSBhcnJheSBhcnJheWxlbiBhcyBhc2MgYXNzZXJ0IGFzc2lnbiBhdCBhdHRyaWJ1dGVzIGF1ZGl0IGF1dGhvcml6YXRpb24gYXZnIGJhc2VfdGFibGUgYmVnaW4gYmV0d2VlbiBiaW5hcnlfaW50ZWdlciBib2R5IGJvb2xlYW4gYnkgY2FzZSBjYXN0IGNoYXIgY2hhcl9iYXNlIGNoZWNrIGNsb3NlIGNsdXN0ZXIgY2x1c3RlcnMgY29sYXV0aCBjb2x1bW4gY29tbWVudCBjb21taXQgY29tcHJlc3MgY29ubmVjdCBjb25uZWN0ZWQgY29uc3RhbnQgY29uc3RyYWludCBjcmFzaCBjcmVhdGUgY3VycmVudCBjdXJydmFsIGN1cnNvciBkYXRhX2Jhc2UgZGF0YWJhc2UgZGF0ZSBkYmEgZGVhbGxvY2F0ZSBkZWJ1Z29mZiBkZWJ1Z29uIGRlY2ltYWwgZGVjbGFyZSBkZWZhdWx0IGRlZmluaXRpb24gZGVsYXkgZGVsZXRlIGRlc2MgZGlnaXRzIGRpc3Bvc2UgZGlzdGluY3QgZG8gZHJvcCBlbHNlIGVsc2VpZiBlbHNpZiBlbmFibGUgZW5kIGVudHJ5IGVzY2FwZSBleGNlcHRpb24gZXhjZXB0aW9uX2luaXQgZXhjaGFuZ2UgZXhjbHVzaXZlIGV4aXN0cyBleGl0IGV4dGVybmFsIGZhc3QgZmV0Y2ggZmlsZSBmb3IgZm9yY2UgZm9ybSBmcm9tIGZ1bmN0aW9uIGdlbmVyaWMgZ290byBncmFudCBncm91cCBoYXZpbmcgaWRlbnRpZmllZCBpZiBpbW1lZGlhdGUgaW4gaW5jcmVtZW50IGluZGV4IGluZGV4ZXMgaW5kaWNhdG9yIGluaXRpYWwgaW5pdHJhbnMgaW5zZXJ0IGludGVyZmFjZSBpbnRlcnNlY3QgaW50byBpcyBrZXkgbGV2ZWwgbGlicmFyeSBsaWtlIGxpbWl0ZWQgbG9jYWwgbG9jayBsb2cgbG9nZ2luZyBsb25nIGxvb3AgbWFzdGVyIG1heGV4dGVudHMgbWF4dHJhbnMgbWVtYmVyIG1pbmV4dGVudHMgbWludXMgbWlzbGFiZWwgbW9kZSBtb2RpZnkgbXVsdGlzZXQgbmV3IG5leHQgbm8gbm9hdWRpdCBub2NvbXByZXNzIG5vbG9nZ2luZyBub3BhcmFsbGVsIG5vdCBub3dhaXQgbnVtYmVyX2Jhc2Ugb2JqZWN0IG9mIG9mZiBvZmZsaW5lIG9uIG9ubGluZSBvbmx5IG9wZW4gb3B0aW9uIG9yIG9yZGVyIG91dCBwYWNrYWdlIHBhcmFsbGVsIHBhcnRpdGlvbiBwY3RmcmVlIHBjdGluY3JlYXNlIHBjdHVzZWQgcGxzX2ludGVnZXIgcG9zaXRpdmUgcG9zaXRpdmVuIHByYWdtYSBwcmltYXJ5IHByaW9yIHByaXZhdGUgcHJpdmlsZWdlcyBwcm9jZWR1cmUgcHVibGljIHJhaXNlIHJhbmdlIHJhdyByZWFkIHJlYnVpbGQgcmVjb3JkIHJlZiByZWZlcmVuY2VzIHJlZnJlc2ggcmVsZWFzZSByZW5hbWUgcmVwbGFjZSByZXNvdXJjZSByZXN0cmljdCByZXR1cm4gcmV0dXJuaW5nIHJldHVybnMgcmV2ZXJzZSByZXZva2Ugcm9sbGJhY2sgcm93IHJvd2lkIHJvd2xhYmVsIHJvd251bSByb3dzIHJ1biBzYXZlcG9pbnQgc2NoZW1hIHNlZ21lbnQgc2VsZWN0IHNlcGFyYXRlIHNlc3Npb24gc2V0IHNoYXJlIHNuYXBzaG90IHNvbWUgc3BhY2Ugc3BsaXQgc3FsIHN0YXJ0IHN0YXRlbWVudCBzdG9yYWdlIHN1YnR5cGUgc3VjY2Vzc2Z1bCBzeW5vbnltIHRhYmF1dGggdGFibGUgdGFibGVzIHRhYmxlc3BhY2UgdGFzayB0ZXJtaW5hdGUgdGhlbiB0byB0cmlnZ2VyIHRydW5jYXRlIHR5cGUgdW5pb24gdW5pcXVlIHVubGltaXRlZCB1bnJlY292ZXJhYmxlIHVudXNhYmxlIHVwZGF0ZSB1c2UgdXNpbmcgdmFsaWRhdGUgdmFsdWUgdmFsdWVzIHZhcmlhYmxlIHZpZXcgdmlld3Mgd2hlbiB3aGVuZXZlciB3aGVyZSB3aGlsZSB3aXRoIHdvcmtcIiksXG4gICAgYnVpbHRpbjogICAgc2V0KFwiYWJzIGFjb3MgYWRkX21vbnRocyBhc2NpaSBhc2luIGF0YW4gYXRhbjIgYXZlcmFnZSBiZmlsZSBiZmlsZW5hbWUgYmlnc2VyaWFsIGJpdCBibG9iIGNlaWwgY2hhcmFjdGVyIGNoYXJ0b3Jvd2lkIGNociBjbG9iIGNvbmNhdCBjb252ZXJ0IGNvcyBjb3NoIGNvdW50IGRlYyBkZWNvZGUgZGVyZWYgZHVhbCBkdW1wIGR1cF92YWxfb25faW5kZXggZW1wdHkgZXJyb3IgZXhwIGZhbHNlIGZsb2F0IGZsb29yIGZvdW5kIGdsYiBncmVhdGVzdCBoZXh0b3JhdyBpbml0Y2FwIGluc3RyIGluc3RyYiBpbnQgaW50ZWdlciBpc29wZW4gbGFzdF9kYXkgbGVhc3QgbGVuZ3RoIGxlbmd0aGIgbG4gbG93ZXIgbHBhZCBsdHJpbSBsdWIgbWFrZV9yZWYgbWF4IG1pbiBtbHNsYWJlbCBtb2QgbW9udGhzX2JldHdlZW4gbmF0dXJhbCBuYXR1cmFsbiBuY2hhciBuY2xvYiBuZXdfdGltZSBuZXh0X2RheSBuZXh0dmFsIG5sc19jaGFyc2V0X2RlY2xfbGVuIG5sc19jaGFyc2V0X2lkIG5sc19jaGFyc2V0X25hbWUgbmxzX2luaXRjYXAgbmxzX2xvd2VyIG5sc19zb3J0IG5sc191cHBlciBubHNzb3J0IG5vX2RhdGFfZm91bmQgbm90Zm91bmQgbnVsbCBudW1iZXIgbnVtZXJpYyBudmFyY2hhcjIgbnZsIG90aGVycyBwb3dlciByYXd0b2hleCByZWFsIHJlZnRvaGV4IHJvdW5kIHJvd2NvdW50IHJvd2lkdG9jaGFyIHJvd3R5cGUgcnBhZCBydHJpbSBzZXJpYWwgc2lnbiBzaWdudHlwZSBzaW4gc2luaCBzbWFsbGludCBzb3VuZGV4IHNxbGNvZGUgc3FsZXJybSBzcXJ0IHN0ZGRldiBzdHJpbmcgc3Vic3RyIHN1YnN0cmIgc3VtIHN5c2RhdGUgdGFuIHRhbmggdG9fY2hhciB0ZXh0IHRvX2RhdGUgdG9fbGFiZWwgdG9fbXVsdGlfYnl0ZSB0b19udW1iZXIgdG9fc2luZ2xlX2J5dGUgdHJhbnNsYXRlIHRydWUgdHJ1bmMgdWlkIHVubG9nZ2VkIHVwcGVyIHVzZXIgdXNlcmVudiB2YXJjaGFyIHZhcmNoYXIyIHZhcmlhbmNlIHZhcnlpbmcgdnNpemUgeG1sXCIpLFxuICAgIG9wZXJhdG9yQ2hhcnM6IC9eWypcXC8rXFwtJTw+IT1+XS8sXG4gICAgZGF0ZVNRTDogICAgc2V0KFwiZGF0ZSB0aW1lIHRpbWVzdGFtcFwiKSxcbiAgICBzdXBwb3J0OiAgICBzZXQoXCJkb3VibGVRdW90ZSBuQ2hhckNhc3QgemVyb2xlc3NGbG9hdCBiaW5hcnlOdW1iZXIgaGV4TnVtYmVyXCIpXG4gIH0pO1xuXG4gIC8vIENyZWF0ZWQgdG8gc3VwcG9ydCBzcGVjaWZpYyBoaXZlIGtleXdvcmRzXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1oaXZlXCIsIHtcbiAgICBuYW1lOiBcInNxbFwiLFxuICAgIGtleXdvcmRzOiBzZXQoXCJzZWxlY3QgYWx0ZXIgJGVsZW0kICRrZXkkICR2YWx1ZSQgYWRkIGFmdGVyIGFsbCBhbmFseXplIGFuZCBhcmNoaXZlIGFzIGFzYyBiZWZvcmUgYmV0d2VlbiBiaW5hcnkgYm90aCBidWNrZXQgYnVja2V0cyBieSBjYXNjYWRlIGNhc2UgY2FzdCBjaGFuZ2UgY2x1c3RlciBjbHVzdGVyZWQgY2x1c3RlcnN0YXR1cyBjb2xsZWN0aW9uIGNvbHVtbiBjb2x1bW5zIGNvbW1lbnQgY29tcHV0ZSBjb25jYXRlbmF0ZSBjb250aW51ZSBjcmVhdGUgY3Jvc3MgY3Vyc29yIGRhdGEgZGF0YWJhc2UgZGF0YWJhc2VzIGRicHJvcGVydGllcyBkZWZlcnJlZCBkZWxldGUgZGVsaW1pdGVkIGRlc2MgZGVzY3JpYmUgZGlyZWN0b3J5IGRpc2FibGUgZGlzdGluY3QgZGlzdHJpYnV0ZSBkcm9wIGVsc2UgZW5hYmxlIGVuZCBlc2NhcGVkIGV4Y2x1c2l2ZSBleGlzdHMgZXhwbGFpbiBleHBvcnQgZXh0ZW5kZWQgZXh0ZXJuYWwgZmV0Y2ggZmllbGRzIGZpbGVmb3JtYXQgZmlyc3QgZm9ybWF0IGZvcm1hdHRlZCBmcm9tIGZ1bGwgZnVuY3Rpb24gZnVuY3Rpb25zIGdyYW50IGdyb3VwIGhhdmluZyBob2xkX2RkbHRpbWUgaWR4cHJvcGVydGllcyBpZiBpbXBvcnQgaW4gaW5kZXggaW5kZXhlcyBpbnBhdGggaW5wdXRkcml2ZXIgaW5wdXRmb3JtYXQgaW5zZXJ0IGludGVyc2VjdCBpbnRvIGlzIGl0ZW1zIGpvaW4ga2V5cyBsYXRlcmFsIGxlZnQgbGlrZSBsaW1pdCBsaW5lcyBsb2FkIGxvY2FsIGxvY2F0aW9uIGxvY2sgbG9ja3MgbWFwam9pbiBtYXRlcmlhbGl6ZWQgbWludXMgbXNjayBub19kcm9wIG5vY29tcHJlc3Mgbm90IG9mIG9mZmxpbmUgb24gb3B0aW9uIG9yIG9yZGVyIG91dCBvdXRlciBvdXRwdXRkcml2ZXIgb3V0cHV0Zm9ybWF0IG92ZXJ3cml0ZSBwYXJ0aXRpb24gcGFydGl0aW9uZWQgcGFydGl0aW9ucyBwZXJjZW50IHBsdXMgcHJlc2VydmUgcHJvY2VkdXJlIHB1cmdlIHJhbmdlIHJjZmlsZSByZWFkIHJlYWRvbmx5IHJlYWRzIHJlYnVpbGQgcmVjb3JkcmVhZGVyIHJlY29yZHdyaXRlciByZWNvdmVyIHJlZHVjZSByZWdleHAgcmVuYW1lIHJlcGFpciByZXBsYWNlIHJlc3RyaWN0IHJldm9rZSByaWdodCBybGlrZSByb3cgc2NoZW1hIHNjaGVtYXMgc2VtaSBzZXF1ZW5jZWZpbGUgc2VyZGUgc2VyZGVwcm9wZXJ0aWVzIHNldCBzaGFyZWQgc2hvdyBzaG93X2RhdGFiYXNlIHNvcnQgc29ydGVkIHNzbCBzdGF0aXN0aWNzIHN0b3JlZCBzdHJlYW10YWJsZSB0YWJsZSB0YWJsZXMgdGFibGVzYW1wbGUgdGJscHJvcGVydGllcyB0ZW1wb3JhcnkgdGVybWluYXRlZCB0ZXh0ZmlsZSB0aGVuIHRtcCB0byB0b3VjaCB0cmFuc2Zvcm0gdHJpZ2dlciB1bmFyY2hpdmUgdW5kbyB1bmlvbiB1bmlxdWVqb2luIHVubG9jayB1cGRhdGUgdXNlIHVzaW5nIHV0YyB1dGNfdG1lc3RhbXAgdmlldyB3aGVuIHdoZXJlIHdoaWxlIHdpdGggYWRtaW4gYXV0aG9yaXphdGlvbiBjaGFyIGNvbXBhY3QgY29tcGFjdGlvbnMgY29uZiBjdWJlIGN1cnJlbnQgY3VycmVudF9kYXRlIGN1cnJlbnRfdGltZXN0YW1wIGRheSBkZWNpbWFsIGRlZmluZWQgZGVwZW5kZW5jeSBkaXJlY3RvcmllcyBlbGVtX3R5cGUgZXhjaGFuZ2UgZmlsZSBmb2xsb3dpbmcgZm9yIGdyb3VwaW5nIGhvdXIgaWdub3JlIGlubmVyIGludGVydmFsIGphciBsZXNzIGxvZ2ljYWwgbWFjcm8gbWludXRlIG1vbnRoIG1vcmUgbm9uZSBub3NjYW4gb3ZlciBvd25lciBwYXJ0aWFsc2NhbiBwcmVjZWRpbmcgcHJldHR5IHByaW5jaXBhbHMgcHJvdGVjdGlvbiByZWxvYWQgcmV3cml0ZSByb2xlIHJvbGVzIHJvbGx1cCByb3dzIHNlY29uZCBzZXJ2ZXIgc2V0cyBza2V3ZWQgdHJhbnNhY3Rpb25zIHRydW5jYXRlIHVuYm91bmRlZCB1bnNldCB1cmkgdXNlciB2YWx1ZXMgd2luZG93IHllYXJcIiksXG4gICAgYnVpbHRpbjogc2V0KFwiYm9vbCBib29sZWFuIGxvbmcgdGltZXN0YW1wIHRpbnlpbnQgc21hbGxpbnQgYmlnaW50IGludCBmbG9hdCBkb3VibGUgZGF0ZSBkYXRldGltZSB1bnNpZ25lZCBzdHJpbmcgYXJyYXkgc3RydWN0IG1hcCB1bmlvbnR5cGUga2V5X3R5cGUgdXRjdGltZXN0YW1wIHZhbHVlX3R5cGUgdmFyY2hhclwiKSxcbiAgICBhdG9tczogc2V0KFwiZmFsc2UgdHJ1ZSBudWxsIHVua25vd25cIiksXG4gICAgb3BlcmF0b3JDaGFyczogL15bKitcXC0lPD4hPV0vLFxuICAgIGRhdGVTUUw6IHNldChcImRhdGUgdGltZXN0YW1wXCIpLFxuICAgIHN1cHBvcnQ6IHNldChcIk9EQkNkb3RUYWJsZSBkb3VibGVRdW90ZSBiaW5hcnlOdW1iZXIgaGV4TnVtYmVyXCIpXG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1wZ3NxbFwiLCB7XG4gICAgbmFtZTogXCJzcWxcIixcbiAgICBjbGllbnQ6IHNldChcInNvdXJjZVwiKSxcbiAgICAvLyBGb3IgUG9zdGdyZVNRTCAtIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3FsLWtleXdvcmRzLWFwcGVuZGl4Lmh0bWxcbiAgICAvLyBGb3IgcGwvcGdzcWwgbGFuZyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3N0Z3Jlcy9wb3N0Z3Jlcy9ibG9iL1JFTF8xMV8yL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9zY2FubmVyLmNcbiAgICBrZXl3b3Jkczogc2V0KHNxbEtleXdvcmRzICsgXCJhIGFib3J0IGFicyBhYnNlbnQgYWJzb2x1dGUgYWNjZXNzIGFjY29yZGluZyBhY3Rpb24gYWRhIGFkZCBhZG1pbiBhZnRlciBhZ2dyZWdhdGUgYWxpYXMgYWxsIGFsbG9jYXRlIGFsc28gYWx0ZXIgYWx3YXlzIGFuYWx5c2UgYW5hbHl6ZSBhbmQgYW55IGFyZSBhcnJheSBhcnJheV9hZ2cgYXJyYXlfbWF4X2NhcmRpbmFsaXR5IGFzIGFzYyBhc2Vuc2l0aXZlIGFzc2VydCBhc3NlcnRpb24gYXNzaWdubWVudCBhc3ltbWV0cmljIGF0IGF0b21pYyBhdHRhY2ggYXR0cmlidXRlIGF0dHJpYnV0ZXMgYXV0aG9yaXphdGlvbiBhdmcgYmFja3dhcmQgYmFzZTY0IGJlZm9yZSBiZWdpbiBiZWdpbl9mcmFtZSBiZWdpbl9wYXJ0aXRpb24gYmVybm91bGxpIGJldHdlZW4gYmlnaW50IGJpbmFyeSBiaXQgYml0X2xlbmd0aCBibG9iIGJsb2NrZWQgYm9tIGJvb2xlYW4gYm90aCBicmVhZHRoIGJ5IGMgY2FjaGUgY2FsbCBjYWxsZWQgY2FyZGluYWxpdHkgY2FzY2FkZSBjYXNjYWRlZCBjYXNlIGNhc3QgY2F0YWxvZyBjYXRhbG9nX25hbWUgY2VpbCBjZWlsaW5nIGNoYWluIGNoYXIgY2hhcl9sZW5ndGggY2hhcmFjdGVyIGNoYXJhY3Rlcl9sZW5ndGggY2hhcmFjdGVyX3NldF9jYXRhbG9nIGNoYXJhY3Rlcl9zZXRfbmFtZSBjaGFyYWN0ZXJfc2V0X3NjaGVtYSBjaGFyYWN0ZXJpc3RpY3MgY2hhcmFjdGVycyBjaGVjayBjaGVja3BvaW50IGNsYXNzIGNsYXNzX29yaWdpbiBjbG9iIGNsb3NlIGNsdXN0ZXIgY29hbGVzY2UgY29ib2wgY29sbGF0ZSBjb2xsYXRpb24gY29sbGF0aW9uX2NhdGFsb2cgY29sbGF0aW9uX25hbWUgY29sbGF0aW9uX3NjaGVtYSBjb2xsZWN0IGNvbHVtbiBjb2x1bW5fbmFtZSBjb2x1bW5zIGNvbW1hbmRfZnVuY3Rpb24gY29tbWFuZF9mdW5jdGlvbl9jb2RlIGNvbW1lbnQgY29tbWVudHMgY29tbWl0IGNvbW1pdHRlZCBjb25jdXJyZW50bHkgY29uZGl0aW9uIGNvbmRpdGlvbl9udW1iZXIgY29uZmlndXJhdGlvbiBjb25mbGljdCBjb25uZWN0IGNvbm5lY3Rpb24gY29ubmVjdGlvbl9uYW1lIGNvbnN0YW50IGNvbnN0cmFpbnQgY29uc3RyYWludF9jYXRhbG9nIGNvbnN0cmFpbnRfbmFtZSBjb25zdHJhaW50X3NjaGVtYSBjb25zdHJhaW50cyBjb25zdHJ1Y3RvciBjb250YWlucyBjb250ZW50IGNvbnRpbnVlIGNvbnRyb2wgY29udmVyc2lvbiBjb252ZXJ0IGNvcHkgY29yciBjb3JyZXNwb25kaW5nIGNvc3QgY291bnQgY292YXJfcG9wIGNvdmFyX3NhbXAgY3JlYXRlIGNyb3NzIGNzdiBjdWJlIGN1bWVfZGlzdCBjdXJyZW50IGN1cnJlbnRfY2F0YWxvZyBjdXJyZW50X2RhdGUgY3VycmVudF9kZWZhdWx0X3RyYW5zZm9ybV9ncm91cCBjdXJyZW50X3BhdGggY3VycmVudF9yb2xlIGN1cnJlbnRfcm93IGN1cnJlbnRfc2NoZW1hIGN1cnJlbnRfdGltZSBjdXJyZW50X3RpbWVzdGFtcCBjdXJyZW50X3RyYW5zZm9ybV9ncm91cF9mb3JfdHlwZSBjdXJyZW50X3VzZXIgY3Vyc29yIGN1cnNvcl9uYW1lIGN5Y2xlIGRhdGEgZGF0YWJhc2UgZGF0YWxpbmsgZGF0YXR5cGUgZGF0ZSBkYXRldGltZV9pbnRlcnZhbF9jb2RlIGRhdGV0aW1lX2ludGVydmFsX3ByZWNpc2lvbiBkYXkgZGIgZGVhbGxvY2F0ZSBkZWJ1ZyBkZWMgZGVjaW1hbCBkZWNsYXJlIGRlZmF1bHQgZGVmYXVsdHMgZGVmZXJyYWJsZSBkZWZlcnJlZCBkZWZpbmVkIGRlZmluZXIgZGVncmVlIGRlbGV0ZSBkZWxpbWl0ZXIgZGVsaW1pdGVycyBkZW5zZV9yYW5rIGRlcGVuZHMgZGVwdGggZGVyZWYgZGVyaXZlZCBkZXNjIGRlc2NyaWJlIGRlc2NyaXB0b3IgZGV0YWNoIGRldGFpbCBkZXRlcm1pbmlzdGljIGRpYWdub3N0aWNzIGRpY3Rpb25hcnkgZGlzYWJsZSBkaXNjYXJkIGRpc2Nvbm5lY3QgZGlzcGF0Y2ggZGlzdGluY3QgZGxuZXdjb3B5IGRscHJldmlvdXNjb3B5IGRsdXJsY29tcGxldGUgZGx1cmxjb21wbGV0ZW9ubHkgZGx1cmxjb21wbGV0ZXdyaXRlIGRsdXJscGF0aCBkbHVybHBhdGhvbmx5IGRsdXJscGF0aHdyaXRlIGRsdXJsc2NoZW1lIGRsdXJsc2VydmVyIGRsdmFsdWUgZG8gZG9jdW1lbnQgZG9tYWluIGRvdWJsZSBkcm9wIGR1bXAgZHluYW1pYyBkeW5hbWljX2Z1bmN0aW9uIGR5bmFtaWNfZnVuY3Rpb25fY29kZSBlYWNoIGVsZW1lbnQgZWxzZSBlbHNlaWYgZWxzaWYgZW1wdHkgZW5hYmxlIGVuY29kaW5nIGVuY3J5cHRlZCBlbmQgZW5kX2ZyYW1lIGVuZF9wYXJ0aXRpb24gZW5kZXhlYyBlbmZvcmNlZCBlbnVtIGVxdWFscyBlcnJjb2RlIGVycm9yIGVzY2FwZSBldmVudCBldmVyeSBleGNlcHQgZXhjZXB0aW9uIGV4Y2x1ZGUgZXhjbHVkaW5nIGV4Y2x1c2l2ZSBleGVjIGV4ZWN1dGUgZXhpc3RzIGV4aXQgZXhwIGV4cGxhaW4gZXhwcmVzc2lvbiBleHRlbnNpb24gZXh0ZXJuYWwgZXh0cmFjdCBmYWxzZSBmYW1pbHkgZmV0Y2ggZmlsZSBmaWx0ZXIgZmluYWwgZmlyc3QgZmlyc3RfdmFsdWUgZmxhZyBmbG9hdCBmbG9vciBmb2xsb3dpbmcgZm9yIGZvcmNlIGZvcmVhY2ggZm9yZWlnbiBmb3J0cmFuIGZvcndhcmQgZm91bmQgZnJhbWVfcm93IGZyZWUgZnJlZXplIGZyb20gZnMgZnVsbCBmdW5jdGlvbiBmdW5jdGlvbnMgZnVzaW9uIGcgZ2VuZXJhbCBnZW5lcmF0ZWQgZ2V0IGdsb2JhbCBnbyBnb3RvIGdyYW50IGdyYW50ZWQgZ3JlYXRlc3QgZ3JvdXAgZ3JvdXBpbmcgZ3JvdXBzIGhhbmRsZXIgaGF2aW5nIGhlYWRlciBoZXggaGllcmFyY2h5IGhpbnQgaG9sZCBob3VyIGlkIGlkZW50aXR5IGlmIGlnbm9yZSBpbGlrZSBpbW1lZGlhdGUgaW1tZWRpYXRlbHkgaW1tdXRhYmxlIGltcGxlbWVudGF0aW9uIGltcGxpY2l0IGltcG9ydCBpbiBpbmNsdWRlIGluY2x1ZGluZyBpbmNyZW1lbnQgaW5kZW50IGluZGV4IGluZGV4ZXMgaW5kaWNhdG9yIGluZm8gaW5oZXJpdCBpbmhlcml0cyBpbml0aWFsbHkgaW5saW5lIGlubmVyIGlub3V0IGlucHV0IGluc2Vuc2l0aXZlIGluc2VydCBpbnN0YW5jZSBpbnN0YW50aWFibGUgaW5zdGVhZCBpbnQgaW50ZWdlciBpbnRlZ3JpdHkgaW50ZXJzZWN0IGludGVyc2VjdGlvbiBpbnRlcnZhbCBpbnRvIGludm9rZXIgaXMgaXNudWxsIGlzb2xhdGlvbiBqb2luIGsga2V5IGtleV9tZW1iZXIga2V5X3R5cGUgbGFiZWwgbGFnIGxhbmd1YWdlIGxhcmdlIGxhc3QgbGFzdF92YWx1ZSBsYXRlcmFsIGxlYWQgbGVhZGluZyBsZWFrcHJvb2YgbGVhc3QgbGVmdCBsZW5ndGggbGV2ZWwgbGlicmFyeSBsaWtlIGxpa2VfcmVnZXggbGltaXQgbGluayBsaXN0ZW4gbG4gbG9hZCBsb2NhbCBsb2NhbHRpbWUgbG9jYWx0aW1lc3RhbXAgbG9jYXRpb24gbG9jYXRvciBsb2NrIGxvY2tlZCBsb2cgbG9nZ2VkIGxvb3AgbG93ZXIgbSBtYXAgbWFwcGluZyBtYXRjaCBtYXRjaGVkIG1hdGVyaWFsaXplZCBtYXggbWF4X2NhcmRpbmFsaXR5IG1heHZhbHVlIG1lbWJlciBtZXJnZSBtZXNzYWdlIG1lc3NhZ2VfbGVuZ3RoIG1lc3NhZ2Vfb2N0ZXRfbGVuZ3RoIG1lc3NhZ2VfdGV4dCBtZXRob2QgbWluIG1pbnV0ZSBtaW52YWx1ZSBtb2QgbW9kZSBtb2RpZmllcyBtb2R1bGUgbW9udGggbW9yZSBtb3ZlIG11bHRpc2V0IG11bXBzIG5hbWUgbmFtZXMgbmFtZXNwYWNlIG5hdGlvbmFsIG5hdHVyYWwgbmNoYXIgbmNsb2IgbmVzdGluZyBuZXcgbmV4dCBuZmMgbmZkIG5ma2MgbmZrZCBuaWwgbm8gbm9uZSBub3JtYWxpemUgbm9ybWFsaXplZCBub3Qgbm90aGluZyBub3RpY2Ugbm90aWZ5IG5vdG51bGwgbm93YWl0IG50aF92YWx1ZSBudGlsZSBudWxsIG51bGxhYmxlIG51bGxpZiBudWxscyBudW1iZXIgbnVtZXJpYyBvYmplY3Qgb2NjdXJyZW5jZXNfcmVnZXggb2N0ZXRfbGVuZ3RoIG9jdGV0cyBvZiBvZmYgb2Zmc2V0IG9pZHMgb2xkIG9uIG9ubHkgb3BlbiBvcGVyYXRvciBvcHRpb24gb3B0aW9ucyBvciBvcmRlciBvcmRlcmluZyBvcmRpbmFsaXR5IG90aGVycyBvdXQgb3V0ZXIgb3V0cHV0IG92ZXIgb3ZlcmxhcHMgb3ZlcmxheSBvdmVycmlkaW5nIG93bmVkIG93bmVyIHAgcGFkIHBhcmFsbGVsIHBhcmFtZXRlciBwYXJhbWV0ZXJfbW9kZSBwYXJhbWV0ZXJfbmFtZSBwYXJhbWV0ZXJfb3JkaW5hbF9wb3NpdGlvbiBwYXJhbWV0ZXJfc3BlY2lmaWNfY2F0YWxvZyBwYXJhbWV0ZXJfc3BlY2lmaWNfbmFtZSBwYXJhbWV0ZXJfc3BlY2lmaWNfc2NoZW1hIHBhcnNlciBwYXJ0aWFsIHBhcnRpdGlvbiBwYXNjYWwgcGFzc2luZyBwYXNzdGhyb3VnaCBwYXNzd29yZCBwYXRoIHBlcmNlbnQgcGVyY2VudF9yYW5rIHBlcmNlbnRpbGVfY29udCBwZXJjZW50aWxlX2Rpc2MgcGVyZm9ybSBwZXJpb2QgcGVybWlzc2lvbiBwZ19jb250ZXh0IHBnX2RhdGF0eXBlX25hbWUgcGdfZXhjZXB0aW9uX2NvbnRleHQgcGdfZXhjZXB0aW9uX2RldGFpbCBwZ19leGNlcHRpb25faGludCBwbGFjaW5nIHBsYW5zIHBsaSBwb2xpY3kgcG9ydGlvbiBwb3NpdGlvbiBwb3NpdGlvbl9yZWdleCBwb3dlciBwcmVjZWRlcyBwcmVjZWRpbmcgcHJlY2lzaW9uIHByZXBhcmUgcHJlcGFyZWQgcHJlc2VydmUgcHJpbWFyeSBwcmludF9zdHJpY3RfcGFyYW1zIHByaW9yIHByaXZpbGVnZXMgcHJvY2VkdXJhbCBwcm9jZWR1cmUgcHJvY2VkdXJlcyBwcm9ncmFtIHB1YmxpYyBwdWJsaWNhdGlvbiBxdWVyeSBxdW90ZSByYWlzZSByYW5nZSByYW5rIHJlYWQgcmVhZHMgcmVhbCByZWFzc2lnbiByZWNoZWNrIHJlY292ZXJ5IHJlY3Vyc2l2ZSByZWYgcmVmZXJlbmNlcyByZWZlcmVuY2luZyByZWZyZXNoIHJlZ3JfYXZneCByZWdyX2F2Z3kgcmVncl9jb3VudCByZWdyX2ludGVyY2VwdCByZWdyX3IyIHJlZ3Jfc2xvcGUgcmVncl9zeHggcmVncl9zeHkgcmVncl9zeXkgcmVpbmRleCByZWxhdGl2ZSByZWxlYXNlIHJlbmFtZSByZXBlYXRhYmxlIHJlcGxhY2UgcmVwbGljYSByZXF1aXJpbmcgcmVzZXQgcmVzcGVjdCByZXN0YXJ0IHJlc3RvcmUgcmVzdHJpY3QgcmVzdWx0IHJlc3VsdF9vaWQgcmV0dXJuIHJldHVybmVkX2NhcmRpbmFsaXR5IHJldHVybmVkX2xlbmd0aCByZXR1cm5lZF9vY3RldF9sZW5ndGggcmV0dXJuZWRfc3Fsc3RhdGUgcmV0dXJuaW5nIHJldHVybnMgcmV2ZXJzZSByZXZva2UgcmlnaHQgcm9sZSByb2xsYmFjayByb2xsdXAgcm91dGluZSByb3V0aW5lX2NhdGFsb2cgcm91dGluZV9uYW1lIHJvdXRpbmVfc2NoZW1hIHJvdXRpbmVzIHJvdyByb3dfY291bnQgcm93X251bWJlciByb3dzIHJvd3R5cGUgcnVsZSBzYXZlcG9pbnQgc2NhbGUgc2NoZW1hIHNjaGVtYV9uYW1lIHNjaGVtYXMgc2NvcGUgc2NvcGVfY2F0YWxvZyBzY29wZV9uYW1lIHNjb3BlX3NjaGVtYSBzY3JvbGwgc2VhcmNoIHNlY29uZCBzZWN0aW9uIHNlY3VyaXR5IHNlbGVjdCBzZWxlY3RpdmUgc2VsZiBzZW5zaXRpdmUgc2VxdWVuY2Ugc2VxdWVuY2VzIHNlcmlhbGl6YWJsZSBzZXJ2ZXIgc2VydmVyX25hbWUgc2Vzc2lvbiBzZXNzaW9uX3VzZXIgc2V0IHNldG9mIHNldHMgc2hhcmUgc2hvdyBzaW1pbGFyIHNpbXBsZSBzaXplIHNraXAgc2xpY2Ugc21hbGxpbnQgc25hcHNob3Qgc29tZSBzb3VyY2Ugc3BhY2Ugc3BlY2lmaWMgc3BlY2lmaWNfbmFtZSBzcGVjaWZpY3R5cGUgc3FsIHNxbGNvZGUgc3FsZXJyb3Igc3FsZXhjZXB0aW9uIHNxbHN0YXRlIHNxbHdhcm5pbmcgc3FydCBzdGFibGUgc3RhY2tlZCBzdGFuZGFsb25lIHN0YXJ0IHN0YXRlIHN0YXRlbWVudCBzdGF0aWMgc3RhdGlzdGljcyBzdGRkZXZfcG9wIHN0ZGRldl9zYW1wIHN0ZGluIHN0ZG91dCBzdG9yYWdlIHN0cmljdCBzdHJpcCBzdHJ1Y3R1cmUgc3R5bGUgc3ViY2xhc3Nfb3JpZ2luIHN1Ym11bHRpc2V0IHN1YnNjcmlwdGlvbiBzdWJzdHJpbmcgc3Vic3RyaW5nX3JlZ2V4IHN1Y2NlZWRzIHN1bSBzeW1tZXRyaWMgc3lzaWQgc3lzdGVtIHN5c3RlbV90aW1lIHN5c3RlbV91c2VyIHQgdGFibGUgdGFibGVfbmFtZSB0YWJsZXMgdGFibGVzYW1wbGUgdGFibGVzcGFjZSB0ZW1wIHRlbXBsYXRlIHRlbXBvcmFyeSB0ZXh0IHRoZW4gdGllcyB0aW1lIHRpbWVzdGFtcCB0aW1lem9uZV9ob3VyIHRpbWV6b25lX21pbnV0ZSB0byB0b2tlbiB0b3BfbGV2ZWxfY291bnQgdHJhaWxpbmcgdHJhbnNhY3Rpb24gdHJhbnNhY3Rpb25fYWN0aXZlIHRyYW5zYWN0aW9uc19jb21taXR0ZWQgdHJhbnNhY3Rpb25zX3JvbGxlZF9iYWNrIHRyYW5zZm9ybSB0cmFuc2Zvcm1zIHRyYW5zbGF0ZSB0cmFuc2xhdGVfcmVnZXggdHJhbnNsYXRpb24gdHJlYXQgdHJpZ2dlciB0cmlnZ2VyX2NhdGFsb2cgdHJpZ2dlcl9uYW1lIHRyaWdnZXJfc2NoZW1hIHRyaW0gdHJpbV9hcnJheSB0cnVlIHRydW5jYXRlIHRydXN0ZWQgdHlwZSB0eXBlcyB1ZXNjYXBlIHVuYm91bmRlZCB1bmNvbW1pdHRlZCB1bmRlciB1bmVuY3J5cHRlZCB1bmlvbiB1bmlxdWUgdW5rbm93biB1bmxpbmsgdW5saXN0ZW4gdW5sb2dnZWQgdW5uYW1lZCB1bm5lc3QgdW50aWwgdW50eXBlZCB1cGRhdGUgdXBwZXIgdXJpIHVzYWdlIHVzZV9jb2x1bW4gdXNlX3ZhcmlhYmxlIHVzZXIgdXNlcl9kZWZpbmVkX3R5cGVfY2F0YWxvZyB1c2VyX2RlZmluZWRfdHlwZV9jb2RlIHVzZXJfZGVmaW5lZF90eXBlX25hbWUgdXNlcl9kZWZpbmVkX3R5cGVfc2NoZW1hIHVzaW5nIHZhY3V1bSB2YWxpZCB2YWxpZGF0ZSB2YWxpZGF0b3IgdmFsdWUgdmFsdWVfb2YgdmFsdWVzIHZhcl9wb3AgdmFyX3NhbXAgdmFyYmluYXJ5IHZhcmNoYXIgdmFyaWFibGVfY29uZmxpY3QgdmFyaWFkaWMgdmFyeWluZyB2ZXJib3NlIHZlcnNpb24gdmVyc2lvbmluZyB2aWV3IHZpZXdzIHZvbGF0aWxlIHdhcm5pbmcgd2hlbiB3aGVuZXZlciB3aGVyZSB3aGlsZSB3aGl0ZXNwYWNlIHdpZHRoX2J1Y2tldCB3aW5kb3cgd2l0aCB3aXRoaW4gd2l0aG91dCB3b3JrIHdyYXBwZXIgd3JpdGUgeG1sIHhtbGFnZyB4bWxhdHRyaWJ1dGVzIHhtbGJpbmFyeSB4bWxjYXN0IHhtbGNvbW1lbnQgeG1sY29uY2F0IHhtbGRlY2xhcmF0aW9uIHhtbGRvY3VtZW50IHhtbGVsZW1lbnQgeG1sZXhpc3RzIHhtbGZvcmVzdCB4bWxpdGVyYXRlIHhtbG5hbWVzcGFjZXMgeG1scGFyc2UgeG1scGkgeG1scXVlcnkgeG1scm9vdCB4bWxzY2hlbWEgeG1sc2VyaWFsaXplIHhtbHRhYmxlIHhtbHRleHQgeG1sdmFsaWRhdGUgeWVhciB5ZXMgem9uZVwiKSxcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL2RhdGF0eXBlLmh0bWxcbiAgICBidWlsdGluOiBzZXQoXCJiaWdpbnQgaW50OCBiaWdzZXJpYWwgc2VyaWFsOCBiaXQgdmFyeWluZyB2YXJiaXQgYm9vbGVhbiBib29sIGJveCBieXRlYSBjaGFyYWN0ZXIgY2hhciB2YXJjaGFyIGNpZHIgY2lyY2xlIGRhdGUgZG91YmxlIHByZWNpc2lvbiBmbG9hdDggaW5ldCBpbnRlZ2VyIGludCBpbnQ0IGludGVydmFsIGpzb24ganNvbmIgbGluZSBsc2VnIG1hY2FkZHIgbWFjYWRkcjggbW9uZXkgbnVtZXJpYyBkZWNpbWFsIHBhdGggcGdfbHNuIHBvaW50IHBvbHlnb24gcmVhbCBmbG9hdDQgc21hbGxpbnQgaW50MiBzbWFsbHNlcmlhbCBzZXJpYWwyIHNlcmlhbCBzZXJpYWw0IHRleHQgdGltZSB3aXRob3V0IHpvbmUgd2l0aCB0aW1ldHogdGltZXN0YW1wIHRpbWVzdGFtcHR6IHRzcXVlcnkgdHN2ZWN0b3IgdHhpZF9zbmFwc2hvdCB1dWlkIHhtbFwiKSxcbiAgICBhdG9tczogc2V0KFwiZmFsc2UgdHJ1ZSBudWxsIHVua25vd25cIiksXG4gICAgb3BlcmF0b3JDaGFyczogL15bKlxcLytcXC0lPD4hPSZ8XlxcLyNAP35dLyxcbiAgICBiYWNrc2xhc2hTdHJpbmdFc2NhcGVzOiBmYWxzZSxcbiAgICBkYXRlU1FMOiBzZXQoXCJkYXRlIHRpbWUgdGltZXN0YW1wXCIpLFxuICAgIHN1cHBvcnQ6IHNldChcIk9EQkNkb3RUYWJsZSBkZWNpbWFsbGVzc0Zsb2F0IHplcm9sZXNzRmxvYXQgYmluYXJ5TnVtYmVyIGhleE51bWJlciBuQ2hhckNhc3QgY2hhcnNldENhc3QgZXNjYXBlQ29uc3RhbnRcIilcbiAgfSk7XG5cbiAgLy8gR29vZ2xlJ3MgU1FMLWxpa2UgcXVlcnkgbGFuZ3VhZ2UsIEdRTFxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtZ3FsXCIsIHtcbiAgICBuYW1lOiBcInNxbFwiLFxuICAgIGtleXdvcmRzOiBzZXQoXCJhbmNlc3RvciBhbmQgYXNjIGJ5IGNvbnRhaW5zIGRlc2MgZGVzY2VuZGFudCBkaXN0aW5jdCBmcm9tIGdyb3VwIGhhcyBpbiBpcyBsaW1pdCBvZmZzZXQgb24gb3JkZXIgc2VsZWN0IHN1cGVyc2V0IHdoZXJlXCIpLFxuICAgIGF0b21zOiBzZXQoXCJmYWxzZSB0cnVlXCIpLFxuICAgIGJ1aWx0aW46IHNldChcImJsb2IgZGF0ZXRpbWUgZmlyc3Qga2V5IF9fa2V5X18gc3RyaW5nIGludGVnZXIgZG91YmxlIGJvb2xlYW4gbnVsbFwiKSxcbiAgICBvcGVyYXRvckNoYXJzOiAvXlsqK1xcLSU8PiE9XS9cbiAgfSk7XG5cbiAgLy8gR3JlZW5wbHVtXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1ncHNxbFwiLCB7XG4gICAgbmFtZTogXCJzcWxcIixcbiAgICBjbGllbnQ6IHNldChcInNvdXJjZVwiKSxcbiAgICAvL2h0dHBzOi8vZ2l0aHViLmNvbS9ncmVlbnBsdW0tZGIvZ3BkYi9ibG9iL21hc3Rlci9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmhcbiAgICBrZXl3b3Jkczogc2V0KFwiYWJvcnQgYWJzb2x1dGUgYWNjZXNzIGFjdGlvbiBhY3RpdmUgYWRkIGFkbWluIGFmdGVyIGFnZ3JlZ2F0ZSBhbGwgYWxzbyBhbHRlciBhbHdheXMgYW5hbHlzZSBhbmFseXplIGFuZCBhbnkgYXJyYXkgYXMgYXNjIGFzc2VydGlvbiBhc3NpZ25tZW50IGFzeW1tZXRyaWMgYXQgYXV0aG9yaXphdGlvbiBiYWNrd2FyZCBiZWZvcmUgYmVnaW4gYmV0d2VlbiBiaWdpbnQgYmluYXJ5IGJpdCBib29sZWFuIGJvdGggYnkgY2FjaGUgY2FsbGVkIGNhc2NhZGUgY2FzY2FkZWQgY2FzZSBjYXN0IGNoYWluIGNoYXIgY2hhcmFjdGVyIGNoYXJhY3RlcmlzdGljcyBjaGVjayBjaGVja3BvaW50IGNsYXNzIGNsb3NlIGNsdXN0ZXIgY29hbGVzY2UgY29kZWdlbiBjb2xsYXRlIGNvbHVtbiBjb21tZW50IGNvbW1pdCBjb21taXR0ZWQgY29uY3VycmVuY3kgY29uY3VycmVudGx5IGNvbmZpZ3VyYXRpb24gY29ubmVjdGlvbiBjb25zdHJhaW50IGNvbnN0cmFpbnRzIGNvbnRhaW5zIGNvbnRlbnQgY29udGludWUgY29udmVyc2lvbiBjb3B5IGNvc3QgY3B1X3JhdGVfbGltaXQgY3JlYXRlIGNyZWF0ZWRiIGNyZWF0ZWV4dHRhYmxlIGNyZWF0ZXJvbGUgY3JlYXRldXNlciBjcm9zcyBjc3YgY3ViZSBjdXJyZW50IGN1cnJlbnRfY2F0YWxvZyBjdXJyZW50X2RhdGUgY3VycmVudF9yb2xlIGN1cnJlbnRfc2NoZW1hIGN1cnJlbnRfdGltZSBjdXJyZW50X3RpbWVzdGFtcCBjdXJyZW50X3VzZXIgY3Vyc29yIGN5Y2xlIGRhdGEgZGF0YWJhc2UgZGF5IGRlYWxsb2NhdGUgZGVjIGRlY2ltYWwgZGVjbGFyZSBkZWNvZGUgZGVmYXVsdCBkZWZhdWx0cyBkZWZlcnJhYmxlIGRlZmVycmVkIGRlZmluZXIgZGVsZXRlIGRlbGltaXRlciBkZWxpbWl0ZXJzIGRlbnkgZGVzYyBkaWN0aW9uYXJ5IGRpc2FibGUgZGlzY2FyZCBkaXN0aW5jdCBkaXN0cmlidXRlZCBkbyBkb2N1bWVudCBkb21haW4gZG91YmxlIGRyb3AgZHhsIGVhY2ggZWxzZSBlbmFibGUgZW5jb2RpbmcgZW5jcnlwdGVkIGVuZCBlbnVtIGVycm9ycyBlc2NhcGUgZXZlcnkgZXhjZXB0IGV4Y2hhbmdlIGV4Y2x1ZGUgZXhjbHVkaW5nIGV4Y2x1c2l2ZSBleGVjdXRlIGV4aXN0cyBleHBsYWluIGV4dGVuc2lvbiBleHRlcm5hbCBleHRyYWN0IGZhbHNlIGZhbWlseSBmZXRjaCBmaWVsZHMgZmlsZXNwYWNlIGZpbGwgZmlsdGVyIGZpcnN0IGZsb2F0IGZvbGxvd2luZyBmb3IgZm9yY2UgZm9yZWlnbiBmb3JtYXQgZm9yd2FyZCBmcmVlemUgZnJvbSBmdWxsIGZ1bmN0aW9uIGdsb2JhbCBncmFudCBncmFudGVkIGdyZWF0ZXN0IGdyb3VwIGdyb3VwX2lkIGdyb3VwaW5nIGhhbmRsZXIgaGFzaCBoYXZpbmcgaGVhZGVyIGhvbGQgaG9zdCBob3VyIGlkZW50aXR5IGlmIGlnbm9yZSBpbGlrZSBpbW1lZGlhdGUgaW1tdXRhYmxlIGltcGxpY2l0IGluIGluY2x1ZGluZyBpbmNsdXNpdmUgaW5jcmVtZW50IGluZGV4IGluZGV4ZXMgaW5oZXJpdCBpbmhlcml0cyBpbml0aWFsbHkgaW5saW5lIGlubmVyIGlub3V0IGlucHV0IGluc2Vuc2l0aXZlIGluc2VydCBpbnN0ZWFkIGludCBpbnRlZ2VyIGludGVyc2VjdCBpbnRlcnZhbCBpbnRvIGludm9rZXIgaXMgaXNudWxsIGlzb2xhdGlvbiBqb2luIGtleSBsYW5ndWFnZSBsYXJnZSBsYXN0IGxlYWRpbmcgbGVhc3QgbGVmdCBsZXZlbCBsaWtlIGxpbWl0IGxpc3QgbGlzdGVuIGxvYWQgbG9jYWwgbG9jYWx0aW1lIGxvY2FsdGltZXN0YW1wIGxvY2F0aW9uIGxvY2sgbG9nIGxvZ2luIG1hcHBpbmcgbWFzdGVyIG1hdGNoIG1heHZhbHVlIG1lZGlhbiBtZXJnZSBtaW51dGUgbWludmFsdWUgbWlzc2luZyBtb2RlIG1vZGlmaWVzIG1vZGlmeSBtb250aCBtb3ZlIG5hbWUgbmFtZXMgbmF0aW9uYWwgbmF0dXJhbCBuY2hhciBuZXcgbmV3bGluZSBuZXh0IG5vIG5vY3JlYXRlZGIgbm9jcmVhdGVleHR0YWJsZSBub2NyZWF0ZXJvbGUgbm9jcmVhdGV1c2VyIG5vaW5oZXJpdCBub2xvZ2luIG5vbmUgbm9vdmVyY29tbWl0IG5vc3VwZXJ1c2VyIG5vdCBub3RoaW5nIG5vdGlmeSBub3RudWxsIG5vd2FpdCBudWxsIG51bGxpZiBudWxscyBudW1lcmljIG9iamVjdCBvZiBvZmYgb2Zmc2V0IG9pZHMgb2xkIG9uIG9ubHkgb3BlcmF0b3Igb3B0aW9uIG9wdGlvbnMgb3Igb3JkZXIgb3JkZXJlZCBvdGhlcnMgb3V0IG91dGVyIG92ZXIgb3ZlcmNvbW1pdCBvdmVybGFwcyBvdmVybGF5IG93bmVkIG93bmVyIHBhcnNlciBwYXJ0aWFsIHBhcnRpdGlvbiBwYXJ0aXRpb25zIHBhc3NpbmcgcGFzc3dvcmQgcGVyY2VudCBwZXJjZW50aWxlX2NvbnQgcGVyY2VudGlsZV9kaXNjIHBsYWNpbmcgcGxhbnMgcG9zaXRpb24gcHJlY2VkaW5nIHByZWNpc2lvbiBwcmVwYXJlIHByZXBhcmVkIHByZXNlcnZlIHByaW1hcnkgcHJpb3IgcHJpdmlsZWdlcyBwcm9jZWR1cmFsIHByb2NlZHVyZSBwcm90b2NvbCBxdWV1ZSBxdW90ZSByYW5kb21seSByYW5nZSByZWFkIHJlYWRhYmxlIHJlYWRzIHJlYWwgcmVhc3NpZ24gcmVjaGVjayByZWN1cnNpdmUgcmVmIHJlZmVyZW5jZXMgcmVpbmRleCByZWplY3QgcmVsYXRpdmUgcmVsZWFzZSByZW5hbWUgcmVwZWF0YWJsZSByZXBsYWNlIHJlcGxpY2EgcmVzZXQgcmVzb3VyY2UgcmVzdGFydCByZXN0cmljdCByZXR1cm5pbmcgcmV0dXJucyByZXZva2UgcmlnaHQgcm9sZSByb2xsYmFjayByb2xsdXAgcm9vdHBhcnRpdGlvbiByb3cgcm93cyBydWxlIHNhdmVwb2ludCBzY2F0dGVyIHNjaGVtYSBzY3JvbGwgc2VhcmNoIHNlY29uZCBzZWN1cml0eSBzZWdtZW50IHNlbGVjdCBzZXF1ZW5jZSBzZXJpYWxpemFibGUgc2Vzc2lvbiBzZXNzaW9uX3VzZXIgc2V0IHNldG9mIHNldHMgc2hhcmUgc2hvdyBzaW1pbGFyIHNpbXBsZSBzbWFsbGludCBzb21lIHNwbGl0IHNxbCBzdGFibGUgc3RhbmRhbG9uZSBzdGFydCBzdGF0ZW1lbnQgc3RhdGlzdGljcyBzdGRpbiBzdGRvdXQgc3RvcmFnZSBzdHJpY3Qgc3RyaXAgc3VicGFydGl0aW9uIHN1YnBhcnRpdGlvbnMgc3Vic3RyaW5nIHN1cGVydXNlciBzeW1tZXRyaWMgc3lzaWQgc3lzdGVtIHRhYmxlIHRhYmxlc3BhY2UgdGVtcCB0ZW1wbGF0ZSB0ZW1wb3JhcnkgdGV4dCB0aGVuIHRocmVzaG9sZCB0aWVzIHRpbWUgdGltZXN0YW1wIHRvIHRyYWlsaW5nIHRyYW5zYWN0aW9uIHRyZWF0IHRyaWdnZXIgdHJpbSB0cnVlIHRydW5jYXRlIHRydXN0ZWQgdHlwZSB1bmJvdW5kZWQgdW5jb21taXR0ZWQgdW5lbmNyeXB0ZWQgdW5pb24gdW5pcXVlIHVua25vd24gdW5saXN0ZW4gdW50aWwgdXBkYXRlIHVzZXIgdXNpbmcgdmFjdXVtIHZhbGlkIHZhbGlkYXRpb24gdmFsaWRhdG9yIHZhbHVlIHZhbHVlcyB2YXJjaGFyIHZhcmlhZGljIHZhcnlpbmcgdmVyYm9zZSB2ZXJzaW9uIHZpZXcgdm9sYXRpbGUgd2ViIHdoZW4gd2hlcmUgd2hpdGVzcGFjZSB3aW5kb3cgd2l0aCB3aXRoaW4gd2l0aG91dCB3b3JrIHdyaXRhYmxlIHdyaXRlIHhtbCB4bWxhdHRyaWJ1dGVzIHhtbGNvbmNhdCB4bWxlbGVtZW50IHhtbGV4aXN0cyB4bWxmb3Jlc3QgeG1scGFyc2UgeG1scGkgeG1scm9vdCB4bWxzZXJpYWxpemUgeWVhciB5ZXMgem9uZVwiKSxcbiAgICBidWlsdGluOiBzZXQoXCJiaWdpbnQgaW50OCBiaWdzZXJpYWwgc2VyaWFsOCBiaXQgdmFyeWluZyB2YXJiaXQgYm9vbGVhbiBib29sIGJveCBieXRlYSBjaGFyYWN0ZXIgY2hhciB2YXJjaGFyIGNpZHIgY2lyY2xlIGRhdGUgZG91YmxlIHByZWNpc2lvbiBmbG9hdCBmbG9hdDggaW5ldCBpbnRlZ2VyIGludCBpbnQ0IGludGVydmFsIGpzb24ganNvbmIgbGluZSBsc2VnIG1hY2FkZHIgbWFjYWRkcjggbW9uZXkgbnVtZXJpYyBkZWNpbWFsIHBhdGggcGdfbHNuIHBvaW50IHBvbHlnb24gcmVhbCBmbG9hdDQgc21hbGxpbnQgaW50MiBzbWFsbHNlcmlhbCBzZXJpYWwyIHNlcmlhbCBzZXJpYWw0IHRleHQgdGltZSB3aXRob3V0IHpvbmUgd2l0aCB0aW1ldHogdGltZXN0YW1wIHRpbWVzdGFtcHR6IHRzcXVlcnkgdHN2ZWN0b3IgdHhpZF9zbmFwc2hvdCB1dWlkIHhtbFwiKSxcbiAgICBhdG9tczogc2V0KFwiZmFsc2UgdHJ1ZSBudWxsIHVua25vd25cIiksXG4gICAgb3BlcmF0b3JDaGFyczogL15bKitcXC0lPD4hPSZ8XlxcLyNAP35dLyxcbiAgICBkYXRlU1FMOiBzZXQoXCJkYXRlIHRpbWUgdGltZXN0YW1wXCIpLFxuICAgIHN1cHBvcnQ6IHNldChcIk9EQkNkb3RUYWJsZSBkZWNpbWFsbGVzc0Zsb2F0IHplcm9sZXNzRmxvYXQgYmluYXJ5TnVtYmVyIGhleE51bWJlciBuQ2hhckNhc3QgY2hhcnNldENhc3RcIilcbiAgfSk7XG5cbiAgLy8gU3BhcmsgU1FMXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1zcGFya3NxbFwiLCB7XG4gICAgbmFtZTogXCJzcWxcIixcbiAgICBrZXl3b3Jkczogc2V0KFwiYWRkIGFmdGVyIGFsbCBhbHRlciBhbmFseXplIGFuZCBhbnRpIGFyY2hpdmUgYXJyYXkgYXMgYXNjIGF0IGJldHdlZW4gYnVja2V0IGJ1Y2tldHMgYnkgY2FjaGUgY2FzY2FkZSBjYXNlIGNhc3QgY2hhbmdlIGNsZWFyIGNsdXN0ZXIgY2x1c3RlcmVkIGNvZGVnZW4gY29sbGVjdGlvbiBjb2x1bW4gY29sdW1ucyBjb21tZW50IGNvbW1pdCBjb21wYWN0IGNvbXBhY3Rpb25zIGNvbXB1dGUgY29uY2F0ZW5hdGUgY29zdCBjcmVhdGUgY3Jvc3MgY3ViZSBjdXJyZW50IGN1cnJlbnRfZGF0ZSBjdXJyZW50X3RpbWVzdGFtcCBkYXRhYmFzZSBkYXRhYmFzZXMgZGF0YXRhIGRicHJvcGVydGllcyBkZWZpbmVkIGRlbGV0ZSBkZWxpbWl0ZWQgZGVueSBkZXNjIGRlc2NyaWJlIGRmcyBkaXJlY3RvcmllcyBkaXN0aW5jdCBkaXN0cmlidXRlIGRyb3AgZWxzZSBlbmQgZXNjYXBlZCBleGNlcHQgZXhjaGFuZ2UgZXhpc3RzIGV4cGxhaW4gZXhwb3J0IGV4dGVuZGVkIGV4dGVybmFsIGZhbHNlIGZpZWxkcyBmaWxlZm9ybWF0IGZpcnN0IGZvbGxvd2luZyBmb3IgZm9ybWF0IGZvcm1hdHRlZCBmcm9tIGZ1bGwgZnVuY3Rpb24gZnVuY3Rpb25zIGdsb2JhbCBncmFudCBncm91cCBncm91cGluZyBoYXZpbmcgaWYgaWdub3JlIGltcG9ydCBpbiBpbmRleCBpbmRleGVzIGlubmVyIGlucGF0aCBpbnB1dGZvcm1hdCBpbnNlcnQgaW50ZXJzZWN0IGludGVydmFsIGludG8gaXMgaXRlbXMgam9pbiBrZXlzIGxhc3QgbGF0ZXJhbCBsYXp5IGxlZnQgbGlrZSBsaW1pdCBsaW5lcyBsaXN0IGxvYWQgbG9jYWwgbG9jYXRpb24gbG9jayBsb2NrcyBsb2dpY2FsIG1hY3JvIG1hcCBtaW51cyBtc2NrIG5hdHVyYWwgbm8gbm90IG51bGwgbnVsbHMgb2Ygb24gb3B0aW1pemUgb3B0aW9uIG9wdGlvbnMgb3Igb3JkZXIgb3V0IG91dGVyIG91dHB1dGZvcm1hdCBvdmVyIG92ZXJ3cml0ZSBwYXJ0aXRpb24gcGFydGl0aW9uZWQgcGFydGl0aW9ucyBwZXJjZW50IHByZWNlZGluZyBwcmluY2lwYWxzIHB1cmdlIHJhbmdlIHJlY29yZHJlYWRlciByZWNvcmR3cml0ZXIgcmVjb3ZlciByZWR1Y2UgcmVmcmVzaCByZWdleHAgcmVuYW1lIHJlcGFpciByZXBsYWNlIHJlc2V0IHJlc3RyaWN0IHJldm9rZSByaWdodCBybGlrZSByb2xlIHJvbGVzIHJvbGxiYWNrIHJvbGx1cCByb3cgcm93cyBzY2hlbWEgc2NoZW1hcyBzZWxlY3Qgc2VtaSBzZXBhcmF0ZWQgc2VyZGUgc2VyZGVwcm9wZXJ0aWVzIHNldCBzZXRzIHNob3cgc2tld2VkIHNvcnQgc29ydGVkIHN0YXJ0IHN0YXRpc3RpY3Mgc3RvcmVkIHN0cmF0aWZ5IHN0cnVjdCB0YWJsZSB0YWJsZXMgdGFibGVzYW1wbGUgdGJscHJvcGVydGllcyB0ZW1wIHRlbXBvcmFyeSB0ZXJtaW5hdGVkIHRoZW4gdG8gdG91Y2ggdHJhbnNhY3Rpb24gdHJhbnNhY3Rpb25zIHRyYW5zZm9ybSB0cnVlIHRydW5jYXRlIHVuYXJjaGl2ZSB1bmJvdW5kZWQgdW5jYWNoZSB1bmlvbiB1bmxvY2sgdW5zZXQgdXNlIHVzaW5nIHZhbHVlcyB2aWV3IHdoZW4gd2hlcmUgd2luZG93IHdpdGhcIiksXG4gICAgYnVpbHRpbjogc2V0KFwidGlueWludCBzbWFsbGludCBpbnQgYmlnaW50IGJvb2xlYW4gZmxvYXQgZG91YmxlIHN0cmluZyBiaW5hcnkgdGltZXN0YW1wIGRlY2ltYWwgYXJyYXkgbWFwIHN0cnVjdCB1bmlvbnR5cGUgZGVsaW1pdGVkIHNlcmRlIHNlcXVlbmNlZmlsZSB0ZXh0ZmlsZSByY2ZpbGUgaW5wdXRmb3JtYXQgb3V0cHV0Zm9ybWF0XCIpLFxuICAgIGF0b21zOiBzZXQoXCJmYWxzZSB0cnVlIG51bGxcIiksXG4gICAgb3BlcmF0b3JDaGFyczogL15bKlxcLytcXC0lPD4hPX4mfF5dLyxcbiAgICBkYXRlU1FMOiBzZXQoXCJkYXRlIHRpbWUgdGltZXN0YW1wXCIpLFxuICAgIHN1cHBvcnQ6IHNldChcIk9EQkNkb3RUYWJsZSBkb3VibGVRdW90ZSB6ZXJvbGVzc0Zsb2F0XCIpXG4gIH0pO1xuXG4gIC8vIEVzcGVyXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1lc3BlclwiLCB7XG4gICAgbmFtZTogXCJzcWxcIixcbiAgICBjbGllbnQ6IHNldChcInNvdXJjZVwiKSxcbiAgICAvLyBodHRwOi8vd3d3LmVzcGVydGVjaC5jb20vZXNwZXIvcmVsZWFzZS01LjUuMC9lc3Blci1yZWZlcmVuY2UvaHRtbC9hcHBlbmRpeF9rZXl3b3Jkcy5odG1sXG4gICAga2V5d29yZHM6IHNldChcImFsdGVyIGFuZCBhcyBhc2MgYmV0d2VlbiBieSBjb3VudCBjcmVhdGUgZGVsZXRlIGRlc2MgZGlzdGluY3QgZHJvcCBmcm9tIGdyb3VwIGhhdmluZyBpbiBpbnNlcnQgaW50byBpcyBqb2luIGxpa2Ugbm90IG9uIG9yIG9yZGVyIHNlbGVjdCBzZXQgdGFibGUgdW5pb24gdXBkYXRlIHZhbHVlcyB3aGVyZSBsaW1pdCBhZnRlciBhbGwgYW5kIGFzIGF0IGFzYyBhdmVkZXYgYXZnIGJldHdlZW4gYnkgY2FzZSBjYXN0IGNvYWxlc2NlIGNvdW50IGNyZWF0ZSBjdXJyZW50X3RpbWVzdGFtcCBkYXkgZGF5cyBkZWxldGUgZGVmaW5lIGRlc2MgZGlzdGluY3QgZWxzZSBlbmQgZXNjYXBlIGV2ZW50cyBldmVyeSBleGlzdHMgZmFsc2UgZmlyc3QgZnJvbSBmdWxsIGdyb3VwIGhhdmluZyBob3VyIGhvdXJzIGluIGlubmVyIGluc2VydCBpbnN0YW5jZW9mIGludG8gaXJzdHJlYW0gaXMgaXN0cmVhbSBqb2luIGxhc3QgbGFzdHdlZWtkYXkgbGVmdCBsaW1pdCBsaWtlIG1heCBtYXRjaF9yZWNvZ25pemUgbWF0Y2hlcyBtZWRpYW4gbWVhc3VyZXMgbWV0YWRhdGFzcWwgbWluIG1pbnV0ZSBtaW51dGVzIG1zZWMgbWlsbGlzZWNvbmQgbWlsbGlzZWNvbmRzIG5vdCBudWxsIG9mZnNldCBvbiBvciBvcmRlciBvdXRlciBvdXRwdXQgcGFydGl0aW9uIHBhdHRlcm4gcHJldiBwcmlvciByZWdleHAgcmV0YWluLXVuaW9uIHJldGFpbi1pbnRlcnNlY3Rpb24gcmlnaHQgcnN0cmVhbSBzZWMgc2Vjb25kIHNlY29uZHMgc2VsZWN0IHNldCBzb21lIHNuYXBzaG90IHNxbCBzdGRkZXYgc3VtIHRoZW4gdHJ1ZSB1bmlkaXJlY3Rpb25hbCB1bnRpbCB1cGRhdGUgdmFyaWFibGUgd2Vla2RheSB3aGVuIHdoZXJlIHdpbmRvd1wiKSxcbiAgICBidWlsdGluOiB7fSxcbiAgICBhdG9tczogc2V0KFwiZmFsc2UgdHJ1ZSBudWxsXCIpLFxuICAgIG9wZXJhdG9yQ2hhcnM6IC9eWyorXFwtJTw+IT0mfF5cXC8jQD9+XS8sXG4gICAgZGF0ZVNRTDogc2V0KFwidGltZVwiKSxcbiAgICBzdXBwb3J0OiBzZXQoXCJkZWNpbWFsbGVzc0Zsb2F0IHplcm9sZXNzRmxvYXQgYmluYXJ5TnVtYmVyIGhleE51bWJlclwiKVxuICB9KTtcbn0pO1xuXG4vKlxuICBIb3cgUHJvcGVydGllcyBvZiBNaW1lIFR5cGVzIGFyZSB1c2VkIGJ5IFNRTCBNb2RlXG4gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBrZXl3b3JkczpcbiAgICBBIGxpc3Qgb2Yga2V5d29yZHMgeW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQuXG4gIGJ1aWx0aW46XG4gICAgQSBsaXN0IG9mIGJ1aWx0aW4gdHlwZXMgeW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQgKGlmIHlvdSB3YW50IHR5cGVzIHRvIGJlIG9mIGNsYXNzIFwiYnVpbHRpblwiIGluc3RlYWQgb2YgXCJrZXl3b3JkXCIpLlxuICBvcGVyYXRvckNoYXJzOlxuICAgIEFsbCBjaGFyYWN0ZXJzIHRoYXQgbXVzdCBiZSBoYW5kbGVkIGFzIG9wZXJhdG9ycy5cbiAgY2xpZW50OlxuICAgIENvbW1hbmRzIHBhcnNlZCBhbmQgZXhlY3V0ZWQgYnkgdGhlIGNsaWVudCAobm90IHRoZSBzZXJ2ZXIpLlxuICBzdXBwb3J0OlxuICAgIEEgbGlzdCBvZiBzdXBwb3J0ZWQgc3ludGF4ZXMgd2hpY2ggYXJlIG5vdCBjb21tb24sIGJ1dCBhcmUgc3VwcG9ydGVkIGJ5IG1vcmUgdGhhbiAxIERCTVMuXG4gICAgKiBPREJDZG90VGFibGU6IC50YWJsZU5hbWVcbiAgICAqIHplcm9sZXNzRmxvYXQ6IC4xXG4gICAgKiBkb3VibGVRdW90ZVxuICAgICogbkNoYXJDYXN0OiBOJ3N0cmluZydcbiAgICAqIGNoYXJzZXRDYXN0OiBfdXRmOCdzdHJpbmcnXG4gICAgKiBjb21tZW50SGFzaDogdXNlICMgY2hhciBmb3IgY29tbWVudHNcbiAgICAqIGNvbW1lbnRTbGFzaFNsYXNoOiB1c2UgLy8gZm9yIGNvbW1lbnRzXG4gICAgKiBjb21tZW50U3BhY2VSZXF1aXJlZDogcmVxdWlyZSBhIHNwYWNlIGFmdGVyIC0tIGZvciBjb21tZW50c1xuICBhdG9tczpcbiAgICBLZXl3b3JkcyB0aGF0IG11c3QgYmUgaGlnaGxpZ2h0ZWQgYXMgYXRvbXMsLiBTb21lIERCTVMncyBzdXBwb3J0IG1vcmUgYXRvbXMgdGhhbiBvdGhlcnM6XG4gICAgVU5LTk9XTiwgSU5GSU5JVFksIFVOREVSRkxPVywgTmFOLi4uXG4gIGRhdGVTUUw6XG4gICAgVXNlZCBmb3IgZGF0ZS90aW1lIFNRTCBzdGFuZGFyZCBzeW50YXgsIGJlY2F1c2Ugbm90IGFsbCBEQk1TJ3Mgc3VwcG9ydCBzYW1lIHRlbXBvcmFsIHR5cGVzLlxuKi9cbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8vIFN0eWx1cyBtb2RlIGNyZWF0ZWQgYnkgRG1pdHJ5IEtpc2VseW92IGh0dHA6Ly9naXQuaW8vQWFSQlxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJzdHlsdXNcIiwgZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCxcbiAgICAgICAgaW5kZW50VW5pdFN0cmluZyA9ICcnLFxuICAgICAgICB0YWdLZXl3b3JkcyA9IGtleVNldCh0YWdLZXl3b3Jkc18pLFxuICAgICAgICB0YWdWYXJpYWJsZXNSZWdleHAgPSAvXihhfGJ8aXxzfGNvbHxlbSkkL2ksXG4gICAgICAgIHByb3BlcnR5S2V5d29yZHMgPSBrZXlTZXQocHJvcGVydHlLZXl3b3Jkc18pLFxuICAgICAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgPSBrZXlTZXQobm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzXyksXG4gICAgICAgIHZhbHVlS2V5d29yZHMgPSBrZXlTZXQodmFsdWVLZXl3b3Jkc18pLFxuICAgICAgICBjb2xvcktleXdvcmRzID0ga2V5U2V0KGNvbG9yS2V5d29yZHNfKSxcbiAgICAgICAgZG9jdW1lbnRUeXBlcyA9IGtleVNldChkb2N1bWVudFR5cGVzXyksXG4gICAgICAgIGRvY3VtZW50VHlwZXNSZWdleHAgPSB3b3JkUmVnZXhwKGRvY3VtZW50VHlwZXNfKSxcbiAgICAgICAgbWVkaWFGZWF0dXJlcyA9IGtleVNldChtZWRpYUZlYXR1cmVzXyksXG4gICAgICAgIG1lZGlhVHlwZXMgPSBrZXlTZXQobWVkaWFUeXBlc18pLFxuICAgICAgICBmb250UHJvcGVydGllcyA9IGtleVNldChmb250UHJvcGVydGllc18pLFxuICAgICAgICBvcGVyYXRvcnNSZWdleHAgPSAvXlxccyooWy5dezIsM318JiZ8XFx8XFx8fFxcKlxcKnxbPyE9Ol0/PXxbLSsqXFwvJTw+XT0/fFxcPzp8XFx+KS8sXG4gICAgICAgIHdvcmRPcGVyYXRvcktleXdvcmRzUmVnZXhwID0gd29yZFJlZ2V4cCh3b3JkT3BlcmF0b3JLZXl3b3Jkc18pLFxuICAgICAgICBibG9ja0tleXdvcmRzID0ga2V5U2V0KGJsb2NrS2V5d29yZHNfKSxcbiAgICAgICAgdmVuZG9yUHJlZml4ZXNSZWdleHAgPSBuZXcgUmVnRXhwKC9eXFwtKG1venxtc3xvfHdlYmtpdCktL2kpLFxuICAgICAgICBjb21tb25BdG9tcyA9IGtleVNldChjb21tb25BdG9tc18pLFxuICAgICAgICBmaXJzdFdvcmRNYXRjaCA9IFwiXCIsXG4gICAgICAgIHN0YXRlcyA9IHt9LFxuICAgICAgICBjaCxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIG92ZXJyaWRlO1xuXG4gICAgd2hpbGUgKGluZGVudFVuaXRTdHJpbmcubGVuZ3RoIDwgaW5kZW50VW5pdCkgaW5kZW50VW5pdFN0cmluZyArPSAnICc7XG5cbiAgICAvKipcbiAgICAgKiBUb2tlbml6ZXJzXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGZpcnN0V29yZE1hdGNoID0gc3RyZWFtLnN0cmluZy5tYXRjaCgvKF5bXFx3LV0rXFxzKj1cXHMqJCl8KF5cXHMqW1xcdy1dK1xccyo9XFxzKltcXHctXSl8KF5cXHMqKFxcLnwjfEB8XFwkfFxcJnxcXFt8XFxkfFxcK3w6Oj98XFx7fFxcPnx+fFxcLyk/XFxzKltcXHctXSooW2EtejAtOS1dfFxcKnxcXC9cXCopKFxcKHwsKT8pLyk7XG4gICAgICBzdGF0ZS5jb250ZXh0LmxpbmUuZmlyc3RXb3JkID0gZmlyc3RXb3JkTWF0Y2ggPyBmaXJzdFdvcmRNYXRjaFswXS5yZXBsYWNlKC9eXFxzKi8sIFwiXCIpIDogXCJcIjtcbiAgICAgIHN0YXRlLmNvbnRleHQubGluZS5pbmRlbnQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgIGNoID0gc3RyZWFtLnBlZWsoKTtcblxuICAgICAgLy8gTGluZSBjb21tZW50XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKFwiLy9cIikpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gW1wiY29tbWVudFwiLCBcImNvbW1lbnRcIl07XG4gICAgICB9XG4gICAgICAvLyBCbG9jayBjb21tZW50XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKFwiLypcIikpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50O1xuICAgICAgICByZXR1cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmluZ1xuICAgICAgaWYgKGNoID09IFwiXFxcIlwiIHx8IGNoID09IFwiJ1wiKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpO1xuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICAvLyBEZWZcbiAgICAgIGlmIChjaCA9PSBcIkBcIikge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXFxcLV0vKTtcbiAgICAgICAgcmV0dXJuIFtcImRlZlwiLCBzdHJlYW0uY3VycmVudCgpXTtcbiAgICAgIH1cbiAgICAgIC8vIElEIHNlbGVjdG9yIG9yIEhleCBjb2xvclxuICAgICAgaWYgKGNoID09IFwiI1wiKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIC8vIEhleCBjb2xvclxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eWzAtOWEtZl17M30oWzAtOWEtZl0oWzAtOWEtZl17Mn0pezAsMn0pP1xcYig/IS0pL2kpKSB7XG4gICAgICAgICAgcmV0dXJuIFtcImF0b21cIiwgXCJhdG9tXCJdO1xuICAgICAgICB9XG4gICAgICAgIC8vIElEIHNlbGVjdG9yXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bYS16XVtcXHctXSovaSkpIHtcbiAgICAgICAgICByZXR1cm4gW1wiYnVpbHRpblwiLCBcImhhc2hcIl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFZlbmRvciBwcmVmaXhlc1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCh2ZW5kb3JQcmVmaXhlc1JlZ2V4cCkpIHtcbiAgICAgICAgcmV0dXJuIFtcIm1ldGFcIiwgXCJ2ZW5kb3ItcHJlZml4ZXNcIl07XG4gICAgICB9XG4gICAgICAvLyBOdW1iZXJzXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLT9bMC05XT9cXC4/WzAtOV0vKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1thLXolXS9pKTtcbiAgICAgICAgcmV0dXJuIFtcIm51bWJlclwiLCBcInVuaXRcIl07XG4gICAgICB9XG4gICAgICAvLyAhaW1wb3J0YW50fG9wdGlvbmFsXG4gICAgICBpZiAoY2ggPT0gXCIhXCIpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIFtzdHJlYW0ubWF0Y2goL14oaW1wb3J0YW50fG9wdGlvbmFsKS9pKSA/IFwia2V5d29yZFwiOiBcIm9wZXJhdG9yXCIsIFwiaW1wb3J0YW50XCJdO1xuICAgICAgfVxuICAgICAgLy8gQ2xhc3NcbiAgICAgIGlmIChjaCA9PSBcIi5cIiAmJiBzdHJlYW0ubWF0Y2goL15cXC5bYS16XVtcXHctXSovaSkpIHtcbiAgICAgICAgcmV0dXJuIFtcInF1YWxpZmllclwiLCBcInF1YWxpZmllclwiXTtcbiAgICAgIH1cbiAgICAgIC8vIHVybCB1cmwtcHJlZml4IGRvbWFpbiByZWdleHBcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goZG9jdW1lbnRUeXBlc1JlZ2V4cCkpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gXCIoXCIpIHN0YXRlLnRva2VuaXplID0gdG9rZW5QYXJlbnRoZXNpemVkO1xuICAgICAgICByZXR1cm4gW1wicHJvcGVydHlcIiwgXCJ3b3JkXCJdO1xuICAgICAgfVxuICAgICAgLy8gTWl4aW5zIC8gRnVuY3Rpb25zXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW2Etel1bXFx3LV0qXFwoL2kpKSB7XG4gICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgIHJldHVybiBbXCJrZXl3b3JkXCIsIFwibWl4aW5cIl07XG4gICAgICB9XG4gICAgICAvLyBCbG9jayBtaXhpbnNcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14oXFwrfC0pW2Etel1bXFx3LV0qXFwoL2kpKSB7XG4gICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgIHJldHVybiBbXCJrZXl3b3JkXCIsIFwiYmxvY2stbWl4aW5cIl07XG4gICAgICB9XG4gICAgICAvLyBQYXJlbnQgUmVmZXJlbmNlIEJFTSBuYW1pbmdcbiAgICAgIGlmIChzdHJlYW0uc3RyaW5nLm1hdGNoKC9eXFxzKiYvKSAmJiBzdHJlYW0ubWF0Y2goL15bLV9dK1thLXpdW1xcdy1dKi8pKSB7XG4gICAgICAgIHJldHVybiBbXCJxdWFsaWZpZXJcIiwgXCJxdWFsaWZpZXJcIl07XG4gICAgICB9XG4gICAgICAvLyAvIFJvb3QgUmVmZXJlbmNlICYgUGFyZW50IFJlZmVyZW5jZVxuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXihcXC98JikoLXxffDp8XFwufCN8W2Etel0pLykpIHtcbiAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICAgICAgcmV0dXJuIFtcInZhcmlhYmxlLTNcIiwgXCJyZWZlcmVuY2VcIl07XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eJnsxfVxccyokLykpIHtcbiAgICAgICAgcmV0dXJuIFtcInZhcmlhYmxlLTNcIiwgXCJyZWZlcmVuY2VcIl07XG4gICAgICB9XG4gICAgICAvLyBXb3JkIG9wZXJhdG9yXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHdvcmRPcGVyYXRvcktleXdvcmRzUmVnZXhwKSkge1xuICAgICAgICByZXR1cm4gW1wib3BlcmF0b3JcIiwgXCJvcGVyYXRvclwiXTtcbiAgICAgIH1cbiAgICAgIC8vIFdvcmRcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXCQ/Wy1fXSpbYS16MC05XStbXFx3LV0qL2kpKSB7XG4gICAgICAgIC8vIFZhcmlhYmxlXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14oXFwufFxcWylbXFx3LVxcJ1xcXCJcXF1dKy9pLCBmYWxzZSkpIHtcbiAgICAgICAgICBpZiAoIXdvcmRJc1RhZyhzdHJlYW0uY3VycmVudCgpKSkge1xuICAgICAgICAgICAgc3RyZWFtLm1hdGNoKC9cXC4vKTtcbiAgICAgICAgICAgIHJldHVybiBbXCJ2YXJpYWJsZS0yXCIsIFwidmFyaWFibGUtbmFtZVwiXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcInZhcmlhYmxlLTJcIiwgXCJ3b3JkXCJdO1xuICAgICAgfVxuICAgICAgLy8gT3BlcmF0b3JzXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKG9wZXJhdG9yc1JlZ2V4cCkpIHtcbiAgICAgICAgcmV0dXJuIFtcIm9wZXJhdG9yXCIsIHN0cmVhbS5jdXJyZW50KCldO1xuICAgICAgfVxuICAgICAgLy8gRGVsaW1pdGVyc1xuICAgICAgaWYgKC9bOjsse31cXFtcXF1cXChcXCldLy50ZXN0KGNoKSkge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gW251bGwsIGNoXTtcbiAgICAgIH1cbiAgICAgIC8vIE5vbi1kZXRlY3RlZCBpdGVtc1xuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9rZW4gY29tbWVudFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRva2VuQ0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG1heWJlRW5kICYmIGNoID09IFwiL1wiKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG1heWJlRW5kID0gKGNoID09IFwiKlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXCJjb21tZW50XCIsIFwiY29tbWVudFwiXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2tlbiBzdHJpbmdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7XG4gICAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgICBpZiAocXVvdGUgPT0gXCIpXCIpIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09IFwiXFxcXFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaCA9PSBxdW90ZSB8fCAhZXNjYXBlZCAmJiBxdW90ZSAhPSBcIilcIikgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgICByZXR1cm4gW1wic3RyaW5nXCIsIFwic3RyaW5nXCJdO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2tlbiBwYXJlbnRoZXNpemVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9rZW5QYXJlbnRoZXNpemVkKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7IC8vIE11c3QgYmUgXCIoXCJcbiAgICAgIGlmICghc3RyZWFtLm1hdGNoKC9cXHMqW1xcXCJcXCcpXS8sIGZhbHNlKSlcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhcIilcIik7XG4gICAgICBlbHNlXG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDtcbiAgICAgIHJldHVybiBbbnVsbCwgXCIoXCJdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnRleHQgbWFuYWdlbWVudFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIENvbnRleHQodHlwZSwgaW5kZW50LCBwcmV2LCBsaW5lKSB7XG4gICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgdGhpcy5pbmRlbnQgPSBpbmRlbnQ7XG4gICAgICB0aGlzLnByZXYgPSBwcmV2O1xuICAgICAgdGhpcy5saW5lID0gbGluZSB8fCB7Zmlyc3RXb3JkOiBcIlwiLCBpbmRlbnQ6IDB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIHR5cGUsIGluZGVudCkge1xuICAgICAgaW5kZW50ID0gaW5kZW50ID49IDAgPyBpbmRlbnQgOiBpbmRlbnRVbml0O1xuICAgICAgc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHR5cGUsIHN0cmVhbS5pbmRlbnRhdGlvbigpICsgaW5kZW50LCBzdGF0ZS5jb250ZXh0KTtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUsIGN1cnJlbnRJbmRlbnQpIHtcbiAgICAgIHZhciBjb250ZXh0SW5kZW50ID0gc3RhdGUuY29udGV4dC5pbmRlbnQgLSBpbmRlbnRVbml0O1xuICAgICAgY3VycmVudEluZGVudCA9IGN1cnJlbnRJbmRlbnQgfHwgZmFsc2U7XG4gICAgICBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICAgICAgaWYgKGN1cnJlbnRJbmRlbnQpIHN0YXRlLmNvbnRleHQuaW5kZW50ID0gY29udGV4dEluZGVudDtcbiAgICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgICByZXR1cm4gc3RhdGVzW3N0YXRlLmNvbnRleHQudHlwZV0odHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlLCBuKSB7XG4gICAgICBmb3IgKHZhciBpID0gbiB8fCAxOyBpID4gMDsgaS0tKVxuICAgICAgICBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICAgICAgcmV0dXJuIHBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3b3JkSXNUYWcod29yZCkge1xuICAgICAgcmV0dXJuIHdvcmQudG9Mb3dlckNhc2UoKSBpbiB0YWdLZXl3b3JkcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3b3JkSXNQcm9wZXJ0eSh3b3JkKSB7XG4gICAgICB3b3JkID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHdvcmQgaW4gcHJvcGVydHlLZXl3b3JkcyB8fCB3b3JkIGluIGZvbnRQcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdvcmRJc0Jsb2NrKHdvcmQpIHtcbiAgICAgIHJldHVybiB3b3JkLnRvTG93ZXJDYXNlKCkgaW4gYmxvY2tLZXl3b3JkcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3b3JkSXNWZW5kb3JQcmVmaXgod29yZCkge1xuICAgICAgcmV0dXJuIHdvcmQudG9Mb3dlckNhc2UoKS5tYXRjaCh2ZW5kb3JQcmVmaXhlc1JlZ2V4cCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd29yZEFzVmFsdWUod29yZCkge1xuICAgICAgdmFyIHdvcmRMQyA9IHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBvdmVycmlkZSA9IFwidmFyaWFibGUtMlwiO1xuICAgICAgaWYgKHdvcmRJc1RhZyh3b3JkKSkgb3ZlcnJpZGUgPSBcInRhZ1wiO1xuICAgICAgZWxzZSBpZiAod29yZElzQmxvY2sod29yZCkpIG92ZXJyaWRlID0gXCJibG9jay1rZXl3b3JkXCI7XG4gICAgICBlbHNlIGlmICh3b3JkSXNQcm9wZXJ0eSh3b3JkKSkgb3ZlcnJpZGUgPSBcInByb3BlcnR5XCI7XG4gICAgICBlbHNlIGlmICh3b3JkTEMgaW4gdmFsdWVLZXl3b3JkcyB8fCB3b3JkTEMgaW4gY29tbW9uQXRvbXMpIG92ZXJyaWRlID0gXCJhdG9tXCI7XG4gICAgICBlbHNlIGlmICh3b3JkTEMgPT0gXCJyZXR1cm5cIiB8fCB3b3JkTEMgaW4gY29sb3JLZXl3b3Jkcykgb3ZlcnJpZGUgPSBcImtleXdvcmRcIjtcblxuICAgICAgLy8gRm9udCBmYW1pbHlcbiAgICAgIGVsc2UgaWYgKHdvcmQubWF0Y2goL15bQS1aXS8pKSBvdmVycmlkZSA9IFwic3RyaW5nXCI7XG4gICAgICByZXR1cm4gb3ZlcnJpZGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHlwZUlzQmxvY2sodHlwZSwgc3RyZWFtKSB7XG4gICAgICByZXR1cm4gKChlbmRPZkxpbmUoc3RyZWFtKSAmJiAodHlwZSA9PSBcIntcIiB8fCB0eXBlID09IFwiXVwiIHx8IHR5cGUgPT0gXCJoYXNoXCIgfHwgdHlwZSA9PSBcInF1YWxpZmllclwiKSkgfHwgdHlwZSA9PSBcImJsb2NrLW1peGluXCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHR5cGVJc0ludGVycG9sYXRpb24odHlwZSwgc3RyZWFtKSB7XG4gICAgICByZXR1cm4gdHlwZSA9PSBcIntcIiAmJiBzdHJlYW0ubWF0Y2goL15cXHMqXFwkP1tcXHctXSsvaSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHR5cGVJc1BzZXVkbyh0eXBlLCBzdHJlYW0pIHtcbiAgICAgIHJldHVybiB0eXBlID09IFwiOlwiICYmIHN0cmVhbS5tYXRjaCgvXlthLXotXSsvLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZkxpbmUoc3RyZWFtKSB7XG4gICAgICByZXR1cm4gc3RyZWFtLnNvbCgpIHx8IHN0cmVhbS5zdHJpbmcubWF0Y2gobmV3IFJlZ0V4cChcIl5cXFxccypcIiArIGVzY2FwZVJlZ0V4cChzdHJlYW0uY3VycmVudCgpKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mTGluZShzdHJlYW0pIHtcbiAgICAgIHJldHVybiBzdHJlYW0uZW9sKCkgfHwgc3RyZWFtLm1hdGNoKC9eXFxzKiQvLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlyc3RXb3JkT2ZMaW5lKGxpbmUpIHtcbiAgICAgIHZhciByZSA9IC9eXFxzKlstX10qW2EtejAtOV0rW1xcdy1dKi9pO1xuICAgICAgdmFyIHJlc3VsdCA9IHR5cGVvZiBsaW5lID09IFwic3RyaW5nXCIgPyBsaW5lLm1hdGNoKHJlKSA6IGxpbmUuc3RyaW5nLm1hdGNoKHJlKTtcbiAgICAgIHJldHVybiByZXN1bHQgPyByZXN1bHRbMF0ucmVwbGFjZSgvXlxccyovLCBcIlwiKSA6IFwiXCI7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBCbG9ja1xuICAgICAqL1xuICAgIHN0YXRlcy5ibG9jayA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmICgodHlwZSA9PSBcImNvbW1lbnRcIiAmJiBzdGFydE9mTGluZShzdHJlYW0pKSB8fFxuICAgICAgICAgICh0eXBlID09IFwiLFwiICYmIGVuZE9mTGluZShzdHJlYW0pKSB8fFxuICAgICAgICAgIHR5cGUgPT0gXCJtaXhpblwiKSB7XG4gICAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImJsb2NrXCIsIDApO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVJc0ludGVycG9sYXRpb24odHlwZSwgc3RyZWFtKSkge1xuICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJpbnRlcnBvbGF0aW9uXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGVuZE9mTGluZShzdHJlYW0pICYmIHR5cGUgPT0gXCJdXCIpIHtcbiAgICAgICAgaWYgKCEvXlxccyooXFwufCN8OnxcXFt8XFwqfCYpLy50ZXN0KHN0cmVhbS5zdHJpbmcpICYmICF3b3JkSXNUYWcoZmlyc3RXb3JkT2ZMaW5lKHN0cmVhbSkpKSB7XG4gICAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIiwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlSXNCbG9jayh0eXBlLCBzdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImJsb2NrXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT0gXCJ9XCIgJiYgZW5kT2ZMaW5lKHN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIiwgMCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlLW5hbWVcIikge1xuICAgICAgICBpZiAoc3RyZWFtLnN0cmluZy5tYXRjaCgvXlxccz9cXCRbXFx3LVxcLlxcW1xcXVxcJ1xcXCJdKyQvKSB8fCB3b3JkSXNCbG9jayhmaXJzdFdvcmRPZkxpbmUoc3RyZWFtKSkpIHtcbiAgICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJ2YXJpYWJsZU5hbWVcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwidmFyaWFibGVOYW1lXCIsIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBcIj1cIikge1xuICAgICAgICBpZiAoIWVuZE9mTGluZShzdHJlYW0pICYmICF3b3JkSXNCbG9jayhmaXJzdFdvcmRPZkxpbmUoc3RyZWFtKSkpIHtcbiAgICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJibG9ja1wiLCAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJibG9ja1wiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09IFwiKlwiKSB7XG4gICAgICAgIGlmIChlbmRPZkxpbmUoc3RyZWFtKSB8fCBzdHJlYW0ubWF0Y2goL1xccyooLHxcXC58I3xcXFt8Onx7KS8sZmFsc2UpKSB7XG4gICAgICAgICAgb3ZlcnJpZGUgPSBcInRhZ1wiO1xuICAgICAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImJsb2NrXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZUlzUHNldWRvKHR5cGUsIHN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwicHNldWRvXCIpO1xuICAgICAgfVxuICAgICAgaWYgKC9AKGZvbnQtZmFjZXxtZWRpYXxzdXBwb3J0c3woLW1vei0pP2RvY3VtZW50KS8udGVzdCh0eXBlKSkge1xuICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgZW5kT2ZMaW5lKHN0cmVhbSkgPyBcImJsb2NrXCIgOiBcImF0QmxvY2tcIik7XG4gICAgICB9XG4gICAgICBpZiAoL0AoLShtb3p8bXN8b3x3ZWJraXQpLSk/a2V5ZnJhbWVzJC8udGVzdCh0eXBlKSkge1xuICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJrZXlmcmFtZXNcIik7XG4gICAgICB9XG4gICAgICBpZiAoL0BleHRlbmRzPy8udGVzdCh0eXBlKSkge1xuICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJleHRlbmRcIiwgMCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSAmJiB0eXBlLmNoYXJBdCgwKSA9PSBcIkBcIikge1xuXG4gICAgICAgIC8vIFByb3BlcnR5IExvb2t1cFxuICAgICAgICBpZiAoc3RyZWFtLmluZGVudGF0aW9uKCkgPiAwICYmIHdvcmRJc1Byb3BlcnR5KHN0cmVhbS5jdXJyZW50KCkuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgb3ZlcnJpZGUgPSBcInZhcmlhYmxlLTJcIjtcbiAgICAgICAgICByZXR1cm4gXCJibG9ja1wiO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvKEBpbXBvcnR8QHJlcXVpcmV8QGNoYXJzZXQpLy50ZXN0KHR5cGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIiwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBcInJlZmVyZW5jZVwiICYmIGVuZE9mTGluZShzdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImJsb2NrXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT0gXCIoXCIpIHtcbiAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwicGFyZW5zXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PSBcInZlbmRvci1wcmVmaXhlc1wiKSB7XG4gICAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcInZlbmRvclByZWZpeGVzXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgICAgICBvdmVycmlkZSA9IHdvcmRBc1ZhbHVlKHdvcmQpO1xuXG4gICAgICAgIGlmIChvdmVycmlkZSA9PSBcInByb3BlcnR5XCIpIHtcbiAgICAgICAgICBpZiAoc3RhcnRPZkxpbmUoc3RyZWFtKSkge1xuICAgICAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIiwgMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG92ZXJyaWRlID0gXCJhdG9tXCI7XG4gICAgICAgICAgICByZXR1cm4gXCJibG9ja1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdmVycmlkZSA9PSBcInRhZ1wiKSB7XG5cbiAgICAgICAgICAvLyB0YWcgaXMgYSBjc3MgdmFsdWVcbiAgICAgICAgICBpZiAoL2VtYmVkfG1lbnV8cHJlfHByb2dyZXNzfHN1Ynx0YWJsZS8udGVzdCh3b3JkKSkge1xuICAgICAgICAgICAgaWYgKHdvcmRJc1Byb3BlcnR5KGZpcnN0V29yZE9mTGluZShzdHJlYW0pKSkge1xuICAgICAgICAgICAgICBvdmVycmlkZSA9IFwiYXRvbVwiO1xuICAgICAgICAgICAgICByZXR1cm4gXCJibG9ja1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHRhZyBpcyBhbiBhdHRyaWJ1dGVcbiAgICAgICAgICBpZiAoc3RyZWFtLnN0cmluZy5tYXRjaChuZXcgUmVnRXhwKFwiXFxcXFtcXFxccypcIiArIHdvcmQgKyBcInxcIiArIHdvcmQgK1wiXFxcXHMqXFxcXF1cIikpKSB7XG4gICAgICAgICAgICBvdmVycmlkZSA9IFwiYXRvbVwiO1xuICAgICAgICAgICAgcmV0dXJuIFwiYmxvY2tcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB0YWcgaXMgYSB2YXJpYWJsZVxuICAgICAgICAgIGlmICh0YWdWYXJpYWJsZXNSZWdleHAudGVzdCh3b3JkKSkge1xuICAgICAgICAgICAgaWYgKChzdGFydE9mTGluZShzdHJlYW0pICYmIHN0cmVhbS5zdHJpbmcubWF0Y2goLz0vKSkgfHxcbiAgICAgICAgICAgICAgICAoIXN0YXJ0T2ZMaW5lKHN0cmVhbSkgJiZcbiAgICAgICAgICAgICAgICAgIXN0cmVhbS5zdHJpbmcubWF0Y2goL14oXFxzKlxcLnwjfFxcJnxcXFt8XFwvfD58XFwqKS8pICYmXG4gICAgICAgICAgICAgICAgICF3b3JkSXNUYWcoZmlyc3RXb3JkT2ZMaW5lKHN0cmVhbSkpKSkge1xuICAgICAgICAgICAgICBvdmVycmlkZSA9IFwidmFyaWFibGUtMlwiO1xuICAgICAgICAgICAgICBpZiAod29yZElzQmxvY2soZmlyc3RXb3JkT2ZMaW5lKHN0cmVhbSkpKSAgcmV0dXJuIFwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGVuZE9mTGluZShzdHJlYW0pKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJibG9ja1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3ZlcnJpZGUgPT0gXCJibG9jay1rZXl3b3JkXCIpIHtcbiAgICAgICAgICBvdmVycmlkZSA9IFwia2V5d29yZFwiO1xuXG4gICAgICAgICAgLy8gUG9zdGZpeCBjb25kaXRpb25hbHNcbiAgICAgICAgICBpZiAoc3RyZWFtLmN1cnJlbnQoLyhpZnx1bmxlc3MpLykgJiYgIXN0YXJ0T2ZMaW5lKHN0cmVhbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBcImJsb2NrXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImJsb2NrXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3b3JkID09IFwicmV0dXJuXCIpIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImJsb2NrXCIsIDApO1xuXG4gICAgICAgIC8vIFBsYWNlaG9sZGVyIHNlbGVjdG9yXG4gICAgICAgIGlmIChvdmVycmlkZSA9PSBcInZhcmlhYmxlLTJcIiAmJiBzdHJlYW0uc3RyaW5nLm1hdGNoKC9eXFxzP1xcJFtcXHctXFwuXFxbXFxdXFwnXFxcIl0rJC8pKSB7XG4gICAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogUGFyZW5zXG4gICAgICovXG4gICAgc3RhdGVzLnBhcmVucyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJwYXJlbnNcIik7XG4gICAgICBpZiAodHlwZSA9PSBcIilcIikge1xuICAgICAgICBpZiAoc3RhdGUuY29udGV4dC5wcmV2LnR5cGUgPT0gXCJwYXJlbnNcIikge1xuICAgICAgICAgIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHN0cmVhbS5zdHJpbmcubWF0Y2goL15bYS16XVtcXHctXSpcXCgvaSkgJiYgZW5kT2ZMaW5lKHN0cmVhbSkpIHx8XG4gICAgICAgICAgICB3b3JkSXNCbG9jayhmaXJzdFdvcmRPZkxpbmUoc3RyZWFtKSkgfHxcbiAgICAgICAgICAgIC8oXFwufCN8OnxcXFt8XFwqfCZ8Pnx+fFxcK3xcXC8pLy50ZXN0KGZpcnN0V29yZE9mTGluZShzdHJlYW0pKSB8fFxuICAgICAgICAgICAgKCFzdHJlYW0uc3RyaW5nLm1hdGNoKC9eLT9bYS16XVtcXHctXFwuXFxbXFxdXFwnXFxcIl0qXFxzKj0vKSAmJlxuICAgICAgICAgICAgIHdvcmRJc1RhZyhmaXJzdFdvcmRPZkxpbmUoc3RyZWFtKSkpKSB7XG4gICAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5zdHJpbmcubWF0Y2goL15bXFwkLV0/W2Etel1bXFx3LVxcLlxcW1xcXVxcJ1xcXCJdKlxccyo9LykgfHxcbiAgICAgICAgICAgIHN0cmVhbS5zdHJpbmcubWF0Y2goL15cXHMqKFxcKHxcXCl8WzAtOV0pLykgfHxcbiAgICAgICAgICAgIHN0cmVhbS5zdHJpbmcubWF0Y2goL15cXHMrW2Etel1bXFx3LV0qXFwoL2kpIHx8XG4gICAgICAgICAgICBzdHJlYW0uc3RyaW5nLm1hdGNoKC9eXFxzK1tcXCQtXT9bYS16XS9pKSkge1xuICAgICAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImJsb2NrXCIsIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmRPZkxpbmUoc3RyZWFtKSkgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIik7XG4gICAgICAgIGVsc2UgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIiwgMCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSAmJiB0eXBlLmNoYXJBdCgwKSA9PSBcIkBcIiAmJiB3b3JkSXNQcm9wZXJ0eShzdHJlYW0uY3VycmVudCgpLnNsaWNlKDEpKSkge1xuICAgICAgICBvdmVycmlkZSA9IFwidmFyaWFibGUtMlwiO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgICAgICBvdmVycmlkZSA9IHdvcmRBc1ZhbHVlKHdvcmQpO1xuICAgICAgICBpZiAob3ZlcnJpZGUgPT0gXCJ0YWdcIiAmJiB0YWdWYXJpYWJsZXNSZWdleHAudGVzdCh3b3JkKSkge1xuICAgICAgICAgIG92ZXJyaWRlID0gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG92ZXJyaWRlID09IFwicHJvcGVydHlcIiB8fCB3b3JkID09IFwidG9cIikgb3ZlcnJpZGUgPSBcImF0b21cIjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09IFwidmFyaWFibGUtbmFtZVwiKSB7XG4gICAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcInZhcmlhYmxlTmFtZVwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlSXNQc2V1ZG8odHlwZSwgc3RyZWFtKSkge1xuICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJwc2V1ZG9cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlO1xuICAgIH07XG5cblxuICAgIC8qKlxuICAgICAqIFZlbmRvciBwcmVmaXhlc1xuICAgICAqL1xuICAgIHN0YXRlcy52ZW5kb3JQcmVmaXhlcyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7XG4gICAgICAgIG92ZXJyaWRlID0gXCJwcm9wZXJ0eVwiO1xuICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJibG9ja1wiLCAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBQc2V1ZG9cbiAgICAgKi9cbiAgICBzdGF0ZXMucHNldWRvID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKCF3b3JkSXNQcm9wZXJ0eShmaXJzdFdvcmRPZkxpbmUoc3RyZWFtLnN0cmluZykpKSB7XG4gICAgICAgIHN0cmVhbS5tYXRjaCgvXlthLXotXSsvKTtcbiAgICAgICAgb3ZlcnJpZGUgPSBcInZhcmlhYmxlLTNcIjtcbiAgICAgICAgaWYgKGVuZE9mTGluZShzdHJlYW0pKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJibG9ja1wiKTtcbiAgICAgICAgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogYXRCbG9ja1xuICAgICAqL1xuICAgIHN0YXRlcy5hdEJsb2NrID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHR5cGUgPT0gXCIoXCIpIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImF0QmxvY2tfcGFyZW5zXCIpO1xuICAgICAgaWYgKHR5cGVJc0Jsb2NrKHR5cGUsIHN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZUlzSW50ZXJwb2xhdGlvbih0eXBlLCBzdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImludGVycG9sYXRpb25cIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBcIndvcmRcIikge1xuICAgICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKC9eKG9ubHl8bm90fGFuZHxvcikkLy50ZXN0KHdvcmQpKVxuICAgICAgICAgIG92ZXJyaWRlID0gXCJrZXl3b3JkXCI7XG4gICAgICAgIGVsc2UgaWYgKGRvY3VtZW50VHlwZXMuaGFzT3duUHJvcGVydHkod29yZCkpXG4gICAgICAgICAgb3ZlcnJpZGUgPSBcInRhZ1wiO1xuICAgICAgICBlbHNlIGlmIChtZWRpYVR5cGVzLmhhc093blByb3BlcnR5KHdvcmQpKVxuICAgICAgICAgIG92ZXJyaWRlID0gXCJhdHRyaWJ1dGVcIjtcbiAgICAgICAgZWxzZSBpZiAobWVkaWFGZWF0dXJlcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSlcbiAgICAgICAgICBvdmVycmlkZSA9IFwicHJvcGVydHlcIjtcbiAgICAgICAgZWxzZSBpZiAobm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKVxuICAgICAgICAgIG92ZXJyaWRlID0gXCJzdHJpbmctMlwiO1xuICAgICAgICBlbHNlIG92ZXJyaWRlID0gd29yZEFzVmFsdWUoc3RyZWFtLmN1cnJlbnQoKSk7XG4gICAgICAgIGlmIChvdmVycmlkZSA9PSBcInRhZ1wiICYmIGVuZE9mTGluZShzdHJlYW0pKSB7XG4gICAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09IFwib3BlcmF0b3JcIiAmJiAvXihub3R8YW5kfG9yKSQvLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkpIHtcbiAgICAgICAgb3ZlcnJpZGUgPSBcImtleXdvcmRcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7XG4gICAgfTtcblxuICAgIHN0YXRlcy5hdEJsb2NrX3BhcmVucyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmICh0eXBlID09IFwie1wiIHx8IHR5cGUgPT0gXCJ9XCIpIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7XG4gICAgICBpZiAodHlwZSA9PSBcIilcIikge1xuICAgICAgICBpZiAoZW5kT2ZMaW5lKHN0cmVhbSkpIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImJsb2NrXCIpO1xuICAgICAgICBlbHNlIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImF0QmxvY2tcIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBcIndvcmRcIikge1xuICAgICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgb3ZlcnJpZGUgPSB3b3JkQXNWYWx1ZSh3b3JkKTtcbiAgICAgICAgaWYgKC9eKG1heHxtaW4pLy50ZXN0KHdvcmQpKSBvdmVycmlkZSA9IFwicHJvcGVydHlcIjtcbiAgICAgICAgaWYgKG92ZXJyaWRlID09IFwidGFnXCIpIHtcbiAgICAgICAgICB0YWdWYXJpYWJsZXNSZWdleHAudGVzdCh3b3JkKSA/IG92ZXJyaWRlID0gXCJ2YXJpYWJsZS0yXCIgOiBvdmVycmlkZSA9IFwiYXRvbVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGVzLmF0QmxvY2sodHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogS2V5ZnJhbWVzXG4gICAgICovXG4gICAgc3RhdGVzLmtleWZyYW1lcyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uaW5kZW50YXRpb24oKSA9PSBcIjBcIiAmJiAoKHR5cGUgPT0gXCJ9XCIgJiYgc3RhcnRPZkxpbmUoc3RyZWFtKSkgfHwgdHlwZSA9PSBcIl1cIiB8fCB0eXBlID09IFwiaGFzaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0eXBlID09IFwicXVhbGlmaWVyXCIgfHwgd29yZElzVGFnKHN0cmVhbS5jdXJyZW50KCkpKSkge1xuICAgICAgICByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJrZXlmcmFtZXNcIik7XG4gICAgICBpZiAodHlwZSA9PSBcIn1cIikge1xuICAgICAgICBpZiAoc3RhcnRPZkxpbmUoc3RyZWFtKSkgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUsIHRydWUpO1xuICAgICAgICBlbHNlIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImtleWZyYW1lc1wiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09IFwidW5pdFwiICYmIC9eWzAtOV0rXFwlJC8udGVzdChzdHJlYW0uY3VycmVudCgpKSkge1xuICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJrZXlmcmFtZXNcIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBcIndvcmRcIikge1xuICAgICAgICBvdmVycmlkZSA9IHdvcmRBc1ZhbHVlKHN0cmVhbS5jdXJyZW50KCkpO1xuICAgICAgICBpZiAob3ZlcnJpZGUgPT0gXCJibG9jay1rZXl3b3JkXCIpIHtcbiAgICAgICAgICBvdmVycmlkZSA9IFwia2V5d29yZFwiO1xuICAgICAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImtleWZyYW1lc1wiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKC9AKGZvbnQtZmFjZXxtZWRpYXxzdXBwb3J0c3woLW1vei0pP2RvY3VtZW50KS8udGVzdCh0eXBlKSkge1xuICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgZW5kT2ZMaW5lKHN0cmVhbSkgPyBcImJsb2NrXCIgOiBcImF0QmxvY2tcIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBcIm1peGluXCIpIHtcbiAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIiwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlO1xuICAgIH07XG5cblxuICAgIC8qKlxuICAgICAqIEludGVycG9sYXRpb25cbiAgICAgKi9cbiAgICBzdGF0ZXMuaW50ZXJwb2xhdGlvbiA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmICh0eXBlID09IFwie1wiKSBwb3BDb250ZXh0KHN0YXRlKSAmJiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCBcImJsb2NrXCIpO1xuICAgICAgaWYgKHR5cGUgPT0gXCJ9XCIpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5zdHJpbmcubWF0Y2goL15cXHMqKFxcLnwjfDp8XFxbfFxcKnwmfD58fnxcXCt8XFwvKS9pKSB8fFxuICAgICAgICAgICAgKHN0cmVhbS5zdHJpbmcubWF0Y2goL15cXHMqW2Etel0vaSkgJiYgd29yZElzVGFnKGZpcnN0V29yZE9mTGluZShzdHJlYW0pKSkpIHtcbiAgICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJibG9ja1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0cmVhbS5zdHJpbmcubWF0Y2goL14oXFx7fFxccypcXCYpLykgfHxcbiAgICAgICAgICAgIHN0cmVhbS5tYXRjaCgvXFxzKltcXHctXS8sZmFsc2UpKSB7XG4gICAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIiwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIFwiYmxvY2tcIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlLW5hbWVcIikge1xuICAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgXCJ2YXJpYWJsZU5hbWVcIiwgMCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBcIndvcmRcIikge1xuICAgICAgICBvdmVycmlkZSA9IHdvcmRBc1ZhbHVlKHN0cmVhbS5jdXJyZW50KCkpO1xuICAgICAgICBpZiAob3ZlcnJpZGUgPT0gXCJ0YWdcIikgb3ZlcnJpZGUgPSBcImF0b21cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogRXh0ZW5kL3NcbiAgICAgKi9cbiAgICBzdGF0ZXMuZXh0ZW5kID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHR5cGUgPT0gXCJbXCIgfHwgdHlwZSA9PSBcIj1cIikgcmV0dXJuIFwiZXh0ZW5kXCI7XG4gICAgICBpZiAodHlwZSA9PSBcIl1cIikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgICAgb3ZlcnJpZGUgPSB3b3JkQXNWYWx1ZShzdHJlYW0uY3VycmVudCgpKTtcbiAgICAgICAgcmV0dXJuIFwiZXh0ZW5kXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogVmFyaWFibGUgbmFtZVxuICAgICAqL1xuICAgIHN0YXRlcy52YXJpYWJsZU5hbWUgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAodHlwZSA9PSBcInN0cmluZ1wiIHx8IHR5cGUgPT0gXCJbXCIgfHwgdHlwZSA9PSBcIl1cIiB8fCBzdHJlYW0uY3VycmVudCgpLm1hdGNoKC9eKFxcLnxcXCQpLykpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5jdXJyZW50KCkubWF0Y2goL15cXC5bXFx3LV0rL2kpKSBvdmVycmlkZSA9IFwidmFyaWFibGUtMlwiO1xuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZU5hbWVcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH07XG5cblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9rZW5pemU6IG51bGwsXG4gICAgICAgICAgc3RhdGU6IFwiYmxvY2tcIixcbiAgICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dChcImJsb2NrXCIsIGJhc2UgfHwgMCwgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoIXN0YXRlLnRva2VuaXplICYmIHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgaWYgKHN0eWxlICYmIHR5cGVvZiBzdHlsZSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgdHlwZSA9IHN0eWxlWzFdO1xuICAgICAgICAgIHN0eWxlID0gc3R5bGVbMF07XG4gICAgICAgIH1cbiAgICAgICAgb3ZlcnJpZGUgPSBzdHlsZTtcbiAgICAgICAgc3RhdGUuc3RhdGUgPSBzdGF0ZXNbc3RhdGUuc3RhdGVdKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICByZXR1cm4gb3ZlcnJpZGU7XG4gICAgICB9LFxuICAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyLCBsaW5lKSB7XG5cbiAgICAgICAgdmFyIGN4ID0gc3RhdGUuY29udGV4dCxcbiAgICAgICAgICAgIGNoID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCksXG4gICAgICAgICAgICBpbmRlbnQgPSBjeC5pbmRlbnQsXG4gICAgICAgICAgICBsaW5lRmlyc3RXb3JkID0gZmlyc3RXb3JkT2ZMaW5lKHRleHRBZnRlciksXG4gICAgICAgICAgICBsaW5lSW5kZW50ID0gbGluZS5tYXRjaCgvXlxccyovKVswXS5yZXBsYWNlKC9cXHQvZywgaW5kZW50VW5pdFN0cmluZykubGVuZ3RoLFxuICAgICAgICAgICAgcHJldkxpbmVGaXJzdFdvcmQgPSBzdGF0ZS5jb250ZXh0LnByZXYgPyBzdGF0ZS5jb250ZXh0LnByZXYubGluZS5maXJzdFdvcmQgOiBcIlwiLFxuICAgICAgICAgICAgcHJldkxpbmVJbmRlbnQgPSBzdGF0ZS5jb250ZXh0LnByZXYgPyBzdGF0ZS5jb250ZXh0LnByZXYubGluZS5pbmRlbnQgOiBsaW5lSW5kZW50O1xuXG4gICAgICAgIGlmIChjeC5wcmV2ICYmXG4gICAgICAgICAgICAoY2ggPT0gXCJ9XCIgJiYgKGN4LnR5cGUgPT0gXCJibG9ja1wiIHx8IGN4LnR5cGUgPT0gXCJhdEJsb2NrXCIgfHwgY3gudHlwZSA9PSBcImtleWZyYW1lc1wiKSB8fFxuICAgICAgICAgICAgIGNoID09IFwiKVwiICYmIChjeC50eXBlID09IFwicGFyZW5zXCIgfHwgY3gudHlwZSA9PSBcImF0QmxvY2tfcGFyZW5zXCIpIHx8XG4gICAgICAgICAgICAgY2ggPT0gXCJ7XCIgJiYgKGN4LnR5cGUgPT0gXCJhdFwiKSkpIHtcbiAgICAgICAgICBpbmRlbnQgPSBjeC5pbmRlbnQgLSBpbmRlbnRVbml0O1xuICAgICAgICB9IGVsc2UgaWYgKCEoLyhcXH0pLy50ZXN0KGNoKSkpIHtcbiAgICAgICAgICBpZiAoL0B8XFwkfFxcZC8udGVzdChjaCkgfHxcbiAgICAgICAgICAgICAgL15cXHsvLnRlc3QodGV4dEFmdGVyKSB8fFxuL15cXHMqXFwvKFxcL3xcXCopLy50ZXN0KHRleHRBZnRlcikgfHxcbiAgICAgICAgICAgICAgL15cXHMqXFwvXFwqLy50ZXN0KHByZXZMaW5lRmlyc3RXb3JkKSB8fFxuICAgICAgICAgICAgICAvXlxccypbXFx3LVxcLlxcW1xcXVxcJ1xcXCJdK1xccyooXFw/fDp8XFwrKT89L2kudGVzdCh0ZXh0QWZ0ZXIpIHx8XG4vXihcXCt8LSk/W2Etel1bXFx3LV0qXFwoL2kudGVzdCh0ZXh0QWZ0ZXIpIHx8XG4vXnJldHVybi8udGVzdCh0ZXh0QWZ0ZXIpIHx8XG4gICAgICAgICAgICAgIHdvcmRJc0Jsb2NrKGxpbmVGaXJzdFdvcmQpKSB7XG4gICAgICAgICAgICBpbmRlbnQgPSBsaW5lSW5kZW50O1xuICAgICAgICAgIH0gZWxzZSBpZiAoLyhcXC58I3w6fFxcW3xcXCp8Jnw+fH58XFwrfFxcLykvLnRlc3QoY2gpIHx8IHdvcmRJc1RhZyhsaW5lRmlyc3RXb3JkKSkge1xuICAgICAgICAgICAgaWYgKC9cXCxcXHMqJC8udGVzdChwcmV2TGluZUZpcnN0V29yZCkpIHtcbiAgICAgICAgICAgICAgaW5kZW50ID0gcHJldkxpbmVJbmRlbnQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC9eXFxzKy8udGVzdChsaW5lKSAmJiAoLyhcXC58I3w6fFxcW3xcXCp8Jnw+fH58XFwrfFxcLykvLnRlc3QocHJldkxpbmVGaXJzdFdvcmQpIHx8IHdvcmRJc1RhZyhwcmV2TGluZUZpcnN0V29yZCkpKSB7XG4gICAgICAgICAgICAgIGluZGVudCA9IGxpbmVJbmRlbnQgPD0gcHJldkxpbmVJbmRlbnQgPyBwcmV2TGluZUluZGVudCA6IHByZXZMaW5lSW5kZW50ICsgaW5kZW50VW5pdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGluZGVudCA9IGxpbmVJbmRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICghLyxcXHMqJC8udGVzdChsaW5lKSAmJiAod29yZElzVmVuZG9yUHJlZml4KGxpbmVGaXJzdFdvcmQpIHx8IHdvcmRJc1Byb3BlcnR5KGxpbmVGaXJzdFdvcmQpKSkge1xuICAgICAgICAgICAgaWYgKHdvcmRJc0Jsb2NrKHByZXZMaW5lRmlyc3RXb3JkKSkge1xuICAgICAgICAgICAgICBpbmRlbnQgPSBsaW5lSW5kZW50IDw9IHByZXZMaW5lSW5kZW50ID8gcHJldkxpbmVJbmRlbnQgOiBwcmV2TGluZUluZGVudCArIGluZGVudFVuaXQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC9eXFx7Ly50ZXN0KHByZXZMaW5lRmlyc3RXb3JkKSkge1xuICAgICAgICAgICAgICBpbmRlbnQgPSBsaW5lSW5kZW50IDw9IHByZXZMaW5lSW5kZW50ID8gbGluZUluZGVudCA6IHByZXZMaW5lSW5kZW50ICsgaW5kZW50VW5pdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod29yZElzVmVuZG9yUHJlZml4KHByZXZMaW5lRmlyc3RXb3JkKSB8fCB3b3JkSXNQcm9wZXJ0eShwcmV2TGluZUZpcnN0V29yZCkpIHtcbiAgICAgICAgICAgICAgaW5kZW50ID0gbGluZUluZGVudCA+PSBwcmV2TGluZUluZGVudCA/IHByZXZMaW5lSW5kZW50IDogbGluZUluZGVudDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL14oXFwufCN8OnxcXFt8XFwqfCZ8QHxcXCt8XFwtfD58fnxcXC8pLy50ZXN0KHByZXZMaW5lRmlyc3RXb3JkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgIC89XFxzKiQvLnRlc3QocHJldkxpbmVGaXJzdFdvcmQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgd29yZElzVGFnKHByZXZMaW5lRmlyc3RXb3JkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgIC9eXFwkW1xcdy1cXC5cXFtcXF1cXCdcXFwiXS8udGVzdChwcmV2TGluZUZpcnN0V29yZCkpIHtcbiAgICAgICAgICAgICAgaW5kZW50ID0gcHJldkxpbmVJbmRlbnQgKyBpbmRlbnRVbml0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaW5kZW50ID0gbGluZUluZGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGVudDtcbiAgICAgIH0sXG4gICAgICBlbGVjdHJpY0NoYXJzOiBcIn1cIixcbiAgICAgIGxpbmVDb21tZW50OiBcIi8vXCIsXG4gICAgICBmb2xkOiBcImluZGVudFwiXG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudFxuICB2YXIgdGFnS2V5d29yZHNfID0gW1wiYVwiLFwiYWJiclwiLFwiYWRkcmVzc1wiLFwiYXJlYVwiLFwiYXJ0aWNsZVwiLFwiYXNpZGVcIixcImF1ZGlvXCIsIFwiYlwiLCBcImJhc2VcIixcImJkaVwiLCBcImJkb1wiLFwiYmdzb3VuZFwiLFwiYmxvY2txdW90ZVwiLFwiYm9keVwiLFwiYnJcIixcImJ1dHRvblwiLFwiY2FudmFzXCIsXCJjYXB0aW9uXCIsXCJjaXRlXCIsIFwiY29kZVwiLFwiY29sXCIsXCJjb2xncm91cFwiLFwiZGF0YVwiLFwiZGF0YWxpc3RcIixcImRkXCIsXCJkZWxcIixcImRldGFpbHNcIixcImRmblwiLFwiZGl2XCIsIFwiZGxcIixcImR0XCIsXCJlbVwiLFwiZW1iZWRcIixcImZpZWxkc2V0XCIsXCJmaWdjYXB0aW9uXCIsXCJmaWd1cmVcIixcImZvb3RlclwiLFwiZm9ybVwiLFwiaDFcIiwgXCJoMlwiLFwiaDNcIixcImg0XCIsXCJoNVwiLFwiaDZcIixcImhlYWRcIixcImhlYWRlclwiLFwiaGdyb3VwXCIsXCJoclwiLFwiaHRtbFwiLFwiaVwiLFwiaWZyYW1lXCIsIFwiaW1nXCIsXCJpbnB1dFwiLFwiaW5zXCIsXCJrYmRcIixcImtleWdlblwiLFwibGFiZWxcIixcImxlZ2VuZFwiLFwibGlcIixcImxpbmtcIixcIm1haW5cIixcIm1hcFwiLCBcIm1hcmtcIixcIm1hcnF1ZWVcIixcIm1lbnVcIixcIm1lbnVpdGVtXCIsXCJtZXRhXCIsXCJtZXRlclwiLFwibmF2XCIsXCJub2JyXCIsXCJub2ZyYW1lc1wiLCBcIm5vc2NyaXB0XCIsXCJvYmplY3RcIixcIm9sXCIsXCJvcHRncm91cFwiLFwib3B0aW9uXCIsXCJvdXRwdXRcIixcInBcIixcInBhcmFtXCIsXCJwcmVcIiwgXCJwcm9ncmVzc1wiLFwicVwiLFwicnBcIixcInJ0XCIsXCJydWJ5XCIsXCJzXCIsXCJzYW1wXCIsXCJzY3JpcHRcIixcInNlY3Rpb25cIixcInNlbGVjdFwiLCBcInNtYWxsXCIsXCJzb3VyY2VcIixcInNwYW5cIixcInN0cm9uZ1wiLFwic3R5bGVcIixcInN1YlwiLFwic3VtbWFyeVwiLFwic3VwXCIsXCJ0YWJsZVwiLFwidGJvZHlcIixcInRkXCIsXCJ0ZXh0YXJlYVwiLFwidGZvb3RcIixcInRoXCIsXCJ0aGVhZFwiLFwidGltZVwiLFwidHJcIixcInRyYWNrXCIsIFwidVwiLFwidWxcIixcInZhclwiLFwidmlkZW9cIl07XG5cbiAgLy8gZ2l0aHViLmNvbS9jb2RlbWlycm9yL0NvZGVNaXJyb3IvYmxvYi9tYXN0ZXIvbW9kZS9jc3MvY3NzLmpzXG4gIC8vIE5vdGUsIFwidXJsLXByZWZpeFwiIHNob3VsZCBwcmVjZWRlIFwidXJsXCIgaW4gb3JkZXIgdG8gbWF0Y2ggY29ycmVjdGx5IGluIGRvY3VtZW50VHlwZXNSZWdleHBcbiAgdmFyIGRvY3VtZW50VHlwZXNfID0gW1wiZG9tYWluXCIsIFwicmVnZXhwXCIsIFwidXJsLXByZWZpeFwiLCBcInVybFwiXTtcbiAgdmFyIG1lZGlhVHlwZXNfID0gW1wiYWxsXCIsXCJhdXJhbFwiLFwiYnJhaWxsZVwiLFwiaGFuZGhlbGRcIixcInByaW50XCIsXCJwcm9qZWN0aW9uXCIsXCJzY3JlZW5cIixcInR0eVwiLFwidHZcIixcImVtYm9zc2VkXCJdO1xuICB2YXIgbWVkaWFGZWF0dXJlc18gPSBbXCJ3aWR0aFwiLFwibWluLXdpZHRoXCIsXCJtYXgtd2lkdGhcIixcImhlaWdodFwiLFwibWluLWhlaWdodFwiLFwibWF4LWhlaWdodFwiLFwiZGV2aWNlLXdpZHRoXCIsXCJtaW4tZGV2aWNlLXdpZHRoXCIsXCJtYXgtZGV2aWNlLXdpZHRoXCIsXCJkZXZpY2UtaGVpZ2h0XCIsXCJtaW4tZGV2aWNlLWhlaWdodFwiLFwibWF4LWRldmljZS1oZWlnaHRcIixcImFzcGVjdC1yYXRpb1wiLFwibWluLWFzcGVjdC1yYXRpb1wiLFwibWF4LWFzcGVjdC1yYXRpb1wiLFwiZGV2aWNlLWFzcGVjdC1yYXRpb1wiLFwibWluLWRldmljZS1hc3BlY3QtcmF0aW9cIixcIm1heC1kZXZpY2UtYXNwZWN0LXJhdGlvXCIsXCJjb2xvclwiLFwibWluLWNvbG9yXCIsXCJtYXgtY29sb3JcIixcImNvbG9yLWluZGV4XCIsXCJtaW4tY29sb3ItaW5kZXhcIixcIm1heC1jb2xvci1pbmRleFwiLFwibW9ub2Nocm9tZVwiLFwibWluLW1vbm9jaHJvbWVcIixcIm1heC1tb25vY2hyb21lXCIsXCJyZXNvbHV0aW9uXCIsXCJtaW4tcmVzb2x1dGlvblwiLFwibWF4LXJlc29sdXRpb25cIixcInNjYW5cIixcImdyaWRcIl07XG4gIHZhciBwcm9wZXJ0eUtleXdvcmRzXyA9IFtcImFsaWduLWNvbnRlbnRcIixcImFsaWduLWl0ZW1zXCIsXCJhbGlnbi1zZWxmXCIsXCJhbGlnbm1lbnQtYWRqdXN0XCIsXCJhbGlnbm1lbnQtYmFzZWxpbmVcIixcImFuY2hvci1wb2ludFwiLFwiYW5pbWF0aW9uXCIsXCJhbmltYXRpb24tZGVsYXlcIixcImFuaW1hdGlvbi1kaXJlY3Rpb25cIixcImFuaW1hdGlvbi1kdXJhdGlvblwiLFwiYW5pbWF0aW9uLWZpbGwtbW9kZVwiLFwiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudFwiLFwiYW5pbWF0aW9uLW5hbWVcIixcImFuaW1hdGlvbi1wbGF5LXN0YXRlXCIsXCJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uXCIsXCJhcHBlYXJhbmNlXCIsXCJhemltdXRoXCIsXCJiYWNrZmFjZS12aXNpYmlsaXR5XCIsXCJiYWNrZ3JvdW5kXCIsXCJiYWNrZ3JvdW5kLWF0dGFjaG1lbnRcIixcImJhY2tncm91bmQtY2xpcFwiLFwiYmFja2dyb3VuZC1jb2xvclwiLFwiYmFja2dyb3VuZC1pbWFnZVwiLFwiYmFja2dyb3VuZC1vcmlnaW5cIixcImJhY2tncm91bmQtcG9zaXRpb25cIixcImJhY2tncm91bmQtcmVwZWF0XCIsXCJiYWNrZ3JvdW5kLXNpemVcIixcImJhc2VsaW5lLXNoaWZ0XCIsXCJiaW5kaW5nXCIsXCJibGVlZFwiLFwiYm9va21hcmstbGFiZWxcIixcImJvb2ttYXJrLWxldmVsXCIsXCJib29rbWFyay1zdGF0ZVwiLFwiYm9va21hcmstdGFyZ2V0XCIsXCJib3JkZXJcIixcImJvcmRlci1ib3R0b21cIixcImJvcmRlci1ib3R0b20tY29sb3JcIixcImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXNcIixcImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzXCIsXCJib3JkZXItYm90dG9tLXN0eWxlXCIsXCJib3JkZXItYm90dG9tLXdpZHRoXCIsXCJib3JkZXItY29sbGFwc2VcIixcImJvcmRlci1jb2xvclwiLFwiYm9yZGVyLWltYWdlXCIsXCJib3JkZXItaW1hZ2Utb3V0c2V0XCIsXCJib3JkZXItaW1hZ2UtcmVwZWF0XCIsXCJib3JkZXItaW1hZ2Utc2xpY2VcIixcImJvcmRlci1pbWFnZS1zb3VyY2VcIixcImJvcmRlci1pbWFnZS13aWR0aFwiLFwiYm9yZGVyLWxlZnRcIixcImJvcmRlci1sZWZ0LWNvbG9yXCIsXCJib3JkZXItbGVmdC1zdHlsZVwiLFwiYm9yZGVyLWxlZnQtd2lkdGhcIixcImJvcmRlci1yYWRpdXNcIixcImJvcmRlci1yaWdodFwiLFwiYm9yZGVyLXJpZ2h0LWNvbG9yXCIsXCJib3JkZXItcmlnaHQtc3R5bGVcIixcImJvcmRlci1yaWdodC13aWR0aFwiLFwiYm9yZGVyLXNwYWNpbmdcIixcImJvcmRlci1zdHlsZVwiLFwiYm9yZGVyLXRvcFwiLFwiYm9yZGVyLXRvcC1jb2xvclwiLFwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1c1wiLFwiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXNcIixcImJvcmRlci10b3Atc3R5bGVcIixcImJvcmRlci10b3Atd2lkdGhcIixcImJvcmRlci13aWR0aFwiLFwiYm90dG9tXCIsXCJib3gtZGVjb3JhdGlvbi1icmVha1wiLFwiYm94LXNoYWRvd1wiLFwiYm94LXNpemluZ1wiLFwiYnJlYWstYWZ0ZXJcIixcImJyZWFrLWJlZm9yZVwiLFwiYnJlYWstaW5zaWRlXCIsXCJjYXB0aW9uLXNpZGVcIixcImNsZWFyXCIsXCJjbGlwXCIsXCJjb2xvclwiLFwiY29sb3ItcHJvZmlsZVwiLFwiY29sdW1uLWNvdW50XCIsXCJjb2x1bW4tZmlsbFwiLFwiY29sdW1uLWdhcFwiLFwiY29sdW1uLXJ1bGVcIixcImNvbHVtbi1ydWxlLWNvbG9yXCIsXCJjb2x1bW4tcnVsZS1zdHlsZVwiLFwiY29sdW1uLXJ1bGUtd2lkdGhcIixcImNvbHVtbi1zcGFuXCIsXCJjb2x1bW4td2lkdGhcIixcImNvbHVtbnNcIixcImNvbnRlbnRcIixcImNvdW50ZXItaW5jcmVtZW50XCIsXCJjb3VudGVyLXJlc2V0XCIsXCJjcm9wXCIsXCJjdWVcIixcImN1ZS1hZnRlclwiLFwiY3VlLWJlZm9yZVwiLFwiY3Vyc29yXCIsXCJkaXJlY3Rpb25cIixcImRpc3BsYXlcIixcImRvbWluYW50LWJhc2VsaW5lXCIsXCJkcm9wLWluaXRpYWwtYWZ0ZXItYWRqdXN0XCIsXCJkcm9wLWluaXRpYWwtYWZ0ZXItYWxpZ25cIixcImRyb3AtaW5pdGlhbC1iZWZvcmUtYWRqdXN0XCIsXCJkcm9wLWluaXRpYWwtYmVmb3JlLWFsaWduXCIsXCJkcm9wLWluaXRpYWwtc2l6ZVwiLFwiZHJvcC1pbml0aWFsLXZhbHVlXCIsXCJlbGV2YXRpb25cIixcImVtcHR5LWNlbGxzXCIsXCJmaXRcIixcImZpdC1wb3NpdGlvblwiLFwiZmxleFwiLFwiZmxleC1iYXNpc1wiLFwiZmxleC1kaXJlY3Rpb25cIixcImZsZXgtZmxvd1wiLFwiZmxleC1ncm93XCIsXCJmbGV4LXNocmlua1wiLFwiZmxleC13cmFwXCIsXCJmbG9hdFwiLFwiZmxvYXQtb2Zmc2V0XCIsXCJmbG93LWZyb21cIixcImZsb3ctaW50b1wiLFwiZm9udFwiLFwiZm9udC1mZWF0dXJlLXNldHRpbmdzXCIsXCJmb250LWZhbWlseVwiLFwiZm9udC1rZXJuaW5nXCIsXCJmb250LWxhbmd1YWdlLW92ZXJyaWRlXCIsXCJmb250LXNpemVcIixcImZvbnQtc2l6ZS1hZGp1c3RcIixcImZvbnQtc3RyZXRjaFwiLFwiZm9udC1zdHlsZVwiLFwiZm9udC1zeW50aGVzaXNcIixcImZvbnQtdmFyaWFudFwiLFwiZm9udC12YXJpYW50LWFsdGVybmF0ZXNcIixcImZvbnQtdmFyaWFudC1jYXBzXCIsXCJmb250LXZhcmlhbnQtZWFzdC1hc2lhblwiLFwiZm9udC12YXJpYW50LWxpZ2F0dXJlc1wiLFwiZm9udC12YXJpYW50LW51bWVyaWNcIixcImZvbnQtdmFyaWFudC1wb3NpdGlvblwiLFwiZm9udC13ZWlnaHRcIixcImdyaWRcIixcImdyaWQtYXJlYVwiLFwiZ3JpZC1hdXRvLWNvbHVtbnNcIixcImdyaWQtYXV0by1mbG93XCIsXCJncmlkLWF1dG8tcG9zaXRpb25cIixcImdyaWQtYXV0by1yb3dzXCIsXCJncmlkLWNvbHVtblwiLFwiZ3JpZC1jb2x1bW4tZW5kXCIsXCJncmlkLWNvbHVtbi1zdGFydFwiLFwiZ3JpZC1yb3dcIixcImdyaWQtcm93LWVuZFwiLFwiZ3JpZC1yb3ctc3RhcnRcIixcImdyaWQtdGVtcGxhdGVcIixcImdyaWQtdGVtcGxhdGUtYXJlYXNcIixcImdyaWQtdGVtcGxhdGUtY29sdW1uc1wiLFwiZ3JpZC10ZW1wbGF0ZS1yb3dzXCIsXCJoYW5naW5nLXB1bmN0dWF0aW9uXCIsXCJoZWlnaHRcIixcImh5cGhlbnNcIixcImljb25cIixcImltYWdlLW9yaWVudGF0aW9uXCIsXCJpbWFnZS1yZW5kZXJpbmdcIixcImltYWdlLXJlc29sdXRpb25cIixcImlubGluZS1ib3gtYWxpZ25cIixcImp1c3RpZnktY29udGVudFwiLFwibGVmdFwiLFwibGV0dGVyLXNwYWNpbmdcIixcImxpbmUtYnJlYWtcIixcImxpbmUtaGVpZ2h0XCIsXCJsaW5lLXN0YWNraW5nXCIsXCJsaW5lLXN0YWNraW5nLXJ1YnlcIixcImxpbmUtc3RhY2tpbmctc2hpZnRcIixcImxpbmUtc3RhY2tpbmctc3RyYXRlZ3lcIixcImxpc3Qtc3R5bGVcIixcImxpc3Qtc3R5bGUtaW1hZ2VcIixcImxpc3Qtc3R5bGUtcG9zaXRpb25cIixcImxpc3Qtc3R5bGUtdHlwZVwiLFwibWFyZ2luXCIsXCJtYXJnaW4tYm90dG9tXCIsXCJtYXJnaW4tbGVmdFwiLFwibWFyZ2luLXJpZ2h0XCIsXCJtYXJnaW4tdG9wXCIsXCJtYXJrZXItb2Zmc2V0XCIsXCJtYXJrc1wiLFwibWFycXVlZS1kaXJlY3Rpb25cIixcIm1hcnF1ZWUtbG9vcFwiLFwibWFycXVlZS1wbGF5LWNvdW50XCIsXCJtYXJxdWVlLXNwZWVkXCIsXCJtYXJxdWVlLXN0eWxlXCIsXCJtYXgtaGVpZ2h0XCIsXCJtYXgtd2lkdGhcIixcIm1pbi1oZWlnaHRcIixcIm1pbi13aWR0aFwiLFwibW92ZS10b1wiLFwibmF2LWRvd25cIixcIm5hdi1pbmRleFwiLFwibmF2LWxlZnRcIixcIm5hdi1yaWdodFwiLFwibmF2LXVwXCIsXCJvYmplY3QtZml0XCIsXCJvYmplY3QtcG9zaXRpb25cIixcIm9wYWNpdHlcIixcIm9yZGVyXCIsXCJvcnBoYW5zXCIsXCJvdXRsaW5lXCIsXCJvdXRsaW5lLWNvbG9yXCIsXCJvdXRsaW5lLW9mZnNldFwiLFwib3V0bGluZS1zdHlsZVwiLFwib3V0bGluZS13aWR0aFwiLFwib3ZlcmZsb3dcIixcIm92ZXJmbG93LXN0eWxlXCIsXCJvdmVyZmxvdy13cmFwXCIsXCJvdmVyZmxvdy14XCIsXCJvdmVyZmxvdy15XCIsXCJwYWRkaW5nXCIsXCJwYWRkaW5nLWJvdHRvbVwiLFwicGFkZGluZy1sZWZ0XCIsXCJwYWRkaW5nLXJpZ2h0XCIsXCJwYWRkaW5nLXRvcFwiLFwicGFnZVwiLFwicGFnZS1icmVhay1hZnRlclwiLFwicGFnZS1icmVhay1iZWZvcmVcIixcInBhZ2UtYnJlYWstaW5zaWRlXCIsXCJwYWdlLXBvbGljeVwiLFwicGF1c2VcIixcInBhdXNlLWFmdGVyXCIsXCJwYXVzZS1iZWZvcmVcIixcInBlcnNwZWN0aXZlXCIsXCJwZXJzcGVjdGl2ZS1vcmlnaW5cIixcInBpdGNoXCIsXCJwaXRjaC1yYW5nZVwiLFwicGxheS1kdXJpbmdcIixcInBvc2l0aW9uXCIsXCJwcmVzZW50YXRpb24tbGV2ZWxcIixcInB1bmN0dWF0aW9uLXRyaW1cIixcInF1b3Rlc1wiLFwicmVnaW9uLWJyZWFrLWFmdGVyXCIsXCJyZWdpb24tYnJlYWstYmVmb3JlXCIsXCJyZWdpb24tYnJlYWstaW5zaWRlXCIsXCJyZWdpb24tZnJhZ21lbnRcIixcInJlbmRlcmluZy1pbnRlbnRcIixcInJlc2l6ZVwiLFwicmVzdFwiLFwicmVzdC1hZnRlclwiLFwicmVzdC1iZWZvcmVcIixcInJpY2huZXNzXCIsXCJyaWdodFwiLFwicm90YXRpb25cIixcInJvdGF0aW9uLXBvaW50XCIsXCJydWJ5LWFsaWduXCIsXCJydWJ5LW92ZXJoYW5nXCIsXCJydWJ5LXBvc2l0aW9uXCIsXCJydWJ5LXNwYW5cIixcInNoYXBlLWltYWdlLXRocmVzaG9sZFwiLFwic2hhcGUtaW5zaWRlXCIsXCJzaGFwZS1tYXJnaW5cIixcInNoYXBlLW91dHNpZGVcIixcInNpemVcIixcInNwZWFrXCIsXCJzcGVhay1hc1wiLFwic3BlYWstaGVhZGVyXCIsXCJzcGVhay1udW1lcmFsXCIsXCJzcGVhay1wdW5jdHVhdGlvblwiLFwic3BlZWNoLXJhdGVcIixcInN0cmVzc1wiLFwic3RyaW5nLXNldFwiLFwidGFiLXNpemVcIixcInRhYmxlLWxheW91dFwiLFwidGFyZ2V0XCIsXCJ0YXJnZXQtbmFtZVwiLFwidGFyZ2V0LW5ld1wiLFwidGFyZ2V0LXBvc2l0aW9uXCIsXCJ0ZXh0LWFsaWduXCIsXCJ0ZXh0LWFsaWduLWxhc3RcIixcInRleHQtZGVjb3JhdGlvblwiLFwidGV4dC1kZWNvcmF0aW9uLWNvbG9yXCIsXCJ0ZXh0LWRlY29yYXRpb24tbGluZVwiLFwidGV4dC1kZWNvcmF0aW9uLXNraXBcIixcInRleHQtZGVjb3JhdGlvbi1zdHlsZVwiLFwidGV4dC1lbXBoYXNpc1wiLFwidGV4dC1lbXBoYXNpcy1jb2xvclwiLFwidGV4dC1lbXBoYXNpcy1wb3NpdGlvblwiLFwidGV4dC1lbXBoYXNpcy1zdHlsZVwiLFwidGV4dC1oZWlnaHRcIixcInRleHQtaW5kZW50XCIsXCJ0ZXh0LWp1c3RpZnlcIixcInRleHQtb3V0bGluZVwiLFwidGV4dC1vdmVyZmxvd1wiLFwidGV4dC1zaGFkb3dcIixcInRleHQtc2l6ZS1hZGp1c3RcIixcInRleHQtc3BhY2UtY29sbGFwc2VcIixcInRleHQtdHJhbnNmb3JtXCIsXCJ0ZXh0LXVuZGVybGluZS1wb3NpdGlvblwiLFwidGV4dC13cmFwXCIsXCJ0b3BcIixcInRyYW5zZm9ybVwiLFwidHJhbnNmb3JtLW9yaWdpblwiLFwidHJhbnNmb3JtLXN0eWxlXCIsXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uLWRlbGF5XCIsXCJ0cmFuc2l0aW9uLWR1cmF0aW9uXCIsXCJ0cmFuc2l0aW9uLXByb3BlcnR5XCIsXCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvblwiLFwidW5pY29kZS1iaWRpXCIsXCJ2ZXJ0aWNhbC1hbGlnblwiLFwidmlzaWJpbGl0eVwiLFwidm9pY2UtYmFsYW5jZVwiLFwidm9pY2UtZHVyYXRpb25cIixcInZvaWNlLWZhbWlseVwiLFwidm9pY2UtcGl0Y2hcIixcInZvaWNlLXJhbmdlXCIsXCJ2b2ljZS1yYXRlXCIsXCJ2b2ljZS1zdHJlc3NcIixcInZvaWNlLXZvbHVtZVwiLFwidm9sdW1lXCIsXCJ3aGl0ZS1zcGFjZVwiLFwid2lkb3dzXCIsXCJ3aWR0aFwiLFwid2lsbC1jaGFuZ2VcIixcIndvcmQtYnJlYWtcIixcIndvcmQtc3BhY2luZ1wiLFwid29yZC13cmFwXCIsXCJ6LWluZGV4XCIsXCJjbGlwLXBhdGhcIixcImNsaXAtcnVsZVwiLFwibWFza1wiLFwiZW5hYmxlLWJhY2tncm91bmRcIixcImZpbHRlclwiLFwiZmxvb2QtY29sb3JcIixcImZsb29kLW9wYWNpdHlcIixcImxpZ2h0aW5nLWNvbG9yXCIsXCJzdG9wLWNvbG9yXCIsXCJzdG9wLW9wYWNpdHlcIixcInBvaW50ZXItZXZlbnRzXCIsXCJjb2xvci1pbnRlcnBvbGF0aW9uXCIsXCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnNcIixcImNvbG9yLXJlbmRlcmluZ1wiLFwiZmlsbFwiLFwiZmlsbC1vcGFjaXR5XCIsXCJmaWxsLXJ1bGVcIixcImltYWdlLXJlbmRlcmluZ1wiLFwibWFya2VyXCIsXCJtYXJrZXItZW5kXCIsXCJtYXJrZXItbWlkXCIsXCJtYXJrZXItc3RhcnRcIixcInNoYXBlLXJlbmRlcmluZ1wiLFwic3Ryb2tlXCIsXCJzdHJva2UtZGFzaGFycmF5XCIsXCJzdHJva2UtZGFzaG9mZnNldFwiLFwic3Ryb2tlLWxpbmVjYXBcIixcInN0cm9rZS1saW5lam9pblwiLFwic3Ryb2tlLW1pdGVybGltaXRcIixcInN0cm9rZS1vcGFjaXR5XCIsXCJzdHJva2Utd2lkdGhcIixcInRleHQtcmVuZGVyaW5nXCIsXCJiYXNlbGluZS1zaGlmdFwiLFwiZG9taW5hbnQtYmFzZWxpbmVcIixcImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWxcIixcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCIsXCJ0ZXh0LWFuY2hvclwiLFwid3JpdGluZy1tb2RlXCIsXCJmb250LXNtb290aGluZ1wiLFwib3N4LWZvbnQtc21vb3RoaW5nXCJdO1xuICB2YXIgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzXyA9IFtcInNjcm9sbGJhci1hcnJvdy1jb2xvclwiLFwic2Nyb2xsYmFyLWJhc2UtY29sb3JcIixcInNjcm9sbGJhci1kYXJrLXNoYWRvdy1jb2xvclwiLFwic2Nyb2xsYmFyLWZhY2UtY29sb3JcIixcInNjcm9sbGJhci1oaWdobGlnaHQtY29sb3JcIixcInNjcm9sbGJhci1zaGFkb3ctY29sb3JcIixcInNjcm9sbGJhci0zZC1saWdodC1jb2xvclwiLFwic2Nyb2xsYmFyLXRyYWNrLWNvbG9yXCIsXCJzaGFwZS1pbnNpZGVcIixcInNlYXJjaGZpZWxkLWNhbmNlbC1idXR0b25cIixcInNlYXJjaGZpZWxkLWRlY29yYXRpb25cIixcInNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0dG9uXCIsXCJzZWFyY2hmaWVsZC1yZXN1bHRzLWRlY29yYXRpb25cIixcInpvb21cIl07XG4gIHZhciBmb250UHJvcGVydGllc18gPSBbXCJmb250LWZhbWlseVwiLFwic3JjXCIsXCJ1bmljb2RlLXJhbmdlXCIsXCJmb250LXZhcmlhbnRcIixcImZvbnQtZmVhdHVyZS1zZXR0aW5nc1wiLFwiZm9udC1zdHJldGNoXCIsXCJmb250LXdlaWdodFwiLFwiZm9udC1zdHlsZVwiXTtcbiAgdmFyIGNvbG9yS2V5d29yZHNfID0gW1wiYWxpY2VibHVlXCIsXCJhbnRpcXVld2hpdGVcIixcImFxdWFcIixcImFxdWFtYXJpbmVcIixcImF6dXJlXCIsXCJiZWlnZVwiLFwiYmlzcXVlXCIsXCJibGFja1wiLFwiYmxhbmNoZWRhbG1vbmRcIixcImJsdWVcIixcImJsdWV2aW9sZXRcIixcImJyb3duXCIsXCJidXJseXdvb2RcIixcImNhZGV0Ymx1ZVwiLFwiY2hhcnRyZXVzZVwiLFwiY2hvY29sYXRlXCIsXCJjb3JhbFwiLFwiY29ybmZsb3dlcmJsdWVcIixcImNvcm5zaWxrXCIsXCJjcmltc29uXCIsXCJjeWFuXCIsXCJkYXJrYmx1ZVwiLFwiZGFya2N5YW5cIixcImRhcmtnb2xkZW5yb2RcIixcImRhcmtncmF5XCIsXCJkYXJrZ3JlZW5cIixcImRhcmtraGFraVwiLFwiZGFya21hZ2VudGFcIixcImRhcmtvbGl2ZWdyZWVuXCIsXCJkYXJrb3JhbmdlXCIsXCJkYXJrb3JjaGlkXCIsXCJkYXJrcmVkXCIsXCJkYXJrc2FsbW9uXCIsXCJkYXJrc2VhZ3JlZW5cIixcImRhcmtzbGF0ZWJsdWVcIixcImRhcmtzbGF0ZWdyYXlcIixcImRhcmt0dXJxdW9pc2VcIixcImRhcmt2aW9sZXRcIixcImRlZXBwaW5rXCIsXCJkZWVwc2t5Ymx1ZVwiLFwiZGltZ3JheVwiLFwiZG9kZ2VyYmx1ZVwiLFwiZmlyZWJyaWNrXCIsXCJmbG9yYWx3aGl0ZVwiLFwiZm9yZXN0Z3JlZW5cIixcImZ1Y2hzaWFcIixcImdhaW5zYm9yb1wiLFwiZ2hvc3R3aGl0ZVwiLFwiZ29sZFwiLFwiZ29sZGVucm9kXCIsXCJncmF5XCIsXCJncmV5XCIsXCJncmVlblwiLFwiZ3JlZW55ZWxsb3dcIixcImhvbmV5ZGV3XCIsXCJob3RwaW5rXCIsXCJpbmRpYW5yZWRcIixcImluZGlnb1wiLFwiaXZvcnlcIixcImtoYWtpXCIsXCJsYXZlbmRlclwiLFwibGF2ZW5kZXJibHVzaFwiLFwibGF3bmdyZWVuXCIsXCJsZW1vbmNoaWZmb25cIixcImxpZ2h0Ymx1ZVwiLFwibGlnaHRjb3JhbFwiLFwibGlnaHRjeWFuXCIsXCJsaWdodGdvbGRlbnJvZHllbGxvd1wiLFwibGlnaHRncmF5XCIsXCJsaWdodGdyZWVuXCIsXCJsaWdodHBpbmtcIixcImxpZ2h0c2FsbW9uXCIsXCJsaWdodHNlYWdyZWVuXCIsXCJsaWdodHNreWJsdWVcIixcImxpZ2h0c2xhdGVncmF5XCIsXCJsaWdodHN0ZWVsYmx1ZVwiLFwibGlnaHR5ZWxsb3dcIixcImxpbWVcIixcImxpbWVncmVlblwiLFwibGluZW5cIixcIm1hZ2VudGFcIixcIm1hcm9vblwiLFwibWVkaXVtYXF1YW1hcmluZVwiLFwibWVkaXVtYmx1ZVwiLFwibWVkaXVtb3JjaGlkXCIsXCJtZWRpdW1wdXJwbGVcIixcIm1lZGl1bXNlYWdyZWVuXCIsXCJtZWRpdW1zbGF0ZWJsdWVcIixcIm1lZGl1bXNwcmluZ2dyZWVuXCIsXCJtZWRpdW10dXJxdW9pc2VcIixcIm1lZGl1bXZpb2xldHJlZFwiLFwibWlkbmlnaHRibHVlXCIsXCJtaW50Y3JlYW1cIixcIm1pc3R5cm9zZVwiLFwibW9jY2FzaW5cIixcIm5hdmFqb3doaXRlXCIsXCJuYXZ5XCIsXCJvbGRsYWNlXCIsXCJvbGl2ZVwiLFwib2xpdmVkcmFiXCIsXCJvcmFuZ2VcIixcIm9yYW5nZXJlZFwiLFwib3JjaGlkXCIsXCJwYWxlZ29sZGVucm9kXCIsXCJwYWxlZ3JlZW5cIixcInBhbGV0dXJxdW9pc2VcIixcInBhbGV2aW9sZXRyZWRcIixcInBhcGF5YXdoaXBcIixcInBlYWNocHVmZlwiLFwicGVydVwiLFwicGlua1wiLFwicGx1bVwiLFwicG93ZGVyYmx1ZVwiLFwicHVycGxlXCIsXCJyZWJlY2NhcHVycGxlXCIsXCJyZWRcIixcInJvc3licm93blwiLFwicm95YWxibHVlXCIsXCJzYWRkbGVicm93blwiLFwic2FsbW9uXCIsXCJzYW5keWJyb3duXCIsXCJzZWFncmVlblwiLFwic2Vhc2hlbGxcIixcInNpZW5uYVwiLFwic2lsdmVyXCIsXCJza3libHVlXCIsXCJzbGF0ZWJsdWVcIixcInNsYXRlZ3JheVwiLFwic25vd1wiLFwic3ByaW5nZ3JlZW5cIixcInN0ZWVsYmx1ZVwiLFwidGFuXCIsXCJ0ZWFsXCIsXCJ0aGlzdGxlXCIsXCJ0b21hdG9cIixcInR1cnF1b2lzZVwiLFwidmlvbGV0XCIsXCJ3aGVhdFwiLFwid2hpdGVcIixcIndoaXRlc21va2VcIixcInllbGxvd1wiLFwieWVsbG93Z3JlZW5cIl07XG4gIHZhciB2YWx1ZUtleXdvcmRzXyA9IFtcImFib3ZlXCIsXCJhYnNvbHV0ZVwiLFwiYWN0aXZlYm9yZGVyXCIsXCJhZGRpdGl2ZVwiLFwiYWN0aXZlY2FwdGlvblwiLFwiYWZhclwiLFwiYWZ0ZXItd2hpdGUtc3BhY2VcIixcImFoZWFkXCIsXCJhbGlhc1wiLFwiYWxsXCIsXCJhbGwtc2Nyb2xsXCIsXCJhbHBoYWJldGljXCIsXCJhbHRlcm5hdGVcIixcImFsd2F5c1wiLFwiYW1oYXJpY1wiLFwiYW1oYXJpYy1hYmVnZWRlXCIsXCJhbnRpYWxpYXNlZFwiLFwiYXBwd29ya3NwYWNlXCIsXCJhcmFiaWMtaW5kaWNcIixcImFybWVuaWFuXCIsXCJhc3Rlcmlza3NcIixcImF0dHJcIixcImF1dG9cIixcImF2b2lkXCIsXCJhdm9pZC1jb2x1bW5cIixcImF2b2lkLXBhZ2VcIixcImF2b2lkLXJlZ2lvblwiLFwiYmFja2dyb3VuZFwiLFwiYmFja3dhcmRzXCIsXCJiYXNlbGluZVwiLFwiYmVsb3dcIixcImJpZGktb3ZlcnJpZGVcIixcImJpbmFyeVwiLFwiYmVuZ2FsaVwiLFwiYmxpbmtcIixcImJsb2NrXCIsXCJibG9jay1heGlzXCIsXCJib2xkXCIsXCJib2xkZXJcIixcImJvcmRlclwiLFwiYm9yZGVyLWJveFwiLFwiYm90aFwiLFwiYm90dG9tXCIsXCJicmVha1wiLFwiYnJlYWstYWxsXCIsXCJicmVhay13b3JkXCIsXCJidWxsZXRzXCIsXCJidXR0b25cIixcImJ1dHRvbi1iZXZlbFwiLFwiYnV0dG9uZmFjZVwiLFwiYnV0dG9uaGlnaGxpZ2h0XCIsXCJidXR0b25zaGFkb3dcIixcImJ1dHRvbnRleHRcIixcImNhbGNcIixcImNhbWJvZGlhblwiLFwiY2FwaXRhbGl6ZVwiLFwiY2Fwcy1sb2NrLWluZGljYXRvclwiLFwiY2FwdGlvblwiLFwiY2FwdGlvbnRleHRcIixcImNhcmV0XCIsXCJjZWxsXCIsXCJjZW50ZXJcIixcImNoZWNrYm94XCIsXCJjaXJjbGVcIixcImNqay1kZWNpbWFsXCIsXCJjamstZWFydGhseS1icmFuY2hcIixcImNqay1oZWF2ZW5seS1zdGVtXCIsXCJjamstaWRlb2dyYXBoaWNcIixcImNsZWFyXCIsXCJjbGlwXCIsXCJjbG9zZS1xdW90ZVwiLFwiY29sLXJlc2l6ZVwiLFwiY29sbGFwc2VcIixcImNvbHVtblwiLFwiY29tcGFjdFwiLFwiY29uZGVuc2VkXCIsXCJjb250YWluXCIsXCJjb250ZW50XCIsXCJjb250ZW50c1wiLFwiY29udGVudC1ib3hcIixcImNvbnRleHQtbWVudVwiLFwiY29udGludW91c1wiLFwiY29weVwiLFwiY291bnRlclwiLFwiY291bnRlcnNcIixcImNvdmVyXCIsXCJjcm9wXCIsXCJjcm9zc1wiLFwiY3Jvc3NoYWlyXCIsXCJjdXJyZW50Y29sb3JcIixcImN1cnNpdmVcIixcImN5Y2xpY1wiLFwiZGFzaGVkXCIsXCJkZWNpbWFsXCIsXCJkZWNpbWFsLWxlYWRpbmctemVyb1wiLFwiZGVmYXVsdFwiLFwiZGVmYXVsdC1idXR0b25cIixcImRlc3RpbmF0aW9uLWF0b3BcIixcImRlc3RpbmF0aW9uLWluXCIsXCJkZXN0aW5hdGlvbi1vdXRcIixcImRlc3RpbmF0aW9uLW92ZXJcIixcImRldmFuYWdhcmlcIixcImRpc2NcIixcImRpc2NhcmRcIixcImRpc2Nsb3N1cmUtY2xvc2VkXCIsXCJkaXNjbG9zdXJlLW9wZW5cIixcImRvY3VtZW50XCIsXCJkb3QtZGFzaFwiLFwiZG90LWRvdC1kYXNoXCIsXCJkb3R0ZWRcIixcImRvdWJsZVwiLFwiZG93blwiLFwiZS1yZXNpemVcIixcImVhc2VcIixcImVhc2UtaW5cIixcImVhc2UtaW4tb3V0XCIsXCJlYXNlLW91dFwiLFwiZWxlbWVudFwiLFwiZWxsaXBzZVwiLFwiZWxsaXBzaXNcIixcImVtYmVkXCIsXCJlbmRcIixcImV0aGlvcGljXCIsXCJldGhpb3BpYy1hYmVnZWRlXCIsXCJldGhpb3BpYy1hYmVnZWRlLWFtLWV0XCIsXCJldGhpb3BpYy1hYmVnZWRlLWdlelwiLFwiZXRoaW9waWMtYWJlZ2VkZS10aS1lclwiLFwiZXRoaW9waWMtYWJlZ2VkZS10aS1ldFwiLFwiZXRoaW9waWMtaGFsZWhhbWUtYWEtZXJcIixcImV0aGlvcGljLWhhbGVoYW1lLWFhLWV0XCIsXCJldGhpb3BpYy1oYWxlaGFtZS1hbS1ldFwiLFwiZXRoaW9waWMtaGFsZWhhbWUtZ2V6XCIsXCJldGhpb3BpYy1oYWxlaGFtZS1vbS1ldFwiLFwiZXRoaW9waWMtaGFsZWhhbWUtc2lkLWV0XCIsXCJldGhpb3BpYy1oYWxlaGFtZS1zby1ldFwiLFwiZXRoaW9waWMtaGFsZWhhbWUtdGktZXJcIixcImV0aGlvcGljLWhhbGVoYW1lLXRpLWV0XCIsXCJldGhpb3BpYy1oYWxlaGFtZS10aWdcIixcImV0aGlvcGljLW51bWVyaWNcIixcImV3LXJlc2l6ZVwiLFwiZXhwYW5kZWRcIixcImV4dGVuZHNcIixcImV4dHJhLWNvbmRlbnNlZFwiLFwiZXh0cmEtZXhwYW5kZWRcIixcImZhbnRhc3lcIixcImZhc3RcIixcImZpbGxcIixcImZpeGVkXCIsXCJmbGF0XCIsXCJmbGV4XCIsXCJmb290bm90ZXNcIixcImZvcndhcmRzXCIsXCJmcm9tXCIsXCJnZW9tZXRyaWNQcmVjaXNpb25cIixcImdlb3JnaWFuXCIsXCJncmF5dGV4dFwiLFwiZ3Jvb3ZlXCIsXCJndWphcmF0aVwiLFwiZ3VybXVraGlcIixcImhhbmRcIixcImhhbmd1bFwiLFwiaGFuZ3VsLWNvbnNvbmFudFwiLFwiaGVicmV3XCIsXCJoZWxwXCIsXCJoaWRkZW5cIixcImhpZGVcIixcImhpZ2hlclwiLFwiaGlnaGxpZ2h0XCIsXCJoaWdobGlnaHR0ZXh0XCIsXCJoaXJhZ2FuYVwiLFwiaGlyYWdhbmEtaXJvaGFcIixcImhvcml6b250YWxcIixcImhzbFwiLFwiaHNsYVwiLFwiaWNvblwiLFwiaWdub3JlXCIsXCJpbmFjdGl2ZWJvcmRlclwiLFwiaW5hY3RpdmVjYXB0aW9uXCIsXCJpbmFjdGl2ZWNhcHRpb250ZXh0XCIsXCJpbmZpbml0ZVwiLFwiaW5mb2JhY2tncm91bmRcIixcImluZm90ZXh0XCIsXCJpbmhlcml0XCIsXCJpbml0aWFsXCIsXCJpbmxpbmVcIixcImlubGluZS1heGlzXCIsXCJpbmxpbmUtYmxvY2tcIixcImlubGluZS1mbGV4XCIsXCJpbmxpbmUtdGFibGVcIixcImluc2V0XCIsXCJpbnNpZGVcIixcImludHJpbnNpY1wiLFwiaW52ZXJ0XCIsXCJpdGFsaWNcIixcImphcGFuZXNlLWZvcm1hbFwiLFwiamFwYW5lc2UtaW5mb3JtYWxcIixcImp1c3RpZnlcIixcImthbm5hZGFcIixcImthdGFrYW5hXCIsXCJrYXRha2FuYS1pcm9oYVwiLFwia2VlcC1hbGxcIixcImtobWVyXCIsXCJrb3JlYW4taGFuZ3VsLWZvcm1hbFwiLFwia29yZWFuLWhhbmphLWZvcm1hbFwiLFwia29yZWFuLWhhbmphLWluZm9ybWFsXCIsXCJsYW5kc2NhcGVcIixcImxhb1wiLFwibGFyZ2VcIixcImxhcmdlclwiLFwibGVmdFwiLFwibGV2ZWxcIixcImxpZ2h0ZXJcIixcImxpbmUtdGhyb3VnaFwiLFwibGluZWFyXCIsXCJsaW5lYXItZ3JhZGllbnRcIixcImxpbmVzXCIsXCJsaXN0LWl0ZW1cIixcImxpc3Rib3hcIixcImxpc3RpdGVtXCIsXCJsb2NhbFwiLFwibG9naWNhbFwiLFwibG91ZFwiLFwibG93ZXJcIixcImxvd2VyLWFscGhhXCIsXCJsb3dlci1hcm1lbmlhblwiLFwibG93ZXItZ3JlZWtcIixcImxvd2VyLWhleGFkZWNpbWFsXCIsXCJsb3dlci1sYXRpblwiLFwibG93ZXItbm9yd2VnaWFuXCIsXCJsb3dlci1yb21hblwiLFwibG93ZXJjYXNlXCIsXCJsdHJcIixcIm1hbGF5YWxhbVwiLFwibWF0Y2hcIixcIm1hdHJpeFwiLFwibWF0cml4M2RcIixcIm1lZGlhLWNvbnRyb2xzLWJhY2tncm91bmRcIixcIm1lZGlhLWN1cnJlbnQtdGltZS1kaXNwbGF5XCIsXCJtZWRpYS1mdWxsc2NyZWVuLWJ1dHRvblwiLFwibWVkaWEtbXV0ZS1idXR0b25cIixcIm1lZGlhLXBsYXktYnV0dG9uXCIsXCJtZWRpYS1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uXCIsXCJtZWRpYS1yZXdpbmQtYnV0dG9uXCIsXCJtZWRpYS1zZWVrLWJhY2stYnV0dG9uXCIsXCJtZWRpYS1zZWVrLWZvcndhcmQtYnV0dG9uXCIsXCJtZWRpYS1zbGlkZXJcIixcIm1lZGlhLXNsaWRlcnRodW1iXCIsXCJtZWRpYS10aW1lLXJlbWFpbmluZy1kaXNwbGF5XCIsXCJtZWRpYS12b2x1bWUtc2xpZGVyXCIsXCJtZWRpYS12b2x1bWUtc2xpZGVyLWNvbnRhaW5lclwiLFwibWVkaWEtdm9sdW1lLXNsaWRlcnRodW1iXCIsXCJtZWRpdW1cIixcIm1lbnVcIixcIm1lbnVsaXN0XCIsXCJtZW51bGlzdC1idXR0b25cIixcIm1lbnVsaXN0LXRleHRcIixcIm1lbnVsaXN0LXRleHRmaWVsZFwiLFwibWVudXRleHRcIixcIm1lc3NhZ2UtYm94XCIsXCJtaWRkbGVcIixcIm1pbi1pbnRyaW5zaWNcIixcIm1peFwiLFwibW9uZ29saWFuXCIsXCJtb25vc3BhY2VcIixcIm1vdmVcIixcIm11bHRpcGxlXCIsXCJteWFubWFyXCIsXCJuLXJlc2l6ZVwiLFwibmFycm93ZXJcIixcIm5lLXJlc2l6ZVwiLFwibmVzdy1yZXNpemVcIixcIm5vLWNsb3NlLXF1b3RlXCIsXCJuby1kcm9wXCIsXCJuby1vcGVuLXF1b3RlXCIsXCJuby1yZXBlYXRcIixcIm5vbmVcIixcIm5vcm1hbFwiLFwibm90LWFsbG93ZWRcIixcIm5vd3JhcFwiLFwibnMtcmVzaXplXCIsXCJudW1iZXJzXCIsXCJudW1lcmljXCIsXCJudy1yZXNpemVcIixcIm53c2UtcmVzaXplXCIsXCJvYmxpcXVlXCIsXCJvY3RhbFwiLFwib3Blbi1xdW90ZVwiLFwib3B0aW1pemVMZWdpYmlsaXR5XCIsXCJvcHRpbWl6ZVNwZWVkXCIsXCJvcml5YVwiLFwib3JvbW9cIixcIm91dHNldFwiLFwib3V0c2lkZVwiLFwib3V0c2lkZS1zaGFwZVwiLFwib3ZlcmxheVwiLFwib3ZlcmxpbmVcIixcInBhZGRpbmdcIixcInBhZGRpbmctYm94XCIsXCJwYWludGVkXCIsXCJwYWdlXCIsXCJwYXVzZWRcIixcInBlcnNpYW5cIixcInBlcnNwZWN0aXZlXCIsXCJwbHVzLWRhcmtlclwiLFwicGx1cy1saWdodGVyXCIsXCJwb2ludGVyXCIsXCJwb2x5Z29uXCIsXCJwb3J0cmFpdFwiLFwicHJlXCIsXCJwcmUtbGluZVwiLFwicHJlLXdyYXBcIixcInByZXNlcnZlLTNkXCIsXCJwcm9ncmVzc1wiLFwicHVzaC1idXR0b25cIixcInJhZGlhbC1ncmFkaWVudFwiLFwicmFkaW9cIixcInJlYWQtb25seVwiLFwicmVhZC13cml0ZVwiLFwicmVhZC13cml0ZS1wbGFpbnRleHQtb25seVwiLFwicmVjdGFuZ2xlXCIsXCJyZWdpb25cIixcInJlbGF0aXZlXCIsXCJyZXBlYXRcIixcInJlcGVhdGluZy1saW5lYXItZ3JhZGllbnRcIixcInJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnRcIixcInJlcGVhdC14XCIsXCJyZXBlYXQteVwiLFwicmVzZXRcIixcInJldmVyc2VcIixcInJnYlwiLFwicmdiYVwiLFwicmlkZ2VcIixcInJpZ2h0XCIsXCJyb3RhdGVcIixcInJvdGF0ZTNkXCIsXCJyb3RhdGVYXCIsXCJyb3RhdGVZXCIsXCJyb3RhdGVaXCIsXCJyb3VuZFwiLFwicm93LXJlc2l6ZVwiLFwicnRsXCIsXCJydW4taW5cIixcInJ1bm5pbmdcIixcInMtcmVzaXplXCIsXCJzYW5zLXNlcmlmXCIsXCJzY2FsZVwiLFwic2NhbGUzZFwiLFwic2NhbGVYXCIsXCJzY2FsZVlcIixcInNjYWxlWlwiLFwic2Nyb2xsXCIsXCJzY3JvbGxiYXJcIixcInNjcm9sbC1wb3NpdGlvblwiLFwic2UtcmVzaXplXCIsXCJzZWFyY2hmaWVsZFwiLFwic2VhcmNoZmllbGQtY2FuY2VsLWJ1dHRvblwiLFwic2VhcmNoZmllbGQtZGVjb3JhdGlvblwiLFwic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b25cIixcInNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3JhdGlvblwiLFwic2VtaS1jb25kZW5zZWRcIixcInNlbWktZXhwYW5kZWRcIixcInNlcGFyYXRlXCIsXCJzZXJpZlwiLFwic2hvd1wiLFwic2lkYW1hXCIsXCJzaW1wLWNoaW5lc2UtZm9ybWFsXCIsXCJzaW1wLWNoaW5lc2UtaW5mb3JtYWxcIixcInNpbmdsZVwiLFwic2tld1wiLFwic2tld1hcIixcInNrZXdZXCIsXCJza2lwLXdoaXRlLXNwYWNlXCIsXCJzbGlkZVwiLFwic2xpZGVyLWhvcml6b250YWxcIixcInNsaWRlci12ZXJ0aWNhbFwiLFwic2xpZGVydGh1bWItaG9yaXpvbnRhbFwiLFwic2xpZGVydGh1bWItdmVydGljYWxcIixcInNsb3dcIixcInNtYWxsXCIsXCJzbWFsbC1jYXBzXCIsXCJzbWFsbC1jYXB0aW9uXCIsXCJzbWFsbGVyXCIsXCJzb2xpZFwiLFwic29tYWxpXCIsXCJzb3VyY2UtYXRvcFwiLFwic291cmNlLWluXCIsXCJzb3VyY2Utb3V0XCIsXCJzb3VyY2Utb3ZlclwiLFwic3BhY2VcIixcInNwZWxsLW91dFwiLFwic3F1YXJlXCIsXCJzcXVhcmUtYnV0dG9uXCIsXCJzdGFydFwiLFwic3RhdGljXCIsXCJzdGF0dXMtYmFyXCIsXCJzdHJldGNoXCIsXCJzdHJva2VcIixcInN1YlwiLFwic3VicGl4ZWwtYW50aWFsaWFzZWRcIixcInN1cGVyXCIsXCJzdy1yZXNpemVcIixcInN5bWJvbGljXCIsXCJzeW1ib2xzXCIsXCJ0YWJsZVwiLFwidGFibGUtY2FwdGlvblwiLFwidGFibGUtY2VsbFwiLFwidGFibGUtY29sdW1uXCIsXCJ0YWJsZS1jb2x1bW4tZ3JvdXBcIixcInRhYmxlLWZvb3Rlci1ncm91cFwiLFwidGFibGUtaGVhZGVyLWdyb3VwXCIsXCJ0YWJsZS1yb3dcIixcInRhYmxlLXJvdy1ncm91cFwiLFwidGFtaWxcIixcInRlbHVndVwiLFwidGV4dFwiLFwidGV4dC1ib3R0b21cIixcInRleHQtdG9wXCIsXCJ0ZXh0YXJlYVwiLFwidGV4dGZpZWxkXCIsXCJ0aGFpXCIsXCJ0aGlja1wiLFwidGhpblwiLFwidGhyZWVkZGFya3NoYWRvd1wiLFwidGhyZWVkZmFjZVwiLFwidGhyZWVkaGlnaGxpZ2h0XCIsXCJ0aHJlZWRsaWdodHNoYWRvd1wiLFwidGhyZWVkc2hhZG93XCIsXCJ0aWJldGFuXCIsXCJ0aWdyZVwiLFwidGlncmlueWEtZXJcIixcInRpZ3JpbnlhLWVyLWFiZWdlZGVcIixcInRpZ3JpbnlhLWV0XCIsXCJ0aWdyaW55YS1ldC1hYmVnZWRlXCIsXCJ0b1wiLFwidG9wXCIsXCJ0cmFkLWNoaW5lc2UtZm9ybWFsXCIsXCJ0cmFkLWNoaW5lc2UtaW5mb3JtYWxcIixcInRyYW5zbGF0ZVwiLFwidHJhbnNsYXRlM2RcIixcInRyYW5zbGF0ZVhcIixcInRyYW5zbGF0ZVlcIixcInRyYW5zbGF0ZVpcIixcInRyYW5zcGFyZW50XCIsXCJ1bHRyYS1jb25kZW5zZWRcIixcInVsdHJhLWV4cGFuZGVkXCIsXCJ1bmRlcmxpbmVcIixcInVwXCIsXCJ1cHBlci1hbHBoYVwiLFwidXBwZXItYXJtZW5pYW5cIixcInVwcGVyLWdyZWVrXCIsXCJ1cHBlci1oZXhhZGVjaW1hbFwiLFwidXBwZXItbGF0aW5cIixcInVwcGVyLW5vcndlZ2lhblwiLFwidXBwZXItcm9tYW5cIixcInVwcGVyY2FzZVwiLFwidXJkdVwiLFwidXJsXCIsXCJ2YXJcIixcInZlcnRpY2FsXCIsXCJ2ZXJ0aWNhbC10ZXh0XCIsXCJ2aXNpYmxlXCIsXCJ2aXNpYmxlRmlsbFwiLFwidmlzaWJsZVBhaW50ZWRcIixcInZpc2libGVTdHJva2VcIixcInZpc3VhbFwiLFwidy1yZXNpemVcIixcIndhaXRcIixcIndhdmVcIixcIndpZGVyXCIsXCJ3aW5kb3dcIixcIndpbmRvd2ZyYW1lXCIsXCJ3aW5kb3d0ZXh0XCIsXCJ3b3Jkc1wiLFwieC1sYXJnZVwiLFwieC1zbWFsbFwiLFwieG9yXCIsXCJ4eC1sYXJnZVwiLFwieHgtc21hbGxcIixcImJpY3ViaWNcIixcIm9wdGltaXplc3BlZWRcIixcImdyYXlzY2FsZVwiLFwicm93XCIsXCJyb3ctcmV2ZXJzZVwiLFwid3JhcFwiLFwid3JhcC1yZXZlcnNlXCIsXCJjb2x1bW4tcmV2ZXJzZVwiLFwiZmxleC1zdGFydFwiLFwiZmxleC1lbmRcIixcInNwYWNlLWJldHdlZW5cIixcInNwYWNlLWFyb3VuZFwiLCBcInVuc2V0XCJdO1xuXG4gIHZhciB3b3JkT3BlcmF0b3JLZXl3b3Jkc18gPSBbXCJpblwiLFwiYW5kXCIsXCJvclwiLFwibm90XCIsXCJpcyBub3RcIixcImlzIGFcIixcImlzXCIsXCJpc250XCIsXCJkZWZpbmVkXCIsXCJpZiB1bmxlc3NcIl0sXG4gICAgICBibG9ja0tleXdvcmRzXyA9IFtcImZvclwiLFwiaWZcIixcImVsc2VcIixcInVubGVzc1wiLCBcImZyb21cIiwgXCJ0b1wiXSxcbiAgICAgIGNvbW1vbkF0b21zXyA9IFtcIm51bGxcIixcInRydWVcIixcImZhbHNlXCIsXCJocmVmXCIsXCJ0aXRsZVwiLFwidHlwZVwiLFwibm90LWFsbG93ZWRcIixcInJlYWRvbmx5XCIsXCJkaXNhYmxlZFwiXSxcbiAgICAgIGNvbW1vbkRlZl8gPSBbXCJAZm9udC1mYWNlXCIsIFwiQGtleWZyYW1lc1wiLCBcIkBtZWRpYVwiLCBcIkB2aWV3cG9ydFwiLCBcIkBwYWdlXCIsIFwiQGhvc3RcIiwgXCJAc3VwcG9ydHNcIiwgXCJAYmxvY2tcIiwgXCJAY3NzXCJdO1xuXG4gIHZhciBoaW50V29yZHMgPSB0YWdLZXl3b3Jkc18uY29uY2F0KGRvY3VtZW50VHlwZXNfLG1lZGlhVHlwZXNfLG1lZGlhRmVhdHVyZXNfLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUtleXdvcmRzXyxub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHNfLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcktleXdvcmRzXyx2YWx1ZUtleXdvcmRzXyxmb250UHJvcGVydGllc18sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRPcGVyYXRvcktleXdvcmRzXyxibG9ja0tleXdvcmRzXyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uQXRvbXNfLGNvbW1vbkRlZl8pO1xuXG4gIGZ1bmN0aW9uIHdvcmRSZWdleHAod29yZHMpIHtcbiAgICB3b3JkcyA9IHdvcmRzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiA+IGE7fSk7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKChcIiArIHdvcmRzLmpvaW4oXCIpfChcIikgKyBcIikpXFxcXGJcIik7XG4gIH1cblxuICBmdW5jdGlvbiBrZXlTZXQoYXJyYXkpIHtcbiAgICB2YXIga2V5cyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIGtleXNbYXJyYXlbaV1dID0gdHJ1ZTtcbiAgICByZXR1cm4ga2V5cztcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cCh0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csIFwiXFxcXCQmXCIpO1xuICB9XG5cbiAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImhpbnRXb3Jkc1wiLCBcInN0eWx1c1wiLCBoaW50V29yZHMpO1xuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtc3R5bFwiLCBcInN0eWx1c1wiKTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLy8gU3dpZnQgbW9kZSBjcmVhdGVkIGJ5IE1pY2hhZWwgS2FtaW5za3kgaHR0cHM6Ly9naXRodWIuY29tL21rYW1pbnNreTExXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKVxuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpXG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpXG4gIGVsc2VcbiAgICBtb2QoQ29kZU1pcnJvcilcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCJcblxuICBmdW5jdGlvbiB3b3JkU2V0KHdvcmRzKSB7XG4gICAgdmFyIHNldCA9IHt9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7IGkrKykgc2V0W3dvcmRzW2ldXSA9IHRydWVcbiAgICByZXR1cm4gc2V0XG4gIH1cblxuICB2YXIga2V5d29yZHMgPSB3b3JkU2V0KFtcIl9cIixcInZhclwiLFwibGV0XCIsXCJjbGFzc1wiLFwiZW51bVwiLFwiZXh0ZW5zaW9uXCIsXCJpbXBvcnRcIixcInByb3RvY29sXCIsXCJzdHJ1Y3RcIixcImZ1bmNcIixcInR5cGVhbGlhc1wiLFwiYXNzb2NpYXRlZHR5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcGVuXCIsXCJwdWJsaWNcIixcImludGVybmFsXCIsXCJmaWxlcHJpdmF0ZVwiLFwicHJpdmF0ZVwiLFwiZGVpbml0XCIsXCJpbml0XCIsXCJuZXdcIixcIm92ZXJyaWRlXCIsXCJzZWxmXCIsXCJzdWJzY3JpcHRcIixcInN1cGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udmVuaWVuY2VcIixcImR5bmFtaWNcIixcImZpbmFsXCIsXCJpbmRpcmVjdFwiLFwibGF6eVwiLFwicmVxdWlyZWRcIixcInN0YXRpY1wiLFwidW5vd25lZFwiLFwidW5vd25lZChzYWZlKVwiLFwidW5vd25lZCh1bnNhZmUpXCIsXCJ3ZWFrXCIsXCJhc1wiLFwiaXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJicmVha1wiLFwiY2FzZVwiLFwiY29udGludWVcIixcImRlZmF1bHRcIixcImVsc2VcIixcImZhbGx0aHJvdWdoXCIsXCJmb3JcIixcImd1YXJkXCIsXCJpZlwiLFwiaW5cIixcInJlcGVhdFwiLFwic3dpdGNoXCIsXCJ3aGVyZVwiLFwid2hpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWZlclwiLFwicmV0dXJuXCIsXCJpbm91dFwiLFwibXV0YXRpbmdcIixcIm5vbm11dGF0aW5nXCIsXCJjYXRjaFwiLFwiZG9cIixcInJldGhyb3dzXCIsXCJ0aHJvd1wiLFwidGhyb3dzXCIsXCJ0cnlcIixcImRpZFNldFwiLFwiZ2V0XCIsXCJzZXRcIixcIndpbGxTZXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NpZ25tZW50XCIsXCJhc3NvY2lhdGl2aXR5XCIsXCJpbmZpeFwiLFwibGVmdFwiLFwibm9uZVwiLFwib3BlcmF0b3JcIixcInBvc3RmaXhcIixcInByZWNlZGVuY2VcIixcInByZWNlZGVuY2Vncm91cFwiLFwicHJlZml4XCIsXCJyaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIkFueVwiLFwiQW55T2JqZWN0XCIsXCJUeXBlXCIsXCJkeW5hbWljVHlwZVwiLFwiU2VsZlwiLFwiUHJvdG9jb2xcIixcIl9fQ09MVU1OX19cIixcIl9fRklMRV9fXCIsXCJfX0ZVTkNUSU9OX19cIixcIl9fTElORV9fXCJdKVxuICB2YXIgZGVmaW5pbmdLZXl3b3JkcyA9IHdvcmRTZXQoW1widmFyXCIsXCJsZXRcIixcImNsYXNzXCIsXCJlbnVtXCIsXCJleHRlbnNpb25cIixcImltcG9ydFwiLFwicHJvdG9jb2xcIixcInN0cnVjdFwiLFwiZnVuY1wiLFwidHlwZWFsaWFzXCIsXCJhc3NvY2lhdGVkdHlwZVwiLFwiZm9yXCJdKVxuICB2YXIgYXRvbXMgPSB3b3JkU2V0KFtcInRydWVcIixcImZhbHNlXCIsXCJuaWxcIixcInNlbGZcIixcInN1cGVyXCIsXCJfXCJdKVxuICB2YXIgdHlwZXMgPSB3b3JkU2V0KFtcIkFycmF5XCIsXCJCb29sXCIsXCJDaGFyYWN0ZXJcIixcIkRpY3Rpb25hcnlcIixcIkRvdWJsZVwiLFwiRmxvYXRcIixcIkludFwiLFwiSW50OFwiLFwiSW50MTZcIixcIkludDMyXCIsXCJJbnQ2NFwiLFwiTmV2ZXJcIixcIk9wdGlvbmFsXCIsXCJTZXRcIixcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICBcIlVJbnQ4XCIsXCJVSW50MTZcIixcIlVJbnQzMlwiLFwiVUludDY0XCIsXCJWb2lkXCJdKVxuICB2YXIgb3BlcmF0b3JzID0gXCIrLS8qJT18Jjw+fl4/IVwiXG4gIHZhciBwdW5jID0gXCI6OywuKCl7fVtdXCJcbiAgdmFyIGJpbmFyeSA9IC9eXFwtPzBiWzAxXVswMV9dKi9cbiAgdmFyIG9jdGFsID0gL15cXC0/MG9bMC03XVswLTdfXSovXG4gIHZhciBoZXhhZGVjaW1hbCA9IC9eXFwtPzB4W1xcZEEtRmEtZl1bXFxkQS1GYS1mX10qKD86KD86XFwuW1xcZEEtRmEtZl1bXFxkQS1GYS1mX10qKT9bUHBdXFwtP1xcZFtcXGRfXSopPy9cbiAgdmFyIGRlY2ltYWwgPSAvXlxcLT9cXGRbXFxkX10qKD86XFwuXFxkW1xcZF9dKik/KD86W0VlXVxcLT9cXGRbXFxkX10qKT8vXG4gIHZhciBpZGVudGlmaWVyID0gL15cXCRcXGQrfChgPylbX0EtWmEtel1bX0EtWmEteiQwLTldKlxcMS9cbiAgdmFyIHByb3BlcnR5ID0gL15cXC4oPzpcXCRcXGQrfChgPylbX0EtWmEtel1bX0EtWmEteiQwLTldKlxcMSkvXG4gIHZhciBpbnN0cnVjdGlvbiA9IC9eXFwjW0EtWmEtel0rL1xuICB2YXIgYXR0cmlidXRlID0gL15AKD86XFwkXFxkK3woYD8pW19BLVphLXpdW19BLVphLXokMC05XSpcXDEpL1xuICAvL3ZhciByZWdleHAgPSAvXlxcLyg/IVxccykoPzpcXC9cXC8pPyg/OlxcXFwufFteXFwvXSkrXFwvL1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlLCBwcmV2KSB7XG4gICAgaWYgKHN0cmVhbS5zb2woKSkgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKVxuICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGxcblxuICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKClcbiAgICBpZiAoY2ggPT0gXCIvXCIpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goXCIvL1wiKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKClcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiXG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKFwiLypcIikpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbkNvbW1lbnQpXG4gICAgICAgIHJldHVybiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0cmVhbS5tYXRjaChpbnN0cnVjdGlvbikpIHJldHVybiBcImJ1aWx0aW5cIlxuICAgIGlmIChzdHJlYW0ubWF0Y2goYXR0cmlidXRlKSkgcmV0dXJuIFwiYXR0cmlidXRlXCJcbiAgICBpZiAoc3RyZWFtLm1hdGNoKGJpbmFyeSkpIHJldHVybiBcIm51bWJlclwiXG4gICAgaWYgKHN0cmVhbS5tYXRjaChvY3RhbCkpIHJldHVybiBcIm51bWJlclwiXG4gICAgaWYgKHN0cmVhbS5tYXRjaChoZXhhZGVjaW1hbCkpIHJldHVybiBcIm51bWJlclwiXG4gICAgaWYgKHN0cmVhbS5tYXRjaChkZWNpbWFsKSkgcmV0dXJuIFwibnVtYmVyXCJcbiAgICBpZiAoc3RyZWFtLm1hdGNoKHByb3BlcnR5KSkgcmV0dXJuIFwicHJvcGVydHlcIlxuICAgIGlmIChvcGVyYXRvcnMuaW5kZXhPZihjaCkgPiAtMSkge1xuICAgICAgc3RyZWFtLm5leHQoKVxuICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIlxuICAgIH1cbiAgICBpZiAocHVuYy5pbmRleE9mKGNoKSA+IC0xKSB7XG4gICAgICBzdHJlYW0ubmV4dCgpXG4gICAgICBzdHJlYW0ubWF0Y2goXCIuLlwiKVxuICAgICAgcmV0dXJuIFwicHVuY3R1YXRpb25cIlxuICAgIH1cbiAgICB2YXIgc3RyaW5nTWF0Y2hcbiAgICBpZiAoc3RyaW5nTWF0Y2ggPSBzdHJlYW0ubWF0Y2goLyhcIlwiXCJ8XCJ8JykvKSkge1xuICAgICAgdmFyIHRva2VuaXplID0gdG9rZW5TdHJpbmcuYmluZChudWxsLCBzdHJpbmdNYXRjaFswXSlcbiAgICAgIHN0YXRlLnRva2VuaXplLnB1c2godG9rZW5pemUpXG4gICAgICByZXR1cm4gdG9rZW5pemUoc3RyZWFtLCBzdGF0ZSlcbiAgICB9XG5cbiAgICBpZiAoc3RyZWFtLm1hdGNoKGlkZW50aWZpZXIpKSB7XG4gICAgICB2YXIgaWRlbnQgPSBzdHJlYW0uY3VycmVudCgpXG4gICAgICBpZiAodHlwZXMuaGFzT3duUHJvcGVydHkoaWRlbnQpKSByZXR1cm4gXCJ2YXJpYWJsZS0yXCJcbiAgICAgIGlmIChhdG9tcy5oYXNPd25Qcm9wZXJ0eShpZGVudCkpIHJldHVybiBcImF0b21cIlxuICAgICAgaWYgKGtleXdvcmRzLmhhc093blByb3BlcnR5KGlkZW50KSkge1xuICAgICAgICBpZiAoZGVmaW5pbmdLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eShpZGVudCkpXG4gICAgICAgICAgc3RhdGUucHJldiA9IFwiZGVmaW5lXCJcbiAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiXG4gICAgICB9XG4gICAgICBpZiAocHJldiA9PSBcImRlZmluZVwiKSByZXR1cm4gXCJkZWZcIlxuICAgICAgcmV0dXJuIFwidmFyaWFibGVcIlxuICAgIH1cblxuICAgIHN0cmVhbS5uZXh0KClcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5VbnRpbENsb3NpbmdQYXJlbigpIHtcbiAgICB2YXIgZGVwdGggPSAwXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUsIHByZXYpIHtcbiAgICAgIHZhciBpbm5lciA9IHRva2VuQmFzZShzdHJlYW0sIHN0YXRlLCBwcmV2KVxuICAgICAgaWYgKGlubmVyID09IFwicHVuY3R1YXRpb25cIikge1xuICAgICAgICBpZiAoc3RyZWFtLmN1cnJlbnQoKSA9PSBcIihcIikgKytkZXB0aFxuICAgICAgICBlbHNlIGlmIChzdHJlYW0uY3VycmVudCgpID09IFwiKVwiKSB7XG4gICAgICAgICAgaWYgKGRlcHRoID09IDApIHtcbiAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSlcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplLnBvcCgpXG4gICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoIC0gMV0oc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSAtLWRlcHRoXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpbm5lclxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKG9wZW5RdW90ZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBzaW5nbGVMaW5lID0gb3BlblF1b3RlLmxlbmd0aCA9PSAxXG4gICAgdmFyIGNoLCBlc2NhcGVkID0gZmFsc2VcbiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ucGVlaygpKSB7XG4gICAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgICBzdHJlYW0ubmV4dCgpXG4gICAgICAgIGlmIChjaCA9PSBcIihcIikge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplLnB1c2godG9rZW5VbnRpbENsb3NpbmdQYXJlbigpKVxuICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiXG4gICAgICAgIH1cbiAgICAgICAgZXNjYXBlZCA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChvcGVuUXVvdGUpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplLnBvcCgpXG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0ubmV4dCgpXG4gICAgICAgIGVzY2FwZWQgPSBjaCA9PSBcIlxcXFxcIlxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2luZ2xlTGluZSkge1xuICAgICAgc3RhdGUudG9rZW5pemUucG9wKClcbiAgICB9XG4gICAgcmV0dXJuIFwic3RyaW5nXCJcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHN0cmVhbS5tYXRjaCgvXlteLypdKy8sIHRydWUpXG4gICAgICBjaCA9IHN0cmVhbS5uZXh0KClcbiAgICAgIGlmICghY2gpIGJyZWFrXG4gICAgICBpZiAoY2ggPT09IFwiL1wiICYmIHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplLnB1c2godG9rZW5Db21tZW50KVxuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCIqXCIgJiYgc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFwiY29tbWVudFwiXG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHByZXYsIGFsaWduLCBpbmRlbnRlZCkge1xuICAgIHRoaXMucHJldiA9IHByZXZcbiAgICB0aGlzLmFsaWduID0gYWxpZ25cbiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWRcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0pIHtcbiAgICB2YXIgYWxpZ24gPSBzdHJlYW0ubWF0Y2goL15cXHMqKCR8XFwvW1xcL1xcKl0pLywgZmFsc2UpID8gbnVsbCA6IHN0cmVhbS5jb2x1bW4oKSArIDFcbiAgICBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUuY29udGV4dCwgYWxpZ24sIHN0YXRlLmluZGVudGVkKVxuICB9XG5cbiAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5jb250ZXh0KSB7XG4gICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmNvbnRleHQuaW5kZW50ZWRcbiAgICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXZcbiAgICB9XG4gIH1cblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJzd2lmdFwiLCBmdW5jdGlvbihjb25maWcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJldjogbnVsbCxcbiAgICAgICAgICBjb250ZXh0OiBudWxsLFxuICAgICAgICAgIGluZGVudGVkOiAwLFxuICAgICAgICAgIHRva2VuaXplOiBbXVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgcHJldiA9IHN0YXRlLnByZXZcbiAgICAgICAgc3RhdGUucHJldiA9IG51bGxcbiAgICAgICAgdmFyIHRva2VuaXplID0gc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoIC0gMV0gfHwgdG9rZW5CYXNlXG4gICAgICAgIHZhciBzdHlsZSA9IHRva2VuaXplKHN0cmVhbSwgc3RhdGUsIHByZXYpXG4gICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUgPT0gXCJjb21tZW50XCIpIHN0YXRlLnByZXYgPSBwcmV2XG4gICAgICAgIGVsc2UgaWYgKCFzdGF0ZS5wcmV2KSBzdGF0ZS5wcmV2ID0gc3R5bGVcblxuICAgICAgICBpZiAoc3R5bGUgPT0gXCJwdW5jdHVhdGlvblwiKSB7XG4gICAgICAgICAgdmFyIGJyYWNrZXQgPSAvW1xcKFxcW1xce118KFtcXF1cXClcXH1dKS8uZXhlYyhzdHJlYW0uY3VycmVudCgpKVxuICAgICAgICAgIGlmIChicmFja2V0KSAoYnJhY2tldFsxXSA/IHBvcENvbnRleHQgOiBwdXNoQ29udGV4dCkoc3RhdGUsIHN0cmVhbSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZVxuICAgICAgfSxcblxuICAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgICAgIHZhciBjeCA9IHN0YXRlLmNvbnRleHRcbiAgICAgICAgaWYgKCFjeCkgcmV0dXJuIDBcbiAgICAgICAgdmFyIGNsb3NpbmcgPSAvXltcXF1cXH1cXCldLy50ZXN0KHRleHRBZnRlcilcbiAgICAgICAgaWYgKGN4LmFsaWduICE9IG51bGwpIHJldHVybiBjeC5hbGlnbiAtIChjbG9zaW5nID8gMSA6IDApXG4gICAgICAgIHJldHVybiBjeC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KVxuICAgICAgfSxcblxuICAgICAgZWxlY3RyaWNJbnB1dDogL15cXHMqW1xcKVxcfVxcXV0kLyxcblxuICAgICAgbGluZUNvbW1lbnQ6IFwiLy9cIixcbiAgICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIi8qXCIsXG4gICAgICBibG9ja0NvbW1lbnRFbmQ6IFwiKi9cIixcbiAgICAgIGZvbGQ6IFwiYnJhY2VcIixcbiAgICAgIGNsb3NlQnJhY2tldHM6IFwiKClbXXt9JydcXFwiXFxcImBgXCJcbiAgICB9XG4gIH0pXG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXN3aWZ0XCIsXCJzd2lmdFwiKVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vL3RjbCBtb2RlIGJ5IEZvcmRfTGF3bm1vd2VyIDo6IEJhc2VkIG9uIFZlbG9jaXR5IG1vZGUgYnkgU3RldmUgTydIYXJhXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwidGNsXCIsIGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBwYXJzZVdvcmRzKHN0cikge1xuICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoXCIgXCIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgdmFyIGtleXdvcmRzID0gcGFyc2VXb3JkcyhcIlRjbCBzYWZlIGFmdGVyIGFwcGVuZCBhcnJheSBhdXRvX2V4ZWNvayBhdXRvX2ltcG9ydCBhdXRvX2xvYWQgXCIgK1xuICAgICAgICBcImF1dG9fbWtpbmRleCBhdXRvX21raW5kZXhfb2xkIGF1dG9fcXVhbGlmeSBhdXRvX3Jlc2V0IGJnZXJyb3IgXCIgK1xuICAgICAgICBcImJpbmFyeSBicmVhayBjYXRjaCBjZCBjbG9zZSBjb25jYXQgY29udGludWUgZGRlIGVvZiBlbmNvZGluZyBlcnJvciBcIiArXG4gICAgICAgIFwiZXZhbCBleGVjIGV4aXQgZXhwciBmYmxvY2tlZCBmY29uZmlndXJlIGZjb3B5IGZpbGUgZmlsZWV2ZW50IGZpbGVuYW1lIFwiICtcbiAgICAgICAgXCJmaWxlbmFtZSBmbHVzaCBmb3IgZm9yZWFjaCBmb3JtYXQgZ2V0cyBnbG9iIGdsb2JhbCBoaXN0b3J5IGh0dHAgaWYgXCIgK1xuICAgICAgICBcImluY3IgaW5mbyBpbnRlcnAgam9pbiBsYXBwZW5kIGxpbmRleCBsaW5zZXJ0IGxpc3QgbGxlbmd0aCBsb2FkIGxyYW5nZSBcIiArXG4gICAgICAgIFwibHJlcGxhY2UgbHNlYXJjaCBsc2V0IGxzb3J0IG1lbW9yeSBtc2djYXQgbmFtZXNwYWNlIG9wZW4gcGFja2FnZSBwYXJyYXkgXCIgK1xuICAgICAgICBcInBpZCBwa2c6OmNyZWF0ZSBwa2dfbWtJbmRleCBwcm9jIHB1dHMgcHdkIHJlX3N5bnRheCByZWFkIHJlZ2V4IHJlZ2V4cCBcIiArXG4gICAgICAgIFwicmVnaXN0cnkgcmVnc3ViIHJlbmFtZSByZXNvdXJjZSByZXR1cm4gc2NhbiBzZWVrIHNldCBzb2NrZXQgc291cmNlIHNwbGl0IFwiICtcbiAgICAgICAgXCJzdHJpbmcgc3Vic3Qgc3dpdGNoIHRjbF9lbmRPZldvcmQgdGNsX2ZpbmRMaWJyYXJ5IHRjbF9zdGFydE9mTmV4dFdvcmQgXCIgK1xuICAgICAgICBcInRjbF93b3JkQnJlYWtBZnRlciB0Y2xfc3RhcnRPZlByZXZpb3VzV29yZCB0Y2xfd29yZEJyZWFrQmVmb3JlIHRjbHRlc3QgXCIgK1xuICAgICAgICBcInRjbHZhcnMgdGVsbCB0aW1lIHRyYWNlIHVua25vd24gdW5zZXQgdXBkYXRlIHVwbGV2ZWwgdXB2YXIgdmFyaWFibGUgXCIgK1xuICAgIFwidndhaXRcIik7XG4gICAgdmFyIGZ1bmN0aW9ucyA9IHBhcnNlV29yZHMoXCJpZiBlbHNlaWYgZWxzZSBhbmQgbm90IG9yIGVxIG5lIGluIG5pIGZvciBmb3JlYWNoIHdoaWxlIHN3aXRjaFwiKTtcbiAgICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWytcXC0qJiU9PD4hP15cXC9cXHxdLztcbiAgICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IGY7XG4gICAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBiZWZvcmVQYXJhbXMgPSBzdGF0ZS5iZWZvcmVQYXJhbXM7XG4gICAgICBzdGF0ZS5iZWZvcmVQYXJhbXMgPSBmYWxzZTtcbiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgICBpZiAoKGNoID09ICdcIicgfHwgY2ggPT0gXCInXCIpICYmIHN0YXRlLmluUGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpO1xuICAgICAgfSBlbHNlIGlmICgvW1xcW1xcXXt9XFwoXFwpLDtcXC5dLy50ZXN0KGNoKSkge1xuICAgICAgICBpZiAoY2ggPT0gXCIoXCIgJiYgYmVmb3JlUGFyYW1zKSBzdGF0ZS5pblBhcmFtcyA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKGNoID09IFwiKVwiKSBzdGF0ZS5pblBhcmFtcyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIGlmICgvXFxkLy50ZXN0KGNoKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5dLyk7XG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgfSBlbHNlIGlmIChjaCA9PSBcIiNcIikge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIipcIikpXG4gICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuQ29tbWVudCk7XG4gICAgICAgIGlmIChjaCA9PSBcIiNcIiAmJiBzdHJlYW0ubWF0Y2goLyAqXFxbICpcXFsvKSlcbiAgICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5VbnBhcnNlZCk7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfSBlbHNlIGlmIChjaCA9PSAnXCInKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG8oL1wiLyk7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIkXCIpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bJF9hLXowLTlBLVpcXC57Ol0vKTtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC99Lyk7XG4gICAgICAgIHN0YXRlLmJlZm9yZVBhcmFtcyA9IHRydWU7XG4gICAgICAgIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgICAgIH0gZWxzZSBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX3t9XFx4YTEtXFx1ZmZmZl0vKTtcbiAgICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChrZXl3b3JkcyAmJiBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSlcbiAgICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICAgIGlmIChmdW5jdGlvbnMgJiYgZnVuY3Rpb25zLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSB7XG4gICAgICAgICAgc3RhdGUuYmVmb3JlUGFyYW1zID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7XG4gICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgZW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQpIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7XG4gICAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICAgIGlmIChjaCA9PSBcIiNcIiAmJiBtYXliZUVuZCkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG1heWJlRW5kID0gKGNoID09IFwiKlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9rZW5VbnBhcnNlZChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgbWF5YmVFbmQgPSAwLCBjaDtcbiAgICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgICAgaWYgKGNoID09IFwiI1wiICYmIG1heWJlRW5kID09IDIpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT0gXCJdXCIpXG4gICAgICAgICAgbWF5YmVFbmQrKztcbiAgICAgICAgZWxzZSBpZiAoY2ggIT0gXCIgXCIpXG4gICAgICAgICAgbWF5YmVFbmQgPSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSxcbiAgICAgICAgICBiZWZvcmVQYXJhbXM6IGZhbHNlLFxuICAgICAgICAgIGluUGFyYW1zOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH0sXG4gICAgICBsaW5lQ29tbWVudDogXCIjXCJcbiAgICB9O1xufSk7XG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtdGNsXCIsIFwidGNsXCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSB7IC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgeyAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIH0gZWxzZSB7IC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xuICB9XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBUT0tFTl9TVFlMRVMgPSB7XG4gICAgYWRkaXRpb246IFwicG9zaXRpdmVcIixcbiAgICBhdHRyaWJ1dGVzOiBcImF0dHJpYnV0ZVwiLFxuICAgIGJvbGQ6IFwic3Ryb25nXCIsXG4gICAgY2l0ZTogXCJrZXl3b3JkXCIsXG4gICAgY29kZTogXCJhdG9tXCIsXG4gICAgZGVmaW5pdGlvbkxpc3Q6IFwibnVtYmVyXCIsXG4gICAgZGVsZXRpb246IFwibmVnYXRpdmVcIixcbiAgICBkaXY6IFwicHVuY3R1YXRpb25cIixcbiAgICBlbTogXCJlbVwiLFxuICAgIGZvb3Rub3RlOiBcInZhcmlhYmxlXCIsXG4gICAgZm9vdENpdGU6IFwicXVhbGlmaWVyXCIsXG4gICAgaGVhZGVyOiBcImhlYWRlclwiLFxuICAgIGh0bWw6IFwiY29tbWVudFwiLFxuICAgIGltYWdlOiBcInN0cmluZ1wiLFxuICAgIGl0YWxpYzogXCJlbVwiLFxuICAgIGxpbms6IFwibGlua1wiLFxuICAgIGxpbmtEZWZpbml0aW9uOiBcImxpbmtcIixcbiAgICBsaXN0MTogXCJ2YXJpYWJsZS0yXCIsXG4gICAgbGlzdDI6IFwidmFyaWFibGUtM1wiLFxuICAgIGxpc3QzOiBcImtleXdvcmRcIixcbiAgICBub3RleHRpbGU6IFwic3RyaW5nLTJcIixcbiAgICBwcmU6IFwib3BlcmF0b3JcIixcbiAgICBwOiBcInByb3BlcnR5XCIsXG4gICAgcXVvdGU6IFwiYnJhY2tldFwiLFxuICAgIHNwYW46IFwicXVvdGVcIixcbiAgICBzcGVjaWFsQ2hhcjogXCJ0YWdcIixcbiAgICBzdHJvbmc6IFwic3Ryb25nXCIsXG4gICAgc3ViOiBcImJ1aWx0aW5cIixcbiAgICBzdXA6IFwiYnVpbHRpblwiLFxuICAgIHRhYmxlOiBcInZhcmlhYmxlLTNcIixcbiAgICB0YWJsZUhlYWRpbmc6IFwib3BlcmF0b3JcIlxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0TmV3TGluZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgc3RhdGUubW9kZSA9IE1vZGVzLm5ld0xheW91dDtcbiAgICBzdGF0ZS50YWJsZUhlYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmIChzdGF0ZS5sYXlvdXRUeXBlID09PSBcImRlZmluaXRpb25MaXN0XCIgJiYgc3RhdGUuc3Bhbm5pbmdMYXlvdXQgJiZcbiAgICAgICAgc3RyZWFtLm1hdGNoKFJFKFwiZGVmaW5pdGlvbkxpc3RFbmRcIiksIGZhbHNlKSlcbiAgICAgIHN0YXRlLnNwYW5uaW5nTGF5b3V0ID0gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQaHJhc2VNb2RpZmllcihzdHJlYW0sIHN0YXRlLCBjaCkge1xuICAgIGlmIChjaCA9PT0gXCJfXCIpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiX1wiKSlcbiAgICAgICAgcmV0dXJuIHRvZ2dsZVBocmFzZU1vZGlmaWVyKHN0cmVhbSwgc3RhdGUsIFwiaXRhbGljXCIsIC9fXy8sIDIpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gdG9nZ2xlUGhyYXNlTW9kaWZpZXIoc3RyZWFtLCBzdGF0ZSwgXCJlbVwiLCAvXy8sIDEpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gXCIqXCIpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiKlwiKSkge1xuICAgICAgICByZXR1cm4gdG9nZ2xlUGhyYXNlTW9kaWZpZXIoc3RyZWFtLCBzdGF0ZSwgXCJib2xkXCIsIC9cXCpcXCovLCAyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0b2dnbGVQaHJhc2VNb2RpZmllcihzdHJlYW0sIHN0YXRlLCBcInN0cm9uZ1wiLCAvXFwqLywgMSk7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSBcIltcIikge1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXFxkK1xcXS8pKSBzdGF0ZS5mb290Q2l0ZSA9IHRydWU7XG4gICAgICByZXR1cm4gdG9rZW5TdHlsZXMoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gXCIoXCIpIHtcbiAgICAgIHZhciBzcGVjID0gc3RyZWFtLm1hdGNoKC9eKHJ8dG18YylcXCkvKTtcbiAgICAgIGlmIChzcGVjKVxuICAgICAgICByZXR1cm4gdG9rZW5TdHlsZXNXaXRoKHN0YXRlLCBUT0tFTl9TVFlMRVMuc3BlY2lhbENoYXIpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gXCI8XCIgJiYgc3RyZWFtLm1hdGNoKC8oXFx3KylbXj5dKz5bXjxdKzxcXC9cXDE+LykpXG4gICAgICByZXR1cm4gdG9rZW5TdHlsZXNXaXRoKHN0YXRlLCBUT0tFTl9TVFlMRVMuaHRtbCk7XG5cbiAgICBpZiAoY2ggPT09IFwiP1wiICYmIHN0cmVhbS5lYXQoXCI/XCIpKVxuICAgICAgcmV0dXJuIHRvZ2dsZVBocmFzZU1vZGlmaWVyKHN0cmVhbSwgc3RhdGUsIFwiY2l0ZVwiLCAvXFw/XFw/LywgMik7XG5cbiAgICBpZiAoY2ggPT09IFwiPVwiICYmIHN0cmVhbS5lYXQoXCI9XCIpKVxuICAgICAgcmV0dXJuIHRvZ2dsZVBocmFzZU1vZGlmaWVyKHN0cmVhbSwgc3RhdGUsIFwibm90ZXh0aWxlXCIsIC89PS8sIDIpO1xuXG4gICAgaWYgKGNoID09PSBcIi1cIiAmJiAhc3RyZWFtLmVhdChcIi1cIikpXG4gICAgICByZXR1cm4gdG9nZ2xlUGhyYXNlTW9kaWZpZXIoc3RyZWFtLCBzdGF0ZSwgXCJkZWxldGlvblwiLCAvLS8sIDEpO1xuXG4gICAgaWYgKGNoID09PSBcIitcIilcbiAgICAgIHJldHVybiB0b2dnbGVQaHJhc2VNb2RpZmllcihzdHJlYW0sIHN0YXRlLCBcImFkZGl0aW9uXCIsIC9cXCsvLCAxKTtcblxuICAgIGlmIChjaCA9PT0gXCJ+XCIpXG4gICAgICByZXR1cm4gdG9nZ2xlUGhyYXNlTW9kaWZpZXIoc3RyZWFtLCBzdGF0ZSwgXCJzdWJcIiwgL34vLCAxKTtcblxuICAgIGlmIChjaCA9PT0gXCJeXCIpXG4gICAgICByZXR1cm4gdG9nZ2xlUGhyYXNlTW9kaWZpZXIoc3RyZWFtLCBzdGF0ZSwgXCJzdXBcIiwgL1xcXi8sIDEpO1xuXG4gICAgaWYgKGNoID09PSBcIiVcIilcbiAgICAgIHJldHVybiB0b2dnbGVQaHJhc2VNb2RpZmllcihzdHJlYW0sIHN0YXRlLCBcInNwYW5cIiwgLyUvLCAxKTtcblxuICAgIGlmIChjaCA9PT0gXCJAXCIpXG4gICAgICByZXR1cm4gdG9nZ2xlUGhyYXNlTW9kaWZpZXIoc3RyZWFtLCBzdGF0ZSwgXCJjb2RlXCIsIC9ALywgMSk7XG5cbiAgICBpZiAoY2ggPT09IFwiIVwiKSB7XG4gICAgICB2YXIgdHlwZSA9IHRvZ2dsZVBocmFzZU1vZGlmaWVyKHN0cmVhbSwgc3RhdGUsIFwiaW1hZ2VcIiwgLyg/OlxcKFteXFwpXStcXCkpPyEvLCAxKTtcbiAgICAgIHN0cmVhbS5tYXRjaCgvXjpcXFMrLyk7IC8vIG9wdGlvbmFsIFVybCBwb3J0aW9uXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuU3R5bGVzKHN0YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVBocmFzZU1vZGlmaWVyKHN0cmVhbSwgc3RhdGUsIHBocmFzZU1vZGlmaWVyLCBjbG9zZVJFLCBvcGVuU2l6ZSkge1xuICAgIHZhciBjaGFyQmVmb3JlID0gc3RyZWFtLnBvcyA+IG9wZW5TaXplID8gc3RyZWFtLnN0cmluZy5jaGFyQXQoc3RyZWFtLnBvcyAtIG9wZW5TaXplIC0gMSkgOiBudWxsO1xuICAgIHZhciBjaGFyQWZ0ZXIgPSBzdHJlYW0ucGVlaygpO1xuICAgIGlmIChzdGF0ZVtwaHJhc2VNb2RpZmllcl0pIHtcbiAgICAgIGlmICgoIWNoYXJBZnRlciB8fCAvXFxXLy50ZXN0KGNoYXJBZnRlcikpICYmIGNoYXJCZWZvcmUgJiYgL1xcUy8udGVzdChjaGFyQmVmb3JlKSkge1xuICAgICAgICB2YXIgdHlwZSA9IHRva2VuU3R5bGVzKHN0YXRlKTtcbiAgICAgICAgc3RhdGVbcGhyYXNlTW9kaWZpZXJdID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKCFjaGFyQmVmb3JlIHx8IC9cXFcvLnRlc3QoY2hhckJlZm9yZSkpICYmIGNoYXJBZnRlciAmJiAvXFxTLy50ZXN0KGNoYXJBZnRlcikgJiZcbiAgICAgICAgICAgICAgIHN0cmVhbS5tYXRjaChuZXcgUmVnRXhwKFwiXi4qXFxcXFNcIiArIGNsb3NlUkUuc291cmNlICsgXCIoPzpcXFxcV3wkKVwiKSwgZmFsc2UpKSB7XG4gICAgICBzdGF0ZVtwaHJhc2VNb2RpZmllcl0gPSB0cnVlO1xuICAgICAgc3RhdGUubW9kZSA9IE1vZGVzLmF0dHJpYnV0ZXM7XG4gICAgfVxuICAgIHJldHVybiB0b2tlblN0eWxlcyhzdGF0ZSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHlsZXMoc3RhdGUpIHtcbiAgICB2YXIgZGlzYWJsZWQgPSB0ZXh0aWxlRGlzYWJsZWQoc3RhdGUpO1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuIGRpc2FibGVkO1xuXG4gICAgdmFyIHN0eWxlcyA9IFtdO1xuICAgIGlmIChzdGF0ZS5sYXlvdXRUeXBlKSBzdHlsZXMucHVzaChUT0tFTl9TVFlMRVNbc3RhdGUubGF5b3V0VHlwZV0pO1xuXG4gICAgc3R5bGVzID0gc3R5bGVzLmNvbmNhdChhY3RpdmVTdHlsZXMoXG4gICAgICBzdGF0ZSwgXCJhZGRpdGlvblwiLCBcImJvbGRcIiwgXCJjaXRlXCIsIFwiY29kZVwiLCBcImRlbGV0aW9uXCIsIFwiZW1cIiwgXCJmb290Q2l0ZVwiLFxuICAgICAgXCJpbWFnZVwiLCBcIml0YWxpY1wiLCBcImxpbmtcIiwgXCJzcGFuXCIsIFwic3Ryb25nXCIsIFwic3ViXCIsIFwic3VwXCIsIFwidGFibGVcIiwgXCJ0YWJsZUhlYWRpbmdcIikpO1xuXG4gICAgaWYgKHN0YXRlLmxheW91dFR5cGUgPT09IFwiaGVhZGVyXCIpXG4gICAgICBzdHlsZXMucHVzaChUT0tFTl9TVFlMRVMuaGVhZGVyICsgXCItXCIgKyBzdGF0ZS5oZWFkZXIpO1xuXG4gICAgcmV0dXJuIHN0eWxlcy5sZW5ndGggPyBzdHlsZXMuam9pbihcIiBcIikgOiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdGV4dGlsZURpc2FibGVkKHN0YXRlKSB7XG4gICAgdmFyIHR5cGUgPSBzdGF0ZS5sYXlvdXRUeXBlO1xuXG4gICAgc3dpdGNoKHR5cGUpIHtcbiAgICBjYXNlIFwibm90ZXh0aWxlXCI6XG4gICAgY2FzZSBcImNvZGVcIjpcbiAgICBjYXNlIFwicHJlXCI6XG4gICAgICByZXR1cm4gVE9LRU5fU1RZTEVTW3R5cGVdO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc3RhdGUubm90ZXh0aWxlKVxuICAgICAgICByZXR1cm4gVE9LRU5fU1RZTEVTLm5vdGV4dGlsZSArICh0eXBlID8gKFwiIFwiICsgVE9LRU5fU1RZTEVTW3R5cGVdKSA6IFwiXCIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHlsZXNXaXRoKHN0YXRlLCBleHRyYVN0eWxlcykge1xuICAgIHZhciBkaXNhYmxlZCA9IHRleHRpbGVEaXNhYmxlZChzdGF0ZSk7XG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm4gZGlzYWJsZWQ7XG5cbiAgICB2YXIgdHlwZSA9IHRva2VuU3R5bGVzKHN0YXRlKTtcbiAgICBpZiAoZXh0cmFTdHlsZXMpXG4gICAgICByZXR1cm4gdHlwZSA/ICh0eXBlICsgXCIgXCIgKyBleHRyYVN0eWxlcykgOiBleHRyYVN0eWxlcztcbiAgICBlbHNlXG4gICAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFjdGl2ZVN0eWxlcyhzdGF0ZSkge1xuICAgIHZhciBzdHlsZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKHN0YXRlW2FyZ3VtZW50c1tpXV0pXG4gICAgICAgIHN0eWxlcy5wdXNoKFRPS0VOX1NUWUxFU1thcmd1bWVudHNbaV1dKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGJsYW5rTGluZShzdGF0ZSkge1xuICAgIHZhciBzcGFubmluZ0xheW91dCA9IHN0YXRlLnNwYW5uaW5nTGF5b3V0LCB0eXBlID0gc3RhdGUubGF5b3V0VHlwZTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzdGF0ZSkgaWYgKHN0YXRlLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICBkZWxldGUgc3RhdGVba2V5XTtcblxuICAgIHN0YXRlLm1vZGUgPSBNb2Rlcy5uZXdMYXlvdXQ7XG4gICAgaWYgKHNwYW5uaW5nTGF5b3V0KSB7XG4gICAgICBzdGF0ZS5sYXlvdXRUeXBlID0gdHlwZTtcbiAgICAgIHN0YXRlLnNwYW5uaW5nTGF5b3V0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgUkVzID0ge1xuICAgIGNhY2hlOiB7fSxcbiAgICBzaW5nbGU6IHtcbiAgICAgIGJjOiBcImJjXCIsXG4gICAgICBicTogXCJicVwiLFxuICAgICAgZGVmaW5pdGlvbkxpc3Q6IC8tIC4qPzo9Ky8sXG4gICAgICBkZWZpbml0aW9uTGlzdEVuZDogLy4qPTpcXHMqJC8sXG4gICAgICBkaXY6IFwiZGl2XCIsXG4gICAgICBkcmF3VGFibGU6IC9cXHwuKlxcfC8sXG4gICAgICBmb290OiAvZm5cXGQrLyxcbiAgICAgIGhlYWRlcjogL2hbMS02XS8sXG4gICAgICBodG1sOiAvXFxzKjwoPzpcXC8pPyhcXHcrKSg/OltePl0rKT8+KD86W148XSs8XFwvXFwxPik/LyxcbiAgICAgIGxpbms6IC9bXlwiXStcIjpcXFMvLFxuICAgICAgbGlua0RlZmluaXRpb246IC9cXFtbXlxcc1xcXV0rXFxdXFxTKy8sXG4gICAgICBsaXN0OiAvKD86Iyt8XFwqKykvLFxuICAgICAgbm90ZXh0aWxlOiBcIm5vdGV4dGlsZVwiLFxuICAgICAgcGFyYTogXCJwXCIsXG4gICAgICBwcmU6IFwicHJlXCIsXG4gICAgICB0YWJsZTogXCJ0YWJsZVwiLFxuICAgICAgdGFibGVDZWxsQXR0cmlidXRlczogL1tcXC9cXFxcXVxcZCsvLFxuICAgICAgdGFibGVIZWFkaW5nOiAvXFx8X1xcLi8sXG4gICAgICB0YWJsZVRleHQ6IC9bXlwiX1xcKlxcW1xcKFxcP1xcK35cXF4lQHwtXSsvLFxuICAgICAgdGV4dDogL1teIVwiXz1cXCpcXFtcXCg8XFw/XFwrflxcXiVALV0rL1xuICAgIH0sXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgYWxpZ246IC8oPzo8Pnw8fD58PSkvLFxuICAgICAgc2VsZWN0b3I6IC9cXChbXlxcKF1bXlxcKV0rXFwpLyxcbiAgICAgIGxhbmc6IC9cXFtbXlxcW1xcXV0rXFxdLyxcbiAgICAgIHBhZDogLyg/OlxcKCt8XFwpKyl7MSwyfS8sXG4gICAgICBjc3M6IC9cXHtbXlxcfV0rXFx9L1xuICAgIH0sXG4gICAgY3JlYXRlUmU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgY2FzZSBcImRyYXdUYWJsZVwiOlxuICAgICAgICByZXR1cm4gUkVzLm1ha2VSZShcIl5cIiwgUkVzLnNpbmdsZS5kcmF3VGFibGUsIFwiJFwiKTtcbiAgICAgIGNhc2UgXCJodG1sXCI6XG4gICAgICAgIHJldHVybiBSRXMubWFrZVJlKFwiXlwiLCBSRXMuc2luZ2xlLmh0bWwsIFwiKD86XCIsIFJFcy5zaW5nbGUuaHRtbCwgXCIpKlwiLCBcIiRcIik7XG4gICAgICBjYXNlIFwibGlua0RlZmluaXRpb25cIjpcbiAgICAgICAgcmV0dXJuIFJFcy5tYWtlUmUoXCJeXCIsIFJFcy5zaW5nbGUubGlua0RlZmluaXRpb24sIFwiJFwiKTtcbiAgICAgIGNhc2UgXCJsaXN0TGF5b3V0XCI6XG4gICAgICAgIHJldHVybiBSRXMubWFrZVJlKFwiXlwiLCBSRXMuc2luZ2xlLmxpc3QsIFJFKFwiYWxsQXR0cmlidXRlc1wiKSwgXCIqXFxcXHMrXCIpO1xuICAgICAgY2FzZSBcInRhYmxlQ2VsbEF0dHJpYnV0ZXNcIjpcbiAgICAgICAgcmV0dXJuIFJFcy5tYWtlUmUoXCJeXCIsIFJFcy5jaG9pY2VSZShSRXMuc2luZ2xlLnRhYmxlQ2VsbEF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFKFwiYWxsQXR0cmlidXRlc1wiKSksIFwiK1xcXFwuXCIpO1xuICAgICAgY2FzZSBcInR5cGVcIjpcbiAgICAgICAgcmV0dXJuIFJFcy5tYWtlUmUoXCJeXCIsIFJFKFwiYWxsVHlwZXNcIikpO1xuICAgICAgY2FzZSBcInR5cGVMYXlvdXRcIjpcbiAgICAgICAgcmV0dXJuIFJFcy5tYWtlUmUoXCJeXCIsIFJFKFwiYWxsVHlwZXNcIiksIFJFKFwiYWxsQXR0cmlidXRlc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIqXFxcXC5cXFxcLj9cIiwgXCIoXFxcXHMrfCQpXCIpO1xuICAgICAgY2FzZSBcImF0dHJpYnV0ZXNcIjpcbiAgICAgICAgcmV0dXJuIFJFcy5tYWtlUmUoXCJeXCIsIFJFKFwiYWxsQXR0cmlidXRlc1wiKSwgXCIrXCIpO1xuXG4gICAgICBjYXNlIFwiYWxsVHlwZXNcIjpcbiAgICAgICAgcmV0dXJuIFJFcy5jaG9pY2VSZShSRXMuc2luZ2xlLmRpdiwgUkVzLnNpbmdsZS5mb290LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFcy5zaW5nbGUuaGVhZGVyLCBSRXMuc2luZ2xlLmJjLCBSRXMuc2luZ2xlLmJxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFcy5zaW5nbGUubm90ZXh0aWxlLCBSRXMuc2luZ2xlLnByZSwgUkVzLnNpbmdsZS50YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRXMuc2luZ2xlLnBhcmEpO1xuXG4gICAgICBjYXNlIFwiYWxsQXR0cmlidXRlc1wiOlxuICAgICAgICByZXR1cm4gUkVzLmNob2ljZVJlKFJFcy5hdHRyaWJ1dGVzLnNlbGVjdG9yLCBSRXMuYXR0cmlidXRlcy5jc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVzLmF0dHJpYnV0ZXMubGFuZywgUkVzLmF0dHJpYnV0ZXMuYWxpZ24sIFJFcy5hdHRyaWJ1dGVzLnBhZCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBSRXMubWFrZVJlKFwiXlwiLCBSRXMuc2luZ2xlW25hbWVdKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1ha2VSZTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcGF0dGVybiA9IFwiXCI7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICBwYXR0ZXJuICs9ICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSA/IGFyZyA6IGFyZy5zb3VyY2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuKTtcbiAgICB9LFxuICAgIGNob2ljZVJlOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwYXJ0cyA9IFthcmd1bWVudHNbMF1dO1xuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcGFydHNbaSAqIDIgLSAxXSA9IFwifFwiO1xuICAgICAgICBwYXJ0c1tpICogMl0gPSBhcmd1bWVudHNbaV07XG4gICAgICB9XG5cbiAgICAgIHBhcnRzLnVuc2hpZnQoXCIoPzpcIik7XG4gICAgICBwYXJ0cy5wdXNoKFwiKVwiKTtcbiAgICAgIHJldHVybiBSRXMubWFrZVJlLmFwcGx5KG51bGwsIHBhcnRzKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gUkUobmFtZSkge1xuICAgIHJldHVybiAoUkVzLmNhY2hlW25hbWVdIHx8IChSRXMuY2FjaGVbbmFtZV0gPSBSRXMuY3JlYXRlUmUobmFtZSkpKTtcbiAgfVxuXG4gIHZhciBNb2RlcyA9IHtcbiAgICBuZXdMYXlvdXQ6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goUkUoXCJ0eXBlTGF5b3V0XCIpLCBmYWxzZSkpIHtcbiAgICAgICAgc3RhdGUuc3Bhbm5pbmdMYXlvdXQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIChzdGF0ZS5tb2RlID0gTW9kZXMuYmxvY2tUeXBlKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIHZhciBuZXdNb2RlO1xuICAgICAgaWYgKCF0ZXh0aWxlRGlzYWJsZWQoc3RhdGUpKSB7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goUkUoXCJsaXN0TGF5b3V0XCIpLCBmYWxzZSkpXG4gICAgICAgICAgbmV3TW9kZSA9IE1vZGVzLmxpc3Q7XG4gICAgICAgIGVsc2UgaWYgKHN0cmVhbS5tYXRjaChSRShcImRyYXdUYWJsZVwiKSwgZmFsc2UpKVxuICAgICAgICAgIG5ld01vZGUgPSBNb2Rlcy50YWJsZTtcbiAgICAgICAgZWxzZSBpZiAoc3RyZWFtLm1hdGNoKFJFKFwibGlua0RlZmluaXRpb25cIiksIGZhbHNlKSlcbiAgICAgICAgICBuZXdNb2RlID0gTW9kZXMubGlua0RlZmluaXRpb247XG4gICAgICAgIGVsc2UgaWYgKHN0cmVhbS5tYXRjaChSRShcImRlZmluaXRpb25MaXN0XCIpKSlcbiAgICAgICAgICBuZXdNb2RlID0gTW9kZXMuZGVmaW5pdGlvbkxpc3Q7XG4gICAgICAgIGVsc2UgaWYgKHN0cmVhbS5tYXRjaChSRShcImh0bWxcIiksIGZhbHNlKSlcbiAgICAgICAgICBuZXdNb2RlID0gTW9kZXMuaHRtbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoc3RhdGUubW9kZSA9IChuZXdNb2RlIHx8IE1vZGVzLnRleHQpKShzdHJlYW0sIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgYmxvY2tUeXBlOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgbWF0Y2gsIHR5cGU7XG4gICAgICBzdGF0ZS5sYXlvdXRUeXBlID0gbnVsbDtcblxuICAgICAgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKFJFKFwidHlwZVwiKSkpXG4gICAgICAgIHR5cGUgPSBtYXRjaFswXTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIChzdGF0ZS5tb2RlID0gTW9kZXMudGV4dCkoc3RyZWFtLCBzdGF0ZSk7XG5cbiAgICAgIGlmIChtYXRjaCA9IHR5cGUubWF0Y2goUkUoXCJoZWFkZXJcIikpKSB7XG4gICAgICAgIHN0YXRlLmxheW91dFR5cGUgPSBcImhlYWRlclwiO1xuICAgICAgICBzdGF0ZS5oZWFkZXIgPSBwYXJzZUludChtYXRjaFswXVsxXSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUubWF0Y2goUkUoXCJicVwiKSkpIHtcbiAgICAgICAgc3RhdGUubGF5b3V0VHlwZSA9IFwicXVvdGVcIjtcbiAgICAgIH0gZWxzZSBpZiAodHlwZS5tYXRjaChSRShcImJjXCIpKSkge1xuICAgICAgICBzdGF0ZS5sYXlvdXRUeXBlID0gXCJjb2RlXCI7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUubWF0Y2goUkUoXCJmb290XCIpKSkge1xuICAgICAgICBzdGF0ZS5sYXlvdXRUeXBlID0gXCJmb290bm90ZVwiO1xuICAgICAgfSBlbHNlIGlmICh0eXBlLm1hdGNoKFJFKFwibm90ZXh0aWxlXCIpKSkge1xuICAgICAgICBzdGF0ZS5sYXlvdXRUeXBlID0gXCJub3RleHRpbGVcIjtcbiAgICAgIH0gZWxzZSBpZiAodHlwZS5tYXRjaChSRShcInByZVwiKSkpIHtcbiAgICAgICAgc3RhdGUubGF5b3V0VHlwZSA9IFwicHJlXCI7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUubWF0Y2goUkUoXCJkaXZcIikpKSB7XG4gICAgICAgIHN0YXRlLmxheW91dFR5cGUgPSBcImRpdlwiO1xuICAgICAgfSBlbHNlIGlmICh0eXBlLm1hdGNoKFJFKFwidGFibGVcIikpKSB7XG4gICAgICAgIHN0YXRlLmxheW91dFR5cGUgPSBcInRhYmxlXCI7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLm1vZGUgPSBNb2Rlcy5hdHRyaWJ1dGVzO1xuICAgICAgcmV0dXJuIHRva2VuU3R5bGVzKHN0YXRlKTtcbiAgICB9LFxuXG4gICAgdGV4dDogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaChSRShcInRleHRcIikpKSByZXR1cm4gdG9rZW5TdHlsZXMoc3RhdGUpO1xuXG4gICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgICAgaWYgKGNoID09PSAnXCInKVxuICAgICAgICByZXR1cm4gKHN0YXRlLm1vZGUgPSBNb2Rlcy5saW5rKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIHJldHVybiBoYW5kbGVQaHJhc2VNb2RpZmllcihzdHJlYW0sIHN0YXRlLCBjaCk7XG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXM6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHN0YXRlLm1vZGUgPSBNb2Rlcy5sYXlvdXRMZW5ndGg7XG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goUkUoXCJhdHRyaWJ1dGVzXCIpKSlcbiAgICAgICAgcmV0dXJuIHRva2VuU3R5bGVzV2l0aChzdGF0ZSwgVE9LRU5fU1RZTEVTLmF0dHJpYnV0ZXMpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gdG9rZW5TdHlsZXMoc3RhdGUpO1xuICAgIH0sXG5cbiAgICBsYXlvdXRMZW5ndGg6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiLlwiKSAmJiBzdHJlYW0uZWF0KFwiLlwiKSlcbiAgICAgICAgc3RhdGUuc3Bhbm5pbmdMYXlvdXQgPSB0cnVlO1xuXG4gICAgICBzdGF0ZS5tb2RlID0gTW9kZXMudGV4dDtcbiAgICAgIHJldHVybiB0b2tlblN0eWxlcyhzdGF0ZSk7XG4gICAgfSxcblxuICAgIGxpc3Q6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBtYXRjaCA9IHN0cmVhbS5tYXRjaChSRShcImxpc3RcIikpO1xuICAgICAgc3RhdGUubGlzdERlcHRoID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgdmFyIGxpc3RNb2QgPSAoc3RhdGUubGlzdERlcHRoIC0gMSkgJSAzO1xuICAgICAgaWYgKCFsaXN0TW9kKVxuICAgICAgICBzdGF0ZS5sYXlvdXRUeXBlID0gXCJsaXN0MVwiO1xuICAgICAgZWxzZSBpZiAobGlzdE1vZCA9PT0gMSlcbiAgICAgICAgc3RhdGUubGF5b3V0VHlwZSA9IFwibGlzdDJcIjtcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUubGF5b3V0VHlwZSA9IFwibGlzdDNcIjtcblxuICAgICAgc3RhdGUubW9kZSA9IE1vZGVzLmF0dHJpYnV0ZXM7XG4gICAgICByZXR1cm4gdG9rZW5TdHlsZXMoc3RhdGUpO1xuICAgIH0sXG5cbiAgICBsaW5rOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBzdGF0ZS5tb2RlID0gTW9kZXMudGV4dDtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goUkUoXCJsaW5rXCIpKSkge1xuICAgICAgICBzdHJlYW0ubWF0Y2goL1xcUysvKTtcbiAgICAgICAgcmV0dXJuIHRva2VuU3R5bGVzV2l0aChzdGF0ZSwgVE9LRU5fU1RZTEVTLmxpbmspO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRva2VuU3R5bGVzKHN0YXRlKTtcbiAgICB9LFxuXG4gICAgbGlua0RlZmluaXRpb246IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiB0b2tlblN0eWxlc1dpdGgoc3RhdGUsIFRPS0VOX1NUWUxFUy5saW5rRGVmaW5pdGlvbik7XG4gICAgfSxcblxuICAgIGRlZmluaXRpb25MaXN0OiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goUkUoXCJkZWZpbml0aW9uTGlzdFwiKSk7XG5cbiAgICAgIHN0YXRlLmxheW91dFR5cGUgPSBcImRlZmluaXRpb25MaXN0XCI7XG5cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1xccyokLykpXG4gICAgICAgIHN0YXRlLnNwYW5uaW5nTGF5b3V0ID0gdHJ1ZTtcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUubW9kZSA9IE1vZGVzLmF0dHJpYnV0ZXM7XG5cbiAgICAgIHJldHVybiB0b2tlblN0eWxlcyhzdGF0ZSk7XG4gICAgfSxcblxuICAgIGh0bWw6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiB0b2tlblN0eWxlc1dpdGgoc3RhdGUsIFRPS0VOX1NUWUxFUy5odG1sKTtcbiAgICB9LFxuXG4gICAgdGFibGU6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHN0YXRlLmxheW91dFR5cGUgPSBcInRhYmxlXCI7XG4gICAgICByZXR1cm4gKHN0YXRlLm1vZGUgPSBNb2Rlcy50YWJsZUNlbGwpKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICB0YWJsZUNlbGw6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goUkUoXCJ0YWJsZUhlYWRpbmdcIikpKVxuICAgICAgICBzdGF0ZS50YWJsZUhlYWRpbmcgPSB0cnVlO1xuICAgICAgZWxzZVxuICAgICAgICBzdHJlYW0uZWF0KFwifFwiKTtcblxuICAgICAgc3RhdGUubW9kZSA9IE1vZGVzLnRhYmxlQ2VsbEF0dHJpYnV0ZXM7XG4gICAgICByZXR1cm4gdG9rZW5TdHlsZXMoc3RhdGUpO1xuICAgIH0sXG5cbiAgICB0YWJsZUNlbGxBdHRyaWJ1dGVzOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBzdGF0ZS5tb2RlID0gTW9kZXMudGFibGVUZXh0O1xuXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKFJFKFwidGFibGVDZWxsQXR0cmlidXRlc1wiKSkpXG4gICAgICAgIHJldHVybiB0b2tlblN0eWxlc1dpdGgoc3RhdGUsIFRPS0VOX1NUWUxFUy5hdHRyaWJ1dGVzKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHRva2VuU3R5bGVzKHN0YXRlKTtcbiAgICB9LFxuXG4gICAgdGFibGVUZXh0OiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKFJFKFwidGFibGVUZXh0XCIpKSlcbiAgICAgICAgcmV0dXJuIHRva2VuU3R5bGVzKHN0YXRlKTtcblxuICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09IFwifFwiKSB7IC8vIGVuZCBvZiBjZWxsXG4gICAgICAgIHN0YXRlLm1vZGUgPSBNb2Rlcy50YWJsZUNlbGw7XG4gICAgICAgIHJldHVybiB0b2tlblN0eWxlcyhzdGF0ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFuZGxlUGhyYXNlTW9kaWZpZXIoc3RyZWFtLCBzdGF0ZSwgc3RyZWFtLm5leHQoKSk7XG4gICAgfVxuICB9O1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcInRleHRpbGVcIiwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4geyBtb2RlOiBNb2Rlcy5uZXdMYXlvdXQgfTtcbiAgICAgIH0sXG4gICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RyZWFtLnNvbCgpKSBzdGFydE5ld0xpbmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIHJldHVybiBzdGF0ZS5tb2RlKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfSxcbiAgICAgIGJsYW5rTGluZTogYmxhbmtMaW5lXG4gICAgfTtcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXRleHRpbGVcIiwgXCJ0ZXh0aWxlXCIpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vKioqXG4gICAgfCcnTmFtZScnfHRpZGRseXdpa2kuanN8XG4gICAgfCcnRGVzY3JpcHRpb24nJ3xFbmFibGVzIFRpZGRseVdpa2l5IHN5bnRheCBoaWdobGlnaHRpbmcgdXNpbmcgQ29kZU1pcnJvcnxcbiAgICB8JydBdXRob3InJ3xQTWFyaW98XG4gICAgfCcnVmVyc2lvbicnfDAuMS43fFxuICAgIHwnJ1N0YXR1cycnfCcnc3RhYmxlJyd8XG4gICAgfCcnU291cmNlJyd8W1tHaXRIdWJ8aHR0cHM6Ly9naXRodWIuY29tL3BtYXJpby9Db2RlTWlycm9yMi9ibG9iL3R3LXN5bnRheC9tb2RlL3RpZGRseXdpa2ldXXxcbiAgICB8JydEb2N1bWVudGF0aW9uJyd8aHR0cHM6Ly9jb2RlbWlycm9yLnRpZGRseXNwYWNlLmNvbS98XG4gICAgfCcnTGljZW5zZScnfFtbTUlUIExpY2Vuc2V8aHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBdXXxcbiAgICB8JydDb3JlVmVyc2lvbicnfDIuNS4wfFxuICAgIHwnJ1JlcXVpcmVzJyd8Y29kZW1pcnJvci5qc3xcbiAgICB8JydLZXl3b3JkcycnfHN5bnRheCBoaWdobGlnaHRpbmcgY29sb3IgY29kZSBtaXJyb3IgY29kZW1pcnJvcnxcbiAgICAhIEluZm9cbiAgICBDb3JlVmVyc2lvbiBwYXJhbWV0ZXIgaXMgbmVlZGVkIGZvciBUaWRkbHlXaWtpIG9ubHkhXG4qKiovXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwidGlkZGx5d2lraVwiLCBmdW5jdGlvbiAoKSB7XG4gIC8vIFRva2VuaXplclxuICB2YXIgdGV4dHdvcmRzID0ge307XG5cbiAgdmFyIGtleXdvcmRzID0ge1xuICAgIFwiYWxsVGFnc1wiOiB0cnVlLCBcImNsb3NlQWxsXCI6IHRydWUsIFwibGlzdFwiOiB0cnVlLFxuICAgIFwibmV3Sm91cm5hbFwiOiB0cnVlLCBcIm5ld1RpZGRsZXJcIjogdHJ1ZSxcbiAgICBcInBlcm1hdmlld1wiOiB0cnVlLCBcInNhdmVDaGFuZ2VzXCI6IHRydWUsXG4gICAgXCJzZWFyY2hcIjogdHJ1ZSwgXCJzbGlkZXJcIjogdHJ1ZSwgXCJ0YWJzXCI6IHRydWUsXG4gICAgXCJ0YWdcIjogdHJ1ZSwgXCJ0YWdnaW5nXCI6IHRydWUsIFwidGFnc1wiOiB0cnVlLFxuICAgIFwidGlkZGxlclwiOiB0cnVlLCBcInRpbWVsaW5lXCI6IHRydWUsXG4gICAgXCJ0b2RheVwiOiB0cnVlLCBcInZlcnNpb25cIjogdHJ1ZSwgXCJvcHRpb25cIjogdHJ1ZSxcbiAgICBcIndpdGhcIjogdHJ1ZSwgXCJmaWx0ZXJcIjogdHJ1ZVxuICB9O1xuXG4gIHZhciBpc1NwYWNlTmFtZSA9IC9bXFx3X1xcLV0vaSxcbiAgICAgIHJlSFIgPSAvXlxcLVxcLVxcLVxcLSskLywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8aHI+XG4gICAgICByZVdpa2lDb21tZW50U3RhcnQgPSAvXlxcL1xcKlxcKlxcKiQvLCAgICAgICAgICAgIC8vIC8qKipcbiAgICAgIHJlV2lraUNvbW1lbnRTdG9wID0gL15cXCpcXCpcXCpcXC8kLywgICAgICAgICAgICAgLy8gKioqL1xuICAgICAgcmVCbG9ja1F1b3RlID0gL148PDwkLyxcblxuICAgICAgcmVKc0NvZGVTdGFydCA9IC9eXFwvXFwvXFx7XFx7XFx7JC8sICAgICAgICAgICAgICAgICAgICAgICAvLyAvL3t7eyBqcyBibG9jayBzdGFydFxuICAgICAgcmVKc0NvZGVTdG9wID0gL15cXC9cXC9cXH1cXH1cXH0kLywgICAgICAgICAgICAgICAgICAgICAgICAvLyAvL319fSBqcyBzdG9wXG4gICAgICByZVhtbENvZGVTdGFydCA9IC9ePCEtLVxce1xce1xcey0tPiQvLCAgICAgICAgICAgLy8geG1sIGJsb2NrIHN0YXJ0XG4gICAgICByZVhtbENvZGVTdG9wID0gL148IS0tXFx9XFx9XFx9LS0+JC8sICAgICAgICAgICAgLy8geG1sIHN0b3BcblxuICAgICAgcmVDb2RlQmxvY2tTdGFydCA9IC9eXFx7XFx7XFx7JC8sICAgICAgICAgICAgICAgICAgICAgICAgLy8ge3t7IFRXIHRleHQgZGl2IGJsb2NrIHN0YXJ0XG4gICAgICByZUNvZGVCbG9ja1N0b3AgPSAvXlxcfVxcfVxcfSQvLCAgICAgICAgICAgICAgICAgLy8gfX19IFRXIHRleHQgc3RvcFxuXG4gICAgICByZVVudGlsQ29kZVN0b3AgPSAvLio/XFx9XFx9XFx9LztcblxuICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7XG4gICAgc3RhdGUudG9rZW5pemUgPSBmO1xuICAgIHJldHVybiBmKHN0cmVhbSwgc3RhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgc29sID0gc3RyZWFtLnNvbCgpLCBjaCA9IHN0cmVhbS5wZWVrKCk7XG5cbiAgICBzdGF0ZS5ibG9jayA9IGZhbHNlOyAgICAgICAgLy8gaW5kaWNhdGVzIHRoZSBzdGFydCBvZiBhIGNvZGUgYmxvY2suXG5cbiAgICAvLyBjaGVjayBzdGFydCBvZiAgYmxvY2tzXG4gICAgaWYgKHNvbCAmJiAvWzxcXC9cXCp7fVxcLV0vLnRlc3QoY2gpKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHJlQ29kZUJsb2NrU3RhcnQpKSB7XG4gICAgICAgIHN0YXRlLmJsb2NrID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHR3VG9rZW5Db2RlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2gocmVCbG9ja1F1b3RlKSlcbiAgICAgICAgcmV0dXJuICdxdW90ZSc7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHJlV2lraUNvbW1lbnRTdGFydCkgfHwgc3RyZWFtLm1hdGNoKHJlV2lraUNvbW1lbnRTdG9wKSlcbiAgICAgICAgcmV0dXJuICdjb21tZW50JztcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2gocmVKc0NvZGVTdGFydCkgfHwgc3RyZWFtLm1hdGNoKHJlSnNDb2RlU3RvcCkgfHwgc3RyZWFtLm1hdGNoKHJlWG1sQ29kZVN0YXJ0KSB8fCBzdHJlYW0ubWF0Y2gocmVYbWxDb2RlU3RvcCkpXG4gICAgICAgIHJldHVybiAnY29tbWVudCc7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKHJlSFIpKVxuICAgICAgICByZXR1cm4gJ2hyJztcbiAgICB9XG5cbiAgICBzdHJlYW0ubmV4dCgpO1xuICAgIGlmIChzb2wgJiYgL1tcXC9cXCohIzs6PnxdLy50ZXN0KGNoKSkge1xuICAgICAgaWYgKGNoID09IFwiIVwiKSB7IC8vIHR3IGhlYWRlclxuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcImhlYWRlclwiO1xuICAgICAgfVxuICAgICAgaWYgKGNoID09IFwiKlwiKSB7IC8vIHR3IGxpc3RcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKCcqJyk7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PSBcIiNcIikgeyAvLyB0dyBudW1iZXJlZCBsaXN0XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgnIycpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT0gXCI7XCIpIHsgLy8gZGVmaW5pdGlvbiBsaXN0LCB0ZXJtXG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgnOycpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT0gXCI6XCIpIHsgLy8gZGVmaW5pdGlvbiBsaXN0LCBkZXNjcmlwdGlvblxuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoJzonKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfVxuICAgICAgaWYgKGNoID09IFwiPlwiKSB7IC8vIHNpbmdsZSBsaW5lIHF1b3RlXG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZShcIj5cIik7XG4gICAgICAgIHJldHVybiBcInF1b3RlXCI7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT0gJ3wnKVxuICAgICAgICByZXR1cm4gJ2hlYWRlcic7XG4gICAgfVxuXG4gICAgaWYgKGNoID09ICd7JyAmJiBzdHJlYW0ubWF0Y2goL1xce1xcey8pKVxuICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHR3VG9rZW5Db2RlKTtcblxuICAgIC8vIHJ1ZGltZW50YXJ5IGh0bWw6Ly8gZmlsZTovLyBsaW5rIG1hdGNoaW5nLiBUVyBrbm93cyBtdWNoIG1vcmUgLi4uXG4gICAgaWYgKC9baGZdL2kudGVzdChjaCkgJiZcbiAgICAgICAgL1t0aV0vaS50ZXN0KHN0cmVhbS5wZWVrKCkpICYmXG4gICAgICAgIHN0cmVhbS5tYXRjaCgvXFxiKHR0cHM/fHRwfGlsZSk6XFwvXFwvW1xcLUEtWjAtOSsmQCNcXC8lPz1+X3wkITosLjtdKltBLVowLTkrJkAjXFwvJT1+X3wkXS9pKSlcbiAgICAgIHJldHVybiBcImxpbmtcIjtcblxuICAgIC8vIGp1c3QgYSBsaXR0bGUgc3RyaW5nIGluZGljYXRvciwgZG9uJ3Qgd2FudCB0byBoYXZlIHRoZSB3aG9sZSBzdHJpbmcgY292ZXJlZFxuICAgIGlmIChjaCA9PSAnXCInKVxuICAgICAgcmV0dXJuICdzdHJpbmcnO1xuXG4gICAgaWYgKGNoID09ICd+JykgICAgLy8gX25vXyBDYW1lbENhc2UgaW5kaWNhdG9yIHNob3VsZCBiZSBib2xkXG4gICAgICByZXR1cm4gJ2JyYWNlJztcblxuICAgIGlmICgvW1xcW1xcXV0vLnRlc3QoY2gpICYmIHN0cmVhbS5tYXRjaChjaCkpIC8vIGNoZWNrIGZvciBbWy4uXV1cbiAgICAgIHJldHVybiAnYnJhY2UnO1xuXG4gICAgaWYgKGNoID09IFwiQFwiKSB7ICAgIC8vIGNoZWNrIGZvciBzcGFjZSBsaW5rLiBUT0RPIGZpeCBAQC4uLkBAIGhpZ2hsaWdodGluZ1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzU3BhY2VOYW1lKTtcbiAgICAgIHJldHVybiBcImxpbmtcIjtcbiAgICB9XG5cbiAgICBpZiAoL1xcZC8udGVzdChjaCkpIHsgICAgICAgIC8vIG51bWJlcnNcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXFxkLyk7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT0gXCIvXCIpIHsgLy8gdHcgaW52aXNpYmxlIGNvbW1lbnRcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiJVwiKSkge1xuICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlbkNvbW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KFwiL1wiKSkgeyAvL1xuICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlbkVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2ggPT0gXCJfXCIgJiYgc3RyZWFtLmVhdChcIl9cIikpIC8vIHR3IHVuZGVybGluZVxuICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlblVuZGVybGluZSk7XG5cbiAgICAvLyBzdHJpa2V0aHJvdWdoIGFuZCBtZGFzaCBoYW5kbGluZ1xuICAgIGlmIChjaCA9PSBcIi1cIiAmJiBzdHJlYW0uZWF0KFwiLVwiKSkge1xuICAgICAgLy8gaWYgc3RyaWtldGhyb3VnaCBsb29rcyB1Z2x5LCBjaGFuZ2UgQ1NTLlxuICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgIT0gJyAnKVxuICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlblN0cmlrZSk7XG4gICAgICAvLyBtZGFzaFxuICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gJyAnKVxuICAgICAgICByZXR1cm4gJ2JyYWNlJztcbiAgICB9XG5cbiAgICBpZiAoY2ggPT0gXCInXCIgJiYgc3RyZWFtLmVhdChcIidcIikpIC8vIHR3IGJvbGRcbiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuU3Ryb25nKTtcblxuICAgIGlmIChjaCA9PSBcIjxcIiAmJiBzdHJlYW0uZWF0KFwiPFwiKSkgLy8gdHcgbWFjcm9cbiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuTWFjcm8pO1xuXG4gICAgLy8gY29yZSBtYWNybyBoYW5kbGluZ1xuICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9dLyk7XG4gICAgcmV0dXJuIHRleHR3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpKSA/IFwia2V5d29yZFwiIDogbnVsbFxuICB9XG5cbiAgLy8gdHcgaW52aXNpYmxlIGNvbW1lbnRcbiAgZnVuY3Rpb24gdHdUb2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDtcbiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICBpZiAoY2ggPT0gXCIvXCIgJiYgbWF5YmVFbmQpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIlXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cblxuICAvLyB0dyBzdHJvbmcgLyBib2xkXG4gIGZ1bmN0aW9uIHR3VG9rZW5TdHJvbmcoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLFxuICAgIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIidcIiAmJiBtYXliZUVuZCkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBtYXliZUVuZCA9IChjaCA9PSBcIidcIik7XG4gICAgfVxuICAgIHJldHVybiBcInN0cm9uZ1wiO1xuICB9XG5cbiAgLy8gdHcgY29kZVxuICBmdW5jdGlvbiB0d1Rva2VuQ29kZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIHNiID0gc3RhdGUuYmxvY2s7XG5cbiAgICBpZiAoc2IgJiYgc3RyZWFtLmN1cnJlbnQoKSkge1xuICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgIH1cblxuICAgIGlmICghc2IgJiYgc3RyZWFtLm1hdGNoKHJlVW50aWxDb2RlU3RvcCkpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgIH1cblxuICAgIGlmIChzYiAmJiBzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKHJlQ29kZUJsb2NrU3RvcCkpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgIH1cblxuICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG5cbiAgLy8gdHcgZW0gLyBpdGFsaWNcbiAgZnVuY3Rpb24gdHdUb2tlbkVtKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSxcbiAgICBjaDtcbiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICBpZiAoY2ggPT0gXCIvXCIgJiYgbWF5YmVFbmQpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIvXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJlbVwiO1xuICB9XG5cbiAgLy8gdHcgdW5kZXJsaW5lZCB0ZXh0XG4gIGZ1bmN0aW9uIHR3VG9rZW5VbmRlcmxpbmUoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLFxuICAgIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIl9cIiAmJiBtYXliZUVuZCkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBtYXliZUVuZCA9IChjaCA9PSBcIl9cIik7XG4gICAgfVxuICAgIHJldHVybiBcInVuZGVybGluZWRcIjtcbiAgfVxuXG4gIC8vIHR3IHN0cmlrZSB0aHJvdWdoIHRleHQgbG9va3MgdWdseVxuICAvLyBjaGFuZ2UgQ1NTIGlmIG5lZWRlZFxuICBmdW5jdGlvbiB0d1Rva2VuU3RyaWtlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7XG5cbiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICBpZiAoY2ggPT0gXCItXCIgJiYgbWF5YmVFbmQpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCItXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJzdHJpa2V0aHJvdWdoXCI7XG4gIH1cblxuICAvLyBtYWNyb1xuICBmdW5jdGlvbiB0d1Rva2VuTWFjcm8oc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0uY3VycmVudCgpID09ICc8PCcpIHtcbiAgICAgIHJldHVybiAnbWFjcm8nO1xuICAgIH1cblxuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKCFjaCkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGNoID09IFwiPlwiKSB7XG4gICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSAnPicpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIHJldHVybiBcIm1hY3JvXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX10vKTtcbiAgICByZXR1cm4ga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkgPyBcImtleXdvcmRcIiA6IG51bGxcbiAgfVxuXG4gIC8vIEludGVyZmFjZVxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZX07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtdGlkZGx5d2lraVwiLCBcInRpZGRseXdpa2lcIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKCd0aWtpJywgZnVuY3Rpb24oY29uZmlnKSB7XG4gIGZ1bmN0aW9uIGluQmxvY2soc3R5bGUsIHRlcm1pbmF0b3IsIHJldHVyblRva2VuaXplcikge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRlcm1pbmF0b3IpKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJldHVyblRva2VuaXplcikgc3RhdGUudG9rZW5pemUgPSByZXR1cm5Ub2tlbml6ZXI7XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5MaW5lKHN0eWxlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHdoaWxlKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0O1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpblRleHQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGZ1bmN0aW9uIGNoYWluKHBhcnNlcikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7XG4gICAgICByZXR1cm4gcGFyc2VyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIHZhciBzb2wgPSBzdHJlYW0uc29sKCk7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgIC8vbm9uIHN0YXJ0IG9mIGxpbmVcbiAgICBzd2l0Y2ggKGNoKSB7IC8vc3dpdGNoIGlzIGdlbmVyYWxseSBtdWNoIGZhc3RlciB0aGFuIGlmLCBzbyBpdCBpcyB1c2VkIGhlcmVcbiAgICBjYXNlIFwie1wiOiAvL3BsdWdpblxuICAgICAgc3RyZWFtLmVhdChcIi9cIik7XG4gICAgICBzdHJlYW0uZWF0U3BhY2UoKTtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW15cXHNcXHUwMGEwPVxcXCJcXCdcXC8/KH1dLyk7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IGluUGx1Z2luO1xuICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgY2FzZSBcIl9cIjogLy9ib2xkXG4gICAgICBpZiAoc3RyZWFtLmVhdChcIl9cIikpXG4gICAgICAgIHJldHVybiBjaGFpbihpbkJsb2NrKFwic3Ryb25nXCIsIFwiX19cIiwgaW5UZXh0KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiJ1wiOiAvL2l0YWxpY3NcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiJ1wiKSlcbiAgICAgICAgcmV0dXJuIGNoYWluKGluQmxvY2soXCJlbVwiLCBcIicnXCIsIGluVGV4dCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIihcIjovLyBXaWtpIExpbmtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiKFwiKSlcbiAgICAgICAgcmV0dXJuIGNoYWluKGluQmxvY2soXCJ2YXJpYWJsZS0yXCIsIFwiKSlcIiwgaW5UZXh0KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiW1wiOi8vIFdlYmxpbmtcbiAgICAgIHJldHVybiBjaGFpbihpbkJsb2NrKFwidmFyaWFibGUtM1wiLCBcIl1cIiwgaW5UZXh0KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwifFwiOiAvL3RhYmxlXG4gICAgICBpZiAoc3RyZWFtLmVhdChcInxcIikpXG4gICAgICAgIHJldHVybiBjaGFpbihpbkJsb2NrKFwiY29tbWVudFwiLCBcInx8XCIpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCItXCI6XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIj1cIikpIHsvL3RpdGxlQmFyXG4gICAgICAgIHJldHVybiBjaGFpbihpbkJsb2NrKFwiaGVhZGVyIHN0cmluZ1wiLCBcIj0tXCIsIGluVGV4dCkpO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KFwiLVwiKSkgey8vZGVsZXRlZFxuICAgICAgICByZXR1cm4gY2hhaW4oaW5CbG9jayhcImVycm9yIHR3LWRlbGV0ZWRcIiwgXCItLVwiLCBpblRleHQpKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCI9XCI6IC8vdW5kZXJsaW5lXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKFwiPT1cIikpXG4gICAgICAgIHJldHVybiBjaGFpbihpbkJsb2NrKFwidHctdW5kZXJsaW5lXCIsIFwiPT09XCIsIGluVGV4dCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIjpcIjpcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiOlwiKSlcbiAgICAgICAgcmV0dXJuIGNoYWluKGluQmxvY2soXCJjb21tZW50XCIsIFwiOjpcIikpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIl5cIjogLy9ib3hcbiAgICAgIHJldHVybiBjaGFpbihpbkJsb2NrKFwidHctYm94XCIsIFwiXlwiKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiflwiOiAvL25wXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKFwibnB+XCIpKVxuICAgICAgICByZXR1cm4gY2hhaW4oaW5CbG9jayhcIm1ldGFcIiwgXCJ+L25wflwiKSk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvL3N0YXJ0IG9mIGxpbmUgdHlwZXNcbiAgICBpZiAoc29sKSB7XG4gICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICBjYXNlIFwiIVwiOiAvL2hlYWRlciBhdCBzdGFydCBvZiBsaW5lXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goJyEhISEhJykpIHtcbiAgICAgICAgICByZXR1cm4gY2hhaW4oaW5MaW5lKFwiaGVhZGVyIHN0cmluZ1wiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCchISEhJykpIHtcbiAgICAgICAgICByZXR1cm4gY2hhaW4oaW5MaW5lKFwiaGVhZGVyIHN0cmluZ1wiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCchISEnKSkge1xuICAgICAgICAgIHJldHVybiBjaGFpbihpbkxpbmUoXCJoZWFkZXIgc3RyaW5nXCIpKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goJyEhJykpIHtcbiAgICAgICAgICByZXR1cm4gY2hhaW4oaW5MaW5lKFwiaGVhZGVyIHN0cmluZ1wiKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNoYWluKGluTGluZShcImhlYWRlciBzdHJpbmdcIikpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIipcIjogLy91bm9yZGVyZWQgbGlzdCBsaW5lIGl0ZW0sIG9yIDxsaSAvPiBhdCBzdGFydCBvZiBsaW5lXG4gICAgICBjYXNlIFwiI1wiOiAvL29yZGVyZWQgbGlzdCBsaW5lIGl0ZW0sIG9yIDxsaSAvPiBhdCBzdGFydCBvZiBsaW5lXG4gICAgICBjYXNlIFwiK1wiOiAvL29yZGVyZWQgbGlzdCBsaW5lIGl0ZW0sIG9yIDxsaSAvPiBhdCBzdGFydCBvZiBsaW5lXG4gICAgICAgIHJldHVybiBjaGFpbihpbkxpbmUoXCJ0dy1saXN0aXRlbSBicmFja2V0XCIpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9zdHJlYW0uZWF0V2hpbGUoL1sme10vKTsgd2FzIGVhdGluZyB1cCBwbHVnaW5zLCB0dXJuZWQgb2ZmIHRvIGFjdCBsZXNzIGxpa2UgaHRtbCBhbmQgbW9yZSBsaWtlIHRpa2lcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7XG5cbiAgLy8gUmV0dXJuIHZhcmlhYmxlcyBmb3IgdG9rZW5pemVyc1xuICB2YXIgcGx1Z2luTmFtZSwgdHlwZTtcbiAgZnVuY3Rpb24gaW5QbHVnaW4oc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgdmFyIHBlZWsgPSBzdHJlYW0ucGVlaygpO1xuXG4gICAgaWYgKGNoID09IFwifVwiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDtcbiAgICAgIC8vdHlwZSA9IGNoID09IFwiKVwiID8gXCJlbmRQbHVnaW5cIiA6IFwic2VsZmNsb3NlUGx1Z2luXCI7IGluUGx1Z2luXG4gICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiKFwiIHx8IGNoID09IFwiKVwiKSB7XG4gICAgICByZXR1cm4gXCJicmFja2V0XCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIj1cIikge1xuICAgICAgdHlwZSA9IFwiZXF1YWxzXCI7XG5cbiAgICAgIGlmIChwZWVrID09IFwiPlwiKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHBlZWsgPSBzdHJlYW0ucGVlaygpO1xuICAgICAgfVxuXG4gICAgICAvL2hlcmUgd2UgZGV0ZWN0IHZhbHVlcyBkaXJlY3RseSBhZnRlciBlcXVhbCBjaGFyYWN0ZXIgd2l0aCBubyBxdW90ZXNcbiAgICAgIGlmICghL1tcXCdcXFwiXS8udGVzdChwZWVrKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQXR0cmlidXRlTm9RdW90ZSgpO1xuICAgICAgfVxuICAgICAgLy9lbmQgZGV0ZWN0IHZhbHVlc1xuXG4gICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgIH0gZWxzZSBpZiAoL1tcXCdcXFwiXS8udGVzdChjaCkpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gaW5BdHRyaWJ1dGUoY2gpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1teXFxzXFx1MDBhMD1cXFwiXFwnXFwvP10vKTtcbiAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbkF0dHJpYnV0ZShxdW90ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuICAgICAgICBpZiAoc3RyZWFtLm5leHQoKSA9PSBxdW90ZSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5QbHVnaW47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbkF0dHJpYnV0ZU5vUXVvdGUoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHZhciBwZWVrID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgICAgaWYgKGNoID09IFwiIFwiIHx8IGNoID09IFwiLFwiIHx8IC9bICl9XS8udGVzdChwZWVrKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSBpblBsdWdpbjtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gXCJzdHJpbmdcIjtcbn07XG4gICAgICAgICAgICAgICAgICAgICB9XG5cbnZhciBjdXJTdGF0ZSwgc2V0U3R5bGU7XG5mdW5jdGlvbiBwYXNzKCkge1xuICBmb3IgKHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBjdXJTdGF0ZS5jYy5wdXNoKGFyZ3VtZW50c1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNvbnQoKSB7XG4gIHBhc3MuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHB1c2hDb250ZXh0KHBsdWdpbk5hbWUsIHN0YXJ0T2ZMaW5lKSB7XG4gIHZhciBub0luZGVudCA9IGN1clN0YXRlLmNvbnRleHQgJiYgY3VyU3RhdGUuY29udGV4dC5ub0luZGVudDtcbiAgY3VyU3RhdGUuY29udGV4dCA9IHtcbiAgICBwcmV2OiBjdXJTdGF0ZS5jb250ZXh0LFxuICAgIHBsdWdpbk5hbWU6IHBsdWdpbk5hbWUsXG4gICAgaW5kZW50OiBjdXJTdGF0ZS5pbmRlbnRlZCxcbiAgICBzdGFydE9mTGluZTogc3RhcnRPZkxpbmUsXG4gICAgbm9JbmRlbnQ6IG5vSW5kZW50XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBvcENvbnRleHQoKSB7XG4gIGlmIChjdXJTdGF0ZS5jb250ZXh0KSBjdXJTdGF0ZS5jb250ZXh0ID0gY3VyU3RhdGUuY29udGV4dC5wcmV2O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50KHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gXCJvcGVuUGx1Z2luXCIpIHtjdXJTdGF0ZS5wbHVnaW5OYW1lID0gcGx1Z2luTmFtZTsgcmV0dXJuIGNvbnQoYXR0cmlidXRlcywgZW5kcGx1Z2luKGN1clN0YXRlLnN0YXJ0T2ZMaW5lKSk7fVxuICBlbHNlIGlmICh0eXBlID09IFwiY2xvc2VQbHVnaW5cIikge1xuICAgIHZhciBlcnIgPSBmYWxzZTtcbiAgICBpZiAoY3VyU3RhdGUuY29udGV4dCkge1xuICAgICAgZXJyID0gY3VyU3RhdGUuY29udGV4dC5wbHVnaW5OYW1lICE9IHBsdWdpbk5hbWU7XG4gICAgICBwb3BDb250ZXh0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVyciA9IHRydWU7XG4gICAgfVxuICAgIGlmIChlcnIpIHNldFN0eWxlID0gXCJlcnJvclwiO1xuICAgIHJldHVybiBjb250KGVuZGNsb3NlcGx1Z2luKGVycikpO1xuICB9XG4gIGVsc2UgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIikge1xuICAgIGlmICghY3VyU3RhdGUuY29udGV4dCB8fCBjdXJTdGF0ZS5jb250ZXh0Lm5hbWUgIT0gXCIhY2RhdGFcIikgcHVzaENvbnRleHQoXCIhY2RhdGFcIik7XG4gICAgaWYgKGN1clN0YXRlLnRva2VuaXplID09IGluVGV4dCkgcG9wQ29udGV4dCgpO1xuICAgIHJldHVybiBjb250KCk7XG4gIH1cbiAgZWxzZSByZXR1cm4gY29udCgpO1xufVxuXG5mdW5jdGlvbiBlbmRwbHVnaW4oc3RhcnRPZkxpbmUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlID09IFwic2VsZmNsb3NlUGx1Z2luXCIgfHxcbiAgICAgICAgdHlwZSA9PSBcImVuZFBsdWdpblwiXG4gICAgKVxuICAgICAgcmV0dXJuIGNvbnQoKTtcbiAgICBpZiAodHlwZSA9PSBcImVuZFBsdWdpblwiKSB7cHVzaENvbnRleHQoY3VyU3RhdGUucGx1Z2luTmFtZSwgc3RhcnRPZkxpbmUpOyByZXR1cm4gY29udCgpO31cbiAgICByZXR1cm4gY29udCgpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBlbmRjbG9zZXBsdWdpbihlcnIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICBpZiAoZXJyKSBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICBpZiAodHlwZSA9PSBcImVuZFBsdWdpblwiKSByZXR1cm4gY29udCgpO1xuICAgIHJldHVybiBwYXNzKCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJpYnV0ZXModHlwZSkge1xuICBpZiAodHlwZSA9PSBcImtleXdvcmRcIikge3NldFN0eWxlID0gXCJhdHRyaWJ1dGVcIjsgcmV0dXJuIGNvbnQoYXR0cmlidXRlcyk7fVxuICBpZiAodHlwZSA9PSBcImVxdWFsc1wiKSByZXR1cm4gY29udChhdHR2YWx1ZSwgYXR0cmlidXRlcyk7XG4gIHJldHVybiBwYXNzKCk7XG59XG5mdW5jdGlvbiBhdHR2YWx1ZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IFwia2V5d29yZFwiKSB7c2V0U3R5bGUgPSBcInN0cmluZ1wiOyByZXR1cm4gY29udCgpO31cbiAgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbnQoYXR0dmFsdWVtYXliZSk7XG4gIHJldHVybiBwYXNzKCk7XG59XG5mdW5jdGlvbiBhdHR2YWx1ZW1heWJlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbnQoYXR0dmFsdWVtYXliZSk7XG4gIGVsc2UgcmV0dXJuIHBhc3MoKTtcbn1cbnJldHVybiB7XG4gIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7dG9rZW5pemU6IGluVGV4dCwgY2M6IFtdLCBpbmRlbnRlZDogMCwgc3RhcnRPZkxpbmU6IHRydWUsIHBsdWdpbk5hbWU6IG51bGwsIGNvbnRleHQ6IG51bGx9O1xuICB9LFxuICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgfVxuICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG5cbiAgICBzZXRTdHlsZSA9IHR5cGUgPSBwbHVnaW5OYW1lID0gbnVsbDtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAoKHN0eWxlIHx8IHR5cGUpICYmIHN0eWxlICE9IFwiY29tbWVudFwiKSB7XG4gICAgICBjdXJTdGF0ZSA9IHN0YXRlO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGNvbWIgPSBzdGF0ZS5jYy5wb3AoKSB8fCBlbGVtZW50O1xuICAgICAgICBpZiAoY29tYih0eXBlIHx8IHN0eWxlKSkgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7XG4gICAgcmV0dXJuIHNldFN0eWxlIHx8IHN0eWxlO1xuICB9LFxuICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICB2YXIgY29udGV4dCA9IHN0YXRlLmNvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5ub0luZGVudCkgcmV0dXJuIDA7XG4gICAgaWYgKGNvbnRleHQgJiYgL157XFwvLy50ZXN0KHRleHRBZnRlcikpXG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgd2hpbGUgKGNvbnRleHQgJiYgIWNvbnRleHQuc3RhcnRPZkxpbmUpXG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgaWYgKGNvbnRleHQpIHJldHVybiBjb250ZXh0LmluZGVudCArIGluZGVudFVuaXQ7XG4gICAgZWxzZSByZXR1cm4gMDtcbiAgfSxcbiAgZWxlY3RyaWNDaGFyczogXCIvXCJcbn07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC90aWtpXCIsIFwidGlraVwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInRvbWxcIiwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluU3RyaW5nOiBmYWxzZSxcbiAgICAgICAgc3RyaW5nVHlwZTogXCJcIixcbiAgICAgICAgbGhzOiB0cnVlLFxuICAgICAgICBpbkFycmF5OiAwXG4gICAgICB9O1xuICAgIH0sXG4gICAgdG9rZW46IGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAvL2NoZWNrIGZvciBzdGF0ZSBjaGFuZ2VzXG4gICAgICBpZiAoIXN0YXRlLmluU3RyaW5nICYmICgoc3RyZWFtLnBlZWsoKSA9PSAnXCInKSB8fCAoc3RyZWFtLnBlZWsoKSA9PSBcIidcIikpKSB7XG4gICAgICAgIHN0YXRlLnN0cmluZ1R5cGUgPSBzdHJlYW0ucGVlaygpO1xuICAgICAgICBzdHJlYW0ubmV4dCgpOyAvLyBTa2lwIHF1b3RlXG4gICAgICAgIHN0YXRlLmluU3RyaW5nID0gdHJ1ZTsgLy8gVXBkYXRlIHN0YXRlXG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0YXRlLmluQXJyYXkgPT09IDApIHtcbiAgICAgICAgc3RhdGUubGhzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8vcmV0dXJuIHN0YXRlXG4gICAgICBpZiAoc3RhdGUuaW5TdHJpbmcpIHtcbiAgICAgICAgd2hpbGUgKHN0YXRlLmluU3RyaW5nICYmICFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gc3RhdGUuc3RyaW5nVHlwZSkge1xuICAgICAgICAgICAgc3RyZWFtLm5leHQoKTsgLy8gU2tpcCBxdW90ZVxuICAgICAgICAgICAgc3RhdGUuaW5TdHJpbmcgPSBmYWxzZTsgLy8gQ2xlYXIgZmxhZ1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtLm1hdGNoKC9eLlteXFxcXFxcXCJcXCddKi8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGUubGhzID8gXCJwcm9wZXJ0eSBzdHJpbmdcIiA6IFwic3RyaW5nXCI7IC8vIFRva2VuIHN0eWxlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmluQXJyYXkgJiYgc3RyZWFtLnBlZWsoKSA9PT0gJ10nKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHN0YXRlLmluQXJyYXktLTtcbiAgICAgICAgcmV0dXJuICdicmFja2V0JztcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGhzICYmIHN0cmVhbS5wZWVrKCkgPT09ICdbJyAmJiBzdHJlYW0uc2tpcFRvKCddJykpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTsvL3NraXAgY2xvc2luZyBdXG4gICAgICAgIC8vIGFycmF5IG9mIG9iamVjdHMgaGFzIGFuIGV4dHJhIG9wZW4gJiBjbG9zZSBbXVxuICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJ10nKSBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gXCJhdG9tXCI7XG4gICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09IFwiI1wiKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGhzICYmIHN0cmVhbS5lYXRXaGlsZShmdW5jdGlvbiAoYykgeyByZXR1cm4gYyAhPSAnPScgJiYgYyAhPSAnICc7IH0pKSB7XG4gICAgICAgIHJldHVybiBcInByb3BlcnR5XCI7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxocyAmJiBzdHJlYW0ucGVlaygpID09PSBcIj1cIikge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBzdGF0ZS5saHMgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5saHMgJiYgc3RyZWFtLm1hdGNoKC9eXFxkXFxkXFxkXFxkW1xcZFxcLVxcOlxcLlRdKlovKSkge1xuICAgICAgICByZXR1cm4gJ2F0b20nOyAvL2RhdGVcbiAgICAgIH0gZWxzZSBpZiAoIXN0YXRlLmxocyAmJiAoc3RyZWFtLm1hdGNoKCd0cnVlJykgfHwgc3RyZWFtLm1hdGNoKCdmYWxzZScpKSkge1xuICAgICAgICByZXR1cm4gJ2F0b20nO1xuICAgICAgfSBlbHNlIGlmICghc3RhdGUubGhzICYmIHN0cmVhbS5wZWVrKCkgPT09ICdbJykge1xuICAgICAgICBzdGF0ZS5pbkFycmF5Kys7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHJldHVybiAnYnJhY2tldCc7XG4gICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5saHMgJiYgc3RyZWFtLm1hdGNoKC9eXFwtP1xcZCsoPzpcXC5cXGQrKT8vKSkge1xuICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgICB9IGVsc2UgaWYgKCFzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LXRvbWwnLCAndG9tbCcpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi9odG1sbWl4ZWQvaHRtbG1peGVkXCIpLFxuICAgICAgICByZXF1aXJlKFwiLi4vLi4vYWRkb24vbW9kZS9vdmVybGF5XCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIsIFwiLi4vaHRtbG1peGVkL2h0bWxtaXhlZFwiLFxuICAgICAgICAgICAgXCIuLi8uLi9hZGRvbi9tb2RlL292ZXJsYXlcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcInRvcm5hZG86aW5uZXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGtleXdvcmRzID0gW1wiYW5kXCIsXCJhc1wiLFwiYXNzZXJ0XCIsXCJhdXRvZXNjYXBlXCIsXCJibG9ja1wiLFwiYnJlYWtcIixcImNsYXNzXCIsXCJjb21tZW50XCIsXCJjb250ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY29udGludWVcIixcImRhdGV0aW1lXCIsXCJkZWZcIixcImRlbFwiLFwiZWxpZlwiLFwiZWxzZVwiLFwiZW5kXCIsXCJlc2NhcGVcIixcImV4Y2VwdFwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4ZWNcIixcImV4dGVuZHNcIixcImZhbHNlXCIsXCJmaW5hbGx5XCIsXCJmb3JcIixcImZyb21cIixcImdsb2JhbFwiLFwiaWZcIixcImltcG9ydFwiLFwiaW5cIixcbiAgICAgICAgICAgICAgICAgICAgXCJpbmNsdWRlXCIsXCJpc1wiLFwianNvbl9lbmNvZGVcIixcImxhbWJkYVwiLFwibGVuZ3RoXCIsXCJsaW5raWZ5XCIsXCJsb2FkXCIsXCJtb2R1bGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJub25lXCIsXCJub3RcIixcIm9yXCIsXCJwYXNzXCIsXCJwcmludFwiLFwicHV0XCIsXCJyYWlzZVwiLFwicmF3XCIsXCJyZXR1cm5cIixcInNlbGZcIixcInNldFwiLFxuICAgICAgICAgICAgICAgICAgICBcInNxdWVlemVcIixcInN1cGVyXCIsXCJ0cnVlXCIsXCJ0cnlcIixcInVybF9lc2NhcGVcIixcIndoaWxlXCIsXCJ3aXRoXCIsXCJ3aXRob3V0XCIsXCJ4aHRtbF9lc2NhcGVcIixcInlpZWxkXCJdO1xuICAgIGtleXdvcmRzID0gbmV3IFJlZ0V4cChcIl4oKFwiICsga2V5d29yZHMuam9pbihcIil8KFwiKSArIFwiKSlcXFxcYlwiKTtcblxuICAgIGZ1bmN0aW9uIHRva2VuQmFzZSAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXlxce10vKTtcbiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgICBpZiAoY2ggPT0gXCJ7XCIpIHtcbiAgICAgICAgaWYgKGNoID0gc3RyZWFtLmVhdCgvXFx7fCV8Iy8pKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRhZyhjaCk7XG4gICAgICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5UYWcgKGNsb3NlKSB7XG4gICAgICBpZiAoY2xvc2UgPT0gXCJ7XCIpIHtcbiAgICAgICAgY2xvc2UgPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgICAgICBpZiAoKGNoID09IGNsb3NlKSAmJiBzdHJlYW0uZWF0KFwifVwiKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICAgIHJldHVybiBcInRhZ1wiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goa2V5d29yZHMpKSB7XG4gICAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9zZSA9PSBcIiNcIiA/IFwiY29tbWVudFwiIDogXCJzdHJpbmdcIjtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZX07XG4gICAgICB9LFxuICAgICAgdG9rZW46IGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJ0b3JuYWRvXCIsIGZ1bmN0aW9uKGNvbmZpZykge1xuICAgIHZhciBodG1sQmFzZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwidGV4dC9odG1sXCIpO1xuICAgIHZhciB0b3JuYWRvSW5uZXIgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcInRvcm5hZG86aW5uZXJcIik7XG4gICAgcmV0dXJuIENvZGVNaXJyb3Iub3ZlcmxheU1vZGUoaHRtbEJhc2UsIHRvcm5hZG9Jbm5lcik7XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC10b3JuYWRvXCIsIFwidG9ybmFkb1wiKTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlXG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgndHJvZmYnLCBmdW5jdGlvbigpIHtcblxuICB2YXIgd29yZHMgPSB7fTtcblxuICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtKSB7XG4gICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcblxuICAgIHZhciBzb2wgPSBzdHJlYW0uc29sKCk7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKCdmQicpIHx8IHN0cmVhbS5tYXRjaCgnZlInKSB8fCBzdHJlYW0ubWF0Y2goJ2ZJJykgfHxcbiAgICAgICAgICBzdHJlYW0ubWF0Y2goJ3UnKSAgfHwgc3RyZWFtLm1hdGNoKCdkJykgIHx8XG4gICAgICAgICAgc3RyZWFtLm1hdGNoKCclJykgIHx8IHN0cmVhbS5tYXRjaCgnJicpKSB7XG4gICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goJ21bJykpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUbygnXScpO1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKCdzKycpIHx8IHN0cmVhbS5tYXRjaCgncy0nKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXGQtXS8pO1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKCdcXCgnKSB8fCBzdHJlYW0ubWF0Y2goJypcXCgnKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHctXS8pO1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgfVxuICAgIGlmIChzb2wgJiYgKGNoID09PSAnLicgfHwgY2ggPT09ICdcXCcnKSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoJ1xcXFwnKSAmJiBzdHJlYW0uZWF0KCdcXFwiJykpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gJ2NvbW1lbnQnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc29sICYmIGNoID09PSAnLicpIHtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2goJ0IgJykgfHwgc3RyZWFtLm1hdGNoKCdJICcpIHx8IHN0cmVhbS5tYXRjaCgnUiAnKSkge1xuICAgICAgICByZXR1cm4gJ2F0dHJpYnV0ZSc7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKCdUSCAnKSB8fCBzdHJlYW0ubWF0Y2goJ1NIICcpIHx8IHN0cmVhbS5tYXRjaCgnU1MgJykgfHwgc3RyZWFtLm1hdGNoKCdIUCAnKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiAncXVvdGUnO1xuICAgICAgfVxuICAgICAgaWYgKChzdHJlYW0ubWF0Y2goL1tBLVpdLykgJiYgc3RyZWFtLm1hdGNoKC9bQS1aXS8pKSB8fCAoc3RyZWFtLm1hdGNoKC9bYS16XS8pICYmIHN0cmVhbS5tYXRjaCgvW2Etel0vKSkpIHtcbiAgICAgICAgcmV0dXJuICdhdHRyaWJ1dGUnO1xuICAgICAgfVxuICAgIH1cbiAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHctXS8pO1xuICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgIHJldHVybiB3b3Jkcy5oYXNPd25Qcm9wZXJ0eShjdXIpID8gd29yZHNbY3VyXSA6IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbml6ZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgcmV0dXJuIChzdGF0ZS50b2tlbnNbMF0gfHwgdG9rZW5CYXNlKSAoc3RyZWFtLCBzdGF0ZSk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtyZXR1cm4ge3Rva2VuczpbXX07fSxcbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgcmV0dXJuIHRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoJ3RleHQvdHJvZmYnLCAndHJvZmYnKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LXRyb2ZmJywgJ3Ryb2ZmJyk7XG5Db2RlTWlycm9yLmRlZmluZU1JTUUoJ2FwcGxpY2F0aW9uL3gtdHJvZmYnLCAndHJvZmYnKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJ0dGNuXCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7XG4gICAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCxcbiAgICAgICAga2V5d29yZHMgPSBwYXJzZXJDb25maWcua2V5d29yZHMgfHwge30sXG4gICAgICAgIGJ1aWx0aW4gPSBwYXJzZXJDb25maWcuYnVpbHRpbiB8fCB7fSxcbiAgICAgICAgdGltZXJPcHMgPSBwYXJzZXJDb25maWcudGltZXJPcHMgfHwge30sXG4gICAgICAgIHBvcnRPcHMgID0gcGFyc2VyQ29uZmlnLnBvcnRPcHMgfHwge30sXG4gICAgICAgIGNvbmZpZ09wcyA9IHBhcnNlckNvbmZpZy5jb25maWdPcHMgfHwge30sXG4gICAgICAgIHZlcmRpY3RPcHMgPSBwYXJzZXJDb25maWcudmVyZGljdE9wcyB8fCB7fSxcbiAgICAgICAgc3V0T3BzID0gcGFyc2VyQ29uZmlnLnN1dE9wcyB8fCB7fSxcbiAgICAgICAgZnVuY3Rpb25PcHMgPSBwYXJzZXJDb25maWcuZnVuY3Rpb25PcHMgfHwge30sXG5cbiAgICAgICAgdmVyZGljdENvbnN0cyA9IHBhcnNlckNvbmZpZy52ZXJkaWN0Q29uc3RzIHx8IHt9LFxuICAgICAgICBib29sZWFuQ29uc3RzID0gcGFyc2VyQ29uZmlnLmJvb2xlYW5Db25zdHMgfHwge30sXG4gICAgICAgIG90aGVyQ29uc3RzICAgPSBwYXJzZXJDb25maWcub3RoZXJDb25zdHMgfHwge30sXG5cbiAgICAgICAgdHlwZXMgPSBwYXJzZXJDb25maWcudHlwZXMgfHwge30sXG4gICAgICAgIHZpc2liaWxpdHlNb2RpZmllcnMgPSBwYXJzZXJDb25maWcudmlzaWJpbGl0eU1vZGlmaWVycyB8fCB7fSxcbiAgICAgICAgdGVtcGxhdGVNYXRjaCA9IHBhcnNlckNvbmZpZy50ZW1wbGF0ZU1hdGNoIHx8IHt9LFxuICAgICAgICBtdWx0aUxpbmVTdHJpbmdzID0gcGFyc2VyQ29uZmlnLm11bHRpTGluZVN0cmluZ3MsXG4gICAgICAgIGluZGVudFN0YXRlbWVudHMgPSBwYXJzZXJDb25maWcuaW5kZW50U3RhdGVtZW50cyAhPT0gZmFsc2U7XG4gICAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXFwtKiZAPTw+IVxcL10vO1xuICAgIHZhciBjdXJQdW5jO1xuXG4gICAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG5cbiAgICAgIGlmIChjaCA9PSAnXCInIHx8IGNoID09IFwiJ1wiKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpO1xuICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoL1tcXFtcXF17fVxcKFxcKSw7XFxcXDpcXD9cXC5dLy50ZXN0KGNoKSkge1xuICAgICAgICBjdXJQdW5jID0gY2g7XG4gICAgICAgIHJldHVybiBcInB1bmN0dWF0aW9uXCI7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT0gXCIjXCIpe1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcImF0b20gcHJlcHJvY2Vzc29yXCI7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT0gXCIlXCIpe1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1xcYi8pO1xuICAgICAgICByZXR1cm4gXCJhdG9tIHR0Y24zTWFjcm9zXCI7XG4gICAgICB9XG4gICAgICBpZiAoL1xcZC8udGVzdChjaCkpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwuXS8pO1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PSBcIi9cIikge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIipcIikpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDtcbiAgICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJlYW0uZWF0KFwiL1wiKSkge1xuICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkge1xuICAgICAgICBpZihjaCA9PSBcIkBcIil7XG4gICAgICAgICAgaWYoc3RyZWFtLm1hdGNoKFwidHJ5XCIpIHx8IHN0cmVhbS5tYXRjaChcImNhdGNoXCIpXG4gICAgICAgICAgICAgIHx8IHN0cmVhbS5tYXRjaChcImxhenlcIikpe1xuICAgICAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpO1xuICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgfVxuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX1xceGExLVxcdWZmZmZdLyk7XG4gICAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcblxuICAgICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgIGlmIChidWlsdGluLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImJ1aWx0aW5cIjtcblxuICAgICAgaWYgKHRpbWVyT3BzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImRlZiB0aW1lck9wc1wiO1xuICAgICAgaWYgKGNvbmZpZ09wcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gXCJkZWYgY29uZmlnT3BzXCI7XG4gICAgICBpZiAodmVyZGljdE9wcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gXCJkZWYgdmVyZGljdE9wc1wiO1xuICAgICAgaWYgKHBvcnRPcHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuIFwiZGVmIHBvcnRPcHNcIjtcbiAgICAgIGlmIChzdXRPcHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuIFwiZGVmIHN1dE9wc1wiO1xuICAgICAgaWYgKGZ1bmN0aW9uT3BzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImRlZiBmdW5jdGlvbk9wc1wiO1xuXG4gICAgICBpZiAodmVyZGljdENvbnN0cy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gXCJzdHJpbmcgdmVyZGljdENvbnN0c1wiO1xuICAgICAgaWYgKGJvb2xlYW5Db25zdHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuIFwic3RyaW5nIGJvb2xlYW5Db25zdHNcIjtcbiAgICAgIGlmIChvdGhlckNvbnN0cy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gXCJzdHJpbmcgb3RoZXJDb25zdHNcIjtcblxuICAgICAgaWYgKHR5cGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcImJ1aWx0aW4gdHlwZXNcIjtcbiAgICAgIGlmICh2aXNpYmlsaXR5TW9kaWZpZXJzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpXG4gICAgICAgIHJldHVybiBcImJ1aWx0aW4gdmlzaWJpbGl0eU1vZGlmaWVyc1wiO1xuICAgICAgaWYgKHRlbXBsYXRlTWF0Y2gucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuIFwiYXRvbSB0ZW1wbGF0ZU1hdGNoXCI7XG5cbiAgICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpe1xuICAgICAgICAgICAgdmFyIGFmdGVyUXVvdGUgPSBzdHJlYW0ucGVlaygpO1xuICAgICAgICAgICAgLy9sb29rIGlmIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHF1b3RlIGlzIGxpa2UgdGhlIEIgaW4gJzEwMTAwMDEwJ0JcbiAgICAgICAgICAgIGlmIChhZnRlclF1b3RlKXtcbiAgICAgICAgICAgICAgYWZ0ZXJRdW90ZSA9IGFmdGVyUXVvdGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgaWYoYWZ0ZXJRdW90ZSA9PSBcImJcIiB8fCBhZnRlclF1b3RlID09IFwiaFwiIHx8IGFmdGVyUXVvdGUgPT0gXCJvXCIpXG4gICAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVuZCA9IHRydWU7IGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kIHx8ICEoZXNjYXBlZCB8fCBtdWx0aUxpbmVTdHJpbmdzKSlcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgICBpZiAoY2ggPT0gXCIvXCIgJiYgbWF5YmVFbmQpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIqXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHtcbiAgICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDtcbiAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgIHRoaXMuYWxpZ24gPSBhbGlnbjtcbiAgICAgIHRoaXMucHJldiA9IHByZXY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIGNvbCwgdHlwZSkge1xuICAgICAgdmFyIGluZGVudCA9IHN0YXRlLmluZGVudGVkO1xuICAgICAgaWYgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC50eXBlID09IFwic3RhdGVtZW50XCIpXG4gICAgICAgIGluZGVudCA9IHN0YXRlLmNvbnRleHQuaW5kZW50ZWQ7XG4gICAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KGluZGVudCwgY29sLCB0eXBlLCBudWxsLCBzdGF0ZS5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7XG4gICAgICB2YXIgdCA9IHN0YXRlLmNvbnRleHQudHlwZTtcbiAgICAgIGlmICh0ID09IFwiKVwiIHx8IHQgPT0gXCJdXCIgfHwgdCA9PSBcIn1cIilcbiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkO1xuICAgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG4gICAgfVxuXG4gICAgLy9JbnRlcmZhY2VcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRva2VuaXplOiBudWxsLFxuICAgICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgXCJ0b3BcIiwgZmFsc2UpLFxuICAgICAgICAgIGluZGVudGVkOiAwLFxuICAgICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9LFxuXG4gICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDtcbiAgICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7XG4gICAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTtcbiAgICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY3VyUHVuYyA9IG51bGw7XG4gICAgICAgIHZhciBzdHlsZSA9IChzdGF0ZS50b2tlbml6ZSB8fCB0b2tlbkJhc2UpKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICBpZiAoc3R5bGUgPT0gXCJjb21tZW50XCIpIHJldHVybiBzdHlsZTtcbiAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlO1xuXG4gICAgICAgIGlmICgoY3VyUHVuYyA9PSBcIjtcIiB8fCBjdXJQdW5jID09IFwiOlwiIHx8IGN1clB1bmMgPT0gXCIsXCIpXG4gICAgICAgICAgICAmJiBjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiKXtcbiAgICAgICAgICBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwie1wiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIn1cIik7XG4gICAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCJbXCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwiXVwiKTtcbiAgICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIihcIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCIpXCIpO1xuICAgICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwifVwiKSB7XG4gICAgICAgICAgd2hpbGUgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICAgIGlmIChjdHgudHlwZSA9PSBcIn1cIikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICAgICAgd2hpbGUgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gY3R4LnR5cGUpIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICBlbHNlIGlmIChpbmRlbnRTdGF0ZW1lbnRzICYmXG4gICAgICAgICAgICAoKChjdHgudHlwZSA9PSBcIn1cIiB8fCBjdHgudHlwZSA9PSBcInRvcFwiKSAmJiBjdXJQdW5jICE9ICc7JykgfHxcbiAgICAgICAgICAgIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiICYmIGN1clB1bmMgPT0gXCJuZXdzdGF0ZW1lbnRcIikpKVxuICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwic3RhdGVtZW50XCIpO1xuXG4gICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSxcblxuICAgICAgZWxlY3RyaWNDaGFyczogXCJ7fVwiLFxuICAgICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiLypcIixcbiAgICAgIGJsb2NrQ29tbWVudEVuZDogXCIqL1wiLFxuICAgICAgbGluZUNvbW1lbnQ6IFwiLy9cIixcbiAgICAgIGZvbGQ6IFwiYnJhY2VcIlxuICAgIH07XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHdvcmRzKHN0cikge1xuICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoXCIgXCIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBmdW5jdGlvbiBkZWYobWltZXMsIG1vZGUpIHtcbiAgICBpZiAodHlwZW9mIG1pbWVzID09IFwic3RyaW5nXCIpIG1pbWVzID0gW21pbWVzXTtcbiAgICB2YXIgd29yZHMgPSBbXTtcbiAgICBmdW5jdGlvbiBhZGQob2JqKSB7XG4gICAgICBpZiAob2JqKSBmb3IgKHZhciBwcm9wIGluIG9iaikgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSlcbiAgICAgICAgd29yZHMucHVzaChwcm9wKTtcbiAgICB9XG5cbiAgICBhZGQobW9kZS5rZXl3b3Jkcyk7XG4gICAgYWRkKG1vZGUuYnVpbHRpbik7XG4gICAgYWRkKG1vZGUudGltZXJPcHMpO1xuICAgIGFkZChtb2RlLnBvcnRPcHMpO1xuXG4gICAgaWYgKHdvcmRzLmxlbmd0aCkge1xuICAgICAgbW9kZS5oZWxwZXJUeXBlID0gbWltZXNbMF07XG4gICAgICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiaGludFdvcmRzXCIsIG1pbWVzWzBdLCB3b3Jkcyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW1lcy5sZW5ndGg7ICsraSlcbiAgICAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRShtaW1lc1tpXSwgbW9kZSk7XG4gIH1cblxuICBkZWYoW1widGV4dC94LXR0Y25cIiwgXCJ0ZXh0L3gtdHRjbjNcIiwgXCJ0ZXh0L3gtdHRjbnBwXCJdLCB7XG4gICAgbmFtZTogXCJ0dGNuXCIsXG4gICAga2V5d29yZHM6IHdvcmRzKFwiYWN0aXZhdGUgYWRkcmVzcyBhbGl2ZSBhbGwgYWx0IGFsdHN0ZXAgYW5kIGFuZDRiIGFueVwiICtcbiAgICBcIiBicmVhayBjYXNlIGNvbXBvbmVudCBjb25zdCBjb250aW51ZSBjb250cm9sIGRlYWN0aXZhdGVcIiArXG4gICAgXCIgZGlzcGxheSBkbyBlbHNlIGVuY29kZSBlbnVtZXJhdGVkIGV4Y2VwdCBleGNlcHRpb25cIiArXG4gICAgXCIgZXhlY3V0ZSBleHRlbmRzIGV4dGVuc2lvbiBleHRlcm5hbCBmb3IgZnJvbSBmdW5jdGlvblwiICtcbiAgICBcIiBnb3RvIGdyb3VwIGlmIGltcG9ydCBpbiBpbmZpbml0eSBpbm91dCBpbnRlcmxlYXZlXCIgK1xuICAgIFwiIGxhYmVsIGxhbmd1YWdlIGxlbmd0aCBsb2cgbWF0Y2ggbWVzc2FnZSBtaXhlZCBtb2RcIiArXG4gICAgXCIgbW9kaWZpZXMgbW9kdWxlIG1vZHVsZXBhciBtdGMgbm9ibG9jayBub3Qgbm90NGIgbm93YWl0XCIgK1xuICAgIFwiIG9mIG9uIG9wdGlvbmFsIG9yIG9yNGIgb3V0IG92ZXJyaWRlIHBhcmFtIHBhdHRlcm4gcG9ydFwiICtcbiAgICBcIiBwcm9jZWR1cmUgcmVjb3JkIHJlY3Vyc2l2ZSByZW0gcmVwZWF0IHJldHVybiBydW5zIHNlbGVjdFwiICtcbiAgICBcIiBzZWxmIHNlbmRlciBzZXQgc2lnbmF0dXJlIHN5c3RlbSB0ZW1wbGF0ZSB0ZXN0Y2FzZSB0b1wiICtcbiAgICBcIiB0eXBlIHVuaW9uIHZhbHVlIHZhbHVlb2YgdmFyIHZhcmlhbnQgd2hpbGUgd2l0aCB4b3IgeG9yNGJcIiksXG4gICAgYnVpbHRpbjogd29yZHMoXCJiaXQyaGV4IGJpdDJpbnQgYml0Mm9jdCBiaXQyc3RyIGNoYXIyaW50IGNoYXIyb2N0IGVuY3ZhbHVlXCIgK1xuICAgIFwiIGRlY29tcCBkZWN2YWx1ZSBmbG9hdDJpbnQgZmxvYXQyc3RyIGhleDJiaXQgaGV4MmludFwiICtcbiAgICBcIiBoZXgyb2N0IGhleDJzdHIgaW50MmJpdCBpbnQyY2hhciBpbnQyZmxvYXQgaW50MmhleFwiICtcbiAgICBcIiBpbnQyb2N0IGludDJzdHIgaW50MnVuaWNoYXIgaXNib3VuZCBpc2Nob3NlbiBpc3ByZXNlbnRcIiArXG4gICAgXCIgaXN2YWx1ZSBsZW5ndGhvZiBsb2cyc3RyIG9jdDJiaXQgb2N0MmNoYXIgb2N0MmhleCBvY3QyaW50XCIgK1xuICAgIFwiIG9jdDJzdHIgcmVnZXhwIHJlcGxhY2Ugcm5kIHNpemVvZiBzdHIyYml0IHN0cjJmbG9hdFwiICtcbiAgICBcIiBzdHIyaGV4IHN0cjJpbnQgc3RyMm9jdCBzdWJzdHIgdW5pY2hhcjJpbnQgdW5pY2hhcjJjaGFyXCIgK1xuICAgIFwiIGVudW0yaW50XCIpLFxuICAgIHR5cGVzOiB3b3JkcyhcImFueXR5cGUgYml0c3RyaW5nIGJvb2xlYW4gY2hhciBjaGFyc3RyaW5nIGRlZmF1bHQgZmxvYXRcIiArXG4gICAgXCIgaGV4c3RyaW5nIGludGVnZXIgb2JqaWQgb2N0ZXRzdHJpbmcgdW5pdmVyc2FsIHZlcmRpY3R0eXBlIHRpbWVyXCIpLFxuICAgIHRpbWVyT3BzOiB3b3JkcyhcInJlYWQgcnVubmluZyBzdGFydCBzdG9wIHRpbWVvdXRcIiksXG4gICAgcG9ydE9wczogd29yZHMoXCJjYWxsIGNhdGNoIGNoZWNrIGNsZWFyIGdldGNhbGwgZ2V0cmVwbHkgaGFsdCByYWlzZSByZWNlaXZlXCIgK1xuICAgIFwiIHJlcGx5IHNlbmQgdHJpZ2dlclwiKSxcbiAgICBjb25maWdPcHM6IHdvcmRzKFwiY3JlYXRlIGNvbm5lY3QgZGlzY29ubmVjdCBkb25lIGtpbGwga2lsbGVkIG1hcCB1bm1hcFwiKSxcbiAgICB2ZXJkaWN0T3BzOiB3b3JkcyhcImdldHZlcmRpY3Qgc2V0dmVyZGljdFwiKSxcbiAgICBzdXRPcHM6IHdvcmRzKFwiYWN0aW9uXCIpLFxuICAgIGZ1bmN0aW9uT3BzOiB3b3JkcyhcImFwcGx5IGRlcmVmZXJzIHJlZmVyc1wiKSxcblxuICAgIHZlcmRpY3RDb25zdHM6IHdvcmRzKFwiZXJyb3IgZmFpbCBpbmNvbmMgbm9uZSBwYXNzXCIpLFxuICAgIGJvb2xlYW5Db25zdHM6IHdvcmRzKFwidHJ1ZSBmYWxzZVwiKSxcbiAgICBvdGhlckNvbnN0czogd29yZHMoXCJudWxsIE5VTEwgb21pdFwiKSxcblxuICAgIHZpc2liaWxpdHlNb2RpZmllcnM6IHdvcmRzKFwicHJpdmF0ZSBwdWJsaWMgZnJpZW5kXCIpLFxuICAgIHRlbXBsYXRlTWF0Y2g6IHdvcmRzKFwiY29tcGxlbWVudCBpZnByZXNlbnQgc3Vic2V0IHN1cGVyc2V0IHBlcm11dGF0aW9uXCIpLFxuICAgIG11bHRpTGluZVN0cmluZ3M6IHRydWVcbiAgfSk7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcInR0Y24tY2ZnXCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7XG4gICAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCxcbiAgICAgICAga2V5d29yZHMgPSBwYXJzZXJDb25maWcua2V5d29yZHMgfHwge30sXG4gICAgICAgIGZpbGVOQ3RybE1hc2tPcHRpb25zID0gcGFyc2VyQ29uZmlnLmZpbGVOQ3RybE1hc2tPcHRpb25zIHx8IHt9LFxuICAgICAgICBleHRlcm5hbENvbW1hbmRzID0gcGFyc2VyQ29uZmlnLmV4dGVybmFsQ29tbWFuZHMgfHwge30sXG4gICAgICAgIG11bHRpTGluZVN0cmluZ3MgPSBwYXJzZXJDb25maWcubXVsdGlMaW5lU3RyaW5ncyxcbiAgICAgICAgaW5kZW50U3RhdGVtZW50cyA9IHBhcnNlckNvbmZpZy5pbmRlbnRTdGF0ZW1lbnRzICE9PSBmYWxzZTtcbiAgICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvW1xcfF0vO1xuICAgIHZhciBjdXJQdW5jO1xuXG4gICAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgICBpZiAoY2ggPT0gJ1wiJyB8fCBjaCA9PSBcIidcIikge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKC9bOj1dLy50ZXN0KGNoKSkge1xuICAgICAgICBjdXJQdW5jID0gY2g7XG4gICAgICAgIHJldHVybiBcInB1bmN0dWF0aW9uXCI7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT0gXCIjXCIpe1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH1cbiAgICAgIGlmICgvXFxkLy50ZXN0KGNoKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5dLyk7XG4gICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgfVxuICAgICAgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7XG4gICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7XG4gICAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT0gXCJbXCIpe1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdfXFxdXS8pO1xuICAgICAgICByZXR1cm4gXCJudW1iZXIgc2VjdGlvblRpdGxlXCI7XG4gICAgICB9XG5cbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9dLyk7XG4gICAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgIGlmIChrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICBpZiAoZmlsZU5DdHJsTWFza09wdGlvbnMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSlcbiAgICAgICAgcmV0dXJuIFwibmVnYXRpdmUgZmlsZU5DdHJsTWFza09wdGlvbnNcIjtcbiAgICAgIGlmIChleHRlcm5hbENvbW1hbmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiBcIm5lZ2F0aXZlIGV4dGVybmFsQ29tbWFuZHNcIjtcblxuICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCl7XG4gICAgICAgICAgICB2YXIgYWZ0ZXJOZXh0ID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgICAgICAgIC8vbG9vayBpZiB0aGUgY2hhcmFjdGVyIGlmIHRoZSBxdW90ZSBpcyBsaWtlIHRoZSBCIGluICcxMDEwMDAxMCdCXG4gICAgICAgICAgICBpZiAoYWZ0ZXJOZXh0KXtcbiAgICAgICAgICAgICAgYWZ0ZXJOZXh0ID0gYWZ0ZXJOZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIGlmKGFmdGVyTmV4dCA9PSBcImJcIiB8fCBhZnRlck5leHQgPT0gXCJoXCIgfHwgYWZ0ZXJOZXh0ID09IFwib1wiKVxuICAgICAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmQgPSB0cnVlOyBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gXCJcXFxcXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpXG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsO1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gQ29udGV4dChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBhbGlnbiwgcHJldikge1xuICAgICAgdGhpcy5pbmRlbnRlZCA9IGluZGVudGVkO1xuICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgdGhpcy5hbGlnbiA9IGFsaWduO1xuICAgICAgdGhpcy5wcmV2ID0gcHJldjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIGNvbCwgdHlwZSkge1xuICAgICAgdmFyIGluZGVudCA9IHN0YXRlLmluZGVudGVkO1xuICAgICAgaWYgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC50eXBlID09IFwic3RhdGVtZW50XCIpXG4gICAgICAgIGluZGVudCA9IHN0YXRlLmNvbnRleHQuaW5kZW50ZWQ7XG4gICAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KGluZGVudCwgY29sLCB0eXBlLCBudWxsLCBzdGF0ZS5jb250ZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkge1xuICAgICAgdmFyIHQgPSBzdGF0ZS5jb250ZXh0LnR5cGU7XG4gICAgICBpZiAodCA9PSBcIilcIiB8fCB0ID09IFwiXVwiIHx8IHQgPT0gXCJ9XCIpXG4gICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDtcbiAgICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICAgIH1cblxuICAgIC8vSW50ZXJmYWNlXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b2tlbml6ZTogbnVsbCxcbiAgICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsIFwidG9wXCIsIGZhbHNlKSxcbiAgICAgICAgICBpbmRlbnRlZDogMCxcbiAgICAgICAgICBzdGFydE9mTGluZTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfSxcblxuICAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7XG4gICAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IGZhbHNlO1xuICAgICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGN1clB1bmMgPSBudWxsO1xuICAgICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgaWYgKHN0eWxlID09IFwiY29tbWVudFwiKSByZXR1cm4gc3R5bGU7XG4gICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gdHJ1ZTtcblxuICAgICAgICBpZiAoKGN1clB1bmMgPT0gXCI7XCIgfHwgY3VyUHVuYyA9PSBcIjpcIiB8fCBjdXJQdW5jID09IFwiLFwiKVxuICAgICAgICAgICAgJiYgY3R4LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIil7XG4gICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIntcIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCJ9XCIpO1xuICAgICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwiW1wiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIl1cIik7XG4gICAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCIoXCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwiKVwiKTtcbiAgICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIn1cIikge1xuICAgICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgICBpZiAoY3R4LnR5cGUgPT0gXCJ9XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgZWxzZSBpZiAoaW5kZW50U3RhdGVtZW50cyAmJiAoKChjdHgudHlwZSA9PSBcIn1cIiB8fCBjdHgudHlwZSA9PSBcInRvcFwiKVxuICAgICAgICAgICAgJiYgY3VyUHVuYyAhPSAnOycpIHx8IChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiXG4gICAgICAgICAgICAmJiBjdXJQdW5jID09IFwibmV3c3RhdGVtZW50XCIpKSlcbiAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcInN0YXRlbWVudFwiKTtcbiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSxcblxuICAgICAgZWxlY3RyaWNDaGFyczogXCJ7fVwiLFxuICAgICAgbGluZUNvbW1lbnQ6IFwiI1wiLFxuICAgICAgZm9sZDogXCJicmFjZVwiXG4gICAgfTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gd29yZHMoc3RyKSB7XG4gICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdChcIiBcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSlcbiAgICAgIG9ialt3b3Jkc1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtdHRjbi1jZmdcIiwge1xuICAgIG5hbWU6IFwidHRjbi1jZmdcIixcbiAgICBrZXl3b3Jkczogd29yZHMoXCJZZXMgTm8gTG9nRmlsZSBGaWxlTWFzayBDb25zb2xlTWFzayBBcHBlbmRGaWxlXCIgK1xuICAgIFwiIFRpbWVTdGFtcEZvcm1hdCBMb2dFdmVudFR5cGVzIFNvdXJjZUluZm9Gb3JtYXRcIiArXG4gICAgXCIgTG9nRW50aXR5TmFtZSBMb2dTb3VyY2VJbmZvIERpc2tGdWxsQWN0aW9uXCIgK1xuICAgIFwiIExvZ0ZpbGVOdW1iZXIgTG9nRmlsZVNpemUgTWF0Y2hpbmdIaW50cyBEZXRhaWxlZFwiICtcbiAgICBcIiBDb21wYWN0IFN1YkNhdGVnb3JpZXMgU3RhY2sgU2luZ2xlIE5vbmUgU2Vjb25kc1wiICtcbiAgICBcIiBEYXRlVGltZSBUaW1lIFN0b3AgRXJyb3IgUmV0cnkgRGVsZXRlIFRDUFBvcnQgS2lsbFRpbWVyXCIgK1xuICAgIFwiIE51bUhDcyBVbml4U29ja2V0c0VuYWJsZWQgTG9jYWxBZGRyZXNzXCIpLFxuICAgIGZpbGVOQ3RybE1hc2tPcHRpb25zOiB3b3JkcyhcIlRUQ05fRVhFQ1VUT1IgVFRDTl9FUlJPUiBUVENOX1dBUk5JTkdcIiArXG4gICAgXCIgVFRDTl9QT1JURVZFTlQgVFRDTl9USU1FUk9QIFRUQ05fVkVSRElDVE9QXCIgK1xuICAgIFwiIFRUQ05fREVGQVVMVE9QIFRUQ05fVEVTVENBU0UgVFRDTl9BQ1RJT05cIiArXG4gICAgXCIgVFRDTl9VU0VSIFRUQ05fRlVOQ1RJT04gVFRDTl9TVEFUSVNUSUNTXCIgK1xuICAgIFwiIFRUQ05fUEFSQUxMRUwgVFRDTl9NQVRDSElORyBUVENOX0RFQlVHXCIgK1xuICAgIFwiIEVYRUNVVE9SIEVSUk9SIFdBUk5JTkcgUE9SVEVWRU5UIFRJTUVST1BcIiArXG4gICAgXCIgVkVSRElDVE9QIERFRkFVTFRPUCBURVNUQ0FTRSBBQ1RJT04gVVNFUlwiICtcbiAgICBcIiBGVU5DVElPTiBTVEFUSVNUSUNTIFBBUkFMTEVMIE1BVENISU5HIERFQlVHXCIgK1xuICAgIFwiIExPR19BTEwgTE9HX05PVEhJTkcgQUNUSU9OX1VOUVVBTElGSUVEXCIgK1xuICAgIFwiIERFQlVHX0VOQ0RFQyBERUJVR19URVNUUE9SVFwiICtcbiAgICBcIiBERUJVR19VTlFVQUxJRklFRCBERUZBVUxUT1BfQUNUSVZBVEVcIiArXG4gICAgXCIgREVGQVVMVE9QX0RFQUNUSVZBVEUgREVGQVVMVE9QX0VYSVRcIiArXG4gICAgXCIgREVGQVVMVE9QX1VOUVVBTElGSUVEIEVSUk9SX1VOUVVBTElGSUVEXCIgK1xuICAgIFwiIEVYRUNVVE9SX0NPTVBPTkVOVCBFWEVDVVRPUl9DT05GSUdEQVRBXCIgK1xuICAgIFwiIEVYRUNVVE9SX0VYVENPTU1BTkQgRVhFQ1VUT1JfTE9HT1BUSU9OU1wiICtcbiAgICBcIiBFWEVDVVRPUl9SVU5USU1FIEVYRUNVVE9SX1VOUVVBTElGSUVEXCIgK1xuICAgIFwiIEZVTkNUSU9OX1JORCBGVU5DVElPTl9VTlFVQUxJRklFRFwiICtcbiAgICBcIiBNQVRDSElOR19ET05FIE1BVENISU5HX01DU1VDQ0VTU1wiICtcbiAgICBcIiBNQVRDSElOR19NQ1VOU1VDQyBNQVRDSElOR19NTVNVQ0NFU1NcIiArXG4gICAgXCIgTUFUQ0hJTkdfTU1VTlNVQ0MgTUFUQ0hJTkdfUENTVUNDRVNTXCIgK1xuICAgIFwiIE1BVENISU5HX1BDVU5TVUNDIE1BVENISU5HX1BNU1VDQ0VTU1wiICtcbiAgICBcIiBNQVRDSElOR19QTVVOU1VDQyBNQVRDSElOR19QUk9CTEVNXCIgK1xuICAgIFwiIE1BVENISU5HX1RJTUVPVVQgTUFUQ0hJTkdfVU5RVUFMSUZJRURcIiArXG4gICAgXCIgUEFSQUxMRUxfUE9SVENPTk4gUEFSQUxMRUxfUE9SVE1BUFwiICtcbiAgICBcIiBQQVJBTExFTF9QVEMgUEFSQUxMRUxfVU5RVUFMSUZJRURcIiArXG4gICAgXCIgUE9SVEVWRU5UX0RVQUxSRUNWIFBPUlRFVkVOVF9EVUFMU0VORFwiICtcbiAgICBcIiBQT1JURVZFTlRfTUNSRUNWIFBPUlRFVkVOVF9NQ1NFTkRcIiArXG4gICAgXCIgUE9SVEVWRU5UX01NUkVDViBQT1JURVZFTlRfTU1TRU5EXCIgK1xuICAgIFwiIFBPUlRFVkVOVF9NUVVFVUUgUE9SVEVWRU5UX1BDSU5cIiArXG4gICAgXCIgUE9SVEVWRU5UX1BDT1VUIFBPUlRFVkVOVF9QTUlOXCIgK1xuICAgIFwiIFBPUlRFVkVOVF9QTU9VVCBQT1JURVZFTlRfUFFVRVVFXCIgK1xuICAgIFwiIFBPUlRFVkVOVF9TVEFURSBQT1JURVZFTlRfVU5RVUFMSUZJRURcIiArXG4gICAgXCIgU1RBVElTVElDU19VTlFVQUxJRklFRCBTVEFUSVNUSUNTX1ZFUkRJQ1RcIiArXG4gICAgXCIgVEVTVENBU0VfRklOSVNIIFRFU1RDQVNFX1NUQVJUXCIgK1xuICAgIFwiIFRFU1RDQVNFX1VOUVVBTElGSUVEIFRJTUVST1BfR1VBUkRcIiArXG4gICAgXCIgVElNRVJPUF9SRUFEIFRJTUVST1BfU1RBUlQgVElNRVJPUF9TVE9QXCIgK1xuICAgIFwiIFRJTUVST1BfVElNRU9VVCBUSU1FUk9QX1VOUVVBTElGSUVEXCIgK1xuICAgIFwiIFVTRVJfVU5RVUFMSUZJRUQgVkVSRElDVE9QX0ZJTkFMXCIgK1xuICAgIFwiIFZFUkRJQ1RPUF9HRVRWRVJESUNUIFZFUkRJQ1RPUF9TRVRWRVJESUNUXCIgK1xuICAgIFwiIFZFUkRJQ1RPUF9VTlFVQUxJRklFRCBXQVJOSU5HX1VOUVVBTElGSUVEXCIpLFxuICAgIGV4dGVybmFsQ29tbWFuZHM6IHdvcmRzKFwiQmVnaW5Db250cm9sUGFydCBFbmRDb250cm9sUGFydCBCZWdpblRlc3RDYXNlXCIgK1xuICAgIFwiIEVuZFRlc3RDYXNlXCIpLFxuICAgIG11bHRpTGluZVN0cmluZ3M6IHRydWVcbiAgfSk7XG59KTsiLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInR1cnRsZVwiLCBmdW5jdGlvbihjb25maWcpIHtcbiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDtcbiAgdmFyIGN1clB1bmM7XG5cbiAgZnVuY3Rpb24gd29yZFJlZ2V4cCh3b3Jkcykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgd29yZHMuam9pbihcInxcIikgKyBcIikkXCIsIFwiaVwiKTtcbiAgfVxuICB2YXIgb3BzID0gd29yZFJlZ2V4cChbXSk7XG4gIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoW1wiQHByZWZpeFwiLCBcIkBiYXNlXCIsIFwiYVwiXSk7XG4gIHZhciBvcGVyYXRvckNoYXJzID0gL1sqK1xcLTw+PSZ8XS87XG5cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgIGN1clB1bmMgPSBudWxsO1xuICAgIGlmIChjaCA9PSBcIjxcIiAmJiAhc3RyZWFtLm1hdGNoKC9eW1xcc1xcdTAwYTA9XS8sIGZhbHNlKSkge1xuICAgICAgc3RyZWFtLm1hdGNoKC9eW15cXHNcXHUwMGEwPl0qPj8vKTtcbiAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2ggPT0gXCJcXFwiXCIgfHwgY2ggPT0gXCInXCIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5MaXRlcmFsKGNoKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoL1t7fVxcKFxcKSxcXC47XFxbXFxdXS8udGVzdChjaCkpIHtcbiAgICAgIGN1clB1bmMgPSBjaDtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChjaCA9PSBcIiNcIikge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChvcGVyYXRvckNoYXJzLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUob3BlcmF0b3JDaGFycyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2ggPT0gXCI6XCIpIHtcbiAgICAgICAgICByZXR1cm4gXCJvcGVyYXRvclwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bX1xcd1xcZF0vKTtcbiAgICAgIGlmKHN0cmVhbS5wZWVrKCkgPT0gXCI6XCIpIHtcbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGUtM1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7XG5cbiAgICAgICAgICAgICBpZihrZXl3b3Jkcy50ZXN0KHdvcmQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgaWYoY2ggPj0gXCJBXCIgJiYgY2ggPD0gXCJaXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgICBpZiAob3BzLnRlc3Qod29yZCkpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgZWxzZSBpZiAoa2V5d29yZHMudGVzdCh3b3JkKSlcbiAgICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuTGl0ZXJhbChxdW90ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBjaDtcbiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgdHlwZSwgY29sKSB7XG4gICAgc3RhdGUuY29udGV4dCA9IHtwcmV2OiBzdGF0ZS5jb250ZXh0LCBpbmRlbnQ6IHN0YXRlLmluZGVudCwgY29sOiBjb2wsIHR5cGU6IHR5cGV9O1xuICB9XG4gIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHtcbiAgICBzdGF0ZS5pbmRlbnQgPSBzdGF0ZS5jb250ZXh0LmluZGVudDtcbiAgICBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZSxcbiAgICAgICAgICAgICAgY29udGV4dDogbnVsbCxcbiAgICAgICAgICAgICAgaW5kZW50OiAwLFxuICAgICAgICAgICAgICBjb2w6IDB9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LmFsaWduID09IG51bGwpIHN0YXRlLmNvbnRleHQuYWxpZ24gPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG5cbiAgICAgIGlmIChzdHlsZSAhPSBcImNvbW1lbnRcIiAmJiBzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgIT0gXCJwYXR0ZXJuXCIpIHtcbiAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJQdW5jID09IFwiKFwiKSBwdXNoQ29udGV4dChzdGF0ZSwgXCIpXCIsIHN0cmVhbS5jb2x1bW4oKSk7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwiW1wiKSBwdXNoQ29udGV4dChzdGF0ZSwgXCJdXCIsIHN0cmVhbS5jb2x1bW4oKSk7XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IFwie1wiKSBwdXNoQ29udGV4dChzdGF0ZSwgXCJ9XCIsIHN0cmVhbS5jb2x1bW4oKSk7XG4gICAgICBlbHNlIGlmICgvW1xcXVxcfVxcKV0vLnRlc3QoY3VyUHVuYykpIHtcbiAgICAgICAgd2hpbGUgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC50eXBlID09IFwicGF0dGVyblwiKSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgICAgaWYgKHN0YXRlLmNvbnRleHQgJiYgY3VyUHVuYyA9PSBzdGF0ZS5jb250ZXh0LnR5cGUpIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBcIi5cIiAmJiBzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQudHlwZSA9PSBcInBhdHRlcm5cIikgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICBlbHNlIGlmICgvYXRvbXxzdHJpbmd8dmFyaWFibGUvLnRlc3Qoc3R5bGUpICYmIHN0YXRlLmNvbnRleHQpIHtcbiAgICAgICAgaWYgKC9bXFx9XFxdXS8udGVzdChzdGF0ZS5jb250ZXh0LnR5cGUpKVxuICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBcInBhdHRlcm5cIiwgc3RyZWFtLmNvbHVtbigpKTtcbiAgICAgICAgZWxzZSBpZiAoc3RhdGUuY29udGV4dC50eXBlID09IFwicGF0dGVyblwiICYmICFzdGF0ZS5jb250ZXh0LmFsaWduKSB7XG4gICAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7XG4gICAgICAgICAgc3RhdGUuY29udGV4dC5jb2wgPSBzdHJlYW0uY29sdW1uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTtcbiAgICAgIHZhciBjb250ZXh0ID0gc3RhdGUuY29udGV4dDtcbiAgICAgIGlmICgvW1xcXVxcfV0vLnRlc3QoZmlyc3RDaGFyKSlcbiAgICAgICAgd2hpbGUgKGNvbnRleHQgJiYgY29udGV4dC50eXBlID09IFwicGF0dGVyblwiKSBjb250ZXh0ID0gY29udGV4dC5wcmV2O1xuXG4gICAgICB2YXIgY2xvc2luZyA9IGNvbnRleHQgJiYgZmlyc3RDaGFyID09IGNvbnRleHQudHlwZTtcbiAgICAgIGlmICghY29udGV4dClcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT0gXCJwYXR0ZXJuXCIpXG4gICAgICAgIHJldHVybiBjb250ZXh0LmNvbDtcbiAgICAgIGVsc2UgaWYgKGNvbnRleHQuYWxpZ24pXG4gICAgICAgIHJldHVybiBjb250ZXh0LmNvbCArIChjbG9zaW5nID8gMCA6IDEpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gY29udGV4dC5pbmRlbnQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KTtcbiAgICB9LFxuXG4gICAgbGluZUNvbW1lbnQ6IFwiI1wiXG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC90dXJ0bGVcIiwgXCJ0dXJ0bGVcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSwgIHJlcXVpcmUoXCIuLi8uLi9hZGRvbi9tb2RlL211bHRpcGxleFwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4uLy4uL2FkZG9uL21vZGUvbXVsdGlwbGV4XCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJ0d2lnOmlubmVyXCIsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXl3b3JkcyA9IFtcImFuZFwiLCBcImFzXCIsIFwiYXV0b2VzY2FwZVwiLCBcImVuZGF1dG9lc2NhcGVcIiwgXCJibG9ja1wiLCBcImRvXCIsIFwiZW5kYmxvY2tcIiwgXCJlbHNlXCIsIFwiZWxzZWlmXCIsIFwiZXh0ZW5kc1wiLCBcImZvclwiLCBcImVuZGZvclwiLCBcImVtYmVkXCIsIFwiZW5kZW1iZWRcIiwgXCJmaWx0ZXJcIiwgXCJlbmRmaWx0ZXJcIiwgXCJmbHVzaFwiLCBcImZyb21cIiwgXCJpZlwiLCBcImVuZGlmXCIsIFwiaW5cIiwgXCJpc1wiLCBcImluY2x1ZGVcIiwgXCJpbXBvcnRcIiwgXCJub3RcIiwgXCJvclwiLCBcInNldFwiLCBcInNwYWNlbGVzc1wiLCBcImVuZHNwYWNlbGVzc1wiLCBcIndpdGhcIiwgXCJlbmR3aXRoXCIsIFwidHJhbnNcIiwgXCJlbmR0cmFuc1wiLCBcImJsb2NrdHJhbnNcIiwgXCJlbmRibG9ja3RyYW5zXCIsIFwibWFjcm9cIiwgXCJlbmRtYWNyb1wiLCBcInVzZVwiLCBcInZlcmJhdGltXCIsIFwiZW5kdmVyYmF0aW1cIl0sXG4gICAgICAgIG9wZXJhdG9yID0gL15bK1xcLSomJT08PiE/fH5eXS8sXG4gICAgICAgIHNpZ24gPSAvXls6XFxbXFwoXFx7XS8sXG4gICAgICAgIGF0b20gPSBbXCJ0cnVlXCIsIFwiZmFsc2VcIiwgXCJudWxsXCIsIFwiZW1wdHlcIiwgXCJkZWZpbmVkXCIsIFwiZGl2aXNpYmxlYnlcIiwgXCJkaXZpc2libGUgYnlcIiwgXCJldmVuXCIsIFwib2RkXCIsIFwiaXRlcmFibGVcIiwgXCJzYW1lYXNcIiwgXCJzYW1lIGFzXCJdLFxuICAgICAgICBudW1iZXIgPSAvXihcXGRbK1xcLVxcKlxcL10pP1xcZCsoXFwuXFxkKyk/LztcblxuICAgIGtleXdvcmRzID0gbmV3IFJlZ0V4cChcIigoXCIgKyBrZXl3b3Jkcy5qb2luKFwiKXwoXCIpICsgXCIpKVxcXFxiXCIpO1xuICAgIGF0b20gPSBuZXcgUmVnRXhwKFwiKChcIiArIGF0b20uam9pbihcIil8KFwiKSArIFwiKSlcXFxcYlwiKTtcblxuICAgIGZ1bmN0aW9uIHRva2VuQmFzZSAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTtcblxuICAgICAgLy9Db21tZW50XG4gICAgICBpZiAoc3RhdGUuaW5jb21tZW50KSB7XG4gICAgICAgIGlmICghc3RyZWFtLnNraXBUbyhcIiN9XCIpKSB7XG4gICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXFwjfH0vKTtcbiAgICAgICAgICBzdGF0ZS5pbmNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAvL1RhZ1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5pbnRhZykge1xuICAgICAgICAvL0FmdGVyIG9wZXJhdG9yXG4gICAgICAgIGlmIChzdGF0ZS5vcGVyYXRvcikge1xuICAgICAgICAgIHN0YXRlLm9wZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChhdG9tKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL0FmdGVyIHNpZ25cbiAgICAgICAgaWYgKHN0YXRlLnNpZ24pIHtcbiAgICAgICAgICBzdGF0ZS5zaWduID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChhdG9tKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiYXRvbVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZS5pbnN0cmluZykge1xuICAgICAgICAgIGlmIChjaCA9PSBzdGF0ZS5pbnN0cmluZykge1xuICAgICAgICAgICAgc3RhdGUuaW5zdHJpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PSBcIidcIiB8fCBjaCA9PSAnXCInKSB7XG4gICAgICAgICAgc3RhdGUuaW5zdHJpbmcgPSBjaDtcbiAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChzdGF0ZS5pbnRhZyArIFwifVwiKSB8fCBzdHJlYW0uZWF0KFwiLVwiKSAmJiBzdHJlYW0ubWF0Y2goc3RhdGUuaW50YWcgKyBcIn1cIikpIHtcbiAgICAgICAgICBzdGF0ZS5pbnRhZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBcInRhZ1wiO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChvcGVyYXRvcikpIHtcbiAgICAgICAgICBzdGF0ZS5vcGVyYXRvciA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goc2lnbikpIHtcbiAgICAgICAgICBzdGF0ZS5zaWduID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLmVhdChcIiBcIikgfHwgc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzKSkge1xuICAgICAgICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGF0b20pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2gobnVtYmVyKSkge1xuICAgICAgICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KFwie1wiKSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIiNcIikpIHtcbiAgICAgICAgICBzdGF0ZS5pbmNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgIGlmICghc3RyZWFtLnNraXBUbyhcIiN9XCIpKSB7XG4gICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXFwjfH0vKTtcbiAgICAgICAgICAgIHN0YXRlLmluY29tbWVudCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAgIC8vT3BlbiB0YWdcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9IHN0cmVhbS5lYXQoL1xce3wlLykpIHtcbiAgICAgICAgICAvL0NhY2hlIGNsb3NlIHRhZ1xuICAgICAgICAgIHN0YXRlLmludGFnID0gY2g7XG4gICAgICAgICAgaWYgKGNoID09IFwie1wiKSB7XG4gICAgICAgICAgICBzdGF0ZS5pbnRhZyA9IFwifVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdHJlYW0uZWF0KFwiLVwiKTtcbiAgICAgICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSxcbiAgICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcInR3aWdcIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHtcbiAgICB2YXIgdHdpZ0lubmVyID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJ0d2lnOmlubmVyXCIpO1xuICAgIGlmICghcGFyc2VyQ29uZmlnIHx8ICFwYXJzZXJDb25maWcuYmFzZSkgcmV0dXJuIHR3aWdJbm5lcjtcbiAgICByZXR1cm4gQ29kZU1pcnJvci5tdWx0aXBsZXhpbmdNb2RlKFxuICAgICAgQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgcGFyc2VyQ29uZmlnLmJhc2UpLCB7XG4gICAgICAgIG9wZW46IC9cXHtbeyMlXS8sIGNsb3NlOiAvW30jJV1cXH0vLCBtb2RlOiB0d2lnSW5uZXIsIHBhcnNlRGVsaW1pdGVyczogdHJ1ZVxuICAgICAgfVxuICAgICk7XG4gIH0pO1xuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtdHdpZ1wiLCBcInR3aWdcIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwidmJcIiwgZnVuY3Rpb24oY29uZiwgcGFyc2VyQ29uZikge1xuICAgIHZhciBFUlJPUkNMQVNTID0gJ2Vycm9yJztcblxuICAgIGZ1bmN0aW9uIHdvcmRSZWdleHAod29yZHMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKChcIiArIHdvcmRzLmpvaW4oXCIpfChcIikgKyBcIikpXFxcXGJcIiwgXCJpXCIpO1xuICAgIH1cblxuICAgIHZhciBzaW5nbGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKFwiXltcXFxcK1xcXFwtXFxcXCovJSZcXFxcXFxcXHxcXFxcXn48PiFdXCIpO1xuICAgIHZhciBzaW5nbGVEZWxpbWl0ZXJzID0gbmV3IFJlZ0V4cCgnXltcXFxcKFxcXFwpXFxcXFtcXFxcXVxcXFx7XFxcXH1ALDpgPTtcXFxcLl0nKTtcbiAgICB2YXIgZG91YmxlT3BlcmF0b3JzID0gbmV3IFJlZ0V4cChcIl4oKD09KXwoPD4pfCg8PSl8KD49KXwoPD4pfCg8PCl8KD4+KXwoLy8pfChcXFxcKlxcXFwqKSlcIik7XG4gICAgdmFyIGRvdWJsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKFwiXigoXFxcXCs9KXwoXFxcXC09KXwoXFxcXCo9KXwoJT0pfCgvPSl8KCY9KXwoXFxcXHw9KXwoXFxcXF49KSlcIik7XG4gICAgdmFyIHRyaXBsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKFwiXigoLy89KXwoPj49KXwoPDw9KXwoXFxcXCpcXFxcKj0pKVwiKTtcbiAgICB2YXIgaWRlbnRpZmllcnMgPSBuZXcgUmVnRXhwKFwiXltfQS1aYS16XVtfQS1aYS16MC05XSpcIik7XG5cbiAgICB2YXIgb3BlbmluZ0tleXdvcmRzID0gWydjbGFzcycsJ21vZHVsZScsICdzdWInLCdlbnVtJywnc2VsZWN0Jywnd2hpbGUnLCdpZicsJ2Z1bmN0aW9uJywgJ2dldCcsJ3NldCcsJ3Byb3BlcnR5JywgJ3RyeScsICdzdHJ1Y3R1cmUnLCAnc3luY2xvY2snLCAndXNpbmcnLCAnd2l0aCddO1xuICAgIHZhciBtaWRkbGVLZXl3b3JkcyA9IFsnZWxzZScsJ2Vsc2VpZicsJ2Nhc2UnLCAnY2F0Y2gnLCAnZmluYWxseSddO1xuICAgIHZhciBlbmRLZXl3b3JkcyA9IFsnbmV4dCcsJ2xvb3AnXTtcblxuICAgIHZhciBvcGVyYXRvcktleXdvcmRzID0gWydhbmQnLCBcImFuZGFsc29cIiwgJ29yJywgJ29yZWxzZScsICd4b3InLCAnaW4nLCAnbm90JywgJ2lzJywgJ2lzbm90JywgJ2xpa2UnXTtcbiAgICB2YXIgd29yZE9wZXJhdG9ycyA9IHdvcmRSZWdleHAob3BlcmF0b3JLZXl3b3Jkcyk7XG5cbiAgICB2YXIgY29tbW9uS2V5d29yZHMgPSBbXCIjY29uc3RcIiwgXCIjZWxzZVwiLCBcIiNlbHNlaWZcIiwgXCIjZW5kXCIsIFwiI2lmXCIsIFwiI3JlZ2lvblwiLCBcImFkZGhhbmRsZXJcIiwgXCJhZGRyZXNzb2ZcIiwgXCJhbGlhc1wiLCBcImFzXCIsIFwiYnlyZWZcIiwgXCJieXZhbFwiLCBcImNib29sXCIsIFwiY2J5dGVcIiwgXCJjY2hhclwiLCBcImNkYXRlXCIsIFwiY2RibFwiLCBcImNkZWNcIiwgXCJjaW50XCIsIFwiY2xuZ1wiLCBcImNvYmpcIiwgXCJjb21wYXJlXCIsIFwiY29uc3RcIiwgXCJjb250aW51ZVwiLCBcImNzYnl0ZVwiLCBcImNzaG9ydFwiLCBcImNzbmdcIiwgXCJjc3RyXCIsIFwiY3VpbnRcIiwgXCJjdWxuZ1wiLCBcImN1c2hvcnRcIiwgXCJkZWNsYXJlXCIsIFwiZGVmYXVsdFwiLCBcImRlbGVnYXRlXCIsIFwiZGltXCIsIFwiZGlyZWN0Y2FzdFwiLCBcImVhY2hcIiwgXCJlcmFzZVwiLCBcImVycm9yXCIsIFwiZXZlbnRcIiwgXCJleGl0XCIsIFwiZXhwbGljaXRcIiwgXCJmYWxzZVwiLCBcImZvclwiLCBcImZyaWVuZFwiLCBcImdldHR5cGVcIiwgXCJnb3RvXCIsIFwiaGFuZGxlc1wiLCBcImltcGxlbWVudHNcIiwgXCJpbXBvcnRzXCIsIFwiaW5mZXJcIiwgXCJpbmhlcml0c1wiLCBcImludGVyZmFjZVwiLCBcImlzZmFsc2VcIiwgXCJpc3RydWVcIiwgXCJsaWJcIiwgXCJtZVwiLCBcIm1vZFwiLCBcIm11c3Rpbmhlcml0XCIsIFwibXVzdG92ZXJyaWRlXCIsIFwibXlcIiwgXCJteWJhc2VcIiwgXCJteWNsYXNzXCIsIFwibmFtZXNwYWNlXCIsIFwibmFycm93aW5nXCIsIFwibmV3XCIsIFwibm90aGluZ1wiLCBcIm5vdGluaGVyaXRhYmxlXCIsIFwibm90b3ZlcnJpZGFibGVcIiwgXCJvZlwiLCBcIm9mZlwiLCBcIm9uXCIsIFwib3BlcmF0b3JcIiwgXCJvcHRpb25cIiwgXCJvcHRpb25hbFwiLCBcIm91dFwiLCBcIm92ZXJsb2Fkc1wiLCBcIm92ZXJyaWRhYmxlXCIsIFwib3ZlcnJpZGVzXCIsIFwicGFyYW1hcnJheVwiLCBcInBhcnRpYWxcIiwgXCJwcml2YXRlXCIsIFwicHJvdGVjdGVkXCIsIFwicHVibGljXCIsIFwicmFpc2VldmVudFwiLCBcInJlYWRvbmx5XCIsIFwicmVkaW1cIiwgXCJyZW1vdmVoYW5kbGVyXCIsIFwicmVzdW1lXCIsIFwicmV0dXJuXCIsIFwic2hhZG93c1wiLCBcInNoYXJlZFwiLCBcInN0YXRpY1wiLCBcInN0ZXBcIiwgXCJzdG9wXCIsIFwic3RyaWN0XCIsIFwidGhlblwiLCBcInRocm93XCIsIFwidG9cIiwgXCJ0cnVlXCIsIFwidHJ5Y2FzdFwiLCBcInR5cGVvZlwiLCBcInVudGlsXCIsIFwidW50aWxcIiwgXCJ3aGVuXCIsIFwid2lkZW5pbmdcIiwgXCJ3aXRoZXZlbnRzXCIsIFwid3JpdGVvbmx5XCJdO1xuXG4gICAgdmFyIGNvbW1vbnR5cGVzID0gWydvYmplY3QnLCAnYm9vbGVhbicsICdjaGFyJywgJ3N0cmluZycsICdieXRlJywgJ3NieXRlJywgJ3Nob3J0JywgJ3VzaG9ydCcsICdpbnQxNicsICd1aW50MTYnLCAnaW50ZWdlcicsICd1aW50ZWdlcicsICdpbnQzMicsICd1aW50MzInLCAnbG9uZycsICd1bG9uZycsICdpbnQ2NCcsICd1aW50NjQnLCAnZGVjaW1hbCcsICdzaW5nbGUnLCAnZG91YmxlJywgJ2Zsb2F0JywgJ2RhdGUnLCAnZGF0ZXRpbWUnLCAnaW50cHRyJywgJ3VpbnRwdHInXTtcblxuICAgIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoY29tbW9uS2V5d29yZHMpO1xuICAgIHZhciB0eXBlcyA9IHdvcmRSZWdleHAoY29tbW9udHlwZXMpO1xuICAgIHZhciBzdHJpbmdQcmVmaXhlcyA9ICdcIic7XG5cbiAgICB2YXIgb3BlbmluZyA9IHdvcmRSZWdleHAob3BlbmluZ0tleXdvcmRzKTtcbiAgICB2YXIgbWlkZGxlID0gd29yZFJlZ2V4cChtaWRkbGVLZXl3b3Jkcyk7XG4gICAgdmFyIGNsb3NpbmcgPSB3b3JkUmVnZXhwKGVuZEtleXdvcmRzKTtcbiAgICB2YXIgZG91YmxlQ2xvc2luZyA9IHdvcmRSZWdleHAoWydlbmQnXSk7XG4gICAgdmFyIGRvT3BlbmluZyA9IHdvcmRSZWdleHAoWydkbyddKTtcblxuICAgIHZhciBpbmRlbnRJbmZvID0gbnVsbDtcblxuICAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJoaW50V29yZHNcIiwgXCJ2YlwiLCBvcGVuaW5nS2V5d29yZHMuY29uY2F0KG1pZGRsZUtleXdvcmRzKS5jb25jYXQoZW5kS2V5d29yZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQob3BlcmF0b3JLZXl3b3JkcykuY29uY2F0KGNvbW1vbktleXdvcmRzKS5jb25jYXQoY29tbW9udHlwZXMpKTtcblxuICAgIGZ1bmN0aW9uIGluZGVudChfc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgc3RhdGUuY3VycmVudEluZGVudCsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZGVudChfc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgc3RhdGUuY3VycmVudEluZGVudC0tO1xuICAgIH1cbiAgICAvLyB0b2tlbml6ZXJzXG4gICAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7XG5cbiAgICAgICAgLy8gSGFuZGxlIENvbW1lbnRzXG4gICAgICAgIGlmIChjaCA9PT0gXCInXCIpIHtcbiAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgICAgIHJldHVybiAnY29tbWVudCc7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIEhhbmRsZSBOdW1iZXIgTGl0ZXJhbHNcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXigoJkgpfCgmTykpP1swLTlcXC5hLWZdL2ksIGZhbHNlKSkge1xuICAgICAgICAgICAgdmFyIGZsb2F0TGl0ZXJhbCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gRmxvYXRzXG4gICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFxkKlxcLlxcZCtGPy9pKSkgeyBmbG9hdExpdGVyYWwgPSB0cnVlOyB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15cXGQrXFwuXFxkKkY/LykpIHsgZmxvYXRMaXRlcmFsID0gdHJ1ZTsgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eXFwuXFxkK0Y/LykpIHsgZmxvYXRMaXRlcmFsID0gdHJ1ZTsgfVxuXG4gICAgICAgICAgICBpZiAoZmxvYXRMaXRlcmFsKSB7XG4gICAgICAgICAgICAgICAgLy8gRmxvYXQgbGl0ZXJhbHMgbWF5IGJlIFwiaW1hZ2luYXJ5XCJcbiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9KL2kpO1xuICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEludGVnZXJzXG4gICAgICAgICAgICB2YXIgaW50TGl0ZXJhbCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gSGV4XG4gICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eJkhbMC05YS1mXSsvaSkpIHsgaW50TGl0ZXJhbCA9IHRydWU7IH1cbiAgICAgICAgICAgIC8vIE9jdGFsXG4gICAgICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL14mT1swLTddKy9pKSkgeyBpbnRMaXRlcmFsID0gdHJ1ZTsgfVxuICAgICAgICAgICAgLy8gRGVjaW1hbFxuICAgICAgICAgICAgZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eWzEtOV1cXGQqRj8vKSkge1xuICAgICAgICAgICAgICAgIC8vIERlY2ltYWwgbGl0ZXJhbHMgbWF5IGJlIFwiaW1hZ2luYXJ5XCJcbiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9KL2kpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gLSBDYW4geW91IGhhdmUgaW1hZ2luYXJ5IGxvbmdzP1xuICAgICAgICAgICAgICAgIGludExpdGVyYWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gWmVybyBieSBpdHNlbGYgd2l0aCBubyBvdGhlciBwaWVjZSBvZiBudW1iZXIuXG4gICAgICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL14wKD8hW1xcZHhdKS9pKSkgeyBpbnRMaXRlcmFsID0gdHJ1ZTsgfVxuICAgICAgICAgICAgaWYgKGludExpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyIGxpdGVyYWxzIG1heSBiZSBcImxvbmdcIlxuICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoL0wvaSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIFN0cmluZ3NcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChzdHJpbmdQcmVmaXhlcykpIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmdGYWN0b3J5KHN0cmVhbS5jdXJyZW50KCkpO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIG9wZXJhdG9ycyBhbmQgRGVsaW1pdGVyc1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRyaXBsZURlbGltaXRlcnMpIHx8IHN0cmVhbS5tYXRjaChkb3VibGVEZWxpbWl0ZXJzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChkb3VibGVPcGVyYXRvcnMpXG4gICAgICAgICAgICB8fCBzdHJlYW0ubWF0Y2goc2luZ2xlT3BlcmF0b3JzKVxuICAgICAgICAgICAgfHwgc3RyZWFtLm1hdGNoKHdvcmRPcGVyYXRvcnMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ29wZXJhdG9yJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHNpbmdsZURlbGltaXRlcnMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGRvT3BlbmluZykpIHtcbiAgICAgICAgICAgIGluZGVudChzdHJlYW0sc3RhdGUpO1xuICAgICAgICAgICAgc3RhdGUuZG9JbkN1cnJlbnRMaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChvcGVuaW5nKSkge1xuICAgICAgICAgICAgaWYgKCEgc3RhdGUuZG9JbkN1cnJlbnRMaW5lKVxuICAgICAgICAgICAgICBpbmRlbnQoc3RyZWFtLHN0YXRlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgc3RhdGUuZG9JbkN1cnJlbnRMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gJ2tleXdvcmQnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2gobWlkZGxlKSkge1xuICAgICAgICAgICAgcmV0dXJuICdrZXl3b3JkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goZG91YmxlQ2xvc2luZykpIHtcbiAgICAgICAgICAgIGRlZGVudChzdHJlYW0sc3RhdGUpO1xuICAgICAgICAgICAgZGVkZW50KHN0cmVhbSxzdGF0ZSk7XG4gICAgICAgICAgICByZXR1cm4gJ2tleXdvcmQnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goY2xvc2luZykpIHtcbiAgICAgICAgICAgIGRlZGVudChzdHJlYW0sc3RhdGUpO1xuICAgICAgICAgICAgcmV0dXJuICdrZXl3b3JkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2godHlwZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2tleXdvcmQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChrZXl3b3JkcykpIHtcbiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGlkZW50aWZpZXJzKSkge1xuICAgICAgICAgICAgcmV0dXJuICd2YXJpYWJsZSc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgbm9uLWRldGVjdGVkIGl0ZW1zXG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHJldHVybiBFUlJPUkNMQVNTO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRva2VuU3RyaW5nRmFjdG9yeShkZWxpbWl0ZXIpIHtcbiAgICAgICAgdmFyIHNpbmdsZWxpbmUgPSBkZWxpbWl0ZXIubGVuZ3RoID09IDE7XG4gICAgICAgIHZhciBPVVRDTEFTUyA9ICdzdHJpbmcnO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14nXCJdLyk7XG4gICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChkZWxpbWl0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT1VUQ0xBU1M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdCgvWydcIl0vKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2luZ2xlbGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZXJDb25mLnNpbmdsZUxpbmVTdHJpbmdFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE9VVENMQVNTO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gdG9rZW5MZXhlcihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB2YXIgY3VycmVudCA9IHN0cmVhbS5jdXJyZW50KCk7XG5cbiAgICAgICAgLy8gSGFuZGxlICcuJyBjb25uZWN0ZWQgaWRlbnRpZmllcnNcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICcuJykge1xuICAgICAgICAgICAgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgICAgIGlmIChzdHlsZSA9PT0gJ3ZhcmlhYmxlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiAndmFyaWFibGUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgdmFyIGRlbGltaXRlcl9pbmRleCA9ICdbKHsnLmluZGV4T2YoY3VycmVudCk7XG4gICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBpbmRlbnQoc3RyZWFtLCBzdGF0ZSApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRlbnRJbmZvID09PSAnZGVkZW50Jykge1xuICAgICAgICAgICAgaWYgKGRlZGVudChzdHJlYW0sIHN0YXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlbGltaXRlcl9pbmRleCA9ICddKX0nLmluZGV4T2YoY3VycmVudCk7XG4gICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAoZGVkZW50KHN0cmVhbSwgc3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuXG4gICAgdmFyIGV4dGVybmFsID0ge1xuICAgICAgICBlbGVjdHJpY0NoYXJzOlwiZERwUHRUZkZlRSBcIixcbiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLFxuICAgICAgICAgICAgICBsYXN0VG9rZW46IG51bGwsXG4gICAgICAgICAgICAgIGN1cnJlbnRJbmRlbnQ6IDAsXG4gICAgICAgICAgICAgIG5leHRMaW5lSW5kZW50OiAwLFxuICAgICAgICAgICAgICBkb0luQ3VycmVudExpbmU6IGZhbHNlXG5cblxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgICAgICAgc3RhdGUuY3VycmVudEluZGVudCArPSBzdGF0ZS5uZXh0TGluZUluZGVudDtcbiAgICAgICAgICAgICAgc3RhdGUubmV4dExpbmVJbmRlbnQgPSAwO1xuICAgICAgICAgICAgICBzdGF0ZS5kb0luQ3VycmVudExpbmUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHN0eWxlID0gdG9rZW5MZXhlcihzdHJlYW0sIHN0YXRlKTtcblxuICAgICAgICAgICAgc3RhdGUubGFzdFRva2VuID0ge3N0eWxlOnN0eWxlLCBjb250ZW50OiBzdHJlYW0uY3VycmVudCgpfTtcblxuXG5cbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSxcblxuICAgICAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgICAgICAgIHZhciB0cnVlVGV4dCA9IHRleHRBZnRlci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJykgO1xuICAgICAgICAgICAgaWYgKHRydWVUZXh0Lm1hdGNoKGNsb3NpbmcpIHx8IHRydWVUZXh0Lm1hdGNoKGRvdWJsZUNsb3NpbmcpIHx8IHRydWVUZXh0Lm1hdGNoKG1pZGRsZSkpIHJldHVybiBjb25mLmluZGVudFVuaXQqKHN0YXRlLmN1cnJlbnRJbmRlbnQtMSk7XG4gICAgICAgICAgICBpZihzdGF0ZS5jdXJyZW50SW5kZW50IDwgMCkgcmV0dXJuIDA7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuY3VycmVudEluZGVudCAqIGNvbmYuaW5kZW50VW5pdDtcbiAgICAgICAgfSxcblxuICAgICAgICBsaW5lQ29tbWVudDogXCInXCJcbiAgICB9O1xuICAgIHJldHVybiBleHRlcm5hbDtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtdmJcIiwgXCJ2YlwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vKlxuRm9yIGV4dHJhIEFTUCBjbGFzc2ljIG9iamVjdHMsIGluaXRpYWxpemUgQ29kZU1pcnJvciBpbnN0YW5jZSB3aXRoIHRoaXMgb3B0aW9uOlxuICAgIGlzQVNQOiB0cnVlXG5cbkUuRy46XG4gICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29kZVwiKSwge1xuICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcbiAgICAgICAgaXNBU1A6IHRydWVcbiAgICAgIH0pO1xuKi9cblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJ2YnNjcmlwdFwiLCBmdW5jdGlvbihjb25mLCBwYXJzZXJDb25mKSB7XG4gICAgdmFyIEVSUk9SQ0xBU1MgPSAnZXJyb3InO1xuXG4gICAgZnVuY3Rpb24gd29yZFJlZ2V4cCh3b3Jkcykge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oKFwiICsgd29yZHMuam9pbihcIil8KFwiKSArIFwiKSlcXFxcYlwiLCBcImlcIik7XG4gICAgfVxuXG4gICAgdmFyIHNpbmdsZU9wZXJhdG9ycyA9IG5ldyBSZWdFeHAoXCJeW1xcXFwrXFxcXC1cXFxcKi8mXFxcXFxcXFxcXFxcXjw+PV1cIik7XG4gICAgdmFyIGRvdWJsZU9wZXJhdG9ycyA9IG5ldyBSZWdFeHAoXCJeKCg8Pil8KDw9KXwoPj0pKVwiKTtcbiAgICB2YXIgc2luZ2xlRGVsaW1pdGVycyA9IG5ldyBSZWdFeHAoJ15bXFxcXC4sXScpO1xuICAgIHZhciBicmFrZXRzID0gbmV3IFJlZ0V4cCgnXltcXFxcKFxcXFwpXScpO1xuICAgIHZhciBpZGVudGlmaWVycyA9IG5ldyBSZWdFeHAoXCJeW0EtWmEtel1bX0EtWmEtejAtOV0qXCIpO1xuXG4gICAgdmFyIG9wZW5pbmdLZXl3b3JkcyA9IFsnY2xhc3MnLCdzdWInLCdzZWxlY3QnLCd3aGlsZScsJ2lmJywnZnVuY3Rpb24nLCAncHJvcGVydHknLCAnd2l0aCcsICdmb3InXTtcbiAgICB2YXIgbWlkZGxlS2V5d29yZHMgPSBbJ2Vsc2UnLCdlbHNlaWYnLCdjYXNlJ107XG4gICAgdmFyIGVuZEtleXdvcmRzID0gWyduZXh0JywnbG9vcCcsJ3dlbmQnXTtcblxuICAgIHZhciB3b3JkT3BlcmF0b3JzID0gd29yZFJlZ2V4cChbJ2FuZCcsICdvcicsICdub3QnLCAneG9yJywgJ2lzJywgJ21vZCcsICdlcXYnLCAnaW1wJ10pO1xuICAgIHZhciBjb21tb25rZXl3b3JkcyA9IFsnZGltJywgJ3JlZGltJywgJ3RoZW4nLCAgJ3VudGlsJywgJ3JhbmRvbWl6ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdieXZhbCcsJ2J5cmVmJywnbmV3JywncHJvcGVydHknLCAnZXhpdCcsICdpbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdjb25zdCcsJ3ByaXZhdGUnLCAncHVibGljJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldCcsJ3NldCcsJ2xldCcsICdzdG9wJywgJ29uIGVycm9yIHJlc3VtZSBuZXh0JywgJ29uIGVycm9yIGdvdG8gMCcsICdvcHRpb24gZXhwbGljaXQnLCAnY2FsbCcsICdtZSddO1xuXG4gICAgLy9UaGlzIGxpc3Qgd2FzIGZyb206IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9mOHRiYzc5eCh2PXZzLjg0KS5hc3B4XG4gICAgdmFyIGF0b21Xb3JkcyA9IFsndHJ1ZScsICdmYWxzZScsICdub3RoaW5nJywgJ2VtcHR5JywgJ251bGwnXTtcbiAgICAvL1RoaXMgbGlzdCB3YXMgZnJvbTogaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzNjYTh0ZmVrKHY9dnMuODQpLmFzcHhcbiAgICB2YXIgYnVpbHRpbkZ1bmNzV29yZHMgPSBbJ2FicycsICdhcnJheScsICdhc2MnLCAnYXRuJywgJ2Nib29sJywgJ2NieXRlJywgJ2NjdXInLCAnY2RhdGUnLCAnY2RibCcsICdjaHInLCAnY2ludCcsICdjbG5nJywgJ2NvcycsICdjc25nJywgJ2NzdHInLCAnZGF0ZScsICdkYXRlYWRkJywgJ2RhdGVkaWZmJywgJ2RhdGVwYXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdkYXRlc2VyaWFsJywgJ2RhdGV2YWx1ZScsICdkYXknLCAnZXNjYXBlJywgJ2V2YWwnLCAnZXhlY3V0ZScsICdleHAnLCAnZmlsdGVyJywgJ2Zvcm1hdGN1cnJlbmN5JywgJ2Zvcm1hdGRhdGV0aW1lJywgJ2Zvcm1hdG51bWJlcicsICdmb3JtYXRwZXJjZW50JywgJ2dldGxvY2FsZScsICdnZXRvYmplY3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldHJlZicsICdoZXgnLCAnaG91cicsICdpbnB1dGJveCcsICdpbnN0cicsICdpbnN0cnJldicsICdpbnQnLCAnZml4JywgJ2lzYXJyYXknLCAnaXNkYXRlJywgJ2lzZW1wdHknLCAnaXNudWxsJywgJ2lzbnVtZXJpYycsICdpc29iamVjdCcsICdqb2luJywgJ2xib3VuZCcsICdsY2FzZScsICdsZWZ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdsZW4nLCAnbG9hZHBpY3R1cmUnLCAnbG9nJywgJ2x0cmltJywgJ3J0cmltJywgJ3RyaW0nLCAnbWF0aHMnLCAnbWlkJywgJ21pbnV0ZScsICdtb250aCcsICdtb250aG5hbWUnLCAnbXNnYm94JywgJ25vdycsICdvY3QnLCAncmVwbGFjZScsICdyZ2InLCAncmlnaHQnLCAncm5kJywgJ3JvdW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzY3JpcHRlbmdpbmUnLCAnc2NyaXB0ZW5naW5lYnVpbGR2ZXJzaW9uJywgJ3NjcmlwdGVuZ2luZW1ham9ydmVyc2lvbicsICdzY3JpcHRlbmdpbmVtaW5vcnZlcnNpb24nLCAnc2Vjb25kJywgJ3NldGxvY2FsZScsICdzZ24nLCAnc2luJywgJ3NwYWNlJywgJ3NwbGl0JywgJ3NxcicsICdzdHJjb21wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcnLCAnc3RycmV2ZXJzZScsICd0YW4nLCAndGltZScsICd0aW1lcicsICd0aW1lc2VyaWFsJywgJ3RpbWV2YWx1ZScsICd0eXBlbmFtZScsICd1Ym91bmQnLCAndWNhc2UnLCAndW5lc2NhcGUnLCAndmFydHlwZScsICd3ZWVrZGF5JywgJ3dlZWtkYXluYW1lJywgJ3llYXInXTtcblxuICAgIC8vVGhpcyBsaXN0IHdhcyBmcm9tOiBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveWR6NGNmazModj12cy44NCkuYXNweFxuICAgIHZhciBidWlsdGluQ29uc3RzID0gWyd2YkJsYWNrJywgJ3ZiUmVkJywgJ3ZiR3JlZW4nLCAndmJZZWxsb3cnLCAndmJCbHVlJywgJ3ZiTWFnZW50YScsICd2YkN5YW4nLCAndmJXaGl0ZScsICd2YkJpbmFyeUNvbXBhcmUnLCAndmJUZXh0Q29tcGFyZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3ZiU3VuZGF5JywgJ3ZiTW9uZGF5JywgJ3ZiVHVlc2RheScsICd2YldlZG5lc2RheScsICd2YlRodXJzZGF5JywgJ3ZiRnJpZGF5JywgJ3ZiU2F0dXJkYXknLCAndmJVc2VTeXN0ZW1EYXlPZldlZWsnLCAndmJGaXJzdEphbjEnLCAndmJGaXJzdEZvdXJEYXlzJywgJ3ZiRmlyc3RGdWxsV2VlaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3ZiR2VuZXJhbERhdGUnLCAndmJMb25nRGF0ZScsICd2YlNob3J0RGF0ZScsICd2YkxvbmdUaW1lJywgJ3ZiU2hvcnRUaW1lJywgJ3ZiT2JqZWN0RXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICd2Yk9LT25seScsICd2Yk9LQ2FuY2VsJywgJ3ZiQWJvcnRSZXRyeUlnbm9yZScsICd2Ylllc05vQ2FuY2VsJywgJ3ZiWWVzTm8nLCAndmJSZXRyeUNhbmNlbCcsICd2YkNyaXRpY2FsJywgJ3ZiUXVlc3Rpb24nLCAndmJFeGNsYW1hdGlvbicsICd2YkluZm9ybWF0aW9uJywgJ3ZiRGVmYXVsdEJ1dHRvbjEnLCAndmJEZWZhdWx0QnV0dG9uMicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3ZiRGVmYXVsdEJ1dHRvbjMnLCAndmJEZWZhdWx0QnV0dG9uNCcsICd2YkFwcGxpY2F0aW9uTW9kYWwnLCAndmJTeXN0ZW1Nb2RhbCcsICd2Yk9LJywgJ3ZiQ2FuY2VsJywgJ3ZiQWJvcnQnLCAndmJSZXRyeScsICd2Yklnbm9yZScsICd2YlllcycsICd2Yk5vJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAndmJDcicsICdWYkNyTGYnLCAndmJGb3JtRmVlZCcsICd2YkxmJywgJ3ZiTmV3TGluZScsICd2Yk51bGxDaGFyJywgJ3ZiTnVsbFN0cmluZycsICd2YlRhYicsICd2YlZlcnRpY2FsVGFiJywgJ3ZiVXNlRGVmYXVsdCcsICd2YlRydWUnLCAndmJGYWxzZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3ZiRW1wdHknLCAndmJOdWxsJywgJ3ZiSW50ZWdlcicsICd2YkxvbmcnLCAndmJTaW5nbGUnLCAndmJEb3VibGUnLCAndmJDdXJyZW5jeScsICd2YkRhdGUnLCAndmJTdHJpbmcnLCAndmJPYmplY3QnLCAndmJFcnJvcicsICd2YkJvb2xlYW4nLCAndmJWYXJpYW50JywgJ3ZiRGF0YU9iamVjdCcsICd2YkRlY2ltYWwnLCAndmJCeXRlJywgJ3ZiQXJyYXknXTtcbiAgICAvL1RoaXMgbGlzdCB3YXMgZnJvbTogaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2hrYzM3NWVhKHY9dnMuODQpLmFzcHhcbiAgICB2YXIgYnVpbHRpbk9ianNXb3JkcyA9IFsnV1NjcmlwdCcsICdlcnInLCAnZGVidWcnLCAnUmVnRXhwJ107XG4gICAgdmFyIGtub3duUHJvcGVydGllcyA9IFsnZGVzY3JpcHRpb24nLCAnZmlyc3RpbmRleCcsICdnbG9iYWwnLCAnaGVscGNvbnRleHQnLCAnaGVscGZpbGUnLCAnaWdub3JlY2FzZScsICdsZW5ndGgnLCAnbnVtYmVyJywgJ3BhdHRlcm4nLCAnc291cmNlJywgJ3ZhbHVlJywgJ2NvdW50J107XG4gICAgdmFyIGtub3duTWV0aG9kcyA9IFsnY2xlYXInLCAnZXhlY3V0ZScsICdyYWlzZScsICdyZXBsYWNlJywgJ3Rlc3QnLCAnd3JpdGUnLCAnd3JpdGVsaW5lJywgJ2Nsb3NlJywgJ29wZW4nLCAnc3RhdGUnLCAnZW9mJywgJ3VwZGF0ZScsICdhZGRuZXcnLCAnZW5kJywgJ2NyZWF0ZW9iamVjdCcsICdxdWl0J107XG5cbiAgICB2YXIgYXNwQnVpbHRpbk9ianNXb3JkcyA9IFsnc2VydmVyJywgJ3Jlc3BvbnNlJywgJ3JlcXVlc3QnLCAnc2Vzc2lvbicsICdhcHBsaWNhdGlvbiddO1xuICAgIHZhciBhc3BLbm93blByb3BlcnRpZXMgPSBbJ2J1ZmZlcicsICdjYWNoZWNvbnRyb2wnLCAnY2hhcnNldCcsICdjb250ZW50dHlwZScsICdleHBpcmVzJywgJ2V4cGlyZXNhYnNvbHV0ZScsICdpc2NsaWVudGNvbm5lY3RlZCcsICdwaWNzJywgJ3N0YXR1cycsIC8vcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbGllbnRjZXJ0aWZpY2F0ZScsICdjb29raWVzJywgJ2Zvcm0nLCAncXVlcnlzdHJpbmcnLCAnc2VydmVydmFyaWFibGVzJywgJ3RvdGFsYnl0ZXMnLCAvL3JlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50cycsICdzdGF0aWNvYmplY3RzJywgLy9hcHBsaWNhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGVwYWdlJywgJ2xjaWQnLCAnc2Vzc2lvbmlkJywgJ3RpbWVvdXQnLCAvL3Nlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY3JpcHR0aW1lb3V0J107IC8vc2VydmVyXG4gICAgdmFyIGFzcEtub3duTWV0aG9kcyA9IFsnYWRkaGVhZGVyJywgJ2FwcGVuZHRvbG9nJywgJ2JpbmFyeXdyaXRlJywgJ2VuZCcsICdmbHVzaCcsICdyZWRpcmVjdCcsIC8vcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaW5hcnlyZWFkJywgLy9yZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAncmVtb3ZlJywgJ3JlbW92ZWFsbCcsICdsb2NrJywgJ3VubG9jaycsIC8vYXBwbGljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYmFuZG9uJywgLy9zZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0bGFzdGVycm9yJywgJ2h0bWxlbmNvZGUnLCAnbWFwcGF0aCcsICd0cmFuc2ZlcicsICd1cmxlbmNvZGUnXTsgLy9zZXJ2ZXJcblxuICAgIHZhciBrbm93bldvcmRzID0ga25vd25NZXRob2RzLmNvbmNhdChrbm93blByb3BlcnRpZXMpO1xuXG4gICAgYnVpbHRpbk9ianNXb3JkcyA9IGJ1aWx0aW5PYmpzV29yZHMuY29uY2F0KGJ1aWx0aW5Db25zdHMpO1xuXG4gICAgaWYgKGNvbmYuaXNBU1Ape1xuICAgICAgICBidWlsdGluT2Jqc1dvcmRzID0gYnVpbHRpbk9ianNXb3Jkcy5jb25jYXQoYXNwQnVpbHRpbk9ianNXb3Jkcyk7XG4gICAgICAgIGtub3duV29yZHMgPSBrbm93bldvcmRzLmNvbmNhdChhc3BLbm93bk1ldGhvZHMsIGFzcEtub3duUHJvcGVydGllcyk7XG4gICAgfTtcblxuICAgIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoY29tbW9ua2V5d29yZHMpO1xuICAgIHZhciBhdG9tcyA9IHdvcmRSZWdleHAoYXRvbVdvcmRzKTtcbiAgICB2YXIgYnVpbHRpbkZ1bmNzID0gd29yZFJlZ2V4cChidWlsdGluRnVuY3NXb3Jkcyk7XG4gICAgdmFyIGJ1aWx0aW5PYmpzID0gd29yZFJlZ2V4cChidWlsdGluT2Jqc1dvcmRzKTtcbiAgICB2YXIga25vd24gPSB3b3JkUmVnZXhwKGtub3duV29yZHMpO1xuICAgIHZhciBzdHJpbmdQcmVmaXhlcyA9ICdcIic7XG5cbiAgICB2YXIgb3BlbmluZyA9IHdvcmRSZWdleHAob3BlbmluZ0tleXdvcmRzKTtcbiAgICB2YXIgbWlkZGxlID0gd29yZFJlZ2V4cChtaWRkbGVLZXl3b3Jkcyk7XG4gICAgdmFyIGNsb3NpbmcgPSB3b3JkUmVnZXhwKGVuZEtleXdvcmRzKTtcbiAgICB2YXIgZG91YmxlQ2xvc2luZyA9IHdvcmRSZWdleHAoWydlbmQnXSk7XG4gICAgdmFyIGRvT3BlbmluZyA9IHdvcmRSZWdleHAoWydkbyddKTtcbiAgICB2YXIgbm9JbmRlbnRXb3JkcyA9IHdvcmRSZWdleHAoWydvbiBlcnJvciByZXN1bWUgbmV4dCcsICdleGl0J10pO1xuICAgIHZhciBjb21tZW50ID0gd29yZFJlZ2V4cChbJ3JlbSddKTtcblxuXG4gICAgZnVuY3Rpb24gaW5kZW50KF9zdHJlYW0sIHN0YXRlKSB7XG4gICAgICBzdGF0ZS5jdXJyZW50SW5kZW50Kys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVkZW50KF9zdHJlYW0sIHN0YXRlKSB7XG4gICAgICBzdGF0ZS5jdXJyZW50SW5kZW50LS07XG4gICAgfVxuICAgIC8vIHRva2VuaXplcnNcbiAgICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnc3BhY2UnO1xuICAgICAgICAgICAgLy9yZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7XG5cbiAgICAgICAgLy8gSGFuZGxlIENvbW1lbnRzXG4gICAgICAgIGlmIChjaCA9PT0gXCInXCIpIHtcbiAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgICAgIHJldHVybiAnY29tbWVudCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChjb21tZW50KSl7XG4gICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgICByZXR1cm4gJ2NvbW1lbnQnO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyBIYW5kbGUgTnVtYmVyIExpdGVyYWxzXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14oKCZIKXwoJk8pKT9bMC05XFwuXS9pLCBmYWxzZSkgJiYgIXN0cmVhbS5tYXRjaCgvXigoJkgpfCgmTykpP1swLTlcXC5dK1thLXpfXS9pLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHZhciBmbG9hdExpdGVyYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIEZsb2F0c1xuICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxcZCpcXC5cXGQrL2kpKSB7IGZsb2F0TGl0ZXJhbCA9IHRydWU7IH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXlxcZCtcXC5cXGQqLykpIHsgZmxvYXRMaXRlcmFsID0gdHJ1ZTsgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eXFwuXFxkKy8pKSB7IGZsb2F0TGl0ZXJhbCA9IHRydWU7IH1cblxuICAgICAgICAgICAgaWYgKGZsb2F0TGl0ZXJhbCkge1xuICAgICAgICAgICAgICAgIC8vIEZsb2F0IGxpdGVyYWxzIG1heSBiZSBcImltYWdpbmFyeVwiXG4gICAgICAgICAgICAgICAgc3RyZWFtLmVhdCgvSi9pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJbnRlZ2Vyc1xuICAgICAgICAgICAgdmFyIGludExpdGVyYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIEhleFxuICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXiZIWzAtOWEtZl0rL2kpKSB7IGludExpdGVyYWwgPSB0cnVlOyB9XG4gICAgICAgICAgICAvLyBPY3RhbFxuICAgICAgICAgICAgZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eJk9bMC03XSsvaSkpIHsgaW50TGl0ZXJhbCA9IHRydWU7IH1cbiAgICAgICAgICAgIC8vIERlY2ltYWxcbiAgICAgICAgICAgIGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXlsxLTldXFxkKkY/LykpIHtcbiAgICAgICAgICAgICAgICAvLyBEZWNpbWFsIGxpdGVyYWxzIG1heSBiZSBcImltYWdpbmFyeVwiXG4gICAgICAgICAgICAgICAgc3RyZWFtLmVhdCgvSi9pKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIC0gQ2FuIHlvdSBoYXZlIGltYWdpbmFyeSBsb25ncz9cbiAgICAgICAgICAgICAgICBpbnRMaXRlcmFsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFplcm8gYnkgaXRzZWxmIHdpdGggbm8gb3RoZXIgcGllY2Ugb2YgbnVtYmVyLlxuICAgICAgICAgICAgZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eMCg/IVtcXGR4XSkvaSkpIHsgaW50TGl0ZXJhbCA9IHRydWU7IH1cbiAgICAgICAgICAgIGlmIChpbnRMaXRlcmFsKSB7XG4gICAgICAgICAgICAgICAgLy8gSW50ZWdlciBsaXRlcmFscyBtYXkgYmUgXCJsb25nXCJcbiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9ML2kpO1xuICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBTdHJpbmdzXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goc3RyaW5nUHJlZml4ZXMpKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nRmFjdG9yeShzdHJlYW0uY3VycmVudCgpKTtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBvcGVyYXRvcnMgYW5kIERlbGltaXRlcnNcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChkb3VibGVPcGVyYXRvcnMpXG4gICAgICAgICAgICB8fCBzdHJlYW0ubWF0Y2goc2luZ2xlT3BlcmF0b3JzKVxuICAgICAgICAgICAgfHwgc3RyZWFtLm1hdGNoKHdvcmRPcGVyYXRvcnMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ29wZXJhdG9yJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHNpbmdsZURlbGltaXRlcnMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goYnJha2V0cykpIHtcbiAgICAgICAgICAgIHJldHVybiBcImJyYWNrZXRcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2gobm9JbmRlbnRXb3JkcykpIHtcbiAgICAgICAgICAgIHN0YXRlLmRvSW5DdXJyZW50TGluZSA9IHRydWU7XG5cbiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGRvT3BlbmluZykpIHtcbiAgICAgICAgICAgIGluZGVudChzdHJlYW0sc3RhdGUpO1xuICAgICAgICAgICAgc3RhdGUuZG9JbkN1cnJlbnRMaW5lID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuICdrZXl3b3JkJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKG9wZW5pbmcpKSB7XG4gICAgICAgICAgICBpZiAoISBzdGF0ZS5kb0luQ3VycmVudExpbmUpXG4gICAgICAgICAgICAgIGluZGVudChzdHJlYW0sc3RhdGUpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBzdGF0ZS5kb0luQ3VycmVudExpbmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuICdrZXl3b3JkJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKG1pZGRsZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goZG91YmxlQ2xvc2luZykpIHtcbiAgICAgICAgICAgIGRlZGVudChzdHJlYW0sc3RhdGUpO1xuICAgICAgICAgICAgZGVkZW50KHN0cmVhbSxzdGF0ZSk7XG5cbiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChjbG9zaW5nKSkge1xuICAgICAgICAgICAgaWYgKCEgc3RhdGUuZG9JbkN1cnJlbnRMaW5lKVxuICAgICAgICAgICAgICBkZWRlbnQoc3RyZWFtLHN0YXRlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgc3RhdGUuZG9JbkN1cnJlbnRMaW5lID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdrZXl3b3JkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goYXRvbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2F0b20nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChrbm93bikpIHtcbiAgICAgICAgICAgIHJldHVybiAndmFyaWFibGUtMic7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGJ1aWx0aW5GdW5jcykpIHtcbiAgICAgICAgICAgIHJldHVybiAnYnVpbHRpbic7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGJ1aWx0aW5PYmpzKSl7XG4gICAgICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlLTInO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChpZGVudGlmaWVycykpIHtcbiAgICAgICAgICAgIHJldHVybiAndmFyaWFibGUnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIG5vbi1kZXRlY3RlZCBpdGVtc1xuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICByZXR1cm4gRVJST1JDTEFTUztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2tlblN0cmluZ0ZhY3RvcnkoZGVsaW1pdGVyKSB7XG4gICAgICAgIHZhciBzaW5nbGVsaW5lID0gZGVsaW1pdGVyLmxlbmd0aCA9PSAxO1xuICAgICAgICB2YXIgT1VUQ0xBU1MgPSAnc3RyaW5nJztcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJ1wiXS8pO1xuICAgICAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goZGVsaW1pdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9VVENMQVNTO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoL1snXCJdLyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNpbmdsZWxpbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VyQ29uZi5zaW5nbGVMaW5lU3RyaW5nRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBPVVRDTEFTUztcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIHRva2VuTGV4ZXIoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpO1xuXG4gICAgICAgIC8vIEhhbmRsZSAnLicgY29ubmVjdGVkIGlkZW50aWZpZXJzXG4gICAgICAgIGlmIChjdXJyZW50ID09PSAnLicpIHtcbiAgICAgICAgICAgIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG5cbiAgICAgICAgICAgIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgICAgICAgICAgaWYgKHN0eWxlICYmIChzdHlsZS5zdWJzdHIoMCwgOCkgPT09ICd2YXJpYWJsZScgfHwgc3R5bGU9PT0nYnVpbHRpbicgfHwgc3R5bGU9PT0na2V5d29yZCcpKXsvL3x8IGtub3duV29yZHMuaW5kZXhPZihjdXJyZW50LnN1YnN0cmluZygxKSkgPiAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzdHlsZSA9PT0gJ2J1aWx0aW4nIHx8IHN0eWxlID09PSAna2V5d29yZCcpIHN0eWxlPSd2YXJpYWJsZSc7XG4gICAgICAgICAgICAgICAgaWYgKGtub3duV29yZHMuaW5kZXhPZihjdXJyZW50LnN1YnN0cigxKSkgPiAtMSkgc3R5bGU9J3ZhcmlhYmxlLTInO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9XG5cbiAgICB2YXIgZXh0ZXJuYWwgPSB7XG4gICAgICAgIGVsZWN0cmljQ2hhcnM6XCJkRHBQdFRmRmVFIFwiLFxuICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsXG4gICAgICAgICAgICAgIGxhc3RUb2tlbjogbnVsbCxcbiAgICAgICAgICAgICAgY3VycmVudEluZGVudDogMCxcbiAgICAgICAgICAgICAgbmV4dExpbmVJbmRlbnQ6IDAsXG4gICAgICAgICAgICAgIGRvSW5DdXJyZW50TGluZTogZmFsc2UsXG4gICAgICAgICAgICAgIGlnbm9yZUtleXdvcmQ6IGZhbHNlXG5cblxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgICAgICAgc3RhdGUuY3VycmVudEluZGVudCArPSBzdGF0ZS5uZXh0TGluZUluZGVudDtcbiAgICAgICAgICAgICAgc3RhdGUubmV4dExpbmVJbmRlbnQgPSAwO1xuICAgICAgICAgICAgICBzdGF0ZS5kb0luQ3VycmVudExpbmUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHN0eWxlID0gdG9rZW5MZXhlcihzdHJlYW0sIHN0YXRlKTtcblxuICAgICAgICAgICAgc3RhdGUubGFzdFRva2VuID0ge3N0eWxlOnN0eWxlLCBjb250ZW50OiBzdHJlYW0uY3VycmVudCgpfTtcblxuICAgICAgICAgICAgaWYgKHN0eWxlPT09J3NwYWNlJykgc3R5bGU9bnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikge1xuICAgICAgICAgICAgdmFyIHRydWVUZXh0ID0gdGV4dEFmdGVyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKSA7XG4gICAgICAgICAgICBpZiAodHJ1ZVRleHQubWF0Y2goY2xvc2luZykgfHwgdHJ1ZVRleHQubWF0Y2goZG91YmxlQ2xvc2luZykgfHwgdHJ1ZVRleHQubWF0Y2gobWlkZGxlKSkgcmV0dXJuIGNvbmYuaW5kZW50VW5pdCooc3RhdGUuY3VycmVudEluZGVudC0xKTtcbiAgICAgICAgICAgIGlmKHN0YXRlLmN1cnJlbnRJbmRlbnQgPCAwKSByZXR1cm4gMDtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5jdXJyZW50SW5kZW50ICogY29uZi5pbmRlbnRVbml0O1xuICAgICAgICB9XG5cbiAgICB9O1xuICAgIHJldHVybiBleHRlcm5hbDtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3Zic2NyaXB0XCIsIFwidmJzY3JpcHRcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJ2ZWxvY2l0eVwiLCBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBwYXJzZVdvcmRzKHN0cikge1xuICAgICAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgdmFyIGtleXdvcmRzID0gcGFyc2VXb3JkcyhcIiNlbmQgI2Vsc2UgI2JyZWFrICNzdG9wICNbWyAjXV0gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIje2VuZH0gI3tlbHNlfSAje2JyZWFrfSAje3N0b3B9XCIpO1xuICAgIHZhciBmdW5jdGlvbnMgPSBwYXJzZVdvcmRzKFwiI2lmICNlbHNlaWYgI2ZvcmVhY2ggI3NldCAjaW5jbHVkZSAjcGFyc2UgI21hY3JvICNkZWZpbmUgI2V2YWx1YXRlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiN7aWZ9ICN7ZWxzZWlmfSAje2ZvcmVhY2h9ICN7c2V0fSAje2luY2x1ZGV9ICN7cGFyc2V9ICN7bWFjcm99ICN7ZGVmaW5lfSAje2V2YWx1YXRlfVwiKTtcbiAgICB2YXIgc3BlY2lhbHMgPSBwYXJzZVdvcmRzKFwiJGZvcmVhY2guY291bnQgJGZvcmVhY2guaGFzTmV4dCAkZm9yZWFjaC5maXJzdCAkZm9yZWFjaC5sYXN0ICRmb3JlYWNoLnRvcG1vc3QgJGZvcmVhY2gucGFyZW50LmNvdW50ICRmb3JlYWNoLnBhcmVudC5oYXNOZXh0ICRmb3JlYWNoLnBhcmVudC5maXJzdCAkZm9yZWFjaC5wYXJlbnQubGFzdCAkZm9yZWFjaC5wYXJlbnQgJHZlbG9jaXR5Q291bnQgJCFib2R5Q29udGVudCAkYm9keUNvbnRlbnRcIik7XG4gICAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXFwtKiYlPTw+IT86XFwvfF0vO1xuXG4gICAgZnVuY3Rpb24gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgZikge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGY7XG4gICAgICAgIHJldHVybiBmKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICB2YXIgYmVmb3JlUGFyYW1zID0gc3RhdGUuYmVmb3JlUGFyYW1zO1xuICAgICAgICBzdGF0ZS5iZWZvcmVQYXJhbXMgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICAgICAgLy8gc3RhcnQgb2YgdW5wYXJzZWQgc3RyaW5nP1xuICAgICAgICBpZiAoKGNoID09IFwiJ1wiKSAmJiAhc3RhdGUuaW5TdHJpbmcgJiYgc3RhdGUuaW5QYXJhbXMpIHtcbiAgICAgICAgICAgIHN0YXRlLmxhc3RUb2tlbldhc0J1aWx0aW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0YXJ0IG9mIHBhcnNlZCBzdHJpbmc/XG4gICAgICAgIGVsc2UgaWYgKChjaCA9PSAnXCInKSkge1xuICAgICAgICAgICAgc3RhdGUubGFzdFRva2VuV2FzQnVpbHRpbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHN0YXRlLmluU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuaW5TdHJpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLmluUGFyYW1zKVxuICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlzIGl0IG9uZSBvZiB0aGUgc3BlY2lhbCBzaWducyBbXXt9KCkuLDs/IFNlcGVyYXRvcj9cbiAgICAgICAgZWxzZSBpZiAoL1tcXFtcXF17fVxcKFxcKSw7XFwuXS8udGVzdChjaCkpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PSBcIihcIiAmJiBiZWZvcmVQYXJhbXMpXG4gICAgICAgICAgICAgICAgc3RhdGUuaW5QYXJhbXMgPSB0cnVlO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gXCIpXCIpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5pblBhcmFtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHN0YXRlLmxhc3RUb2tlbldhc0J1aWx0aW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3RhcnQgb2YgYSBudW1iZXIgdmFsdWU/XG4gICAgICAgIGVsc2UgaWYgKC9cXGQvLnRlc3QoY2gpKSB7XG4gICAgICAgICAgICBzdGF0ZS5sYXN0VG9rZW5XYXNCdWlsdGluID0gZmFsc2U7XG4gICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5dLyk7XG4gICAgICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgICAgfVxuICAgICAgICAvLyBtdWx0aSBsaW5lIGNvbW1lbnQ/XG4gICAgICAgIGVsc2UgaWYgKGNoID09IFwiI1wiICYmIHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgICAgICBzdGF0ZS5sYXN0VG9rZW5XYXNCdWlsdGluID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5Db21tZW50KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB1bnBhcnNlZCBjb250ZW50P1xuICAgICAgICBlbHNlIGlmIChjaCA9PSBcIiNcIiAmJiBzdHJlYW0ubWF0Y2goLyAqXFxbICpcXFsvKSkge1xuICAgICAgICAgICAgc3RhdGUubGFzdFRva2VuV2FzQnVpbHRpbiA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuVW5wYXJzZWQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNpbmdsZSBsaW5lIGNvbW1lbnQ/XG4gICAgICAgIGVsc2UgaWYgKGNoID09IFwiI1wiICYmIHN0cmVhbS5lYXQoXCIjXCIpKSB7XG4gICAgICAgICAgICBzdGF0ZS5sYXN0VG9rZW5XYXNCdWlsdGluID0gZmFsc2U7XG4gICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdmFyaWFibGU/XG4gICAgICAgIGVsc2UgaWYgKGNoID09IFwiJFwiKSB7XG4gICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXGRcXCRfXFwue30tXS8pO1xuICAgICAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFscz9cbiAgICAgICAgICAgIGlmIChzcGVjaWFscyAmJiBzcGVjaWFscy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXRlLmxhc3RUb2tlbldhc0J1aWx0aW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHN0YXRlLmJlZm9yZVBhcmFtcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYnVpbHRpblwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlzIGl0IGEgb3BlcmF0b3I/XG4gICAgICAgIGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7XG4gICAgICAgICAgICBzdGF0ZS5sYXN0VG9rZW5XYXNCdWlsdGluID0gZmFsc2U7XG4gICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpO1xuICAgICAgICAgICAgcmV0dXJuIFwib3BlcmF0b3JcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGdldCB0aGUgd2hvbGUgd29yZFxuICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX3t9QF0vKTtcbiAgICAgICAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgICAgICAgIC8vIGlzIGl0IG9uZSBvZiB0aGUgbGlzdGVkIGtleXdvcmRzP1xuICAgICAgICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKVxuICAgICAgICAgICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgICAgIC8vIGlzIGl0IG9uZSBvZiB0aGUgbGlzdGVkIGZ1bmN0aW9ucz9cbiAgICAgICAgICAgIGlmIChmdW5jdGlvbnMgJiYgZnVuY3Rpb25zLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpIHx8XG4gICAgICAgICAgICAgICAgICAgIChzdHJlYW0uY3VycmVudCgpLm1hdGNoKC9eI0A/W2EtejAtOV9dKyAqJC9pKSAmJiBzdHJlYW0ucGVlaygpPT1cIihcIikgJiZcbiAgICAgICAgICAgICAgICAgICAgICEoZnVuY3Rpb25zICYmIGZ1bmN0aW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkLnRvTG93ZXJDYXNlKCkpKSkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmJlZm9yZVBhcmFtcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgc3RhdGUubGFzdFRva2VuV2FzQnVpbHRpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBcImtleXdvcmRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0ZS5pblN0cmluZykge1xuICAgICAgICAgICAgICAgIHN0YXRlLmxhc3RUb2tlbldhc0J1aWx0aW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJlYW0ucG9zID4gd29yZC5sZW5ndGggJiYgc3RyZWFtLnN0cmluZy5jaGFyQXQoc3RyZWFtLnBvcy13b3JkLmxlbmd0aC0xKT09XCIuXCIgJiYgc3RhdGUubGFzdFRva2VuV2FzQnVpbHRpbilcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJidWlsdGluXCI7XG4gICAgICAgICAgICAvLyBkZWZhdWx0OiBqdXN0IGEgXCJ3b3JkXCJcbiAgICAgICAgICAgIHN0YXRlLmxhc3RUb2tlbldhc0J1aWx0aW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICgobmV4dCA9PSBxdW90ZSkgJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChxdW90ZT09J1wiJyAmJiBzdHJlYW0ucGVlaygpID09ICckJyAmJiAhZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pblN0cmluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbmQpIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgICAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICAgICAgICBpZiAoY2ggPT0gXCIjXCIgJiYgbWF5YmVFbmQpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1heWJlRW5kID0gKGNoID09IFwiKlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9rZW5VbnBhcnNlZChzdHJlYW0sIHN0YXRlKSB7XG4gICAgICAgIHZhciBtYXliZUVuZCA9IDAsIGNoO1xuICAgICAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICAgICAgICBpZiAoY2ggPT0gXCIjXCIgJiYgbWF5YmVFbmQgPT0gMikge1xuICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoID09IFwiXVwiKVxuICAgICAgICAgICAgICAgIG1heWJlRW5kKys7XG4gICAgICAgICAgICBlbHNlIGlmIChjaCAhPSBcIiBcIilcbiAgICAgICAgICAgICAgICBtYXliZUVuZCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgIH1cbiAgICAvLyBJbnRlcmZhY2VcblxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLFxuICAgICAgICAgICAgICAgIGJlZm9yZVBhcmFtczogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW5QYXJhbXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGluU3RyaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0VG9rZW5XYXNCdWlsdGluOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcblxuICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSxcbiAgICAgICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiIypcIixcbiAgICAgICAgYmxvY2tDb21tZW50RW5kOiBcIiojXCIsXG4gICAgICAgIGxpbmVDb21tZW50OiBcIiMjXCIsXG4gICAgICAgIGZvbGQ6IFwidmVsb2NpdHlcIlxuICAgIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC92ZWxvY2l0eVwiLCBcInZlbG9jaXR5XCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwidmVyaWxvZ1wiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykge1xuXG4gIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQsXG4gICAgICBzdGF0ZW1lbnRJbmRlbnRVbml0ID0gcGFyc2VyQ29uZmlnLnN0YXRlbWVudEluZGVudFVuaXQgfHwgaW5kZW50VW5pdCxcbiAgICAgIGRvbnRBbGlnbkNhbGxzID0gcGFyc2VyQ29uZmlnLmRvbnRBbGlnbkNhbGxzLFxuICAgICAgbm9JbmRlbnRLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5ub0luZGVudEtleXdvcmRzIHx8IFtdLFxuICAgICAgbXVsdGlMaW5lU3RyaW5ncyA9IHBhcnNlckNvbmZpZy5tdWx0aUxpbmVTdHJpbmdzLFxuICAgICAgaG9va3MgPSBwYXJzZXJDb25maWcuaG9va3MgfHwge307XG5cbiAgZnVuY3Rpb24gd29yZHMoc3RyKSB7XG4gICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdChcIiBcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBLZXl3b3JkcyBmcm9tIElFRUUgMTgwMC0yMDEyXG4gICAqL1xuICB2YXIga2V5d29yZHMgPSB3b3JkcyhcbiAgICBcImFjY2VwdF9vbiBhbGlhcyBhbHdheXMgYWx3YXlzX2NvbWIgYWx3YXlzX2ZmIGFsd2F5c19sYXRjaCBhbmQgYXNzZXJ0IGFzc2lnbiBhc3N1bWUgYXV0b21hdGljIGJlZm9yZSBiZWdpbiBiaW5kIFwiICtcbiAgICBcImJpbnMgYmluc29mIGJpdCBicmVhayBidWYgYnVmaWYwIGJ1ZmlmMSBieXRlIGNhc2UgY2FzZXggY2FzZXogY2VsbCBjaGFuZGxlIGNoZWNrZXIgY2xhc3MgY2xvY2tpbmcgY21vcyBjb25maWcgXCIgK1xuICAgIFwiY29uc3QgY29uc3RyYWludCBjb250ZXh0IGNvbnRpbnVlIGNvdmVyIGNvdmVyZ3JvdXAgY292ZXJwb2ludCBjcm9zcyBkZWFzc2lnbiBkZWZhdWx0IGRlZnBhcmFtIGRlc2lnbiBkaXNhYmxlIFwiICtcbiAgICBcImRpc3QgZG8gZWRnZSBlbHNlIGVuZCBlbmRjYXNlIGVuZGNoZWNrZXIgZW5kY2xhc3MgZW5kY2xvY2tpbmcgZW5kY29uZmlnIGVuZGZ1bmN0aW9uIGVuZGdlbmVyYXRlIGVuZGdyb3VwIFwiICtcbiAgICBcImVuZGludGVyZmFjZSBlbmRtb2R1bGUgZW5kcGFja2FnZSBlbmRwcmltaXRpdmUgZW5kcHJvZ3JhbSBlbmRwcm9wZXJ0eSBlbmRzcGVjaWZ5IGVuZHNlcXVlbmNlIGVuZHRhYmxlIGVuZHRhc2sgXCIgK1xuICAgIFwiZW51bSBldmVudCBldmVudHVhbGx5IGV4cGVjdCBleHBvcnQgZXh0ZW5kcyBleHRlcm4gZmluYWwgZmlyc3RfbWF0Y2ggZm9yIGZvcmNlIGZvcmVhY2ggZm9yZXZlciBmb3JrIGZvcmtqb2luIFwiICtcbiAgICBcImZ1bmN0aW9uIGdlbmVyYXRlIGdlbnZhciBnbG9iYWwgaGlnaHowIGhpZ2h6MSBpZiBpZmYgaWZub25lIGlnbm9yZV9iaW5zIGlsbGVnYWxfYmlucyBpbXBsZW1lbnRzIGltcGxpZXMgaW1wb3J0IFwiICtcbiAgICBcImluY2RpciBpbmNsdWRlIGluaXRpYWwgaW5vdXQgaW5wdXQgaW5zaWRlIGluc3RhbmNlIGludCBpbnRlZ2VyIGludGVyY29ubmVjdCBpbnRlcmZhY2UgaW50ZXJzZWN0IGpvaW4gam9pbl9hbnkgXCIgK1xuICAgIFwiam9pbl9ub25lIGxhcmdlIGxldCBsaWJsaXN0IGxpYnJhcnkgbG9jYWwgbG9jYWxwYXJhbSBsb2dpYyBsb25naW50IG1hY3JvbW9kdWxlIG1hdGNoZXMgbWVkaXVtIG1vZHBvcnQgbW9kdWxlIFwiICtcbiAgICBcIm5hbmQgbmVnZWRnZSBuZXR0eXBlIG5ldyBuZXh0dGltZSBubW9zIG5vciBub3Nob3djYW5jZWxsZWQgbm90IG5vdGlmMCBub3RpZjEgbnVsbCBvciBvdXRwdXQgcGFja2FnZSBwYWNrZWQgXCIgK1xuICAgIFwicGFyYW1ldGVyIHBtb3MgcG9zZWRnZSBwcmltaXRpdmUgcHJpb3JpdHkgcHJvZ3JhbSBwcm9wZXJ0eSBwcm90ZWN0ZWQgcHVsbDAgcHVsbDEgcHVsbGRvd24gcHVsbHVwIFwiICtcbiAgICBcInB1bHNlc3R5bGVfb25kZXRlY3QgcHVsc2VzdHlsZV9vbmV2ZW50IHB1cmUgcmFuZCByYW5kYyByYW5kY2FzZSByYW5kc2VxdWVuY2UgcmNtb3MgcmVhbCByZWFsdGltZSByZWYgcmVnIFwiICtcbiAgICBcInJlamVjdF9vbiByZWxlYXNlIHJlcGVhdCByZXN0cmljdCByZXR1cm4gcm5tb3MgcnBtb3MgcnRyYW4gcnRyYW5pZjAgcnRyYW5pZjEgc19hbHdheXMgc19ldmVudHVhbGx5IHNfbmV4dHRpbWUgXCIgK1xuICAgIFwic191bnRpbCBzX3VudGlsX3dpdGggc2NhbGFyZWQgc2VxdWVuY2Ugc2hvcnRpbnQgc2hvcnRyZWFsIHNob3djYW5jZWxsZWQgc2lnbmVkIHNtYWxsIHNvZnQgc29sdmUgc3BlY2lmeSBcIiArXG4gICAgXCJzcGVjcGFyYW0gc3RhdGljIHN0cmluZyBzdHJvbmcgc3Ryb25nMCBzdHJvbmcxIHN0cnVjdCBzdXBlciBzdXBwbHkwIHN1cHBseTEgc3luY19hY2NlcHRfb24gc3luY19yZWplY3Rfb24gXCIgK1xuICAgIFwidGFibGUgdGFnZ2VkIHRhc2sgdGhpcyB0aHJvdWdob3V0IHRpbWUgdGltZXByZWNpc2lvbiB0aW1ldW5pdCB0cmFuIHRyYW5pZjAgdHJhbmlmMSB0cmkgdHJpMCB0cmkxIHRyaWFuZCB0cmlvciBcIiArXG4gICAgXCJ0cmlyZWcgdHlwZSB0eXBlZGVmIHVuaW9uIHVuaXF1ZSB1bmlxdWUwIHVuc2lnbmVkIHVudGlsIHVudGlsX3dpdGggdW50eXBlZCB1c2UgdXdpcmUgdmFyIHZlY3RvcmVkIHZpcnR1YWwgdm9pZCBcIiArXG4gICAgXCJ3YWl0IHdhaXRfb3JkZXIgd2FuZCB3ZWFrIHdlYWswIHdlYWsxIHdoaWxlIHdpbGRjYXJkIHdpcmUgd2l0aCB3aXRoaW4gd29yIHhub3IgeG9yXCIpO1xuXG4gIC8qKiBPcGVyYXRvcnMgZnJvbSBJRUVFIDE4MDAtMjAxMlxuICAgICB1bmFyeV9vcGVyYXRvciA6Oj1cbiAgICAgICArIHwgLSB8ICEgfCB+IHwgJiB8IH4mIHwgfCB8IH58IHwgXiB8IH5eIHwgXn5cbiAgICAgYmluYXJ5X29wZXJhdG9yIDo6PVxuICAgICAgICsgfCAtIHwgKiB8IC8gfCAlIHwgPT0gfCAhPSB8ID09PSB8ICE9PSB8ID09PyB8ICE9PyB8ICYmIHwgfHwgfCAqKlxuICAgICAgIHwgPCB8IDw9IHwgPiB8ID49IHwgJiB8IHwgfCBeIHwgXn4gfCB+XiB8ID4+IHwgPDwgfCA+Pj4gfCA8PDxcbiAgICAgICB8IC0+IHwgPC0+XG4gICAgIGluY19vcl9kZWNfb3BlcmF0b3IgOjo9ICsrIHwgLS1cbiAgICAgdW5hcnlfbW9kdWxlX3BhdGhfb3BlcmF0b3IgOjo9XG4gICAgICAgISB8IH4gfCAmIHwgfiYgfCB8IHwgfnwgfCBeIHwgfl4gfCBeflxuICAgICBiaW5hcnlfbW9kdWxlX3BhdGhfb3BlcmF0b3IgOjo9XG4gICAgICAgPT0gfCAhPSB8ICYmIHwgfHwgfCAmIHwgfCB8IF4gfCBefiB8IH5eXG4gICovXG4gIHZhciBpc09wZXJhdG9yQ2hhciA9IC9bXFwrXFwtXFwqXFwvIX4mfF4lPT86XS87XG4gIHZhciBpc0JyYWNrZXRDaGFyID0gL1tcXFtcXF17fSgpXS87XG5cbiAgdmFyIHVuc2lnbmVkTnVtYmVyID0gL1xcZFswLTlfXSovO1xuICB2YXIgZGVjaW1hbExpdGVyYWwgPSAvXFxkKlxccyoncz9kXFxzKlxcZFswLTlfXSovaTtcbiAgdmFyIGJpbmFyeUxpdGVyYWwgPSAvXFxkKlxccyoncz9iXFxzKlt4ejAxXVt4ejAxX10qL2k7XG4gIHZhciBvY3RMaXRlcmFsID0gL1xcZCpcXHMqJ3M/b1xccypbeHowLTddW3h6MC03X10qL2k7XG4gIHZhciBoZXhMaXRlcmFsID0gL1xcZCpcXHMqJ3M/aFxccypbMC05YS1meHo/XVswLTlhLWZ4ej9fXSovaTtcbiAgdmFyIHJlYWxMaXRlcmFsID0gLyhcXGRbXFxkX10qKFxcLlxcZFtcXGRfXSopP0UtP1tcXGRfXSspfChcXGRbXFxkX10qXFwuXFxkW1xcZF9dKikvaTtcblxuICB2YXIgY2xvc2luZ0JyYWNrZXRPcldvcmQgPSAvXigoXFx3Kyl8Wyl9XFxdXSkvO1xuICB2YXIgY2xvc2luZ0JyYWNrZXQgPSAvWyl9XFxdXS87XG5cbiAgdmFyIGN1clB1bmM7XG4gIHZhciBjdXJLZXl3b3JkO1xuXG4gIC8vIEJsb2NrIG9wZW5pbmdzIHdoaWNoIGFyZSBjbG9zZWQgYnkgYSBtYXRjaGluZyBrZXl3b3JkIGluIHRoZSBmb3JtIG9mIChcImVuZFwiICsga2V5d29yZClcbiAgLy8gRS5nLiBcInRhc2tcIiA9PiBcImVuZHRhc2tcIlxuICB2YXIgYmxvY2tLZXl3b3JkcyA9IHdvcmRzKFxuICAgIFwiY2FzZSBjaGVja2VyIGNsYXNzIGNsb2NraW5nIGNvbmZpZyBmdW5jdGlvbiBnZW5lcmF0ZSBpbnRlcmZhY2UgbW9kdWxlIHBhY2thZ2UgXCIgK1xuICAgIFwicHJpbWl0aXZlIHByb2dyYW0gcHJvcGVydHkgc3BlY2lmeSBzZXF1ZW5jZSB0YWJsZSB0YXNrXCJcbiAgKTtcblxuICAvLyBPcGVuaW5nL2Nsb3NpbmcgcGFpcnNcbiAgdmFyIG9wZW5DbG9zZSA9IHt9O1xuICBmb3IgKHZhciBrZXl3b3JkIGluIGJsb2NrS2V5d29yZHMpIHtcbiAgICBvcGVuQ2xvc2Vba2V5d29yZF0gPSBcImVuZFwiICsga2V5d29yZDtcbiAgfVxuICBvcGVuQ2xvc2VbXCJiZWdpblwiXSA9IFwiZW5kXCI7XG4gIG9wZW5DbG9zZVtcImNhc2V4XCJdID0gXCJlbmRjYXNlXCI7XG4gIG9wZW5DbG9zZVtcImNhc2V6XCJdID0gXCJlbmRjYXNlXCI7XG4gIG9wZW5DbG9zZVtcImRvXCIgICBdID0gXCJ3aGlsZVwiO1xuICBvcGVuQ2xvc2VbXCJmb3JrXCIgXSA9IFwiam9pbjtqb2luX2FueTtqb2luX25vbmVcIjtcbiAgb3BlbkNsb3NlW1wiY292ZXJncm91cFwiXSA9IFwiZW5kZ3JvdXBcIjtcblxuICBmb3IgKHZhciBpIGluIG5vSW5kZW50S2V5d29yZHMpIHtcbiAgICB2YXIga2V5d29yZCA9IG5vSW5kZW50S2V5d29yZHNbaV07XG4gICAgaWYgKG9wZW5DbG9zZVtrZXl3b3JkXSkge1xuICAgICAgb3BlbkNsb3NlW2tleXdvcmRdID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIEtleXdvcmRzIHdoaWNoIG9wZW4gc3RhdGVtZW50cyB0aGF0IGFyZSBlbmRlZCB3aXRoIGEgc2VtaS1jb2xvblxuICB2YXIgc3RhdGVtZW50S2V5d29yZHMgPSB3b3JkcyhcImFsd2F5cyBhbHdheXNfY29tYiBhbHdheXNfZmYgYWx3YXlzX2xhdGNoIGFzc2VydCBhc3NpZ24gYXNzdW1lIGVsc2UgZXhwb3J0IGZvciBmb3JlYWNoIGZvcmV2ZXIgaWYgaW1wb3J0IGluaXRpYWwgcmVwZWF0IHdoaWxlXCIpO1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKSwgc3R5bGU7XG4gICAgaWYgKGhvb2tzW2NoXSAmJiAoc3R5bGUgPSBob29rc1tjaF0oc3RyZWFtLCBzdGF0ZSkpICE9IGZhbHNlKSByZXR1cm4gc3R5bGU7XG4gICAgaWYgKGhvb2tzLnRva2VuQmFzZSAmJiAoc3R5bGUgPSBob29rcy50b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkpICE9IGZhbHNlKVxuICAgICAgcmV0dXJuIHN0eWxlO1xuXG4gICAgaWYgKC9bLDs6XFwuXS8udGVzdChjaCkpIHtcbiAgICAgIGN1clB1bmMgPSBzdHJlYW0ubmV4dCgpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChpc0JyYWNrZXRDaGFyLnRlc3QoY2gpKSB7XG4gICAgICBjdXJQdW5jID0gc3RyZWFtLm5leHQoKTtcbiAgICAgIHJldHVybiBcImJyYWNrZXRcIjtcbiAgICB9XG4gICAgLy8gTWFjcm9zICh0aWNrLWRlZmluZXMpXG4gICAgaWYgKGNoID09ICdgJykge1xuICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIGlmIChzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfXS8pKSB7XG4gICAgICAgIHJldHVybiBcImRlZlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFN5c3RlbSBjYWxsc1xuICAgIGlmIChjaCA9PSAnJCcpIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICBpZiAoc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkX10vKSkge1xuICAgICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gVGltZSBsaXRlcmFsc1xuICAgIGlmIChjaCA9PSAnIycpIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXGRfLl0vKTtcbiAgICAgIHJldHVybiBcImRlZlwiO1xuICAgIH1cbiAgICAvLyBTdHJpbmdzXG4gICAgaWYgKGNoID09ICdcIicpIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gICAgLy8gQ29tbWVudHNcbiAgICBpZiAoY2ggPT0gXCIvXCIpIHtcbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIipcIikpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQ7XG4gICAgICAgIHJldHVybiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9XG4gICAgICBzdHJlYW0uYmFja1VwKDEpO1xuICAgIH1cblxuICAgIC8vIE51bWVyaWMgbGl0ZXJhbHNcbiAgICBpZiAoc3RyZWFtLm1hdGNoKHJlYWxMaXRlcmFsKSB8fFxuICAgICAgICBzdHJlYW0ubWF0Y2goZGVjaW1hbExpdGVyYWwpIHx8XG4gICAgICAgIHN0cmVhbS5tYXRjaChiaW5hcnlMaXRlcmFsKSB8fFxuICAgICAgICBzdHJlYW0ubWF0Y2gob2N0TGl0ZXJhbCkgfHxcbiAgICAgICAgc3RyZWFtLm1hdGNoKGhleExpdGVyYWwpIHx8XG4gICAgICAgIHN0cmVhbS5tYXRjaCh1bnNpZ25lZE51bWJlcikgfHxcbiAgICAgICAgc3RyZWFtLm1hdGNoKHJlYWxMaXRlcmFsKSkge1xuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgfVxuXG4gICAgLy8gT3BlcmF0b3JzXG4gICAgaWYgKHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcikpIHtcbiAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICB9XG5cbiAgICAvLyBLZXl3b3JkcyAvIHBsYWluIHZhcmlhYmxlc1xuICAgIGlmIChzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfXS8pKSB7XG4gICAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgIGlmIChrZXl3b3Jkc1tjdXJdKSB7XG4gICAgICAgIGlmIChvcGVuQ2xvc2VbY3VyXSkge1xuICAgICAgICAgIGN1clB1bmMgPSBcIm5ld2Jsb2NrXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlbWVudEtleXdvcmRzW2N1cl0pIHtcbiAgICAgICAgICBjdXJQdW5jID0gXCJuZXdzdGF0ZW1lbnRcIjtcbiAgICAgICAgfVxuICAgICAgICBjdXJLZXl3b3JkID0gY3VyO1xuICAgICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgIH1cblxuICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTtcbiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtlbmQgPSB0cnVlOyBicmVhazt9XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpXG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIi9cIiAmJiBtYXliZUVuZCkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBtYXliZUVuZCA9IChjaCA9PSBcIipcIik7XG4gICAgfVxuICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHtcbiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7XG4gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmFsaWduID0gYWxpZ247XG4gICAgdGhpcy5wcmV2ID0gcHJldjtcbiAgfVxuICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7XG4gICAgdmFyIGluZGVudCA9IHN0YXRlLmluZGVudGVkO1xuICAgIHZhciBjID0gbmV3IENvbnRleHQoaW5kZW50LCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpO1xuICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gYztcbiAgfVxuICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7XG4gICAgdmFyIHQgPSBzdGF0ZS5jb250ZXh0LnR5cGU7XG4gICAgaWYgKHQgPT0gXCIpXCIgfHwgdCA9PSBcIl1cIiB8fCB0ID09IFwifVwiKSB7XG4gICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmNvbnRleHQuaW5kZW50ZWQ7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDbG9zaW5nKHRleHQsIGNvbnRleHRDbG9zaW5nKSB7XG4gICAgaWYgKHRleHQgPT0gY29udGV4dENsb3NpbmcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb250ZXh0Q2xvc2luZyBtYXkgYmUgbXVsdGlwbGUga2V5d29yZHMgc2VwYXJhdGVkIGJ5IDtcbiAgICAgIHZhciBjbG9zaW5nS2V5d29yZHMgPSBjb250ZXh0Q2xvc2luZy5zcGxpdChcIjtcIik7XG4gICAgICBmb3IgKHZhciBpIGluIGNsb3NpbmdLZXl3b3Jkcykge1xuICAgICAgICBpZiAodGV4dCA9PSBjbG9zaW5nS2V5d29yZHNbaV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkRWxlY3RyaWNJbnB1dFJlZ0V4KCkge1xuICAgIC8vIFJlaW5kZW50YXRpb24gc2hvdWxkIG9jY3VyIG9uIGFueSBicmFja2V0IGNoYXI6IHt9KClbXVxuICAgIC8vIG9yIG9uIGEgbWF0Y2ggb2YgYW55IG9mIHRoZSBibG9jayBjbG9zaW5nIGtleXdvcmRzLCBhdFxuICAgIC8vIHRoZSBlbmQgb2YgYSBsaW5lXG4gICAgdmFyIGFsbENsb3NpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSBpbiBvcGVuQ2xvc2UpIHtcbiAgICAgIGlmIChvcGVuQ2xvc2VbaV0pIHtcbiAgICAgICAgdmFyIGNsb3NpbmdzID0gb3BlbkNsb3NlW2ldLnNwbGl0KFwiO1wiKTtcbiAgICAgICAgZm9yICh2YXIgaiBpbiBjbG9zaW5ncykge1xuICAgICAgICAgIGFsbENsb3NpbmdzLnB1c2goY2xvc2luZ3Nbal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciByZSA9IG5ldyBSZWdFeHAoXCJbe30oKVxcXFxbXFxcXF1dfChcIiArIGFsbENsb3NpbmdzLmpvaW4oXCJ8XCIpICsgXCIpJFwiKTtcbiAgICByZXR1cm4gcmU7XG4gIH1cblxuICAvLyBJbnRlcmZhY2VcbiAgcmV0dXJuIHtcblxuICAgIC8vIFJlZ2V4IHRvIGZvcmNlIGN1cnJlbnQgbGluZSB0byByZWluZGVudFxuICAgIGVsZWN0cmljSW5wdXQ6IGJ1aWxkRWxlY3RyaWNJbnB1dFJlZ0V4KCksXG5cbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7XG4gICAgICB2YXIgc3RhdGUgPSB7XG4gICAgICAgIHRva2VuaXplOiBudWxsLFxuICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsIFwidG9wXCIsIGZhbHNlKSxcbiAgICAgICAgaW5kZW50ZWQ6IDAsXG4gICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlXG4gICAgICB9O1xuICAgICAgaWYgKGhvb2tzLnN0YXJ0U3RhdGUpIGhvb2tzLnN0YXJ0U3RhdGUoc3RhdGUpO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChob29rcy50b2tlbikge1xuICAgICAgICAvLyBDYWxsIGhvb2ssIHdpdGggYW4gb3B0aW9uYWwgcmV0dXJuIHZhbHVlIG9mIGEgc3R5bGUgdG8gb3ZlcnJpZGUgdmVyaWxvZyBzdHlsaW5nLlxuICAgICAgICB2YXIgc3R5bGUgPSBob29rcy50b2tlbihzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgaWYgKHN0eWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICBjdXJQdW5jID0gbnVsbDtcbiAgICAgIGN1cktleXdvcmQgPSBudWxsO1xuICAgICAgdmFyIHN0eWxlID0gKHN0YXRlLnRva2VuaXplIHx8IHRva2VuQmFzZSkoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBpZiAoc3R5bGUgPT0gXCJjb21tZW50XCIgfHwgc3R5bGUgPT0gXCJtZXRhXCIgfHwgc3R5bGUgPT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gc3R5bGU7XG4gICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IHRydWU7XG5cbiAgICAgIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSB7XG4gICAgICAgIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgfSBlbHNlIGlmICgoY3VyUHVuYyA9PSBcIjtcIiAmJiBjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiKSB8fFxuICAgICAgICAgICAgICAgKGN0eC50eXBlICYmIGlzQ2xvc2luZyhjdXJLZXl3b3JkLCBjdHgudHlwZSkpKSB7XG4gICAgICAgIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICB3aGlsZSAoY3R4ICYmIGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgfSBlbHNlIGlmIChjdXJQdW5jID09IFwie1wiKSB7XG4gICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwifVwiKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VyUHVuYyA9PSBcIltcIikge1xuICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcIl1cIik7XG4gICAgICB9IGVsc2UgaWYgKGN1clB1bmMgPT0gXCIoXCIpIHtcbiAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCIpXCIpO1xuICAgICAgfSBlbHNlIGlmIChjdHggJiYgY3R4LnR5cGUgPT0gXCJlbmRjYXNlXCIgJiYgY3VyUHVuYyA9PSBcIjpcIikge1xuICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCBcInN0YXRlbWVudFwiKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VyUHVuYyA9PSBcIm5ld3N0YXRlbWVudFwiKSB7XG4gICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwic3RhdGVtZW50XCIpO1xuICAgICAgfSBlbHNlIGlmIChjdXJQdW5jID09IFwibmV3YmxvY2tcIikge1xuICAgICAgICBpZiAoY3VyS2V5d29yZCA9PSBcImZ1bmN0aW9uXCIgJiYgY3R4ICYmIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiIHx8IGN0eC50eXBlID09IFwiZW5kZ3JvdXBcIikpIHtcbiAgICAgICAgICAvLyBUaGUgJ2Z1bmN0aW9uJyBrZXl3b3JkIGNhbiBhcHBlYXIgaW4gc29tZSBvdGhlciBjb250ZXh0cyB3aGVyZSBpdCBhY3R1YWxseSBkb2VzIG5vdFxuICAgICAgICAgIC8vIGluZGljYXRlIGEgZnVuY3Rpb24gKGltcG9ydC9leHBvcnQgRFBJIGFuZCBjb3Zlcmdyb3VwIGRlZmluaXRpb25zKS5cbiAgICAgICAgICAvLyBEbyBub3RoaW5nIGluIHRoaXMgY2FzZVxuICAgICAgICB9IGVsc2UgaWYgKGN1cktleXdvcmQgPT0gXCJ0YXNrXCIgJiYgY3R4ICYmIGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIHtcbiAgICAgICAgICAvLyBTYW1lIHRoaW5nIGZvciB0YXNrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGNsb3NlID0gb3BlbkNsb3NlW2N1cktleXdvcmRdO1xuICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIGNsb3NlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UgJiYgc3RhdGUudG9rZW5pemUgIT0gbnVsbCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIGlmIChob29rcy5pbmRlbnQpIHtcbiAgICAgICAgdmFyIGZyb21Ib29rID0gaG9va3MuaW5kZW50KHN0YXRlKTtcbiAgICAgICAgaWYgKGZyb21Ib29rID49IDApIHJldHVybiBmcm9tSG9vaztcbiAgICAgIH1cbiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0LCBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTtcbiAgICAgIGlmIChjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiICYmIGZpcnN0Q2hhciA9PSBcIn1cIikgY3R4ID0gY3R4LnByZXY7XG4gICAgICB2YXIgY2xvc2luZyA9IGZhbHNlO1xuICAgICAgdmFyIHBvc3NpYmxlQ2xvc2luZyA9IHRleHRBZnRlci5tYXRjaChjbG9zaW5nQnJhY2tldE9yV29yZCk7XG4gICAgICBpZiAocG9zc2libGVDbG9zaW5nKVxuICAgICAgICBjbG9zaW5nID0gaXNDbG9zaW5nKHBvc3NpYmxlQ2xvc2luZ1swXSwgY3R4LnR5cGUpO1xuICAgICAgaWYgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIHJldHVybiBjdHguaW5kZW50ZWQgKyAoZmlyc3RDaGFyID09IFwie1wiID8gMCA6IHN0YXRlbWVudEluZGVudFVuaXQpO1xuICAgICAgZWxzZSBpZiAoY2xvc2luZ0JyYWNrZXQudGVzdChjdHgudHlwZSkgJiYgY3R4LmFsaWduICYmICFkb250QWxpZ25DYWxscykgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTtcbiAgICAgIGVsc2UgaWYgKGN0eC50eXBlID09IFwiKVwiICYmICFjbG9zaW5nKSByZXR1cm4gY3R4LmluZGVudGVkICsgc3RhdGVtZW50SW5kZW50VW5pdDtcbiAgICAgIGVsc2UgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpO1xuICAgIH0sXG5cbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCIvKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCIqL1wiLFxuICAgIGxpbmVDb21tZW50OiBcIi8vXCIsXG4gICAgZm9sZDogXCJpbmRlbnRcIlxuICB9O1xufSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXZlcmlsb2dcIiwge1xuICAgIG5hbWU6IFwidmVyaWxvZ1wiXG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1zeXN0ZW12ZXJpbG9nXCIsIHtcbiAgICBuYW1lOiBcInZlcmlsb2dcIlxuICB9KTtcblxuXG5cbiAgLy8gVEwtVmVyaWxvZyBtb2RlLlxuICAvLyBTZWUgdGwteC5vcmcgZm9yIGxhbmd1YWdlIHNwZWMuXG4gIC8vIFNlZSB0aGUgbW9kZSBpbiBhY3Rpb24gYXQgbWFrZXJjaGlwLmNvbS5cbiAgLy8gQ29udGFjdDogc3RldmUuaG9vdmVyQHJlZHdvb2RlZGEuY29tXG5cbiAgLy8gVExWIElkZW50aWZpZXIgcHJlZml4ZXMuXG4gIC8vIE5vdGUgdGhhdCBzaWduIGlzIG5vdCB0cmVhdGVkIHNlcGFyYXRlbHksIHNvIFwiKy8tXCIgdmVyc2lvbnMgb2YgbnVtZXJpYyBpZGVudGlmaWVyc1xuICAvLyBhcmUgaW5jbHVkZWQuXG4gIHZhciB0bHZJZGVudGlmaWVyU3R5bGUgPSB7XG4gICAgXCJ8XCI6IFwibGlua1wiLFxuICAgIFwiPlwiOiBcInByb3BlcnR5XCIsICAvLyBTaG91bGQgY29uZGl0aW9uIHRoaXMgb2ZmIGZvciA+IFRMViAxYy5cbiAgICBcIiRcIjogXCJ2YXJpYWJsZVwiLFxuICAgIFwiJCRcIjogXCJ2YXJpYWJsZVwiLFxuICAgIFwiPyRcIjogXCJxdWFsaWZpZXJcIixcbiAgICBcIj8qXCI6IFwicXVhbGlmaWVyXCIsXG4gICAgXCItXCI6IFwiaHJcIixcbiAgICBcIi9cIjogXCJwcm9wZXJ0eVwiLFxuICAgIFwiLy1cIjogXCJwcm9wZXJ0eVwiLFxuICAgIFwiQFwiOiBcInZhcmlhYmxlLTNcIixcbiAgICBcIkAtXCI6IFwidmFyaWFibGUtM1wiLFxuICAgIFwiQCsrXCI6IFwidmFyaWFibGUtM1wiLFxuICAgIFwiQCs9XCI6IFwidmFyaWFibGUtM1wiLFxuICAgIFwiQCs9LVwiOiBcInZhcmlhYmxlLTNcIixcbiAgICBcIkAtLVwiOiBcInZhcmlhYmxlLTNcIixcbiAgICBcIkAtPVwiOiBcInZhcmlhYmxlLTNcIixcbiAgICBcIiUrXCI6IFwidGFnXCIsXG4gICAgXCIlLVwiOiBcInRhZ1wiLFxuICAgIFwiJVwiOiBcInRhZ1wiLFxuICAgIFwiPj5cIjogXCJ0YWdcIixcbiAgICBcIjw8XCI6IFwidGFnXCIsXG4gICAgXCI8PlwiOiBcInRhZ1wiLFxuICAgIFwiI1wiOiBcInRhZ1wiLCAgLy8gTmVlZCB0byBjaG9vc2UgYSBzdHlsZSBmb3IgdGhpcy5cbiAgICBcIl5cIjogXCJhdHRyaWJ1dGVcIixcbiAgICBcIl5eXCI6IFwiYXR0cmlidXRlXCIsXG4gICAgXCJeIVwiOiBcImF0dHJpYnV0ZVwiLFxuICAgIFwiKlwiOiBcInZhcmlhYmxlLTJcIixcbiAgICBcIioqXCI6IFwidmFyaWFibGUtMlwiLFxuICAgIFwiXFxcXFwiOiBcImtleXdvcmRcIixcbiAgICBcIlxcXCJcIjogXCJjb21tZW50XCJcbiAgfTtcblxuICAvLyBMaW5lcyBzdGFydGluZyB3aXRoIHRoZXNlIGNoYXJhY3RlcnMgZGVmaW5lIHNjb3BlIChyZXN1bHQgaW4gaW5kZW50YXRpb24pLlxuICB2YXIgdGx2U2NvcGVQcmVmaXhDaGFycyA9IHtcbiAgICBcIi9cIjogXCJiZWgtaGllclwiLFxuICAgIFwiPlwiOiBcImJlaC1oaWVyXCIsXG4gICAgXCItXCI6IFwicGh5cy1oaWVyXCIsXG4gICAgXCJ8XCI6IFwicGlwZVwiLFxuICAgIFwiP1wiOiBcIndoZW5cIixcbiAgICBcIkBcIjogXCJzdGFnZVwiLFxuICAgIFwiXFxcXFwiOiBcImtleXdvcmRcIlxuICB9O1xuICB2YXIgdGx2SW5kZW50VW5pdCA9IDM7XG4gIHZhciB0bHZUcmFja1N0YXRlbWVudHMgPSBmYWxzZTtcbiAgdmFyIHRsdklkZW50TWF0Y2ggPSAvXihbfiFAI1xcJCVcXF4mXFwqLVxcKz1cXD9cXC9cXFxcXFx8J1wiPD5dKykoW1xcZFxcd19dKikvOyAgLy8gTWF0Y2hlcyBhbiBpZGVudGlmaWVyZS5cbiAgLy8gTm90ZSB0aGF0ICc6JyBpcyBleGNsdWRlZCwgYmVjYXVzZSBvZiBpdCdzIHVzZSBpbiBbOl0uXG4gIHZhciB0bHZGaXJzdExldmVsSW5kZW50TWF0Y2ggPSAvXlshIF0gIC87XG4gIHZhciB0bHZMaW5lSW5kZW50YXRpb25NYXRjaCA9IC9eWyEgXSAqLztcbiAgdmFyIHRsdkNvbW1lbnRNYXRjaCA9IC9eXFwvW1xcL1xcKl0vO1xuXG5cbiAgLy8gUmV0dXJucyBhIHN0eWxlIHNwZWNpZmljIHRvIHRoZSBzY29wZSBhdCB0aGUgZ2l2ZW4gaW5kZW50YXRpb24gY29sdW1uLlxuICAvLyBUeXBlIGlzIG9uZSBvZjogXCJpbmRlbnRcIiwgXCJzY29wZS1pZGVudFwiLCBcImJlZm9yZS1zY29wZS1pZGVudFwiLlxuICBmdW5jdGlvbiB0bHZTY29wZVN0eWxlKHN0YXRlLCBpbmRlbnRhdGlvbiwgdHlwZSkge1xuICAgIC8vIEJlZ2luIHNjb3BlLlxuICAgIHZhciBkZXB0aCA9IGluZGVudGF0aW9uIC8gdGx2SW5kZW50VW5pdDsgIC8vIFRPRE86IFBhc3MgdGhpcyBpbiBpbnN0ZWFkLlxuICAgIHJldHVybiBcInRsdi1cIiArIHN0YXRlLnRsdkluZGVudGF0aW9uU3R5bGVbZGVwdGhdICsgXCItXCIgKyB0eXBlO1xuICB9XG5cbiAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdGhpbmcgaW4gdGhlIHN0cmVhbSBpcyBhbiBpZGVudGlmaWVyIHdpdGggYSBtbmVtb25pYy5cbiAgZnVuY3Rpb24gdGx2SWRlbnROZXh0KHN0cmVhbSkge1xuICAgIHZhciBtYXRjaDtcbiAgICByZXR1cm4gKG1hdGNoID0gc3RyZWFtLm1hdGNoKHRsdklkZW50TWF0Y2gsIGZhbHNlKSkgJiYgbWF0Y2hbMl0ubGVuZ3RoID4gMDtcbiAgfVxuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC10bHZcIiwge1xuICAgIG5hbWU6IFwidmVyaWxvZ1wiLFxuXG4gICAgaG9va3M6IHtcblxuICAgICAgZWxlY3RyaWNJbnB1dDogZmFsc2UsXG5cblxuICAgICAgLy8gUmV0dXJuIHVuZGVmaW5lZCBmb3IgdmVyaWxvZyB0b2tlbml6aW5nLCBvciBzdHlsZSBmb3IgVExWIHRva2VuIChudWxsIG5vdCB1c2VkKS5cbiAgICAgIC8vIFN0YW5kYXJkIENNIHN0eWxlcyBhcmUgdXNlZCBmb3IgbW9zdCBmb3JtYXR0aW5nLCBidXQgc29tZSBUTC1WZXJpbG9nLXNwZWNpZmljIGhpZ2hsaWdodGluZ1xuICAgICAgLy8gY2FuIGJlIGVuYWJsZWQgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiBjbS10bHYtKiBzdHlsZXMsIGluY2x1ZGluZyBoaWdobGlnaHRpbmcgZm9yOlxuICAgICAgLy8gICAtIE00IHRva2Vuc1xuICAgICAgLy8gICAtIFRMViBzY29wZSBpbmRlbnRhdGlvblxuICAgICAgLy8gICAtIFN0YXRlbWVudCBkZWxpbWl0YXRpb24gKGVuYWJsZWQgYnkgdGx2VHJhY2tTdGF0ZW1lbnRzKVxuICAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgbWF0Y2g7ICAvLyBSZXR1cm4gdmFsdWUgb2YgcGF0dGVybiBtYXRjaGVzLlxuXG4gICAgICAgIC8vIFNldCBoaWdobGlnaHRpbmcgbW9kZSBiYXNlZCBvbiBjb2RlIHJlZ2lvbiAoVExWIG9yIFNWKS5cbiAgICAgICAgaWYgKHN0cmVhbS5zb2woKSAmJiAhIHN0YXRlLnRsdkluQmxvY2tDb21tZW50KSB7XG4gICAgICAgICAgLy8gUHJvY2VzcyByZWdpb24uXG4gICAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBzdHlsZSA9IFwiZGVmXCI7XG4gICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgICAgICBpZiAoc3RyZWFtLnN0cmluZy5tYXRjaCgvXFxcXFNWLykpIHtcbiAgICAgICAgICAgICAgc3RhdGUudGx2Q29kZUFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0uc3RyaW5nLm1hdGNoKC9cXFxcVExWLykpe1xuICAgICAgICAgICAgICBzdGF0ZS50bHZDb2RlQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQ29ycmVjdCBpbmRlbnRhdGlvbiBpbiB0aGUgZmFjZSBvZiBhIGxpbmUgcHJlZml4IGNoYXIuXG4gICAgICAgICAgaWYgKHN0YXRlLnRsdkNvZGVBY3RpdmUgJiYgc3RyZWFtLnBvcyA9PSAwICYmXG4gICAgICAgICAgICAgIChzdGF0ZS5pbmRlbnRlZCA9PSAwKSAmJiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2godGx2TGluZUluZGVudGF0aW9uTWF0Y2gsIGZhbHNlKSkpIHtcbiAgICAgICAgICAgIHN0YXRlLmluZGVudGVkID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENvbXB1dGUgaW5kZW50YXRpb24gc3RhdGU6XG4gICAgICAgICAgLy8gICBvIEF1dG8gaW5kZW50YXRpb24gb24gbmV4dCBsaW5lXG4gICAgICAgICAgLy8gICBvIEluZGVudGF0aW9uIHNjb3BlIHN0eWxlc1xuICAgICAgICAgIHZhciBpbmRlbnRlZCA9IHN0YXRlLmluZGVudGVkO1xuICAgICAgICAgIHZhciBkZXB0aCA9IGluZGVudGVkIC8gdGx2SW5kZW50VW5pdDtcbiAgICAgICAgICBpZiAoZGVwdGggPD0gc3RhdGUudGx2SW5kZW50YXRpb25TdHlsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIG5vdCBkZWVwZXIgdGhhbiBjdXJyZW50IHNjb3BlXG5cbiAgICAgICAgICAgIHZhciBibGFua2xpbmUgPSBzdHJlYW0uc3RyaW5nLmxlbmd0aCA9PSBpbmRlbnRlZDtcbiAgICAgICAgICAgIHZhciBjaFBvcyA9IGRlcHRoICogdGx2SW5kZW50VW5pdDtcbiAgICAgICAgICAgIGlmIChjaFBvcyA8IHN0cmVhbS5zdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHZhciBib2R5U3RyaW5nID0gc3RyZWFtLnN0cmluZy5zbGljZShjaFBvcyk7XG4gICAgICAgICAgICAgIHZhciBjaCA9IGJvZHlTdHJpbmdbMF07XG4gICAgICAgICAgICAgIGlmICh0bHZTY29wZVByZWZpeENoYXJzW2NoXSAmJiAoKG1hdGNoID0gYm9keVN0cmluZy5tYXRjaCh0bHZJZGVudE1hdGNoKSkgJiZcbiAgICAgICAgICAgICAgICAgIHRsdklkZW50aWZpZXJTdHlsZVttYXRjaFsxXV0pKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGJlZ2lucyBzY29wZS5cbiAgICAgICAgICAgICAgICAvLyBOZXh0IGxpbmUgZ2V0cyBpbmRlbnRlZCBvbmUgbGV2ZWwuXG4gICAgICAgICAgICAgICAgaW5kZW50ZWQgKz0gdGx2SW5kZW50VW5pdDtcbiAgICAgICAgICAgICAgICAvLyBTdHlsZSB0aGUgbmV4dCBsZXZlbCBvZiBpbmRlbnRhdGlvbiAoZXhjZXB0IG5vbi1yZWdpb24ga2V5d29yZCBpZGVudGlmaWVycyxcbiAgICAgICAgICAgICAgICAvLyAgIHdoaWNoIGFyZSBzdGF0ZW1lbnRzIHRoZW1zZWx2ZXMpXG4gICAgICAgICAgICAgICAgaWYgKCEoY2ggPT0gXCJcXFxcXCIgJiYgY2hQb3MgPiAwKSkge1xuICAgICAgICAgICAgICAgICAgc3RhdGUudGx2SW5kZW50YXRpb25TdHlsZVtkZXB0aF0gPSB0bHZTY29wZVByZWZpeENoYXJzW2NoXTtcbiAgICAgICAgICAgICAgICAgIGlmICh0bHZUcmFja1N0YXRlbWVudHMpIHtzdGF0ZS5zdGF0ZW1lbnRDb21tZW50ID0gZmFsc2U7fVxuICAgICAgICAgICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENsZWFyIG91dCBkZWVwZXIgaW5kZW50YXRpb24gbGV2ZWxzIHVubGVzcyBsaW5lIGlzIGJsYW5rLlxuICAgICAgICAgICAgaWYgKCFibGFua2xpbmUpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnRsdkluZGVudGF0aW9uU3R5bGUubGVuZ3RoID4gZGVwdGgpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS50bHZJbmRlbnRhdGlvblN0eWxlLnBvcCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNldCBuZXh0IGxldmVsIG9mIGluZGVudGF0aW9uLlxuICAgICAgICAgIHN0YXRlLnRsdk5leHRJbmRlbnQgPSBpbmRlbnRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZS50bHZDb2RlQWN0aXZlKSB7XG4gICAgICAgICAgLy8gSGlnaGxpZ2h0IGFzIFRMVi5cblxuICAgICAgICAgIHZhciBiZWdpblN0YXRlbWVudCA9IGZhbHNlO1xuICAgICAgICAgIGlmICh0bHZUcmFja1N0YXRlbWVudHMpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgc3RhcnRzIGEgc3RhdGVtZW50IGlmIHRoZSBwb3NpdGlvbiBpcyBhdCB0aGUgc2NvcGUgbGV2ZWxcbiAgICAgICAgICAgIC8vIGFuZCB3ZSdyZSBub3Qgd2l0aGluIGEgc3RhdGVtZW50IGxlYWRpbmcgY29tbWVudC5cbiAgICAgICAgICAgIGJlZ2luU3RhdGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAoc3RyZWFtLnBlZWsoKSAhPSBcIiBcIikgJiYgICAvLyBub3QgYSBzcGFjZVxuICAgICAgICAgICAgICAgICAgIChzdHlsZSA9PT0gdW5kZWZpbmVkKSAmJiAgICAvLyBub3QgYSByZWdpb24gaWRlbnRpZmllclxuICAgICAgICAgICAgICAgICAgICFzdGF0ZS50bHZJbkJsb2NrQ29tbWVudCAmJiAvLyBub3QgaW4gYmxvY2sgY29tbWVudFxuICAgICAgICAgICAgICAgICAgIC8vIXN0cmVhbS5tYXRjaCh0bHZDb21tZW50TWF0Y2gsIGZhbHNlKSAmJiAvLyBub3QgY29tbWVudCBzdGFydFxuICAgICAgICAgICAgICAgICAgIChzdHJlYW0uY29sdW1uKCkgPT0gc3RhdGUudGx2SW5kZW50YXRpb25TdHlsZS5sZW5ndGggKiB0bHZJbmRlbnRVbml0KTsgIC8vIGF0IHNjb3BlIGxldmVsXG4gICAgICAgICAgICBpZiAoYmVnaW5TdGF0ZW1lbnQpIHtcbiAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0YXRlbWVudENvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBzdGF0ZW1lbnQgYWxyZWFkeSBzdGFydGVkIGJ5IGNvbW1lbnRcbiAgICAgICAgICAgICAgICBiZWdpblN0YXRlbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0YXRlLnN0YXRlbWVudENvbW1lbnQgPVxuICAgICAgICAgICAgICAgICAgIHN0cmVhbS5tYXRjaCh0bHZDb21tZW50TWF0Y2gsIGZhbHNlKTsgLy8gY29tbWVudCBzdGFydFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBtYXRjaDtcbiAgICAgICAgICBpZiAoc3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gUmVnaW9uIGxpbmUuXG4gICAgICAgICAgICBzdHlsZSArPSBcIiBcIiArIHRsdlNjb3BlU3R5bGUoc3RhdGUsIDAsIFwic2NvcGUtaWRlbnRcIilcbiAgICAgICAgICB9IGVsc2UgaWYgKCgoc3RyZWFtLnBvcyAvIHRsdkluZGVudFVuaXQpIDwgc3RhdGUudGx2SW5kZW50YXRpb25TdHlsZS5sZW5ndGgpICYmXG4gICAgICAgICAgICAgICAgICAgICAobWF0Y2ggPSBzdHJlYW0ubWF0Y2goc3RyZWFtLnNvbCgpID8gdGx2Rmlyc3RMZXZlbEluZGVudE1hdGNoIDogL14gICAvKSkpIHtcbiAgICAgICAgICAgIC8vIEluZGVudGF0aW9uXG4gICAgICAgICAgICBzdHlsZSA9IC8vIG1ha2UgdGhpcyBzdHlsZSBkaXN0aW5jdCBmcm9tIHRoZSBwcmV2aW91cyBvbmUgdG8gcHJldmVudFxuICAgICAgICAgICAgICAgICAgICAvLyBjb2RlbWlycm9yIGZyb20gY29tYmluaW5nIHNwYW5zXG4gICAgICAgICAgICAgICAgICAgIFwidGx2LWluZGVudC1cIiArICgoKHN0cmVhbS5wb3MgJSAyKSA9PSAwKSA/IFwiZXZlblwiIDogXCJvZGRcIikgK1xuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgc3R5bGUgaXRcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIgKyB0bHZTY29wZVN0eWxlKHN0YXRlLCBzdHJlYW0ucG9zIC0gdGx2SW5kZW50VW5pdCwgXCJpbmRlbnRcIik7XG4gICAgICAgICAgICAvLyBTdHlsZSB0aGUgbGluZSBwcmVmaXggY2hhcmFjdGVyLlxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmNoYXJBdCgwKSA9PSBcIiFcIikge1xuICAgICAgICAgICAgICBzdHlsZSArPSBcIiB0bHYtYWxlcnQtbGluZS1wcmVmaXhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFBsYWNlIGEgY2xhc3MgYmVmb3JlIGEgc2NvcGUgaWRlbnRpZmllci5cbiAgICAgICAgICAgIGlmICh0bHZJZGVudE5leHQoc3RyZWFtKSkge1xuICAgICAgICAgICAgICBzdHlsZSArPSBcIiBcIiArIHRsdlNjb3BlU3R5bGUoc3RhdGUsIHN0cmVhbS5wb3MsIFwiYmVmb3JlLXNjb3BlLWlkZW50XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudGx2SW5CbG9ja0NvbW1lbnQpIHtcbiAgICAgICAgICAgIC8vIEluIGEgYmxvY2sgY29tbWVudC5cbiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14uKj9cXCpcXC8vKSkge1xuICAgICAgICAgICAgICAvLyBFeGl0IGJsb2NrIGNvbW1lbnQuXG4gICAgICAgICAgICAgIHN0YXRlLnRsdkluQmxvY2tDb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmICh0bHZUcmFja1N0YXRlbWVudHMgJiYgIXN0cmVhbS5lb2woKSkge1xuICAgICAgICAgICAgICAgIC8vIEFueXRoaW5nIGFmdGVyIGNvbW1lbnQgaXMgYXNzdW1lZCB0byBiZSByZWFsIHN0YXRlbWVudCBjb250ZW50LlxuICAgICAgICAgICAgICAgIHN0YXRlLnN0YXRlbWVudENvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3R5bGUgPSBcImNvbW1lbnRcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IHN0cmVhbS5tYXRjaCh0bHZDb21tZW50TWF0Y2gpKSAmJiAhc3RhdGUudGx2SW5CbG9ja0NvbW1lbnQpIHtcbiAgICAgICAgICAgIC8vIFN0YXJ0IGNvbW1lbnQuXG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0gPT0gXCIvL1wiKSB7XG4gICAgICAgICAgICAgIC8vIExpbmUgY29tbWVudC5cbiAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQmxvY2sgY29tbWVudC5cbiAgICAgICAgICAgICAgc3RhdGUudGx2SW5CbG9ja0NvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3R5bGUgPSBcImNvbW1lbnRcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKHRsdklkZW50TWF0Y2gpKSB7XG4gICAgICAgICAgICAvLyBsb29rcyBsaWtlIGFuIGlkZW50aWZpZXIgKG9yIGlkZW50aWZpZXIgcHJlZml4KVxuICAgICAgICAgICAgdmFyIHByZWZpeCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgdmFyIG1uZW1vbmljID0gbWF0Y2hbMl07XG4gICAgICAgICAgICBpZiAoLy8gaXMgaWRlbnRpZmllciBwcmVmaXhcbiAgICAgICAgICAgICAgICB0bHZJZGVudGlmaWVyU3R5bGUuaGFzT3duUHJvcGVydHkocHJlZml4KSAmJlxuICAgICAgICAgICAgICAgIC8vIGhhcyBtbmVtb25pYyBvciB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIChtYXliZSBpdCBoYXNuJ3QgYmVlbiB0eXBlZCB5ZXQpXG4gICAgICAgICAgICAgICAgKG1uZW1vbmljLmxlbmd0aCA+IDAgfHwgc3RyZWFtLmVvbCgpKSkge1xuICAgICAgICAgICAgICBzdHlsZSA9IHRsdklkZW50aWZpZXJTdHlsZVtwcmVmaXhdO1xuICAgICAgICAgICAgICBpZiAoc3RyZWFtLmNvbHVtbigpID09IHN0YXRlLmluZGVudGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gQmVnaW4gc2NvcGUuXG4gICAgICAgICAgICAgICAgc3R5bGUgKz0gXCIgXCIgKyB0bHZTY29wZVN0eWxlKHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwic2NvcGUtaWRlbnRcIilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSnVzdCBzd2FsbG93IG9uZSBjaGFyYWN0ZXIgYW5kIHRyeSBhZ2Fpbi5cbiAgICAgICAgICAgICAgLy8gVGhpcyBlbmFibGVzIHN1YnNlcXVlbnQgaWRlbnRpZmllciBtYXRjaCB3aXRoIHByZWNlZGluZyBzeW1ib2wgY2hhcmFjdGVyLCB3aGljaFxuICAgICAgICAgICAgICAvLyAgIGlzIGxlZ2FsIHdpdGhpbiBhIHN0YXRlbWVudC4gIChFZywgISRyZXNldCkuICBJdCBhbHNvIGVuYWJsZXMgZGV0ZWN0aW9uIG9mXG4gICAgICAgICAgICAgIC8vICAgY29tbWVudCBzdGFydCB3aXRoIHByZWNlZGluZyBzeW1ib2xzLlxuICAgICAgICAgICAgICBzdHJlYW0uYmFja1VwKHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIHN0eWxlID0gXCJ0bHYtZGVmYXVsdFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eXFx0Ky8pKSB7XG4gICAgICAgICAgICAvLyBIaWdobGlnaHQgdGFicywgd2hpY2ggYXJlIGlsbGVnYWwuXG4gICAgICAgICAgICBzdHlsZSA9IFwidGx2LXRhYlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eW1xcW1xcXXt9XFwoXFwpO1xcOl0rLykpIHtcbiAgICAgICAgICAgIC8vIFs6XSwgKCksIHt9LCA7LlxuICAgICAgICAgICAgc3R5bGUgPSBcIm1ldGFcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKC9eW21NXTQoW1xcK19dKT9bXFx3XFxkX10qLykpIHtcbiAgICAgICAgICAgIC8vIG00IHByZSBwcm9jXG4gICAgICAgICAgICBzdHlsZSA9IChtYXRjaFsxXSA9PSBcIitcIikgPyBcInRsdi1tNC1wbHVzXCIgOiBcInRsdi1tNFwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eICsvKSl7XG4gICAgICAgICAgICAvLyBTa2lwIG92ZXIgc3BhY2VzLlxuICAgICAgICAgICAgaWYgKHN0cmVhbS5lb2woKSkge1xuICAgICAgICAgICAgICAvLyBUcmFpbGluZyBzcGFjZXMuXG4gICAgICAgICAgICAgIHN0eWxlID0gXCJlcnJvclwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gTm9uLXRyYWlsaW5nIHNwYWNlcy5cbiAgICAgICAgICAgICAgc3R5bGUgPSBcInRsdi1kZWZhdWx0XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15bXFx3XFxkX10rLykpIHtcbiAgICAgICAgICAgIC8vIGFscGhhLW51bWVyaWMgdG9rZW4uXG4gICAgICAgICAgICBzdHlsZSA9IFwibnVtYmVyXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEVhdCB0aGUgbmV4dCBjaGFyIHcvIG5vIGZvcm1hdHRpbmcuXG4gICAgICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgICAgICAgc3R5bGUgPSBcInRsdi1kZWZhdWx0XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChiZWdpblN0YXRlbWVudCkge1xuICAgICAgICAgICAgc3R5bGUgKz0gXCIgdGx2LXN0YXRlbWVudFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW21NXTQoW1xcd1xcZF9dKikvKSkge1xuICAgICAgICAgICAgLy8gbTQgcHJlIHByb2NcbiAgICAgICAgICAgIHN0eWxlID0gXCJ0bHYtbTRcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSxcblxuICAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgICByZXR1cm4gKHN0YXRlLnRsdkNvZGVBY3RpdmUgPT0gdHJ1ZSkgPyBzdGF0ZS50bHZOZXh0SW5kZW50IDogLTE7XG4gICAgICB9LFxuXG4gICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgICBzdGF0ZS50bHZJbmRlbnRhdGlvblN0eWxlID0gW107ICAvLyBTdHlsZXMgdG8gdXNlIGZvciBlYWNoIGxldmVsIG9mIGluZGVudGF0aW9uLlxuICAgICAgICBzdGF0ZS50bHZDb2RlQWN0aXZlID0gdHJ1ZTsgIC8vIFRydWUgd2hlbiB3ZSdyZSBpbiBhIFRMViByZWdpb24gKGFuZCBhdCBiZWdpbm5pbmcgb2YgZmlsZSkuXG4gICAgICAgIHN0YXRlLnRsdk5leHRJbmRlbnQgPSAtMTsgICAgLy8gVGhlIG51bWJlciBvZiBzcGFjZXMgdG8gYXV0b2luZGVudCB0aGUgbmV4dCBsaW5lIGlmIHRsdkNvZGVBY3RpdmUuXG4gICAgICAgIHN0YXRlLnRsdkluQmxvY2tDb21tZW50ID0gZmFsc2U7ICAvLyBUcnVlIGluc2lkZSAvKiovIGNvbW1lbnQuXG4gICAgICAgIGlmICh0bHZUcmFja1N0YXRlbWVudHMpIHtcbiAgICAgICAgICBzdGF0ZS5zdGF0ZW1lbnRDb21tZW50ID0gZmFsc2U7ICAvLyBUcnVlIGluc2lkZSBhIHN0YXRlbWVudCdzIGhlYWRlciBjb21tZW50LlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9XG4gIH0pO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vLyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQWxmIE5pZWxzZW4sIHJlLXdyaXR0ZW4gYnkgTWljaGFlbCBaaG91XG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIHdvcmRzKHN0cikge1xuICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KFwiLFwiKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBhbGxDYXBzID0gd29yZHNbaV0udG9VcHBlckNhc2UoKTtcbiAgICB2YXIgZmlyc3RDYXAgPSB3b3Jkc1tpXS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmRzW2ldLnNsaWNlKDEpO1xuICAgIG9ialt3b3Jkc1tpXV0gPSB0cnVlO1xuICAgIG9ialthbGxDYXBzXSA9IHRydWU7XG4gICAgb2JqW2ZpcnN0Q2FwXSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gbWV0YUhvb2soc3RyZWFtKSB7XG4gIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9dLyk7XG4gIHJldHVybiBcIm1ldGFcIjtcbn1cblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwidmhkbFwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykge1xuICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LFxuICAgICAgYXRvbXMgPSBwYXJzZXJDb25maWcuYXRvbXMgfHwgd29yZHMoXCJudWxsXCIpLFxuICAgICAgaG9va3MgPSBwYXJzZXJDb25maWcuaG9va3MgfHwge1wiYFwiOiBtZXRhSG9vaywgXCIkXCI6IG1ldGFIb29rfSxcbiAgICAgIG11bHRpTGluZVN0cmluZ3MgPSBwYXJzZXJDb25maWcubXVsdGlMaW5lU3RyaW5ncztcblxuICB2YXIga2V5d29yZHMgPSB3b3JkcyhcImFicyxhY2Nlc3MsYWZ0ZXIsYWxpYXMsYWxsLGFuZCxhcmNoaXRlY3R1cmUsYXJyYXksYXNzZXJ0LGF0dHJpYnV0ZSxiZWdpbixibG9jayxcIiArXG4gICAgICBcImJvZHksYnVmZmVyLGJ1cyxjYXNlLGNvbXBvbmVudCxjb25maWd1cmF0aW9uLGNvbnN0YW50LGRpc2Nvbm5lY3QsZG93bnRvLGVsc2UsZWxzaWYsZW5kLGVuZCBibG9jayxlbmQgY2FzZSxcIiArXG4gICAgICBcImVuZCBjb21wb25lbnQsZW5kIGZvcixlbmQgZ2VuZXJhdGUsZW5kIGlmLGVuZCBsb29wLGVuZCBwcm9jZXNzLGVuZCByZWNvcmQsZW5kIHVuaXRzLGVudGl0eSxleGl0LGZpbGUsZm9yLFwiICtcbiAgICAgIFwiZnVuY3Rpb24sZ2VuZXJhdGUsZ2VuZXJpYyxnZW5lcmljIG1hcCxncm91cCxndWFyZGVkLGlmLGltcHVyZSxpbixpbmVydGlhbCxpbm91dCxpcyxsYWJlbCxsaWJyYXJ5LGxpbmthZ2UsXCIgK1xuICAgICAgXCJsaXRlcmFsLGxvb3AsbWFwLG1vZCxuYW5kLG5ldyxuZXh0LG5vcixudWxsLG9mLG9uLG9wZW4sb3Isb3RoZXJzLG91dCxwYWNrYWdlLHBhY2thZ2UgYm9keSxwb3J0LHBvcnQgbWFwLFwiICtcbiAgICAgIFwicG9zdHBvbmVkLHByb2NlZHVyZSxwcm9jZXNzLHB1cmUscmFuZ2UscmVjb3JkLHJlZ2lzdGVyLHJlamVjdCxyZW0scmVwb3J0LHJldHVybixyb2wscm9yLHNlbGVjdCxzZXZlcml0eSxzaWduYWwsXCIgK1xuICAgICAgXCJzbGEsc2xsLHNyYSxzcmwsc3VidHlwZSx0aGVuLHRvLHRyYW5zcG9ydCx0eXBlLHVuYWZmZWN0ZWQsdW5pdHMsdW50aWwsdXNlLHZhcmlhYmxlLHdhaXQsd2hlbix3aGlsZSx3aXRoLHhub3IseG9yXCIpO1xuXG4gIHZhciBibG9ja0tleXdvcmRzID0gd29yZHMoXCJhcmNoaXRlY3R1cmUsZW50aXR5LGJlZ2luLGNhc2UscG9ydCxlbHNlLGVsc2lmLGVuZCxmb3IsZnVuY3Rpb24saWZcIik7XG5cbiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1smfH4+PCFcXClcXCgqIyVAK1xcLz0/XFw6O317LFxcLlxcXlxcLVxcW1xcXV0vO1xuICB2YXIgY3VyUHVuYztcblxuICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKGhvb2tzW2NoXSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGhvb2tzW2NoXShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAoY2ggPT0gJ1wiJykge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZzIoY2gpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoY2ggPT0gXCInXCIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoL1tcXFtcXF17fVxcKFxcKSw7XFw6XFwuXS8udGVzdChjaCkpIHtcbiAgICAgIGN1clB1bmMgPSBjaDtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoL1tcXGQnXS8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcLiddLyk7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9XG4gICAgaWYgKGNoID09IFwiLVwiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIi1cIikpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkge1xuICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTtcbiAgICAgIHJldHVybiBcIm9wZXJhdG9yXCI7XG4gICAgfVxuICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xcd1xcJF9dLyk7XG4gICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1ci50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgaWYgKGJsb2NrS2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgY3VyUHVuYyA9IFwibmV3c3RhdGVtZW50XCI7XG4gICAgICByZXR1cm4gXCJrZXl3b3JkXCI7XG4gICAgfVxuICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gXCJhdG9tXCI7XG4gICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge2VuZCA9IHRydWU7IGJyZWFrO31cbiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gXCItLVwiO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpXG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB0b2tlblN0cmluZzIocXVvdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7XG4gICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fVxuICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIi0tXCI7XG4gICAgICB9XG4gICAgICBpZiAoZW5kIHx8ICEoZXNjYXBlZCB8fCBtdWx0aUxpbmVTdHJpbmdzKSlcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICByZXR1cm4gXCJzdHJpbmctMlwiO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2KSB7XG4gICAgdGhpcy5pbmRlbnRlZCA9IGluZGVudGVkO1xuICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5hbGlnbiA9IGFsaWduO1xuICAgIHRoaXMucHJldiA9IHByZXY7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIGNvbCwgdHlwZSkge1xuICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUuaW5kZW50ZWQsIGNvbCwgdHlwZSwgbnVsbCwgc3RhdGUuY29udGV4dCk7XG4gIH1cbiAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkge1xuICAgIHZhciB0ID0gc3RhdGUuY29udGV4dC50eXBlO1xuICAgIGlmICh0ID09IFwiKVwiIHx8IHQgPT0gXCJdXCIgfHwgdCA9PSBcIn1cIilcbiAgICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDtcbiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjtcbiAgfVxuXG4gIC8vIEludGVyZmFjZVxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRva2VuaXplOiBudWxsLFxuICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsIFwidG9wXCIsIGZhbHNlKSxcbiAgICAgICAgaW5kZW50ZWQ6IDAsXG4gICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7XG4gICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7XG4gICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICBjdXJQdW5jID0gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IChzdGF0ZS50b2tlbml6ZSB8fCB0b2tlbkJhc2UpKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHN0eWxlID09IFwiY29tbWVudFwiIHx8IHN0eWxlID09IFwibWV0YVwiKSByZXR1cm4gc3R5bGU7XG4gICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IHRydWU7XG5cbiAgICAgIGlmICgoY3VyUHVuYyA9PSBcIjtcIiB8fCBjdXJQdW5jID09IFwiOlwiKSAmJiBjdHgudHlwZSA9PSBcInN0YXRlbWVudFwiKSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCJ7XCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwifVwiKTtcbiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCJbXCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwiXVwiKTtcbiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCIoXCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksIFwiKVwiKTtcbiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gXCJ9XCIpIHtcbiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICBpZiAoY3R4LnR5cGUgPT0gXCJ9XCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgICB3aGlsZSAoY3R4LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICAgIGVsc2UgaWYgKGN0eC50eXBlID09IFwifVwiIHx8IGN0eC50eXBlID09IFwidG9wXCIgfHwgKGN0eC50eXBlID09IFwic3RhdGVtZW50XCIgJiYgY3VyUHVuYyA9PSBcIm5ld3N0YXRlbWVudFwiKSlcbiAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgXCJzdGF0ZW1lbnRcIik7XG4gICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UgJiYgc3RhdGUudG9rZW5pemUgIT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCksIGN0eCA9IHN0YXRlLmNvbnRleHQsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gY3R4LnR5cGU7XG4gICAgICBpZiAoY3R4LnR5cGUgPT0gXCJzdGF0ZW1lbnRcIikgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChmaXJzdENoYXIgPT0gXCJ7XCIgPyAwIDogaW5kZW50VW5pdCk7XG4gICAgICBlbHNlIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7XG4gICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KTtcbiAgICB9LFxuXG4gICAgZWxlY3RyaWNDaGFyczogXCJ7fVwiXG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXZoZGxcIiwgXCJ2aGRsXCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbiAobW9kKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIikgey8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSxcbiAgICAgICAgcmVxdWlyZShcIi4uLy4uL2FkZG9uL21vZGUvb3ZlcmxheVwiKSxcbiAgICAgICAgcmVxdWlyZShcIi4uL3htbC94bWxcIiksXG4gICAgICAgIHJlcXVpcmUoXCIuLi9qYXZhc2NyaXB0L2phdmFzY3JpcHRcIiksXG4gICAgICAgIHJlcXVpcmUoXCIuLi9jb2ZmZWVzY3JpcHQvY29mZmVlc2NyaXB0XCIpLFxuICAgICAgICByZXF1aXJlKFwiLi4vY3NzL2Nzc1wiKSxcbiAgICAgICAgcmVxdWlyZShcIi4uL3Nhc3Mvc2Fzc1wiKSxcbiAgICAgICAgcmVxdWlyZShcIi4uL3N0eWx1cy9zdHlsdXNcIiksXG4gICAgICAgIHJlcXVpcmUoXCIuLi9wdWcvcHVnXCIpLFxuICAgICAgICByZXF1aXJlKFwiLi4vaGFuZGxlYmFycy9oYW5kbGViYXJzXCIpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgeyAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIixcbiAgICAgICAgICAgIFwiLi4vLi4vYWRkb24vbW9kZS9vdmVybGF5XCIsXG4gICAgICAgICAgICBcIi4uL3htbC94bWxcIixcbiAgICAgICAgICAgIFwiLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0XCIsXG4gICAgICAgICAgICBcIi4uL2NvZmZlZXNjcmlwdC9jb2ZmZWVzY3JpcHRcIixcbiAgICAgICAgICAgIFwiLi4vY3NzL2Nzc1wiLFxuICAgICAgICAgICAgXCIuLi9zYXNzL3Nhc3NcIixcbiAgICAgICAgICAgIFwiLi4vc3R5bHVzL3N0eWx1c1wiLFxuICAgICAgICAgICAgXCIuLi9wdWcvcHVnXCIsXG4gICAgICAgICAgICBcIi4uL2hhbmRsZWJhcnMvaGFuZGxlYmFyc1wiXSwgbW9kKTtcbiAgfSBlbHNlIHsgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG4gIH1cbn0pKGZ1bmN0aW9uIChDb2RlTWlycm9yKSB7XG4gIHZhciB0YWdMYW5ndWFnZXMgPSB7XG4gICAgc2NyaXB0OiBbXG4gICAgICBbXCJsYW5nXCIsIC9jb2ZmZWUoc2NyaXB0KT8vLCBcImNvZmZlZXNjcmlwdFwiXSxcbiAgICAgIFtcInR5cGVcIiwgL14oPzp0ZXh0fGFwcGxpY2F0aW9uKVxcLyg/OngtKT9jb2ZmZWUoPzpzY3JpcHQpPyQvLCBcImNvZmZlZXNjcmlwdFwiXSxcbiAgICAgIFtcImxhbmdcIiwgL15iYWJlbCQvLCBcImphdmFzY3JpcHRcIl0sXG4gICAgICBbXCJ0eXBlXCIsIC9edGV4dFxcL2JhYmVsJC8sIFwiamF2YXNjcmlwdFwiXSxcbiAgICAgIFtcInR5cGVcIiwgL150ZXh0XFwvZWNtYXNjcmlwdC1cXGQrJC8sIFwiamF2YXNjcmlwdFwiXVxuICAgIF0sXG4gICAgc3R5bGU6IFtcbiAgICAgIFtcImxhbmdcIiwgL15zdHlsdXMkL2ksIFwic3R5bHVzXCJdLFxuICAgICAgW1wibGFuZ1wiLCAvXnNhc3MkL2ksIFwic2Fzc1wiXSxcbiAgICAgIFtcImxhbmdcIiwgL15sZXNzJC9pLCBcInRleHQveC1sZXNzXCJdLFxuICAgICAgW1wibGFuZ1wiLCAvXnNjc3MkL2ksIFwidGV4dC94LXNjc3NcIl0sXG4gICAgICBbXCJ0eXBlXCIsIC9eKHRleHRcXC8pPyh4LSk/c3R5bCh1cyk/JC9pLCBcInN0eWx1c1wiXSxcbiAgICAgIFtcInR5cGVcIiwgL150ZXh0XFwvc2Fzcy9pLCBcInNhc3NcIl0sXG4gICAgICBbXCJ0eXBlXCIsIC9eKHRleHRcXC8pPyh4LSk/c2NzcyQvaSwgXCJ0ZXh0L3gtc2Nzc1wiXSxcbiAgICAgIFtcInR5cGVcIiwgL14odGV4dFxcLyk/KHgtKT9sZXNzJC9pLCBcInRleHQveC1sZXNzXCJdXG4gICAgXSxcbiAgICB0ZW1wbGF0ZTogW1xuICAgICAgW1wibGFuZ1wiLCAvXnZ1ZS10ZW1wbGF0ZSQvaSwgXCJ2dWVcIl0sXG4gICAgICBbXCJsYW5nXCIsIC9ecHVnJC9pLCBcInB1Z1wiXSxcbiAgICAgIFtcImxhbmdcIiwgL15oYW5kbGViYXJzJC9pLCBcImhhbmRsZWJhcnNcIl0sXG4gICAgICBbXCJ0eXBlXCIsIC9eKHRleHRcXC8pPyh4LSk/cHVnJC9pLCBcInB1Z1wiXSxcbiAgICAgIFtcInR5cGVcIiwgL150ZXh0XFwveC1oYW5kbGViYXJzLXRlbXBsYXRlJC9pLCBcImhhbmRsZWJhcnNcIl0sXG4gICAgICBbbnVsbCwgbnVsbCwgXCJ2dWUtdGVtcGxhdGVcIl1cbiAgICBdXG4gIH07XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwidnVlLXRlbXBsYXRlXCIsIGZ1bmN0aW9uIChjb25maWcsIHBhcnNlckNvbmZpZykge1xuICAgIHZhciBtdXN0YWNoZU92ZXJsYXkgPSB7XG4gICAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSkge1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFx7XFx7Lio/XFx9XFx9LykpIHJldHVybiBcIm1ldGEgbXVzdGFjaGVcIjtcbiAgICAgICAgd2hpbGUgKHN0cmVhbS5uZXh0KCkgJiYgIXN0cmVhbS5tYXRjaChcInt7XCIsIGZhbHNlKSkge31cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ29kZU1pcnJvci5vdmVybGF5TW9kZShDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBwYXJzZXJDb25maWcuYmFja2Ryb3AgfHwgXCJ0ZXh0L2h0bWxcIiksIG11c3RhY2hlT3ZlcmxheSk7XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZShcInZ1ZVwiLCBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgcmV0dXJuIENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHtuYW1lOiBcImh0bWxtaXhlZFwiLCB0YWdzOiB0YWdMYW5ndWFnZXN9KTtcbiAgfSwgXCJodG1sbWl4ZWRcIiwgXCJ4bWxcIiwgXCJqYXZhc2NyaXB0XCIsIFwiY29mZmVlc2NyaXB0XCIsIFwiY3NzXCIsIFwic2Fzc1wiLCBcInN0eWx1c1wiLCBcInB1Z1wiLCBcImhhbmRsZWJhcnNcIik7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwic2NyaXB0L3gtdnVlXCIsIFwidnVlXCIpO1xuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtdnVlXCIsIFwidnVlXCIpO1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4vLi4vYWRkb24vbW9kZS9zaW1wbGVcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi8uLi9hZGRvbi9tb2RlL3NpbXBsZVwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZVNpbXBsZU1vZGUoJ3dhc3QnLCB7XG4gIHN0YXJ0OiBbXG4gICAge3JlZ2V4OiAvWytcXC1dPyg/Om5hbig/OjoweFswLTlhLWZBLUZdKyk/fGluZmluaXR5fGluZnwweFswLTlhLWZBLUZdK1xcLj9bMC05YS1mQS1GXSpwWytcXC8tXT9cXGQrfFxcZCsoPzpcXC5cXGQqKT9bZUVdWytcXC1dP1xcZCp8XFxkK1xcLlxcZCp8MHhbMC05YS1mQS1GXSt8XFxkKykvLCB0b2tlbjogXCJudW1iZXJcIn0sXG4gICAge3JlZ2V4OiAvbXV0fG5vcHxibG9ja3xpZnx0aGVufGVsc2V8bG9vcHxicl9pZnxicl90YWJsZXxicnxjYWxsKF9pbmRpcmVjdCk/fGRyb3B8ZW5kfHJldHVybihfY2FsbChfaW5kaXJlY3QpPyk/fGxvY2FsXFwuKGdldHxzZXR8dGVlKXxnbG9iYWxcXC4oZ2V0fHNldCl8aSgzMnw2NClcXC4oc3RvcmUoOHwxNil8KGxvYWQoOHwxNilfW3N1XSkpfGk2NFxcLihsb2FkMzJfW3N1XXxzdG9yZTMyKXxbZmldKDMyfDY0KVxcLihjb25zdHxsb2FkfHN0b3JlKXxmKDMyfDY0KVxcLihhYnN8YWRkfGNlaWx8Y29weXNpZ258ZGl2fGVxfGZsb29yfFtnbF1bZXRdfG1heHxtaW58bXVsfG5lYXJlc3R8bmVnP3xzcXJ0fHN1Ynx0cnVuYyl8aSgzMnw2NClcXC4oYVtkbl1kfGNbbHRdenwoZGl2fHJlbSlfW3N1XXxlcXo/fFtnbF1bdGVdX1tzdV18bXVsfG5lfHBvcGNudHxyb3RbbHJdfHNoKGx8cl9bc3VdKXxzdWJ8eD9vcil8aTY0XFwuZXh0ZW5kX1tzdV1faTMyfGkzMlxcLndyYXBfaTY0fGkoMzJ8NjQpXFwudHJ1bmNfZigzMnw2NClfW3N1XXxmKDMyfDY0KVxcLmNvbnZlcnRfaSgzMnw2NClfW3N1XXxmNjRcXC5wcm9tb3RlX2YzMnxmMzJcXC5kZW1vdGVfZjY0fGYzMlxcLnJlaW50ZXJwcmV0X2kzMnxpMzJcXC5yZWludGVycHJldF9mMzJ8ZjY0XFwucmVpbnRlcnByZXRfaTY0fGk2NFxcLnJlaW50ZXJwcmV0X2Y2NHxzZWxlY3R8dW5yZWFjaGFibGV8Y3VycmVudF9tZW1vcnl8bWVtb3J5KFxcLigoYXRvbWljXFwuKG5vdGlmeXx3YWl0KDMyfDY0KSkpfGdyb3d8c2l6ZSkpP3x0eXBlfGZ1bmN8cGFyYW18cmVzdWx0fGxvY2FsfGdsb2JhbHxtb2R1bGV8dGFibGV8c3RhcnR8ZWxlbXxkYXRhfGFsaWdufG9mZnNldHxpbXBvcnR8ZXhwb3J0fGk2NFxcLmF0b21pY1xcLihsb2FkMzJfdXxzdG9yZTMyfHJtdzMyXFwuKGFbZG5dZHxzdWJ8eD9vcnwoY21wKT94Y2hnKV91KXxpKDMyfDY0KVxcLmF0b21pY1xcLihsb2FkKCg4fDE2KV91KT98c3RvcmUoOHwxNik/fHJtdyhcXC4oYVtkbl1kfHN1Ynx4P29yfChjbXApP3hjaGcpfCg4fDE2KVxcLihhW2RuXWR8c3VifHg/b3J8KGNtcCk/eGNoZylfdSkpfHYxMjhcXC4obG9hZHxzdG9yZXxjb25zdHxub3R8YW5kbm90fGFuZHxvcnx4b3J8Yml0c2VsZWN0KXxpKDh4MTZ8MTZ4OHwzMng0fDY0eDIpXFwuKHNobHxzaHJfW3N1XSl8aSg4eDE2fDE2eDgpXFwuKGV4dHJhY3RfbGFuZV9bc3VdfCgoYWRkfHN1Yilfc2F0dXJhdGVfW3N1XSl8YXZncl91KXwoaSg4eDE2fDE2eDh8MzJ4NHw2NHgyKXxmKDMyeDR8NjR4MikpXFwuKHNwbGF0fHJlcGxhY2VfbGFuZXxuZWd8YWRkfHN1Yil8aSg4eDE2fDE2eDh8MzJ4NClcXC4oZXF8bmV8KFtsZ11bdGVdX1tzdV0pfGFic3xhbnlfdHJ1ZXxhbGxfdHJ1ZXxiaXRtYXNrfCgobWlufG1heClfW3N1XSkpfGYoMzJ4NHw2NHgyKVxcLihlcXxuZXxbbGddW3RlXXxhYnN8c3FydHxtdWx8ZGl2fG1pbnxtYXgpfFtmaV0oMzJ4NHw2NHgyKVxcLmV4dHJhY3RfbGFuZXx2OHgxNlxcLihzaHVmZmxlfHN3aXp6bGUpfGkxNng4XFwuKGxvYWQ4eDhfW3N1XXxuYXJyb3dfaTMyeDRfW3N1XXx3aWRlbl8obG93fGhpZ2gpX2k4eDE2X1tzdV18bXVsKXxpMzJ4NFxcLihsb2FkMTZ4NF9bc3VdfHdpZGVuXyhsb3d8aGlnaClfaTE2eDhfW3N1XXxtdWx8dHJ1bmNfc2F0X2YzMng0X1tzdV0pfGk2NHgyXFwuKGxvYWQzMngyX1tzdV18bXVsKXwodig4eDE2fDE2eDh8MzJ4NHw2NHgyKVxcLmxvYWRfc3BsYXQpfGk4eDE2XFwubmFycm93X2kxNng4X1tzdV18ZjMyeDRcXC5jb252ZXJ0X2kzMng0X1tzdV0vLCB0b2tlbjogXCJrZXl3b3JkXCJ9LFxuICAgIHtyZWdleDogL1xcYihhbnlmdW5jfFtmaV0oMzJ8NjQpKVxcYi8sIHRva2VuOiBcImF0b21cIn0sXG4gICAge3JlZ2V4OiAvXFwkKFthLXpBLVowLTlfYFxcK1xcLVxcKlxcL1xcXFxcXF5+PTw+IVxcP0AjJCUmfDpcXC5dKykvLCB0b2tlbjogXCJ2YXJpYWJsZS0yXCJ9LFxuICAgIHtyZWdleDogL1wiKD86W15cIlxcXFxcXHgwMC1cXHgxZlxceDdmXXxcXFxcW250XFxcXCdcIl18XFxcXFswLTlhLWZBLUZdWzAtOWEtZkEtRl0pKlwiLywgdG9rZW46IFwic3RyaW5nXCJ9LFxuICAgIHtyZWdleDogL1xcKDsuKj8vLCB0b2tlbjogXCJjb21tZW50XCIsIG5leHQ6IFwiY29tbWVudFwifSxcbiAgICB7cmVnZXg6IC87Oy4qJC8sIHRva2VuOiBcImNvbW1lbnRcIn0sXG4gICAge3JlZ2V4OiAvXFwoLywgaW5kZW50OiB0cnVlfSxcbiAgICB7cmVnZXg6IC9cXCkvLCBkZWRlbnQ6IHRydWV9LFxuICBdLFxuXG4gIGNvbW1lbnQ6IFtcbiAgICB7cmVnZXg6IC8uKj87XFwpLywgdG9rZW46IFwiY29tbWVudFwiLCBuZXh0OiBcInN0YXJ0XCJ9LFxuICAgIHtyZWdleDogLy4qLywgdG9rZW46IFwiY29tbWVudFwifSxcbiAgXSxcblxuICBtZXRhOiB7XG4gICAgZG9udEluZGVudFN0YXRlczogWydjb21tZW50J10sXG4gIH0sXG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9pc3N1ZXMvOTgxIG1lbnRpb25zIHRleHQvd2ViYXNzZW1ibHksXG4vLyB3aGljaCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBjaG9pY2UsIGFsdGhvdWdoIGl0J3Mgbm90IHN0YW5kYXJkIHJpZ2h0IG5vdy5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvd2ViYXNzZW1ibHlcIiwgXCJ3YXN0XCIpO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gd29yZFJlZ2V4cCh3b3Jkcykge1xuICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oKFwiICsgd29yZHMuam9pbihcIil8KFwiKSArIFwiKSlcXFxcYlwiKTtcbn07XG5cbnZhciBidWlsdGluQXJyYXkgPSBbXG4gIFwiQ2xhbXBcIixcbiAgXCJDb25zdHJ1Y3RvclwiLFxuICBcIkVuZm9yY2VSYW5nZVwiLFxuICBcIkV4cG9zZWRcIixcbiAgXCJJbXBsaWNpdFRoaXNcIixcbiAgXCJHbG9iYWxcIiwgXCJQcmltYXJ5R2xvYmFsXCIsXG4gIFwiTGVnYWN5QXJyYXlDbGFzc1wiLFxuICBcIkxlZ2FjeVVuZW51bWVyYWJsZU5hbWVkUHJvcGVydGllc1wiLFxuICBcIkxlbmllbnRUaGlzXCIsXG4gIFwiTmFtZWRDb25zdHJ1Y3RvclwiLFxuICBcIk5ld09iamVjdFwiLFxuICBcIk5vSW50ZXJmYWNlT2JqZWN0XCIsXG4gIFwiT3ZlcnJpZGVCdWlsdGluc1wiLFxuICBcIlB1dEZvcndhcmRzXCIsXG4gIFwiUmVwbGFjZWFibGVcIixcbiAgXCJTYW1lT2JqZWN0XCIsXG4gIFwiVHJlYXROb25PYmplY3RBc051bGxcIixcbiAgXCJUcmVhdE51bGxBc1wiLFxuICAgIFwiRW1wdHlTdHJpbmdcIixcbiAgXCJVbmZvcmdlYWJsZVwiLFxuICBcIlVuc2NvcGVhYmxlXCJcbl07XG52YXIgYnVpbHRpbnMgPSB3b3JkUmVnZXhwKGJ1aWx0aW5BcnJheSk7XG5cbnZhciB0eXBlQXJyYXkgPSBbXG4gIFwidW5zaWduZWRcIiwgXCJzaG9ydFwiLCBcImxvbmdcIiwgICAgICAgICAgICAgICAgICAvLyBVbnNpZ25lZEludGVnZXJUeXBlXG4gIFwidW5yZXN0cmljdGVkXCIsIFwiZmxvYXRcIiwgXCJkb3VibGVcIiwgICAgICAgICAgICAvLyBVbnJlc3RyaWN0ZWRGbG9hdFR5cGVcbiAgXCJib29sZWFuXCIsIFwiYnl0ZVwiLCBcIm9jdGV0XCIsICAgICAgICAgICAgICAgICAgIC8vIFJlc3Qgb2YgUHJpbWl0aXZlVHlwZVxuICBcIlByb21pc2VcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9taXNlVHlwZVxuICBcIkFycmF5QnVmZmVyXCIsIFwiRGF0YVZpZXdcIiwgXCJJbnQ4QXJyYXlcIiwgXCJJbnQxNkFycmF5XCIsIFwiSW50MzJBcnJheVwiLFxuICBcIlVpbnQ4QXJyYXlcIiwgXCJVaW50MTZBcnJheVwiLCBcIlVpbnQzMkFycmF5XCIsIFwiVWludDhDbGFtcGVkQXJyYXlcIixcbiAgXCJGbG9hdDMyQXJyYXlcIiwgXCJGbG9hdDY0QXJyYXlcIiwgICAgICAgICAgICAgICAvLyBCdWZmZXJSZWxhdGVkVHlwZVxuICBcIkJ5dGVTdHJpbmdcIiwgXCJET01TdHJpbmdcIiwgXCJVU1ZTdHJpbmdcIiwgXCJzZXF1ZW5jZVwiLCBcIm9iamVjdFwiLCBcIlJlZ0V4cFwiLFxuICBcIkVycm9yXCIsIFwiRE9NRXhjZXB0aW9uXCIsIFwiRnJvemVuQXJyYXlcIiwgICAgICAgLy8gUmVzdCBvZiBOb25BbnlUeXBlXG4gIFwiYW55XCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3Qgb2YgU2luZ2xlVHlwZVxuICBcInZvaWRcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXN0IG9mIFJldHVyblR5cGVcbl07XG52YXIgdHlwZXMgPSB3b3JkUmVnZXhwKHR5cGVBcnJheSk7XG5cbnZhciBrZXl3b3JkQXJyYXkgPSBbXG4gIFwiYXR0cmlidXRlXCIsIFwiY2FsbGJhY2tcIiwgXCJjb25zdFwiLCBcImRlbGV0ZXJcIiwgXCJkaWN0aW9uYXJ5XCIsIFwiZW51bVwiLCBcImdldHRlclwiLFxuICBcImltcGxlbWVudHNcIiwgXCJpbmhlcml0XCIsIFwiaW50ZXJmYWNlXCIsIFwiaXRlcmFibGVcIiwgXCJsZWdhY3ljYWxsZXJcIiwgXCJtYXBsaWtlXCIsXG4gIFwicGFydGlhbFwiLCBcInJlcXVpcmVkXCIsIFwic2VyaWFsaXplclwiLCBcInNldGxpa2VcIiwgXCJzZXR0ZXJcIiwgXCJzdGF0aWNcIixcbiAgXCJzdHJpbmdpZmllclwiLCBcInR5cGVkZWZcIiwgICAgICAgICAgICAgICAgICAgICAvLyBBcmd1bWVudE5hbWVLZXl3b3JkIGV4Y2VwdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXCJ1bnJlc3RyaWN0ZWRcIlxuICBcIm9wdGlvbmFsXCIsIFwicmVhZG9ubHlcIiwgXCJvclwiXG5dO1xudmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChrZXl3b3JkQXJyYXkpO1xuXG52YXIgYXRvbUFycmF5ID0gW1xuICBcInRydWVcIiwgXCJmYWxzZVwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvb2xlYW5MaXRlcmFsXG4gIFwiSW5maW5pdHlcIiwgXCJOYU5cIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmxvYXRMaXRlcmFsXG4gIFwibnVsbFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3Qgb2YgQ29uc3RWYWx1ZVxuXTtcbnZhciBhdG9tcyA9IHdvcmRSZWdleHAoYXRvbUFycmF5KTtcblxuQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImhpbnRXb3Jkc1wiLCBcIndlYmlkbFwiLFxuICAgIGJ1aWx0aW5BcnJheS5jb25jYXQodHlwZUFycmF5KS5jb25jYXQoa2V5d29yZEFycmF5KS5jb25jYXQoYXRvbUFycmF5KSk7XG5cbnZhciBzdGFydERlZkFycmF5ID0gW1wiY2FsbGJhY2tcIiwgXCJkaWN0aW9uYXJ5XCIsIFwiZW51bVwiLCBcImludGVyZmFjZVwiXTtcbnZhciBzdGFydERlZnMgPSB3b3JkUmVnZXhwKHN0YXJ0RGVmQXJyYXkpO1xuXG52YXIgZW5kRGVmQXJyYXkgPSBbXCJ0eXBlZGVmXCJdO1xudmFyIGVuZERlZnMgPSB3b3JkUmVnZXhwKGVuZERlZkFycmF5KTtcblxudmFyIHNpbmdsZU9wZXJhdG9ycyA9IC9eWzo8PT4/XS87XG52YXIgaW50ZWdlcnMgPSAvXi0/KFsxLTldWzAtOV0qfDBbWHhdWzAtOUEtRmEtZl0rfDBbMC03XSopLztcbnZhciBmbG9hdHMgPSAvXi0/KChbMC05XStcXC5bMC05XSp8WzAtOV0qXFwuWzAtOV0rKShbRWVdWystXT9bMC05XSspP3xbMC05XStbRWVdWystXT9bMC05XSspLztcbnZhciBpZGVudGlmaWVycyA9IC9eXz9bQS1aYS16XVswLTlBLVpfYS16LV0qLztcbnZhciBpZGVudGlmaWVyc0VuZCA9IC9eXz9bQS1aYS16XVswLTlBLVpfYS16LV0qKD89XFxzKjspLztcbnZhciBzdHJpbmdzID0gL15cIlteXCJdKlwiLztcbnZhciBtdWx0aWxpbmVDb21tZW50cyA9IC9eXFwvXFwqLio/XFwqXFwvLztcbnZhciBtdWx0aWxpbmVDb21tZW50c1N0YXJ0ID0gL15cXC9cXCouKi87XG52YXIgbXVsdGlsaW5lQ29tbWVudHNFbmQgPSAvXi4qP1xcKlxcLy87XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbihzdHJlYW0sIHN0YXRlKSB7XG4gIC8vIHdoaXRlc3BhY2VcbiAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcblxuICAvLyBjb21tZW50XG4gIGlmIChzdGF0ZS5pbkNvbW1lbnQpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKG11bHRpbGluZUNvbW1lbnRzRW5kKSkge1xuICAgICAgc3RhdGUuaW5Db21tZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gICAgfVxuICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cbiAgaWYgKHN0cmVhbS5tYXRjaChcIi8vXCIpKSB7XG4gICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgfVxuICBpZiAoc3RyZWFtLm1hdGNoKG11bHRpbGluZUNvbW1lbnRzKSkgcmV0dXJuIFwiY29tbWVudFwiO1xuICBpZiAoc3RyZWFtLm1hdGNoKG11bHRpbGluZUNvbW1lbnRzU3RhcnQpKSB7XG4gICAgc3RhdGUuaW5Db21tZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cblxuICAvLyBpbnRlZ2VyIGFuZCBmbG9hdFxuICBpZiAoc3RyZWFtLm1hdGNoKC9eLT9bMC05XFwuXS8sIGZhbHNlKSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goaW50ZWdlcnMpIHx8IHN0cmVhbS5tYXRjaChmbG9hdHMpKSByZXR1cm4gXCJudW1iZXJcIjtcbiAgfVxuXG4gIC8vIHN0cmluZ1xuICBpZiAoc3RyZWFtLm1hdGNoKHN0cmluZ3MpKSByZXR1cm4gXCJzdHJpbmdcIjtcblxuICAvLyBpZGVudGlmaWVyXG4gIGlmIChzdGF0ZS5zdGFydERlZiAmJiBzdHJlYW0ubWF0Y2goaWRlbnRpZmllcnMpKSByZXR1cm4gXCJkZWZcIjtcblxuICBpZiAoc3RhdGUuZW5kRGVmICYmIHN0cmVhbS5tYXRjaChpZGVudGlmaWVyc0VuZCkpIHtcbiAgICBzdGF0ZS5lbmREZWYgPSBmYWxzZTtcbiAgICByZXR1cm4gXCJkZWZcIjtcbiAgfVxuXG4gIGlmIChzdHJlYW0ubWF0Y2goa2V5d29yZHMpKSByZXR1cm4gXCJrZXl3b3JkXCI7XG5cbiAgaWYgKHN0cmVhbS5tYXRjaCh0eXBlcykpIHtcbiAgICB2YXIgbGFzdFRva2VuID0gc3RhdGUubGFzdFRva2VuO1xuICAgIHZhciBuZXh0VG9rZW4gPSAoc3RyZWFtLm1hdGNoKC9eXFxzKiguKz8pXFxiLywgZmFsc2UpIHx8IFtdKVsxXTtcblxuICAgIGlmIChsYXN0VG9rZW4gPT09IFwiOlwiIHx8IGxhc3RUb2tlbiA9PT0gXCJpbXBsZW1lbnRzXCIgfHxcbiAgICAgICAgbmV4dFRva2VuID09PSBcImltcGxlbWVudHNcIiB8fCBuZXh0VG9rZW4gPT09IFwiPVwiKSB7XG4gICAgICAvLyBVc2VkIGFzIGlkZW50aWZpZXJcbiAgICAgIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlZCBhcyB0eXBlXG4gICAgICByZXR1cm4gXCJ2YXJpYWJsZS0zXCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0cmVhbS5tYXRjaChidWlsdGlucykpIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgaWYgKHN0cmVhbS5tYXRjaChhdG9tcykpIHJldHVybiBcImF0b21cIjtcbiAgaWYgKHN0cmVhbS5tYXRjaChpZGVudGlmaWVycykpIHJldHVybiBcInZhcmlhYmxlXCI7XG5cbiAgLy8gb3RoZXJcbiAgaWYgKHN0cmVhbS5tYXRjaChzaW5nbGVPcGVyYXRvcnMpKSByZXR1cm4gXCJvcGVyYXRvclwiO1xuXG4gIC8vIHVucmVjb2duaXplZFxuICBzdHJlYW0ubmV4dCgpO1xuICByZXR1cm4gbnVsbDtcbn07XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcIndlYmlkbFwiLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIElzIGluIG11bHRpbGluZSBjb21tZW50XG4gICAgICAgIGluQ29tbWVudDogZmFsc2UsXG4gICAgICAgIC8vIExhc3Qgbm9uLXdoaXRlc3BhY2UsIG1hdGNoZWQgdG9rZW5cbiAgICAgICAgbGFzdFRva2VuOiBcIlwiLFxuICAgICAgICAvLyBOZXh0IHRva2VuIGlzIGEgZGVmaW5pdGlvblxuICAgICAgICBzdGFydERlZjogZmFsc2UsXG4gICAgICAgIC8vIExhc3QgdG9rZW4gb2YgdGhlIHN0YXRlbWVudCBpcyBhIGRlZmluaXRpb25cbiAgICAgICAgZW5kRGVmOiBmYWxzZVxuICAgICAgfTtcbiAgICB9LFxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgc3R5bGUgPSByZWFkVG9rZW4oc3RyZWFtLCBzdGF0ZSk7XG5cbiAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgICAgc3RhdGUubGFzdFRva2VuID0gY3VyO1xuICAgICAgICBpZiAoc3R5bGUgPT09IFwia2V5d29yZFwiKSB7XG4gICAgICAgICAgc3RhdGUuc3RhcnREZWYgPSBzdGFydERlZnMudGVzdChjdXIpO1xuICAgICAgICAgIHN0YXRlLmVuZERlZiA9IHN0YXRlLmVuZERlZiB8fCBlbmREZWZzLnRlc3QoY3VyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5zdGFydERlZiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9XG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LXdlYmlkbFwiLCBcIndlYmlkbFwiKTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJ4cXVlcnlcIiwgZnVuY3Rpb24oKSB7XG5cbiAgLy8gVGhlIGtleXdvcmRzIG9iamVjdCBpcyBzZXQgdG8gdGhlIHJlc3VsdCBvZiB0aGlzIHNlbGYgZXhlY3V0aW5nXG4gIC8vIGZ1bmN0aW9uLiBFYWNoIGtleXdvcmQgaXMgYSBwcm9wZXJ0eSBvZiB0aGUga2V5d29yZHMgb2JqZWN0IHdob3NlXG4gIC8vIHZhbHVlIGlzIHt0eXBlOiBhdHlwZSwgc3R5bGU6IGFzdHlsZX1cbiAgdmFyIGtleXdvcmRzID0gZnVuY3Rpb24oKXtcbiAgICAvLyBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdXNlZCB0byBidWlsZCBrZXl3b3JkcyBvYmplY3RcbiAgICBmdW5jdGlvbiBrdyh0eXBlKSB7cmV0dXJuIHt0eXBlOiB0eXBlLCBzdHlsZTogXCJrZXl3b3JkXCJ9O31cbiAgICB2YXIgb3BlcmF0b3IgPSBrdyhcIm9wZXJhdG9yXCIpXG4gICAgICAsIGF0b20gPSB7dHlwZTogXCJhdG9tXCIsIHN0eWxlOiBcImF0b21cIn1cbiAgICAgICwgcHVuY3R1YXRpb24gPSB7dHlwZTogXCJwdW5jdHVhdGlvblwiLCBzdHlsZTogbnVsbH1cbiAgICAgICwgcXVhbGlmaWVyID0ge3R5cGU6IFwiYXhpc19zcGVjaWZpZXJcIiwgc3R5bGU6IFwicXVhbGlmaWVyXCJ9O1xuXG4gICAgLy8ga3dPYmogaXMgd2hhdCBpcyByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uIGF0IHRoZSBlbmRcbiAgICB2YXIga3dPYmogPSB7XG4gICAgICAnLCc6IHB1bmN0dWF0aW9uXG4gICAgfTtcblxuICAgIC8vIGEgbGlzdCBvZiAnYmFzaWMnIGtleXdvcmRzLiBGb3IgZWFjaCBhZGQgYSBwcm9wZXJ0eSB0byBrd09iaiB3aXRoIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHt0eXBlOiBiYXNpY1tpXSwgc3R5bGU6IFwia2V5d29yZFwifSBlLmcuICdhZnRlcicgLS0+IHt0eXBlOiBcImFmdGVyXCIsIHN0eWxlOiBcImtleXdvcmRcIn1cbiAgICB2YXIgYmFzaWMgPSBbJ2FmdGVyJywgJ2FsbCcsICdhbGxvd2luZycsICdhbmNlc3RvcicsICdhbmNlc3Rvci1vci1zZWxmJywgJ2FueScsICdhcnJheScsICdhcycsXG4gICAgJ2FzY2VuZGluZycsICdhdCcsICdhdHRyaWJ1dGUnLCAnYmFzZS11cmknLCAnYmVmb3JlJywgJ2JvdW5kYXJ5LXNwYWNlJywgJ2J5JywgJ2Nhc2UnLCAnY2FzdCcsXG4gICAgJ2Nhc3RhYmxlJywgJ2NhdGNoJywgJ2NoaWxkJywgJ2NvbGxhdGlvbicsICdjb21tZW50JywgJ2NvbnN0cnVjdGlvbicsICdjb250YWlucycsICdjb250ZW50JyxcbiAgICAnY29udGV4dCcsICdjb3B5JywgJ2NvcHktbmFtZXNwYWNlcycsICdjb3VudCcsICdkZWNpbWFsLWZvcm1hdCcsICdkZWNsYXJlJywgJ2RlZmF1bHQnLCAnZGVsZXRlJyxcbiAgICAnZGVzY2VuZGFudCcsICdkZXNjZW5kYW50LW9yLXNlbGYnLCAnZGVzY2VuZGluZycsICdkaWFjcml0aWNzJywgJ2RpZmZlcmVudCcsICdkaXN0YW5jZScsXG4gICAgJ2RvY3VtZW50JywgJ2RvY3VtZW50LW5vZGUnLCAnZWxlbWVudCcsICdlbHNlJywgJ2VtcHR5JywgJ2VtcHR5LXNlcXVlbmNlJywgJ2VuY29kaW5nJywgJ2VuZCcsXG4gICAgJ2VudGlyZScsICdldmVyeScsICdleGFjdGx5JywgJ2V4Y2VwdCcsICdleHRlcm5hbCcsICdmaXJzdCcsICdmb2xsb3dpbmcnLCAnZm9sbG93aW5nLXNpYmxpbmcnLFxuICAgICdmb3InLCAnZnJvbScsICdmdGFuZCcsICdmdG5vdCcsICdmdC1vcHRpb24nLCAnZnRvcicsICdmdW5jdGlvbicsICdmdXp6eScsICdncmVhdGVzdCcsICdncm91cCcsXG4gICAgJ2lmJywgJ2ltcG9ydCcsICdpbicsICdpbmhlcml0JywgJ2luc2Vuc2l0aXZlJywgJ2luc2VydCcsICdpbnN0YW5jZScsICdpbnRlcnNlY3QnLCAnaW50bycsXG4gICAgJ2ludm9rZScsICdpcycsICdpdGVtJywgJ2xhbmd1YWdlJywgJ2xhc3QnLCAnbGF4JywgJ2xlYXN0JywgJ2xldCcsICdsZXZlbHMnLCAnbG93ZXJjYXNlJywgJ21hcCcsXG4gICAgJ21vZGlmeScsICdtb2R1bGUnLCAnbW9zdCcsICduYW1lc3BhY2UnLCAnbmV4dCcsICdubycsICdub2RlJywgJ25vZGVzJywgJ25vLWluaGVyaXQnLFxuICAgICduby1wcmVzZXJ2ZScsICdub3QnLCAnb2NjdXJzJywgJ29mJywgJ29ubHknLCAnb3B0aW9uJywgJ29yZGVyJywgJ29yZGVyZWQnLCAnb3JkZXJpbmcnLFxuICAgICdwYXJhZ3JhcGgnLCAncGFyYWdyYXBocycsICdwYXJlbnQnLCAncGhyYXNlJywgJ3ByZWNlZGluZycsICdwcmVjZWRpbmctc2libGluZycsICdwcmVzZXJ2ZScsXG4gICAgJ3ByZXZpb3VzJywgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nLCAncmVsYXRpb25zaGlwJywgJ3JlbmFtZScsICdyZXBsYWNlJywgJ3JldHVybicsXG4gICAgJ3JldmFsaWRhdGlvbicsICdzYW1lJywgJ3NhdGlzZmllcycsICdzY2hlbWEnLCAnc2NoZW1hLWF0dHJpYnV0ZScsICdzY2hlbWEtZWxlbWVudCcsICdzY29yZScsXG4gICAgJ3NlbGYnLCAnc2Vuc2l0aXZlJywgJ3NlbnRlbmNlJywgJ3NlbnRlbmNlcycsICdzZXF1ZW5jZScsICdza2lwJywgJ3NsaWRpbmcnLCAnc29tZScsICdzdGFibGUnLFxuICAgICdzdGFydCcsICdzdGVtbWluZycsICdzdG9wJywgJ3N0cmljdCcsICdzdHJpcCcsICdzd2l0Y2gnLCAndGV4dCcsICd0aGVuJywgJ3RoZXNhdXJ1cycsICd0aW1lcycsXG4gICAgJ3RvJywgJ3RyYW5zZm9ybScsICd0cmVhdCcsICd0cnknLCAndHVtYmxpbmcnLCAndHlwZScsICd0eXBlc3dpdGNoJywgJ3VuaW9uJywgJ3Vub3JkZXJlZCcsXG4gICAgJ3VwZGF0ZScsICd1cGRhdGluZycsICd1cHBlcmNhc2UnLCAndXNpbmcnLCAndmFsaWRhdGUnLCAndmFsdWUnLCAndmFyaWFibGUnLCAndmVyc2lvbicsXG4gICAgJ3dlaWdodCcsICd3aGVuJywgJ3doZXJlJywgJ3dpbGRjYXJkcycsICd3aW5kb3cnLCAnd2l0aCcsICd3aXRob3V0JywgJ3dvcmQnLCAnd29yZHMnLCAneHF1ZXJ5J107XG4gICAgZm9yKHZhciBpPTAsIGw9YmFzaWMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7IGt3T2JqW2Jhc2ljW2ldXSA9IGt3KGJhc2ljW2ldKTt9O1xuXG4gICAgLy8gYSBsaXN0IG9mIHR5cGVzLiBGb3IgZWFjaCBhZGQgYSBwcm9wZXJ0eSB0byBrd09iaiB3aXRoIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHt0eXBlOiBcImF0b21cIiwgc3R5bGU6IFwiYXRvbVwifVxuICAgIHZhciB0eXBlcyA9IFsneHM6YW55QXRvbWljVHlwZScsICd4czphbnlTaW1wbGVUeXBlJywgJ3hzOmFueVR5cGUnLCAneHM6YW55VVJJJyxcbiAgICAneHM6YmFzZTY0QmluYXJ5JywgJ3hzOmJvb2xlYW4nLCAneHM6Ynl0ZScsICd4czpkYXRlJywgJ3hzOmRhdGVUaW1lJywgJ3hzOmRhdGVUaW1lU3RhbXAnLFxuICAgICd4czpkYXlUaW1lRHVyYXRpb24nLCAneHM6ZGVjaW1hbCcsICd4czpkb3VibGUnLCAneHM6ZHVyYXRpb24nLCAneHM6RU5USVRJRVMnLCAneHM6RU5USVRZJyxcbiAgICAneHM6ZmxvYXQnLCAneHM6Z0RheScsICd4czpnTW9udGgnLCAneHM6Z01vbnRoRGF5JywgJ3hzOmdZZWFyJywgJ3hzOmdZZWFyTW9udGgnLCAneHM6aGV4QmluYXJ5JyxcbiAgICAneHM6SUQnLCAneHM6SURSRUYnLCAneHM6SURSRUZTJywgJ3hzOmludCcsICd4czppbnRlZ2VyJywgJ3hzOml0ZW0nLCAneHM6amF2YScsICd4czpsYW5ndWFnZScsXG4gICAgJ3hzOmxvbmcnLCAneHM6TmFtZScsICd4czpOQ05hbWUnLCAneHM6bmVnYXRpdmVJbnRlZ2VyJywgJ3hzOk5NVE9LRU4nLCAneHM6Tk1UT0tFTlMnLFxuICAgICd4czpub25OZWdhdGl2ZUludGVnZXInLCAneHM6bm9uUG9zaXRpdmVJbnRlZ2VyJywgJ3hzOm5vcm1hbGl6ZWRTdHJpbmcnLCAneHM6Tk9UQVRJT04nLFxuICAgICd4czpudW1lcmljJywgJ3hzOnBvc2l0aXZlSW50ZWdlcicsICd4czpwcmVjaXNpb25EZWNpbWFsJywgJ3hzOlFOYW1lJywgJ3hzOnNob3J0JywgJ3hzOnN0cmluZycsXG4gICAgJ3hzOnRpbWUnLCAneHM6dG9rZW4nLCAneHM6dW5zaWduZWRCeXRlJywgJ3hzOnVuc2lnbmVkSW50JywgJ3hzOnVuc2lnbmVkTG9uZycsXG4gICAgJ3hzOnVuc2lnbmVkU2hvcnQnLCAneHM6dW50eXBlZCcsICd4czp1bnR5cGVkQXRvbWljJywgJ3hzOnllYXJNb250aER1cmF0aW9uJ107XG4gICAgZm9yKHZhciBpPTAsIGw9dHlwZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7IGt3T2JqW3R5cGVzW2ldXSA9IGF0b207fTtcblxuICAgIC8vIGVhY2ggb3BlcmF0b3Igd2lsbCBhZGQgYSBwcm9wZXJ0eSB0byBrd09iaiB3aXRoIHZhbHVlIG9mIHt0eXBlOiBcIm9wZXJhdG9yXCIsIHN0eWxlOiBcImtleXdvcmRcIn1cbiAgICB2YXIgb3BlcmF0b3JzID0gWydlcScsICduZScsICdsdCcsICdsZScsICdndCcsICdnZScsICc6PScsICc9JywgJz4nLCAnPj0nLCAnPCcsICc8PScsICcuJywgJ3wnLCAnPycsICdhbmQnLCAnb3InLCAnZGl2JywgJ2lkaXYnLCAnbW9kJywgJyonLCAnLycsICcrJywgJy0nXTtcbiAgICBmb3IodmFyIGk9MCwgbD1vcGVyYXRvcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7IGt3T2JqW29wZXJhdG9yc1tpXV0gPSBvcGVyYXRvcjt9O1xuXG4gICAgLy8gZWFjaCBheGlzX3NwZWNpZmllcnMgd2lsbCBhZGQgYSBwcm9wZXJ0eSB0byBrd09iaiB3aXRoIHZhbHVlIG9mIHt0eXBlOiBcImF4aXNfc3BlY2lmaWVyXCIsIHN0eWxlOiBcInF1YWxpZmllclwifVxuICAgIHZhciBheGlzX3NwZWNpZmllcnMgPSBbXCJzZWxmOjpcIiwgXCJhdHRyaWJ1dGU6OlwiLCBcImNoaWxkOjpcIiwgXCJkZXNjZW5kYW50OjpcIiwgXCJkZXNjZW5kYW50LW9yLXNlbGY6OlwiLCBcInBhcmVudDo6XCIsXG4gICAgXCJhbmNlc3Rvcjo6XCIsIFwiYW5jZXN0b3Itb3Itc2VsZjo6XCIsIFwiZm9sbG93aW5nOjpcIiwgXCJwcmVjZWRpbmc6OlwiLCBcImZvbGxvd2luZy1zaWJsaW5nOjpcIiwgXCJwcmVjZWRpbmctc2libGluZzo6XCJdO1xuICAgIGZvcih2YXIgaT0wLCBsPWF4aXNfc3BlY2lmaWVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHsga3dPYmpbYXhpc19zcGVjaWZpZXJzW2ldXSA9IHF1YWxpZmllcjsgfTtcblxuICAgIHJldHVybiBrd09iajtcbiAgfSgpO1xuXG4gIGZ1bmN0aW9uIGNoYWluKHN0cmVhbSwgc3RhdGUsIGYpIHtcbiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7XG4gICAgcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7XG4gIH1cblxuICAvLyB0aGUgcHJpbWFyeSBtb2RlIHRva2VuaXplclxuICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCksXG4gICAgICAgIG1pZ2h0QmVGdW5jdGlvbiA9IGZhbHNlLFxuICAgICAgICBpc0VRTmFtZSA9IGlzRVFOYW1lQWhlYWQoc3RyZWFtKTtcblxuICAgIC8vIGFuIFhNTCB0YWcgKGlmIG5vdCBpbiBzb21lIHN1YiwgY2hhaW5lZCB0b2tlbml6ZXIpXG4gICAgaWYgKGNoID09IFwiPFwiKSB7XG4gICAgICBpZihzdHJlYW0ubWF0Y2goXCIhLS1cIiwgdHJ1ZSkpXG4gICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblhNTENvbW1lbnQpO1xuXG4gICAgICBpZihzdHJlYW0ubWF0Y2goXCIhW0NEQVRBXCIsIGZhbHNlKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ0RBVEE7XG4gICAgICAgIHJldHVybiBcInRhZ1wiO1xuICAgICAgfVxuXG4gICAgICBpZihzdHJlYW0ubWF0Y2goXCI/XCIsIGZhbHNlKSkge1xuICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5QcmVQcm9jZXNzaW5nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzY2xvc2UgPSBzdHJlYW0uZWF0KFwiL1wiKTtcbiAgICAgIHN0cmVhbS5lYXRTcGFjZSgpO1xuICAgICAgdmFyIHRhZ05hbWUgPSBcIlwiLCBjO1xuICAgICAgd2hpbGUgKChjID0gc3RyZWFtLmVhdCgvW15cXHNcXHUwMGEwPTw+XFxcIlxcJ1xcLz9dLykpKSB0YWdOYW1lICs9IGM7XG5cbiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblRhZyh0YWdOYW1lLCBpc2Nsb3NlKSk7XG4gICAgfVxuICAgIC8vIHN0YXJ0IGNvZGUgYmxvY2tcbiAgICBlbHNlIGlmKGNoID09IFwie1wiKSB7XG4gICAgICBwdXNoU3RhdGVTdGFjayhzdGF0ZSwgeyB0eXBlOiBcImNvZGVibG9ja1wifSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gZW5kIGNvZGUgYmxvY2tcbiAgICBlbHNlIGlmKGNoID09IFwifVwiKSB7XG4gICAgICBwb3BTdGF0ZVN0YWNrKHN0YXRlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBpZiB3ZSdyZSBpbiBhbiBYTUwgYmxvY2tcbiAgICBlbHNlIGlmKGlzSW5YbWxCbG9jayhzdGF0ZSkpIHtcbiAgICAgIGlmKGNoID09IFwiPlwiKVxuICAgICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICAgIGVsc2UgaWYoY2ggPT0gXCIvXCIgJiYgc3RyZWFtLmVhdChcIj5cIikpIHtcbiAgICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7XG4gICAgICAgIHJldHVybiBcInRhZ1wiO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICAgIH1cbiAgICAvLyBpZiBhIG51bWJlclxuICAgIGVsc2UgaWYgKC9cXGQvLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goL15cXGQqKD86XFwuXFxkKik/KD86RVsrXFwtXT9cXGQrKT8vKTtcbiAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICB9XG4gICAgLy8gY29tbWVudCBzdGFydFxuICAgIGVsc2UgaWYgKGNoID09PSBcIihcIiAmJiBzdHJlYW0uZWF0KFwiOlwiKSkge1xuICAgICAgcHVzaFN0YXRlU3RhY2soc3RhdGUsIHsgdHlwZTogXCJjb21tZW50XCJ9KTtcbiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlbkNvbW1lbnQpO1xuICAgIH1cbiAgICAvLyBxdW90ZWQgc3RyaW5nXG4gICAgZWxzZSBpZiAoIWlzRVFOYW1lICYmIChjaCA9PT0gJ1wiJyB8fCBjaCA9PT0gXCInXCIpKVxuICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuU3RyaW5nKGNoKSk7XG4gICAgLy8gdmFyaWFibGVcbiAgICBlbHNlIGlmKGNoID09PSBcIiRcIikge1xuICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuVmFyaWFibGUpO1xuICAgIH1cbiAgICAvLyBhc3NpZ25tZW50XG4gICAgZWxzZSBpZihjaCA9PT1cIjpcIiAmJiBzdHJlYW0uZWF0KFwiPVwiKSkge1xuICAgICAgcmV0dXJuIFwia2V5d29yZFwiO1xuICAgIH1cbiAgICAvLyBvcGVuIHBhcmVuXG4gICAgZWxzZSBpZihjaCA9PT0gXCIoXCIpIHtcbiAgICAgIHB1c2hTdGF0ZVN0YWNrKHN0YXRlLCB7IHR5cGU6IFwicGFyZW5cIn0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIGNsb3NlIHBhcmVuXG4gICAgZWxzZSBpZihjaCA9PT0gXCIpXCIpIHtcbiAgICAgIHBvcFN0YXRlU3RhY2soc3RhdGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIG9wZW4gcGFyZW5cbiAgICBlbHNlIGlmKGNoID09PSBcIltcIikge1xuICAgICAgcHVzaFN0YXRlU3RhY2soc3RhdGUsIHsgdHlwZTogXCJicmFja2V0XCJ9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBjbG9zZSBwYXJlblxuICAgIGVsc2UgaWYoY2ggPT09IFwiXVwiKSB7XG4gICAgICBwb3BTdGF0ZVN0YWNrKHN0YXRlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBrbm93biA9IGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGNoKSAmJiBrZXl3b3Jkc1tjaF07XG5cbiAgICAgIC8vIGlmIHRoZXJlJ3MgYSBFUU5hbWUgYWhlYWQsIGNvbnN1bWUgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyBwb3J0aW9uLCBpdCdzIGxpa2VseSBhIGZ1bmN0aW9uXG4gICAgICBpZihpc0VRTmFtZSAmJiBjaCA9PT0gJ1xcXCInKSB3aGlsZShzdHJlYW0ubmV4dCgpICE9PSAnXCInKXt9XG4gICAgICBpZihpc0VRTmFtZSAmJiBjaCA9PT0gJ1xcJycpIHdoaWxlKHN0cmVhbS5uZXh0KCkgIT09ICdcXCcnKXt9XG5cbiAgICAgIC8vIGdvYmJsZSB1cCBhIHdvcmQgaWYgdGhlIGNoYXJhY3RlciBpcyBub3Qga25vd25cbiAgICAgIGlmKCFrbm93bikgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwkXy1dLyk7XG5cbiAgICAgIC8vIGdvYmJsZSBhIGNvbG9uIGluIHRoZSBjYXNlIHRoYXQgaXMgYSBsaWIgZnVuYyB0eXBlIGNhbGwgZm46ZG9jXG4gICAgICB2YXIgZm91bmRDb2xvbiA9IHN0cmVhbS5lYXQoXCI6XCIpO1xuXG4gICAgICAvLyBpZiB0aGVyZSdzIG5vdCBhIHNlY29uZCBjb2xvbiwgZ29iYmxlIGFub3RoZXIgd29yZC4gT3RoZXJ3aXNlLCBpdCdzIHByb2JhYmx5IGFuIGF4aXMgc3BlY2lmaWVyXG4gICAgICAvLyB3aGljaCBzaG91bGQgZ2V0IG1hdGNoZWQgYXMgYSBrZXl3b3JkXG4gICAgICBpZighc3RyZWFtLmVhdChcIjpcIikgJiYgZm91bmRDb2xvbikge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXCRfLV0vKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBuZXh0IG5vbiB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBhbiBvcGVuIHBhcmVuLCB0aGlzIGlzIHByb2JhYmx5IGEgZnVuY3Rpb24gKGlmIG5vdCBhIGtleXdvcmQgb2Ygb3RoZXIgc29ydClcbiAgICAgIGlmKHN0cmVhbS5tYXRjaCgvXlsgXFx0XSpcXCgvLCBmYWxzZSkpIHtcbiAgICAgICAgbWlnaHRCZUZ1bmN0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8vIGlzIHRoZSB3b3JkIGEga2V5d29yZD9cbiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgIGtub3duID0ga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkgJiYga2V5d29yZHNbd29yZF07XG5cbiAgICAgIC8vIGlmIHdlIHRoaW5rIGl0J3MgYSBmdW5jdGlvbiBjYWxsIGJ1dCBub3QgeWV0IGtub3duLFxuICAgICAgLy8gc2V0IHN0eWxlIHRvIHZhcmlhYmxlIGZvciBub3cgZm9yIGxhY2sgb2Ygc29tZXRoaW5nIGJldHRlclxuICAgICAgaWYobWlnaHRCZUZ1bmN0aW9uICYmICFrbm93bikga25vd24gPSB7dHlwZTogXCJmdW5jdGlvbl9jYWxsXCIsIHN0eWxlOiBcInZhcmlhYmxlIGRlZlwifTtcblxuICAgICAgLy8gaWYgdGhlIHByZXZpb3VzIHdvcmQgd2FzIGVsZW1lbnQsIGF0dHJpYnV0ZSwgYXhpcyBzcGVjaWZpZXIsIHRoaXMgd29yZCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhhdFxuICAgICAgaWYoaXNJblhtbENvbnN0cnVjdG9yKHN0YXRlKSkge1xuICAgICAgICBwb3BTdGF0ZVN0YWNrKHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIFwidmFyaWFibGVcIjtcbiAgICAgIH1cbiAgICAgIC8vIGFzIHByZXZpb3VzbHkgY2hlY2tlZCwgaWYgdGhlIHdvcmQgaXMgZWxlbWVudCxhdHRyaWJ1dGUsIGF4aXMgc3BlY2lmaWVyLCBjYWxsIGl0IGFuIFwieG1sY29uc3RydWN0b3JcIiBhbmRcbiAgICAgIC8vIHB1c2ggdGhlIHN0YWNrIHNvIHdlIGtub3cgdG8gbG9vayBmb3IgaXQgb24gdGhlIG5leHQgd29yZFxuICAgICAgaWYod29yZCA9PSBcImVsZW1lbnRcIiB8fCB3b3JkID09IFwiYXR0cmlidXRlXCIgfHwga25vd24udHlwZSA9PSBcImF4aXNfc3BlY2lmaWVyXCIpIHB1c2hTdGF0ZVN0YWNrKHN0YXRlLCB7dHlwZTogXCJ4bWxjb25zdHJ1Y3RvclwifSk7XG5cbiAgICAgIC8vIGlmIHRoZSB3b3JkIGlzIGtub3duLCByZXR1cm4gdGhlIGRldGFpbHMgb2YgdGhhdCBlbHNlIGp1c3QgY2FsbCB0aGlzIGEgZ2VuZXJpYyAnd29yZCdcbiAgICAgIHJldHVybiBrbm93biA/IGtub3duLnN0eWxlIDogXCJ2YXJpYWJsZVwiO1xuICAgIH1cbiAgfVxuXG4gIC8vIGhhbmRsZSBjb21tZW50cywgaW5jbHVkaW5nIG5lc3RlZFxuICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBtYXliZU5lc3RlZCA9IGZhbHNlLCBuZXN0ZWRDb3VudCA9IDAsIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIilcIiAmJiBtYXliZUVuZCkge1xuICAgICAgICBpZihuZXN0ZWRDb3VudCA+IDApXG4gICAgICAgICAgbmVzdGVkQ291bnQtLTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoY2ggPT0gXCI6XCIgJiYgbWF5YmVOZXN0ZWQpIHtcbiAgICAgICAgbmVzdGVkQ291bnQrKztcbiAgICAgIH1cbiAgICAgIG1heWJlRW5kID0gKGNoID09IFwiOlwiKTtcbiAgICAgIG1heWJlTmVzdGVkID0gKGNoID09IFwiKFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cblxuICAvLyB0b2tlbml6ZXIgZm9yIHN0cmluZyBsaXRlcmFsc1xuICAvLyBvcHRpb25hbGx5IHBhc3MgYSB0b2tlbml6ZXIgZnVuY3Rpb24gdG8gc2V0IHN0YXRlLnRva2VuaXplIGJhY2sgdG8gd2hlbiBmaW5pc2hlZFxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSwgZikge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY2g7XG5cbiAgICAgIGlmKGlzSW5TdHJpbmcoc3RhdGUpICYmIHN0cmVhbS5jdXJyZW50KCkgPT0gcXVvdGUpIHtcbiAgICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7XG4gICAgICAgIGlmKGYpIHN0YXRlLnRva2VuaXplID0gZjtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG5cbiAgICAgIHB1c2hTdGF0ZVN0YWNrKHN0YXRlLCB7IHR5cGU6IFwic3RyaW5nXCIsIG5hbWU6IHF1b3RlLCB0b2tlbml6ZTogdG9rZW5TdHJpbmcocXVvdGUsIGYpIH0pO1xuXG4gICAgICAvLyBpZiB3ZSdyZSBpbiBhIHN0cmluZyBhbmQgaW4gYW4gWE1MIGJsb2NrLCBhbGxvdyBhbiBlbWJlZGRlZCBjb2RlIGJsb2NrXG4gICAgICBpZihzdHJlYW0ubWF0Y2goXCJ7XCIsIGZhbHNlKSAmJiBpc0luWG1sQXR0cmlidXRlQmxvY2soc3RhdGUpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH1cblxuXG4gICAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICAgIGlmIChjaCA9PSAgcXVvdGUpIHtcbiAgICAgICAgICBwb3BTdGF0ZVN0YWNrKHN0YXRlKTtcbiAgICAgICAgICBpZihmKSBzdGF0ZS50b2tlbml6ZSA9IGY7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gaWYgd2UncmUgaW4gYSBzdHJpbmcgYW5kIGluIGFuIFhNTCBibG9jaywgYWxsb3cgYW4gZW1iZWRkZWQgY29kZSBibG9jayBpbiBhbiBhdHRyaWJ1dGVcbiAgICAgICAgICBpZihzdHJlYW0ubWF0Y2goXCJ7XCIsIGZhbHNlKSAmJiBpc0luWG1sQXR0cmlidXRlQmxvY2soc3RhdGUpKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH07XG4gIH1cblxuICAvLyB0b2tlbml6ZXIgZm9yIHZhcmlhYmxlc1xuICBmdW5jdGlvbiB0b2tlblZhcmlhYmxlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgaXNWYXJpYWJsZUNoYXIgPSAvW1xcd1xcJF8tXS87XG5cbiAgICAvLyBhIHZhcmlhYmxlIG1heSBzdGFydCB3aXRoIGEgcXVvdGVkIEVRTmFtZSBzbyBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgcXVvdGUsIGNvbnN1bWUgdG8gdGhlIG5leHQgcXVvdGVcbiAgICBpZihzdHJlYW0uZWF0KFwiXFxcIlwiKSkge1xuICAgICAgd2hpbGUoc3RyZWFtLm5leHQoKSAhPT0gJ1xcXCInKXt9O1xuICAgICAgc3RyZWFtLmVhdChcIjpcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc1ZhcmlhYmxlQ2hhcik7XG4gICAgICBpZighc3RyZWFtLm1hdGNoKFwiOj1cIiwgZmFsc2UpKSBzdHJlYW0uZWF0KFwiOlwiKTtcbiAgICB9XG4gICAgc3RyZWFtLmVhdFdoaWxlKGlzVmFyaWFibGVDaGFyKTtcbiAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICB9XG5cbiAgLy8gdG9rZW5pemVyIGZvciBYTUwgdGFnc1xuICBmdW5jdGlvbiB0b2tlblRhZyhuYW1lLCBpc2Nsb3NlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHN0cmVhbS5lYXRTcGFjZSgpO1xuICAgICAgaWYoaXNjbG9zZSAmJiBzdHJlYW0uZWF0KFwiPlwiKSkge1xuICAgICAgICBwb3BTdGF0ZVN0YWNrKHN0YXRlKTtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIHJldHVybiBcInRhZ1wiO1xuICAgICAgfVxuICAgICAgLy8gc2VsZiBjbG9zaW5nIHRhZyB3aXRob3V0IGF0dHJpYnV0ZXM/XG4gICAgICBpZighc3RyZWFtLmVhdChcIi9cIikpXG4gICAgICAgIHB1c2hTdGF0ZVN0YWNrKHN0YXRlLCB7IHR5cGU6IFwidGFnXCIsIG5hbWU6IG5hbWUsIHRva2VuaXplOiB0b2tlbkJhc2V9KTtcbiAgICAgIGlmKCFzdHJlYW0uZWF0KFwiPlwiKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQXR0cmlidXRlO1xuICAgICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcInRhZ1wiO1xuICAgIH07XG4gIH1cblxuICAvLyB0b2tlbml6ZXIgZm9yIFhNTCBhdHRyaWJ1dGVzXG4gIGZ1bmN0aW9uIHRva2VuQXR0cmlidXRlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgaWYoY2ggPT0gXCIvXCIgJiYgc3RyZWFtLmVhdChcIj5cIikpIHtcbiAgICAgIGlmKGlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkpIHBvcFN0YXRlU3RhY2soc3RhdGUpO1xuICAgICAgaWYoaXNJblhtbEJsb2NrKHN0YXRlKSkgcG9wU3RhdGVTdGFjayhzdGF0ZSk7XG4gICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICB9XG4gICAgaWYoY2ggPT0gXCI+XCIpIHtcbiAgICAgIGlmKGlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkpIHBvcFN0YXRlU3RhY2soc3RhdGUpO1xuICAgICAgcmV0dXJuIFwidGFnXCI7XG4gICAgfVxuICAgIGlmKGNoID09IFwiPVwiKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gcXVvdGVkIHN0cmluZ1xuICAgIGlmIChjaCA9PSAnXCInIHx8IGNoID09IFwiJ1wiKVxuICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuU3RyaW5nKGNoLCB0b2tlbkF0dHJpYnV0ZSkpO1xuXG4gICAgaWYoIWlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkpXG4gICAgICBwdXNoU3RhdGVTdGFjayhzdGF0ZSwgeyB0eXBlOiBcImF0dHJpYnV0ZVwiLCB0b2tlbml6ZTogdG9rZW5BdHRyaWJ1dGV9KTtcblxuICAgIHN0cmVhbS5lYXQoL1thLXpBLVpfOl0vKTtcbiAgICBzdHJlYW0uZWF0V2hpbGUoL1stYS16QS1aMC05XzouXS8pO1xuICAgIHN0cmVhbS5lYXRTcGFjZSgpO1xuXG4gICAgLy8gdGhlIGNhc2Ugd2hlcmUgdGhlIGF0dHJpYnV0ZSBoYXMgbm90IHZhbHVlIGFuZCB0aGUgdGFnIHdhcyBjbG9zZWRcbiAgICBpZihzdHJlYW0ubWF0Y2goXCI+XCIsIGZhbHNlKSB8fCBzdHJlYW0ubWF0Y2goXCIvXCIsIGZhbHNlKSkge1xuICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJhdHRyaWJ1dGVcIjtcbiAgfVxuXG4gIC8vIGhhbmRsZSBjb21tZW50cywgaW5jbHVkaW5nIG5lc3RlZFxuICBmdW5jdGlvbiB0b2tlblhNTENvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaDtcbiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICBpZiAoY2ggPT0gXCItXCIgJiYgc3RyZWFtLm1hdGNoKFwiLT5cIiwgdHJ1ZSkpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8vIGhhbmRsZSBDREFUQVxuICBmdW5jdGlvbiB0b2tlbkNEQVRBKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2g7XG4gICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYgKGNoID09IFwiXVwiICYmIHN0cmVhbS5tYXRjaChcIl1cIiwgdHJ1ZSkpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBoYW5kbGUgcHJlcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnNcbiAgZnVuY3Rpb24gdG9rZW5QcmVQcm9jZXNzaW5nKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2g7XG4gICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgaWYgKGNoID09IFwiP1wiICYmIHN0cmVhbS5tYXRjaChcIj5cIiwgdHJ1ZSkpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnQgbWV0YVwiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLy8gZnVuY3Rpb25zIHRvIHRlc3QgdGhlIGN1cnJlbnQgY29udGV4dCBvZiB0aGUgc3RhdGVcbiAgZnVuY3Rpb24gaXNJblhtbEJsb2NrKHN0YXRlKSB7IHJldHVybiBpc0luKHN0YXRlLCBcInRhZ1wiKTsgfVxuICBmdW5jdGlvbiBpc0luWG1sQXR0cmlidXRlQmxvY2soc3RhdGUpIHsgcmV0dXJuIGlzSW4oc3RhdGUsIFwiYXR0cmlidXRlXCIpOyB9XG4gIGZ1bmN0aW9uIGlzSW5YbWxDb25zdHJ1Y3RvcihzdGF0ZSkgeyByZXR1cm4gaXNJbihzdGF0ZSwgXCJ4bWxjb25zdHJ1Y3RvclwiKTsgfVxuICBmdW5jdGlvbiBpc0luU3RyaW5nKHN0YXRlKSB7IHJldHVybiBpc0luKHN0YXRlLCBcInN0cmluZ1wiKTsgfVxuXG4gIGZ1bmN0aW9uIGlzRVFOYW1lQWhlYWQoc3RyZWFtKSB7XG4gICAgLy8gYXNzdW1lIHdlJ3ZlIGFscmVhZHkgZWF0ZW4gYSBxdW90ZSAoXCIpXG4gICAgaWYoc3RyZWFtLmN1cnJlbnQoKSA9PT0gJ1wiJylcbiAgICAgIHJldHVybiBzdHJlYW0ubWF0Y2goL15bXlxcXCJdK1xcXCJcXDovLCBmYWxzZSk7XG4gICAgZWxzZSBpZihzdHJlYW0uY3VycmVudCgpID09PSAnXFwnJylcbiAgICAgIHJldHVybiBzdHJlYW0ubWF0Y2goL15bXlxcXCJdK1xcJ1xcOi8sIGZhbHNlKTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBpc0luKHN0YXRlLCB0eXBlKSB7XG4gICAgcmV0dXJuIChzdGF0ZS5zdGFjay5sZW5ndGggJiYgc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoIC0gMV0udHlwZSA9PSB0eXBlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hTdGF0ZVN0YWNrKHN0YXRlLCBuZXdTdGF0ZSkge1xuICAgIHN0YXRlLnN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9wU3RhdGVTdGFjayhzdGF0ZSkge1xuICAgIHN0YXRlLnN0YWNrLnBvcCgpO1xuICAgIHZhciByZWluc3RhdGVUb2tlbml6ZSA9IHN0YXRlLnN0YWNrLmxlbmd0aCAmJiBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0udG9rZW5pemU7XG4gICAgc3RhdGUudG9rZW5pemUgPSByZWluc3RhdGVUb2tlbml6ZSB8fCB0b2tlbkJhc2U7XG4gIH1cblxuICAvLyB0aGUgaW50ZXJmYWNlIGZvciB0aGUgbW9kZSBBUElcbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsXG4gICAgICAgIGNjOiBbXSxcbiAgICAgICAgc3RhY2s6IFtdXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCIoOlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCI6KVwiXG5cbiAgfTtcblxufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3hxdWVyeVwiLCBcInhxdWVyeVwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vLyBZYWNhcyBtb2RlIGNvcHlyaWdodCAoYykgMjAxNSBieSBHcnplZ29yeiBNYXp1clxuLy8gTG9vc2VseSBiYXNlZCBvbiBtYXRoZW1hdGljYSBtb2RlIGJ5IENhbGluIEJhcmJhdFxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgneWFjYXMnLCBmdW5jdGlvbihfY29uZmlnLCBfcGFyc2VyQ29uZmlnKSB7XG5cbiAgZnVuY3Rpb24gd29yZHMoc3RyKSB7XG4gICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdChcIiBcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciBib2RpZWRPcHMgPSB3b3JkcyhcIkFzc2VydCBCYWNrUXVvdGUgRCBEZWZ1biBEZXJpdiBGb3IgRm9yRWFjaCBGcm9tRmlsZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkZyb21TdHJpbmcgRnVuY3Rpb24gSW50ZWdyYXRlIEludmVyc2VUYXlsb3IgTGltaXQgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJMb2NhbFN5bWJvbHMgTWFjcm8gTWFjcm9SdWxlIE1hY3JvUnVsZVBhdHRlcm4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJOSW50ZWdyYXRlIFJ1bGUgUnVsZVBhdHRlcm4gU3Vic3QgVEQgVEV4cGxpY2l0U3VtIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiVFN1bSBUYXlsb3IgVGF5bG9yMSBUYXlsb3IyIFRheWxvcjMgVG9GaWxlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiVG9TdGRvdXQgVG9TdHJpbmcgVHJhY2VSdWxlIFVudGlsIFdoaWxlXCIpO1xuXG4gIC8vIHBhdHRlcm5zXG4gIHZhciBwRmxvYXRGb3JtICA9IFwiKD86KD86XFxcXC5cXFxcZCt8XFxcXGQrXFxcXC5cXFxcZCp8XFxcXGQrKSg/OltlRV1bKy1dP1xcXFxkKyk/KVwiO1xuICB2YXIgcElkZW50aWZpZXIgPSBcIig/OlthLXpBLVpcXFxcJCddW2EtekEtWjAtOVxcXFwkJ10qKVwiO1xuXG4gIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbnNcbiAgdmFyIHJlRmxvYXRGb3JtICAgID0gbmV3IFJlZ0V4cChwRmxvYXRGb3JtKTtcbiAgdmFyIHJlSWRlbnRpZmllciAgID0gbmV3IFJlZ0V4cChwSWRlbnRpZmllcik7XG4gIHZhciByZVBhdHRlcm4gICAgICA9IG5ldyBSZWdFeHAocElkZW50aWZpZXIgKyBcIj9fXCIgKyBwSWRlbnRpZmllcik7XG4gIHZhciByZUZ1bmN0aW9uTGlrZSA9IG5ldyBSZWdFeHAocElkZW50aWZpZXIgKyBcIlxcXFxzKlxcXFwoXCIpO1xuXG4gIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoO1xuXG4gICAgLy8gZ2V0IG5leHQgY2hhcmFjdGVyXG4gICAgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgLy8gc3RyaW5nXG4gICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIC8vIGNvbW1lbnRcbiAgICBpZiAoY2ggPT09ICcvJykge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoJyonKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIvXCIpKSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdvIGJhY2sgb25lIGNoYXJhY3RlclxuICAgIHN0cmVhbS5iYWNrVXAoMSk7XG5cbiAgICAvLyB1cGRhdGUgc2NvcGUgaW5mb1xuICAgIHZhciBtID0gc3RyZWFtLm1hdGNoKC9eKFxcdyspXFxzKlxcKC8sIGZhbHNlKTtcbiAgICBpZiAobSAhPT0gbnVsbCAmJiBib2RpZWRPcHMuaGFzT3duUHJvcGVydHkobVsxXSkpXG4gICAgICBzdGF0ZS5zY29wZXMucHVzaCgnYm9kaWVkJyk7XG5cbiAgICB2YXIgc2NvcGUgPSBjdXJyZW50U2NvcGUoc3RhdGUpO1xuXG4gICAgaWYgKHNjb3BlID09PSAnYm9kaWVkJyAmJiBjaCA9PT0gJ1snKVxuICAgICAgc3RhdGUuc2NvcGVzLnBvcCgpO1xuXG4gICAgaWYgKGNoID09PSAnWycgfHwgY2ggPT09ICd7JyB8fCBjaCA9PT0gJygnKVxuICAgICAgc3RhdGUuc2NvcGVzLnB1c2goY2gpO1xuXG4gICAgc2NvcGUgPSBjdXJyZW50U2NvcGUoc3RhdGUpO1xuXG4gICAgaWYgKHNjb3BlID09PSAnWycgJiYgY2ggPT09ICddJyB8fFxuICAgICAgICBzY29wZSA9PT0gJ3snICYmIGNoID09PSAnfScgfHxcbiAgICAgICAgc2NvcGUgPT09ICcoJyAmJiBjaCA9PT0gJyknKVxuICAgICAgc3RhdGUuc2NvcGVzLnBvcCgpO1xuXG4gICAgaWYgKGNoID09PSAnOycpIHtcbiAgICAgIHdoaWxlIChzY29wZSA9PT0gJ2JvZGllZCcpIHtcbiAgICAgICAgc3RhdGUuc2NvcGVzLnBvcCgpO1xuICAgICAgICBzY29wZSA9IGN1cnJlbnRTY29wZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbG9vayBmb3Igb3JkZXJlZCBydWxlc1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL1xcZCsgKiMvLCB0cnVlLCBmYWxzZSkpIHtcbiAgICAgIHJldHVybiAncXVhbGlmaWVyJztcbiAgICB9XG5cbiAgICAvLyBsb29rIGZvciBudW1iZXJzXG4gICAgaWYgKHN0cmVhbS5tYXRjaChyZUZsb2F0Rm9ybSwgdHJ1ZSwgZmFsc2UpKSB7XG4gICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgfVxuXG4gICAgLy8gbG9vayBmb3IgcGxhY2Vob2xkZXJzXG4gICAgaWYgKHN0cmVhbS5tYXRjaChyZVBhdHRlcm4sIHRydWUsIGZhbHNlKSkge1xuICAgICAgcmV0dXJuICd2YXJpYWJsZS0zJztcbiAgICB9XG5cbiAgICAvLyBtYXRjaCBhbGwgYnJhY2VzIHNlcGFyYXRlbHlcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC8oPzpcXFt8XFxdfHt8fXxcXCh8XFwpKS8sIHRydWUsIGZhbHNlKSkge1xuICAgICAgcmV0dXJuICdicmFja2V0JztcbiAgICB9XG5cbiAgICAvLyBsaXRlcmFscyBsb29raW5nIGxpa2UgZnVuY3Rpb24gY2FsbHNcbiAgICBpZiAoc3RyZWFtLm1hdGNoKHJlRnVuY3Rpb25MaWtlLCB0cnVlLCBmYWxzZSkpIHtcbiAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICByZXR1cm4gJ3ZhcmlhYmxlJztcbiAgICB9XG5cbiAgICAvLyBhbGwgb3RoZXIgaWRlbnRpZmllcnNcbiAgICBpZiAoc3RyZWFtLm1hdGNoKHJlSWRlbnRpZmllciwgdHJ1ZSwgZmFsc2UpKSB7XG4gICAgICByZXR1cm4gJ3ZhcmlhYmxlLTInO1xuICAgIH1cblxuICAgIC8vIG9wZXJhdG9yczsgbm90ZSB0aGF0IG9wZXJhdG9ycyBsaWtlIEBAIG9yIC87IGFyZSBtYXRjaGVkIHNlcGFyYXRlbHkgZm9yIGVhY2ggc3ltYm9sLlxuICAgIGlmIChzdHJlYW0ubWF0Y2goLyg/OlxcXFx8XFwrfFxcLXxcXCp8XFwvfCx8O3xcXC58OnxAfH58PXw+fDx8JnxcXHx8X3xgfCd8XFxefFxcP3whfCV8IykvLCB0cnVlLCBmYWxzZSkpIHtcbiAgICAgIHJldHVybiAnb3BlcmF0b3InO1xuICAgIH1cblxuICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBpcyBhbiBlcnJvclxuICAgIHJldHVybiAnZXJyb3InO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBuZXh0LCBlbmQgPSBmYWxzZSwgZXNjYXBlZCA9IGZhbHNlO1xuICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmIChuZXh0ID09PSAnXCInICYmICFlc2NhcGVkKSB7XG4gICAgICAgIGVuZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT09ICdcXFxcJztcbiAgICB9XG4gICAgaWYgKGVuZCAmJiAhZXNjYXBlZCkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgfVxuICAgIHJldHVybiAnc3RyaW5nJztcbiAgfTtcblxuICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBwcmV2LCBuZXh0O1xuICAgIHdoaWxlKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgaWYgKHByZXYgPT09ICcqJyAmJiBuZXh0ID09PSAnLycpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJldiA9IG5leHQ7XG4gICAgfVxuICAgIHJldHVybiAnY29tbWVudCc7XG4gIH1cblxuICBmdW5jdGlvbiBjdXJyZW50U2NvcGUoc3RhdGUpIHtcbiAgICB2YXIgc2NvcGUgPSBudWxsO1xuICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoID4gMClcbiAgICAgIHNjb3BlID0gc3RhdGUuc2NvcGVzW3N0YXRlLnNjb3Blcy5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gc2NvcGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSxcbiAgICAgICAgc2NvcGVzOiBbXVxuICAgICAgfTtcbiAgICB9LFxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0sXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT09IHRva2VuQmFzZSAmJiBzdGF0ZS50b2tlbml6ZSAhPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcblxuICAgICAgdmFyIGRlbHRhID0gMDtcbiAgICAgIGlmICh0ZXh0QWZ0ZXIgPT09ICddJyB8fCB0ZXh0QWZ0ZXIgPT09ICddOycgfHxcbiAgICAgICAgICB0ZXh0QWZ0ZXIgPT09ICd9JyB8fCB0ZXh0QWZ0ZXIgPT09ICd9OycgfHxcbiAgICAgICAgICB0ZXh0QWZ0ZXIgPT09ICcpOycpXG4gICAgICAgIGRlbHRhID0gLTE7XG5cbiAgICAgIHJldHVybiAoc3RhdGUuc2NvcGVzLmxlbmd0aCArIGRlbHRhKSAqIF9jb25maWcuaW5kZW50VW5pdDtcbiAgICB9LFxuICAgIGVsZWN0cmljQ2hhcnM6IFwie31bXSgpO1wiLFxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIi8qXCIsXG4gICAgYmxvY2tDb21tZW50RW5kOiBcIiovXCIsXG4gICAgbGluZUNvbW1lbnQ6IFwiLy9cIlxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LXlhY2FzJywge1xuICBuYW1lOiAneWFjYXMnXG59KTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInlhbWxcIiwgZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGNvbnMgPSBbJ3RydWUnLCAnZmFsc2UnLCAnb24nLCAnb2ZmJywgJ3llcycsICdubyddO1xuICB2YXIga2V5d29yZFJlZ2V4ID0gbmV3IFJlZ0V4cChcIlxcXFxiKChcIitjb25zLmpvaW4oXCIpfChcIikrXCIpKSRcIiwgJ2knKTtcblxuICByZXR1cm4ge1xuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY2ggPSBzdHJlYW0ucGVlaygpO1xuICAgICAgdmFyIGVzYyA9IHN0YXRlLmVzY2FwZWQ7XG4gICAgICBzdGF0ZS5lc2NhcGVkID0gZmFsc2U7XG4gICAgICAvKiBjb21tZW50cyAqL1xuICAgICAgaWYgKGNoID09IFwiI1wiICYmIChzdHJlYW0ucG9zID09IDAgfHwgL1xccy8udGVzdChzdHJlYW0uc3RyaW5nLmNoYXJBdChzdHJlYW0ucG9zIC0gMSkpKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiBcImNvbW1lbnRcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXignKFteJ118XFxcXC4pKic/fFwiKFteXCJdfFxcXFwuKSpcIj8pLykpXG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuXG4gICAgICBpZiAoc3RhdGUubGl0ZXJhbCAmJiBzdHJlYW0uaW5kZW50YXRpb24oKSA+IHN0YXRlLmtleUNvbCkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7IHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saXRlcmFsKSB7IHN0YXRlLmxpdGVyYWwgPSBmYWxzZTsgfVxuICAgICAgaWYgKHN0cmVhbS5zb2woKSkge1xuICAgICAgICBzdGF0ZS5rZXlDb2wgPSAwO1xuICAgICAgICBzdGF0ZS5wYWlyID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnBhaXJTdGFydCA9IGZhbHNlO1xuICAgICAgICAvKiBkb2N1bWVudCBzdGFydCAqL1xuICAgICAgICBpZihzdHJlYW0ubWF0Y2goLy0tLS8pKSB7IHJldHVybiBcImRlZlwiOyB9XG4gICAgICAgIC8qIGRvY3VtZW50IGVuZCAqL1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXC5cXC5cXC4vKSkgeyByZXR1cm4gXCJkZWZcIjsgfVxuICAgICAgICAvKiBhcnJheSBsaXN0IGl0ZW0gKi9cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXFxzKi1cXHMrLykpIHsgcmV0dXJuICdtZXRhJzsgfVxuICAgICAgfVxuICAgICAgLyogaW5saW5lIHBhaXJzL2xpc3RzICovXG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKFxce3xcXH18XFxbfFxcXSkvKSkge1xuICAgICAgICBpZiAoY2ggPT0gJ3snKVxuICAgICAgICAgIHN0YXRlLmlubGluZVBhaXJzKys7XG4gICAgICAgIGVsc2UgaWYgKGNoID09ICd9JylcbiAgICAgICAgICBzdGF0ZS5pbmxpbmVQYWlycy0tO1xuICAgICAgICBlbHNlIGlmIChjaCA9PSAnWycpXG4gICAgICAgICAgc3RhdGUuaW5saW5lTGlzdCsrO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgc3RhdGUuaW5saW5lTGlzdC0tO1xuICAgICAgICByZXR1cm4gJ21ldGEnO1xuICAgICAgfVxuXG4gICAgICAvKiBsaXN0IHNlcGVyYXRvciAqL1xuICAgICAgaWYgKHN0YXRlLmlubGluZUxpc3QgPiAwICYmICFlc2MgJiYgY2ggPT0gJywnKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHJldHVybiAnbWV0YSc7XG4gICAgICB9XG4gICAgICAvKiBwYWlycyBzZXBlcmF0b3IgKi9cbiAgICAgIGlmIChzdGF0ZS5pbmxpbmVQYWlycyA+IDAgJiYgIWVzYyAmJiBjaCA9PSAnLCcpIHtcbiAgICAgICAgc3RhdGUua2V5Q29sID0gMDtcbiAgICAgICAgc3RhdGUucGFpciA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wYWlyU3RhcnQgPSBmYWxzZTtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuICdtZXRhJztcbiAgICAgIH1cblxuICAgICAgLyogc3RhcnQgb2YgdmFsdWUgb2YgYSBwYWlyICovXG4gICAgICBpZiAoc3RhdGUucGFpclN0YXJ0KSB7XG4gICAgICAgIC8qIGJsb2NrIGxpdGVyYWxzICovXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXHMqKFxcfHxcXD4pXFxzKi8pKSB7IHN0YXRlLmxpdGVyYWwgPSB0cnVlOyByZXR1cm4gJ21ldGEnOyB9O1xuICAgICAgICAvKiByZWZlcmVuY2VzICovXG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXHMqKFxcJnxcXCopW2EtejAtOVxcLl8tXStcXGIvaSkpIHsgcmV0dXJuICd2YXJpYWJsZS0yJzsgfVxuICAgICAgICAvKiBudW1iZXJzICovXG4gICAgICAgIGlmIChzdGF0ZS5pbmxpbmVQYWlycyA9PSAwICYmIHN0cmVhbS5tYXRjaCgvXlxccyotP1swLTlcXC5cXCxdK1xccz8kLykpIHsgcmV0dXJuICdudW1iZXInOyB9XG4gICAgICAgIGlmIChzdGF0ZS5pbmxpbmVQYWlycyA+IDAgJiYgc3RyZWFtLm1hdGNoKC9eXFxzKi0/WzAtOVxcLlxcLF0rXFxzPyg/PSgsfH0pKS8pKSB7IHJldHVybiAnbnVtYmVyJzsgfVxuICAgICAgICAvKiBrZXl3b3JkcyAqL1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRSZWdleCkpIHsgcmV0dXJuICdrZXl3b3JkJzsgfVxuICAgICAgfVxuXG4gICAgICAvKiBwYWlycyAoYXNzb2NpYXRpdmUgYXJyYXlzKSAtPiBrZXkgKi9cbiAgICAgIGlmICghc3RhdGUucGFpciAmJiBzdHJlYW0ubWF0Y2goL15cXHMqKD86WyxcXFtcXF17fSYqIXw+J1wiJUBgXVteXFxzJ1wiOl18W14sXFxbXFxde30jJiohfD4nXCIlQGBdKVteI10qPyg/PVxccyo6KCR8XFxzKSkvKSkge1xuICAgICAgICBzdGF0ZS5wYWlyID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUua2V5Q29sID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG4gICAgICAgIHJldHVybiBcImF0b21cIjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5wYWlyICYmIHN0cmVhbS5tYXRjaCgvXjpcXHMqLykpIHsgc3RhdGUucGFpclN0YXJ0ID0gdHJ1ZTsgcmV0dXJuICdtZXRhJzsgfVxuXG4gICAgICAvKiBub3RoaW5nIGZvdW5kLCBjb250aW51ZSAqL1xuICAgICAgc3RhdGUucGFpclN0YXJ0ID0gZmFsc2U7XG4gICAgICBzdGF0ZS5lc2NhcGVkID0gKGNoID09ICdcXFxcJyk7XG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhaXI6IGZhbHNlLFxuICAgICAgICBwYWlyU3RhcnQ6IGZhbHNlLFxuICAgICAgICBrZXlDb2w6IDAsXG4gICAgICAgIGlubGluZVBhaXJzOiAwLFxuICAgICAgICBpbmxpbmVMaXN0OiAwLFxuICAgICAgICBsaXRlcmFsOiBmYWxzZSxcbiAgICAgICAgZXNjYXBlZDogZmFsc2VcbiAgICAgIH07XG4gICAgfSxcbiAgICBsaW5lQ29tbWVudDogXCIjXCIsXG4gICAgZm9sZDogXCJpbmRlbnRcIlxuICB9O1xufSk7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC15YW1sXCIsIFwieWFtbFwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveWFtbFwiLCBcInlhbWxcIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uIChtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi95YW1sL3lhbWxcIikpXG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4uL3lhbWwveWFtbFwiXSwgbW9kKVxuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpXG59KShmdW5jdGlvbiAoQ29kZU1pcnJvcikge1xuXG4gIHZhciBTVEFSVCA9IDAsIEZST05UTUFUVEVSID0gMSwgQk9EWSA9IDJcblxuICAvLyBhIG1peGVkIG1vZGUgZm9yIE1hcmtkb3duIHRleHQgd2l0aCBhbiBvcHRpb25hbCBZQU1MIGZyb250IG1hdHRlclxuICBDb2RlTWlycm9yLmRlZmluZU1vZGUoXCJ5YW1sLWZyb250bWF0dGVyXCIsIGZ1bmN0aW9uIChjb25maWcsIHBhcnNlckNvbmZpZykge1xuICAgIHZhciB5YW1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwieWFtbFwiKVxuICAgIHZhciBpbm5lck1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBwYXJzZXJDb25maWcgJiYgcGFyc2VyQ29uZmlnLmJhc2UgfHwgXCJnZm1cIilcblxuICAgIGZ1bmN0aW9uIGN1ck1vZGUoc3RhdGUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5zdGF0ZSA9PSBCT0RZID8gaW5uZXJNb2RlIDogeWFtbE1vZGVcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXRlOiBTVEFSVCxcbiAgICAgICAgICBpbm5lcjogQ29kZU1pcnJvci5zdGFydFN0YXRlKHlhbWxNb2RlKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY29weVN0YXRlOiBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0ZTogc3RhdGUuc3RhdGUsXG4gICAgICAgICAgaW5uZXI6IENvZGVNaXJyb3IuY29weVN0YXRlKGN1ck1vZGUoc3RhdGUpLCBzdGF0ZS5pbm5lcilcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RhdGUuc3RhdGUgPT0gU1RBUlQpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC8tLS0vLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHN0YXRlLnN0YXRlID0gRlJPTlRNQVRURVJcbiAgICAgICAgICAgIHJldHVybiB5YW1sTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmlubmVyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5zdGF0ZSA9IEJPRFlcbiAgICAgICAgICAgIHN0YXRlLmlubmVyID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKGlubmVyTW9kZSlcbiAgICAgICAgICAgIHJldHVybiBpbm5lck1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5pbm5lcilcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuc3RhdGUgPT0gRlJPTlRNQVRURVIpIHtcbiAgICAgICAgICB2YXIgZW5kID0gc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaCgvKC0tLXxcXC5cXC5cXC4pLywgZmFsc2UpXG4gICAgICAgICAgdmFyIHN0eWxlID0geWFtbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5pbm5lcilcbiAgICAgICAgICBpZiAoZW5kKSB7XG4gICAgICAgICAgICBzdGF0ZS5zdGF0ZSA9IEJPRFlcbiAgICAgICAgICAgIHN0YXRlLmlubmVyID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKGlubmVyTW9kZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHN0eWxlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGlubmVyTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmlubmVyKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5uZXJNb2RlOiBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHttb2RlOiBjdXJNb2RlKHN0YXRlKSwgc3RhdGU6IHN0YXRlLmlubmVyfVxuICAgICAgfSxcbiAgICAgIGJsYW5rTGluZTogZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBtb2RlID0gY3VyTW9kZShzdGF0ZSlcbiAgICAgICAgaWYgKG1vZGUuYmxhbmtMaW5lKSByZXR1cm4gbW9kZS5ibGFua0xpbmUoc3RhdGUuaW5uZXIpXG4gICAgICB9XG4gICAgfVxuICB9KVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgnejgwJywgZnVuY3Rpb24oX2NvbmZpZywgcGFyc2VyQ29uZmlnKSB7XG4gIHZhciBlejgwID0gcGFyc2VyQ29uZmlnLmV6ODA7XG4gIHZhciBrZXl3b3JkczEsIGtleXdvcmRzMjtcbiAgaWYgKGV6ODApIHtcbiAgICBrZXl3b3JkczEgPSAvXihleHg/fChsZHxjcCkoW2RpXXI/KT98W2xwXWVhfHBvcHxwdXNofGFkW2NkXXxjcGx8ZGFhfGRlY3xpbmN8bmVnfHNiY3xzdWJ8YW5kfGJpdHxbY3NdY2Z8eD9vcnxyZXN8c2V0fHJbbHJdYz9hP3xyW2xyXWR8c1tscl1hfHNybHxkam56fG5vcHxbZGVdaXxoYWx0fGltfGluKFtkaV1tcj98aXI/fGlyeHwycj8pfG90KGRtcj98W2lkXXJ4fGltcj8pfG91dCgwP3xbZGldcj98W2RpXTJyPyl8dHN0KGlvKT98c2xwKShcXC4oW3NsXT9pKT9bc2xdKT9cXGIvaTtcbiAgICBrZXl3b3JkczIgPSAvXigoKGNhbGx8altwcl18cnN0fHJldFtpbl0/KShcXC4oW3NsXT9pKT9bc2xdKT8pfChyc3xzdCltaXgpXFxiL2k7XG4gIH0gZWxzZSB7XG4gICAga2V5d29yZHMxID0gL14oZXh4P3wobGR8Y3B8aW4pKFtkaV1yPyk/fHBvcHxwdXNofGFkW2NkXXxjcGx8ZGFhfGRlY3xpbmN8bmVnfHNiY3xzdWJ8YW5kfGJpdHxbY3NdY2Z8eD9vcnxyZXN8c2V0fHJbbHJdYz9hP3xyW2xyXWR8c1tscl1hfHNybHxkam56fG5vcHxyc3R8W2RlXWl8aGFsdHxpbXxvdFtkaV1yfG91dFtkaV0/KVxcYi9pO1xuICAgIGtleXdvcmRzMiA9IC9eKGNhbGx8altwcl18cmV0W2luXT98Yl8/KGNhbGx8anVtcCkpXFxiL2k7XG4gIH1cblxuICB2YXIgdmFyaWFibGVzMSA9IC9eKGFmP3xiYz98Y3xkZT98ZXxobD98bHxpW3h5XT98cnxzcClcXGIvaTtcbiAgdmFyIHZhcmlhYmxlczIgPSAvXihuP1t6Y118cFtvZV0/fG0pXFxiL2k7XG4gIHZhciBlcnJvcnMgPSAvXihbaGxdW3h5XXxpW3h5XVtobF18c2xpYXxzbGwpXFxiL2k7XG4gIHZhciBudW1iZXJzID0gL14oW1xcZGEtZl0raHxbMC03XStvfFswMV0rYnxcXGQrZD8pXFxiL2k7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRleHQ6IDBcbiAgICAgIH07XG4gICAgfSxcbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKCFzdHJlYW0uY29sdW1uKCkpXG4gICAgICAgIHN0YXRlLmNvbnRleHQgPSAwO1xuXG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICB2YXIgdztcblxuICAgICAgaWYgKHN0cmVhbS5lYXRXaGlsZSgvXFx3LykpIHtcbiAgICAgICAgaWYgKGV6ODAgJiYgc3RyZWFtLmVhdCgnLicpKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9cXHcvKTtcbiAgICAgICAgfVxuICAgICAgICB3ID0gc3RyZWFtLmN1cnJlbnQoKTtcblxuICAgICAgICBpZiAoc3RyZWFtLmluZGVudGF0aW9uKCkpIHtcbiAgICAgICAgICBpZiAoKHN0YXRlLmNvbnRleHQgPT0gMSB8fCBzdGF0ZS5jb250ZXh0ID09IDQpICYmIHZhcmlhYmxlczEudGVzdCh3KSkge1xuICAgICAgICAgICAgc3RhdGUuY29udGV4dCA9IDQ7XG4gICAgICAgICAgICByZXR1cm4gJ3ZhcjInO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGF0ZS5jb250ZXh0ID09IDIgJiYgdmFyaWFibGVzMi50ZXN0KHcpKSB7XG4gICAgICAgICAgICBzdGF0ZS5jb250ZXh0ID0gNDtcbiAgICAgICAgICAgIHJldHVybiAndmFyMyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGtleXdvcmRzMS50ZXN0KHcpKSB7XG4gICAgICAgICAgICBzdGF0ZS5jb250ZXh0ID0gMTtcbiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChrZXl3b3JkczIudGVzdCh3KSkge1xuICAgICAgICAgICAgc3RhdGUuY29udGV4dCA9IDI7XG4gICAgICAgICAgICByZXR1cm4gJ2tleXdvcmQnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuY29udGV4dCA9PSA0ICYmIG51bWJlcnMudGVzdCh3KSkge1xuICAgICAgICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlcnJvcnMudGVzdCh3KSlcbiAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChudW1iZXJzKSkge1xuICAgICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KCc7JykpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gJ2NvbW1lbnQnO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KCdcIicpKSB7XG4gICAgICAgIHdoaWxlICh3ID0gc3RyZWFtLm5leHQoKSkge1xuICAgICAgICAgIGlmICh3ID09ICdcIicpXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGlmICh3ID09ICdcXFxcJylcbiAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KCdcXCcnKSkge1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9cXFxcPy4nLykpXG4gICAgICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KCcuJykgfHwgc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5lYXQoJyMnKSkge1xuICAgICAgICBzdGF0ZS5jb250ZXh0ID0gNTtcblxuICAgICAgICBpZiAoc3RyZWFtLmVhdFdoaWxlKC9cXHcvKSlcbiAgICAgICAgICByZXR1cm4gJ2RlZic7XG4gICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoJyQnKSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdFdoaWxlKC9bXFxkYS1mXS9pKSlcbiAgICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoJyUnKSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdFdoaWxlKC9bMDFdLykpXG4gICAgICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtejgwXCIsIFwiejgwXCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LWV6ODBcIiwgeyBuYW1lOiBcIno4MFwiLCBlejgwOiB0cnVlIH0pO1xuXG59KTtcbiIsImltcG9ydCAnLi9zdHlsZXMuc2NzcydcbmltcG9ydCB7IE1hcmtkb3duVmlldywgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nXG5cbmltcG9ydCAnLi9saWIvY29kZW1pcnJvcidcbmltcG9ydCAnLi9tb2RlL21ldGEnXG5pbXBvcnQgJy4vbW9kZS9hcGwvYXBsJ1xuaW1wb3J0ICcuL21vZGUvYXNjaWlhcm1vci9hc2NpaWFybW9yJ1xuaW1wb3J0ICcuL21vZGUvYXNuLjEvYXNuLjEnXG5pbXBvcnQgJy4vbW9kZS9hc3Rlcmlzay9hc3RlcmlzaydcbmltcG9ydCAnLi9tb2RlL2JyYWluZnVjay9icmFpbmZ1Y2snXG5pbXBvcnQgJy4vbW9kZS9jbGlrZS9jbGlrZSdcbmltcG9ydCAnLi9tb2RlL2Nsb2p1cmUvY2xvanVyZSdcbmltcG9ydCAnLi9tb2RlL2NtYWtlL2NtYWtlJ1xuaW1wb3J0ICcuL21vZGUvY29ib2wvY29ib2wnXG5pbXBvcnQgJy4vbW9kZS9jb2ZmZWVzY3JpcHQvY29mZmVlc2NyaXB0J1xuaW1wb3J0ICcuL21vZGUvY29tbW9ubGlzcC9jb21tb25saXNwJ1xuaW1wb3J0ICcuL21vZGUvY3J5c3RhbC9jcnlzdGFsJ1xuaW1wb3J0ICcuL21vZGUvY3NzL2NzcydcbmltcG9ydCAnLi9tb2RlL2N5cGhlci9jeXBoZXInXG5pbXBvcnQgJy4vbW9kZS9kL2QnXG5pbXBvcnQgJy4vbW9kZS9kYXJ0L2RhcnQnXG5pbXBvcnQgJy4vbW9kZS9kaWZmL2RpZmYnXG5pbXBvcnQgJy4vbW9kZS9kamFuZ28vZGphbmdvJ1xuaW1wb3J0ICcuL21vZGUvZG9ja2VyZmlsZS9kb2NrZXJmaWxlJ1xuaW1wb3J0ICcuL21vZGUvZHRkL2R0ZCdcbmltcG9ydCAnLi9tb2RlL2R5bGFuL2R5bGFuJ1xuaW1wb3J0ICcuL21vZGUvZWJuZi9lYm5mJ1xuaW1wb3J0ICcuL21vZGUvZWNsL2VjbCdcbmltcG9ydCAnLi9tb2RlL2VpZmZlbC9laWZmZWwnXG5pbXBvcnQgJy4vbW9kZS9lbGl4aXIvZWxpeGlyJ1xuaW1wb3J0ICcuL21vZGUvZWxtL2VsbSdcbmltcG9ydCAnLi9tb2RlL2VybGFuZy9lcmxhbmcnXG5pbXBvcnQgJy4vbW9kZS9mYWN0b3IvZmFjdG9yJ1xuaW1wb3J0ICcuL21vZGUvZmNsL2ZjbCdcbmltcG9ydCAnLi9tb2RlL2ZvcnRoL2ZvcnRoJ1xuaW1wb3J0ICcuL21vZGUvZm9ydHJhbi9mb3J0cmFuJ1xuaW1wb3J0ICcuL21vZGUvZ2FzL2dhcydcbi8vIGltcG9ydCAnLi9tb2RlL2dmbS9nZm0nIC8vIEVycm9yOiAnX19tb2R1bGVFeHBvcnRzJyBpcyBub3QgZXhwb3J0ZWQgYnkgbW9kZVxcbWV0YS5qcywgaW1wb3J0ZWQgYnkgLm9ic2lkaWFuL3BsdWdpbnMvY20tZWRpdG9yLXNueXRheC1oaWdobGlnaHQtb2JzaWRpYW4vbW9kZS9tZXRhLmpzP2NvbW1vbmpzLXByb3h5XG5pbXBvcnQgJy4vbW9kZS9naGVya2luL2doZXJraW4nXG5pbXBvcnQgJy4vbW9kZS9nby9nbydcbmltcG9ydCAnLi9tb2RlL2dyb292eS9ncm9vdnknXG5pbXBvcnQgJy4vbW9kZS9oYW1sL2hhbWwnXG5pbXBvcnQgJy4vbW9kZS9oYW5kbGViYXJzL2hhbmRsZWJhcnMnXG5pbXBvcnQgJy4vbW9kZS9oYXNrZWxsL2hhc2tlbGwnXG5pbXBvcnQgJy4vbW9kZS9oYXNrZWxsLWxpdGVyYXRlL2hhc2tlbGwtbGl0ZXJhdGUnXG5pbXBvcnQgJy4vbW9kZS9oYXhlL2hheGUnXG5pbXBvcnQgJy4vbW9kZS9odG1sZW1iZWRkZWQvaHRtbGVtYmVkZGVkJ1xuaW1wb3J0ICcuL21vZGUvaHRtbG1peGVkL2h0bWxtaXhlZCdcbmltcG9ydCAnLi9tb2RlL2h0dHAvaHR0cCdcbmltcG9ydCAnLi9tb2RlL2lkbC9pZGwnXG5pbXBvcnQgJy4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQnXG5pbXBvcnQgJy4vbW9kZS9qaW5qYTIvamluamEyJ1xuaW1wb3J0ICcuL21vZGUvanN4L2pzeCdcbmltcG9ydCAnLi9tb2RlL2p1bGlhL2p1bGlhJ1xuaW1wb3J0ICcuL21vZGUvbGl2ZXNjcmlwdC9saXZlc2NyaXB0J1xuaW1wb3J0ICcuL21vZGUvbHVhL2x1YSdcbi8vIGltcG9ydCAnLi9tb2RlL21hcmtkb3duL21hcmtkb3duJyAvLyBFcnJvcjogJ19fbW9kdWxlRXhwb3J0cycgaXMgbm90IGV4cG9ydGVkIGJ5IG1vZGVcXG1ldGEuanMsIGltcG9ydGVkIGJ5IC5vYnNpZGlhbi9wbHVnaW5zL2NtLWVkaXRvci1zbnl0YXgtaGlnaGxpZ2h0LW9ic2lkaWFuL21vZGUvbWV0YS5qcz9jb21tb25qcy1wcm94eVxuaW1wb3J0ICcuL21vZGUvbWF0aGVtYXRpY2EvbWF0aGVtYXRpY2EnXG5pbXBvcnQgJy4vbW9kZS9tYm94L21ib3gnXG5pbXBvcnQgJy4vbW9kZS9taXJjL21pcmMnXG5pbXBvcnQgJy4vbW9kZS9tbGxpa2UvbWxsaWtlJ1xuaW1wb3J0ICcuL21vZGUvbW9kZWxpY2EvbW9kZWxpY2EnXG5pbXBvcnQgJy4vbW9kZS9tc2NnZW4vbXNjZ2VuJ1xuaW1wb3J0ICcuL21vZGUvbXVtcHMvbXVtcHMnXG5pbXBvcnQgJy4vbW9kZS9uZ2lueC9uZ2lueCdcbmltcG9ydCAnLi9tb2RlL25zaXMvbnNpcydcbmltcG9ydCAnLi9tb2RlL250cmlwbGVzL250cmlwbGVzJ1xuaW1wb3J0ICcuL21vZGUvb2N0YXZlL29jdGF2ZSdcbmltcG9ydCAnLi9tb2RlL296L296J1xuaW1wb3J0ICcuL21vZGUvcGFzY2FsL3Bhc2NhbCdcbmltcG9ydCAnLi9tb2RlL3BlZ2pzL3BlZ2pzJ1xuaW1wb3J0ICcuL21vZGUvcGVybC9wZXJsJ1xuaW1wb3J0ICcuL21vZGUvcGhwL3BocCdcbmltcG9ydCAnLi9tb2RlL3BpZy9waWcnXG5pbXBvcnQgJy4vbW9kZS9wb3dlcnNoZWxsL3Bvd2Vyc2hlbGwnXG5pbXBvcnQgJy4vbW9kZS9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMnXG5pbXBvcnQgJy4vbW9kZS9wcm90b2J1Zi9wcm90b2J1ZidcbmltcG9ydCAnLi9tb2RlL3B1Zy9wdWcnXG5pbXBvcnQgJy4vbW9kZS9wdXBwZXQvcHVwcGV0J1xuaW1wb3J0ICcuL21vZGUvcHl0aG9uL3B5dGhvbidcbmltcG9ydCAnLi9tb2RlL3EvcSdcbmltcG9ydCAnLi9tb2RlL3IvcidcbmltcG9ydCAnLi9tb2RlL3JwbS9ycG0nXG5pbXBvcnQgJy4vbW9kZS9yc3QvcnN0J1xuaW1wb3J0ICcuL21vZGUvcnVieS9ydWJ5J1xuaW1wb3J0ICcuL21vZGUvcnVzdC9ydXN0J1xuaW1wb3J0ICcuL21vZGUvc2FzL3NhcydcbmltcG9ydCAnLi9tb2RlL3Nhc3Mvc2FzcydcbmltcG9ydCAnLi9tb2RlL3NjaGVtZS9zY2hlbWUnXG5pbXBvcnQgJy4vbW9kZS9zaGVsbC9zaGVsbCdcbmltcG9ydCAnLi9tb2RlL3NpZXZlL3NpZXZlJ1xuaW1wb3J0ICcuL21vZGUvc2xpbS9zbGltJ1xuaW1wb3J0ICcuL21vZGUvc21hbGx0YWxrL3NtYWxsdGFsaydcbmltcG9ydCAnLi9tb2RlL3NtYXJ0eS9zbWFydHknXG5pbXBvcnQgJy4vbW9kZS9zb2xyL3NvbHInXG5pbXBvcnQgJy4vbW9kZS9zb3kvc295J1xuaW1wb3J0ICcuL21vZGUvc3BhcnFsL3NwYXJxbCdcbmltcG9ydCAnLi9tb2RlL3NwcmVhZHNoZWV0L3NwcmVhZHNoZWV0J1xuaW1wb3J0ICcuL21vZGUvc3FsL3NxbCdcbmltcG9ydCAnLi9tb2RlL3N0ZXgvc3RleCdcbmltcG9ydCAnLi9tb2RlL3N0eWx1cy9zdHlsdXMnXG5pbXBvcnQgJy4vbW9kZS9zd2lmdC9zd2lmdCdcbmltcG9ydCAnLi9tb2RlL3RjbC90Y2wnXG5pbXBvcnQgJy4vbW9kZS90ZXh0aWxlL3RleHRpbGUnXG5pbXBvcnQgJy4vbW9kZS90aWRkbHl3aWtpL3RpZGRseXdpa2knXG5pbXBvcnQgJy4vbW9kZS90aWtpL3Rpa2knXG5pbXBvcnQgJy4vbW9kZS90b21sL3RvbWwnXG5pbXBvcnQgJy4vbW9kZS90b3JuYWRvL3Rvcm5hZG8nXG5pbXBvcnQgJy4vbW9kZS90cm9mZi90cm9mZidcbmltcG9ydCAnLi9tb2RlL3R0Y24vdHRjbidcbmltcG9ydCAnLi9tb2RlL3R0Y24tY2ZnL3R0Y24tY2ZnJ1xuaW1wb3J0ICcuL21vZGUvdHVydGxlL3R1cnRsZSdcbmltcG9ydCAnLi9tb2RlL3R3aWcvdHdpZydcbmltcG9ydCAnLi9tb2RlL3ZiL3ZiJ1xuaW1wb3J0ICcuL21vZGUvdmJzY3JpcHQvdmJzY3JpcHQnXG5pbXBvcnQgJy4vbW9kZS92ZWxvY2l0eS92ZWxvY2l0eSdcbmltcG9ydCAnLi9tb2RlL3Zlcmlsb2cvdmVyaWxvZydcbmltcG9ydCAnLi9tb2RlL3ZoZGwvdmhkbCdcbmltcG9ydCAnLi9tb2RlL3Z1ZS92dWUnXG5pbXBvcnQgJy4vbW9kZS93YXN0L3dhc3QnXG5pbXBvcnQgJy4vbW9kZS93ZWJpZGwvd2ViaWRsJ1xuaW1wb3J0ICcuL21vZGUveG1sL3htbCdcbmltcG9ydCAnLi9tb2RlL3hxdWVyeS94cXVlcnknXG5pbXBvcnQgJy4vbW9kZS95YWNhcy95YWNhcydcbmltcG9ydCAnLi9tb2RlL3lhbWwveWFtbCdcbmltcG9ydCAnLi9tb2RlL3lhbWwtZnJvbnRtYXR0ZXIveWFtbC1mcm9udG1hdHRlcidcbmltcG9ydCAnLi9tb2RlL3o4MC96ODAnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENNU3ludGF4SGlnaGxpZ2h0UGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcblxuICAvLyB0aGVzZSBhcmUgdGhlIENvZGVNaXJyb3IgbW9kZXMgdGhhdCBPYnNpZGlhbiB1c2VzIGJ5IGRlZmF1bHRcbiAgbW9kZXNUb0tlZXAgPSBbXCJoeXBlcm1kXCIsIFwibWFya2Rvd25cIiwgXCJudWxsXCIsIFwieG1sXCJdO1xuXG4gIGFzeW5jIG9ubG9hZCgpIHtcbiAgICAvLyB3YWl0IGZvciBsYXlvdXQgdG8gYmUgcmVhZHkgdG8gcGVyZm9ybSB0aGUgcmVzdFxuICAgIHRoaXMuYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeSA/IHRoaXMubGF5b3V0UmVhZHkoKSA6IHRoaXMuYXBwLndvcmtzcGFjZS5vbignbGF5b3V0LXJlYWR5JywgdGhpcy5sYXlvdXRSZWFkeSk7XG4gIH1cblxuICBsYXlvdXRSZWFkeSA9ICgpID0+IHtcbiAgICAvLyBkb24ndCBuZWVkIHRoZSBldmVudCBoYW5kbGVyIGFueW1vcmUsIGdldCByaWQgb2YgaXRcbiAgICB0aGlzLmFwcC53b3Jrc3BhY2Uub2ZmKCdsYXlvdXQtcmVhZHknLCB0aGlzLmxheW91dFJlYWR5KTtcbiAgICB0aGlzLnJlZnJlc2hMZWF2ZXMoKTtcbiAgfVxuXG4gIG9udW5sb2FkKCkge1xuICAgIC8vIERlbGV0ZSBhbGwgdGhlIGNvZGVtaXJyb3IgbW9kZXMsIHRvIGRpc2FibGUgdGhlIHN5bnRheCBoaWdobGlnaHRpbmdcbiAgICAvLyBleGNlcHQgdGhlIGRlZmF1bHQgb25lcywgb2J2aW91c2x5XG4gICAgZm9yIChjb25zdCBrZXkgaW4gQ29kZU1pcnJvci5tb2Rlcykge1xuICAgICAgaWYgKENvZGVNaXJyb3IubW9kZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhdGhpcy5tb2Rlc1RvS2VlcC5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIGRlbGV0ZSBDb2RlTWlycm9yLm1vZGVzW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoTGVhdmVzKCk7XG4gIH1cblxuICByZWZyZXNoTGVhdmVzID0gKCkgPT4ge1xuICAgIC8vIHJlLXNldCB0aGUgZWRpdG9yIG1vZGUgdG8gcmVmcmVzaCB0aGUgc3ludGF4IGhpZ2hsaWdodGluZ1xuICAgIHRoaXMuYXBwLndvcmtzcGFjZS5pdGVyYXRlQ29kZU1pcnJvcnMoY20gPT4gY20uc2V0T3B0aW9uKFwibW9kZVwiLCBjbS5nZXRPcHRpb24oXCJtb2RlXCIpKSlcbiAgfVxufSJdLCJuYW1lcyI6WyJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsInJlcXVpcmUkJDIiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwiUGx1Z2luIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BGLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFHLElBQUksT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUNGO0FBQ08sU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJO0FBQzdDLFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsK0JBQStCLENBQUMsQ0FBQztBQUNsRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDM0MsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUF1Q0Q7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ25HLFFBQVEsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RHLFFBQVEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3RILFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNEO0FBQ08sU0FBUyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUMzQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckgsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxNQUFNLEtBQUssVUFBVSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3SixJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RFLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsT0FBTyxDQUFDLEVBQUUsSUFBSTtBQUN0QixZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pLLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRCxZQUFZLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QixnQkFBZ0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxL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Q0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6RSxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkUsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvRSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEUsSUFBSSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRyxJQUFJLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRixJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFF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LEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxJQUFJLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNELElBQUksSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQzVFLElBQUksSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkQ7QUFDQSxJQUFJLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDaEQsSUFBSSxJQUFJLE1BQU0sR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCO0FBQ0EsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEIsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEUsTUFBTSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssR0FBRztBQUN2RCxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElB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QThCO0FBQ3BDLE1BQU0sbUNBQW1DO0FBQ3pDLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0sNENBQTRDO0FBQ2xELE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0sMkNBQTJDO0FBQ2pELE1BQU0sMENBQTBDO0FBQ2hELE1BQU0scUNBQXFDO0FBQzNDLE1BQU0scURBQXFEO0FBQzNELE1BQU0sa0ZBQWtGO0FBQ3hGLE1BQU0sMEVBQTBFO0FBQ2hGLE1BQU0sbURBQW1EO0FBQ3pELE1BQU0saURBQWlEO0FBQ3ZELE1BQU0sMkNBQTJDO0FBQ2pELE1BQU0sd0NBQXdDO0FBQzlDLE1BQU0sMkNBQTJDO0FBQ2pELE1BQU0saUVBQWlFO0FBQ3ZFLE1BQU0sMkRBQTJEO0FBQ2pFLE1BQU0sc0RBQXNEO0FBQzVELE1BQU0sMkRBQTJEO0FBQ2pFLE1BQU0sc0RBQXNEO0FBQzVELE1BQU0sdURBQXVEO0FBQzdELE1BQU0sOENBQThDO0FBQ3BELE1BQU0sb0RBQW9EO0FBQzFELE1BQU0sZ0RBQWdEO0FBQ3RELE1BQU0seUNBQXlDO0FBQy9DLE1BQU0sNEJBQTRCO0FBQ2xDLE1BQU0sMkRBQTJEO0FBQ2pFLE1BQU0sc0RBQXNEO0FBQzVELE1BQU0seURBQXlEO0FBQy9ELE1BQU0sMERBQTBEO0FBQ2hFLE1BQU0sMkRBQTJEO0FBQ2pFLE1BQU0sNkNBQTZDO0FBQ25ELE1BQU0scUNBQXFDO0FBQzNDLE1BQU0sbUNBQW1DO0FBQ3pDLE1BQU0sMkNBQTJDO0FBQ2pELE1BQU0sc0RBQXNEO0FBQzVELE1BQU0sc0NBQXNDO0FBQzVDLE1BQU0sNENBQTRDO0FBQ2xELE1BQU0sMENBQTBDO0FBQ2hELE1BQU0sc0NBQXNDO0FBQzVDLE1BQU0sa0NBQWtDO0FBQ3hDLE1BQU0sbURBQW1EO0FBQ3pELE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0sMENBQTBDO0FBQ2hELE1BQU0sMENBQTBDO0FBQ2hELE1BQU0sOENBQThDO0FBQ3BELE1BQU0saURBQWlEO0FBQ3ZELE1BQU0sc0NBQXNDO0FBQzVDLE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0sNkJB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R0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3RELElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sUUFBUSxDQUFDO0FBQ2xELElBQUksSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkM7QUFDQSxJQUFJLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3JFLFNBQVMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDLEVBQUU7QUFDNUQsU0FBUyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxPQUFPLFNBQVMsQ0FBQyxFQUFFO0FBQzFFLFNBQVMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDLEVBQUU7QUFDOUUsU0FBUyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDNUMsU0FBUyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDeEIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxFQUFFO0FBQ2pFLFdBQVcsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFP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LHFCQUFxQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDNUMsRUFBRSxlQUFlLEVBQUU7QUFDbkIsSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDbEMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDbEMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3RCLElBQUksUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDO0FBQ2hELElBQUksVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztBQUNsQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDMUYsVUFBVSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJO0FBQ2pGLFVBQVUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ2hGLFVBQVUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQzNGLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJ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QUFDLEVBQUU7QUFDeEgsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLFVBQVM7QUFDN0IsUUFBUSxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEQsYUFBYSxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkcsYUFBYSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7QUFDcEcsT0FBTyxNQUFNLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxXQUFXLEVBQUU7QUFDL0MsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLFVBQVM7QUFDN0IsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUM7QUFDbkUsT0FBTyxNQUFNLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxVQUFVLEVBQUU7QUFDOUMsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLFVBQVM7QUFDN0IsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDOUIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDakQsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLElBQUksSUFBSSxJQUFJLFFBQVEsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFF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QUFJLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRCxNQUFNLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUMxQyxNQUFNLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxJQUFJLFVBQVUsS0FBSyxPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3BHLE1BQU0sT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFELEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLFNBQVMsS0FBSyxFQUFFLFNBQVMsRUFBRTtBQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxVQUFVLEVBQUUsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ2pHLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRCxNQUFNLElBQUksU0FBUyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUc7QUFDcEY7QUFDQSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDeEYsUUFBUSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLE9BQU8sR0FBRyxP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SSxTQUFTLElBQUksS0FBSyxJQUFJLE1BQU0sRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM5RCxNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDOUM7QUFDQSxNQUFNLElBQUksQ0FBQyxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxXQUFXLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNGLFdBQVcsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFLFdBQVcsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFLFdBQVcsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFLFdBQVcsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFO0FBQy9CLFFBQVEsT0FBTyxHQUFHLENBQUMsSUFBSSxJQUFJLFdBQVcsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JELFFBQVEsT0FBTyxHQUFHLENBQUMsSUFBSSxJQUFJLFdBQVcsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLE9BQU87QUFDUCxXQUFXLElBQUksT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RELFdBQVcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLFdBQVcsSUFBSSxPQUFPLElBQUksY0FBYyxDQUFDO0FBQzdHLFFBQVEsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDekQsTUFBTSxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUNoQyxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLFNBQVMsS0FBSyxFQUFFLFNBQVMsRUFBRTtBQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDMUUsTUFBTSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxXQUFXLElBQUksU0FBUyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztBQUN0RSxNQUFNLElBQUksT0FBTyxHQUFHLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLFdBQVcsRUFBRSxPQUFPLEdBQUcsQ0FBQyxRQUFRLElBQUksU0FBUyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDN0YsV0FBVyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsV0FBVyxPQUFPLEdBQUcsQ0FBQyxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUM1RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLGFBQWEsRUFBRSxJQUFJO0FBQ3ZCLEdBQUcsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0g7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQztBQUNBLENBQUMsQ0FBQzs7OztBQzdNRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsR0FBRyxFQUFFO0FBQ2YsRUFDSSxHQUFHLENBQUNBLFVBQStCLENBQUMsQ0FJcEI7QUFDcEIsQ0FBQyxFQUFFLFNBQVMsVUFBVSxFQUFFO0FBRXhCO0FBQ0EsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsV0FBVztBQUMzQyxFQUFFLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUMxQixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JFLElBQUksT0FBTyxDQUFDLENBQUM7QUFDYixHQUFHO0FBQ0gsRUFBRSxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDekIsSUFBSSxNQUFNO0FBQ1YsSUFBSSxRQUFRO0FBQ1osSUFBSSxNQUFNO0FBQ1YsSUFBSSxTQUFTO0FBQ2IsSUFBSSxPQUFPO0FBQ1gsSUFBSSxRQUFRO0FBQ1osSUFBSSxVQUFVO0FBQ2QsSUFBSSxNQUFNO0FBQ1YsSUFBSSxPQUFPO0FBQ1gsSUFBSSxRQUFRO0FBQ1osSUFBSSxPQUFPO0FBQ1gsSUFBSSxRQUFRO0FBQ1osSUFBSSxTQUFTO0FBQ2IsSUFBSSxRQUFRO0FBQ1osSUFBSSxXQUFXO0FBQ2YsSUFBSSxVQUFVO0FBQ2QsSUFBSSxRQUFRO0FBQ1osSUFBSSxNQUFNO0FBQ1YsSUFBSSxLQUFLO0FBQ1QsSUFBSSxVQUFVO0FBQ2QsSUFBSSxNQUFNO0FBQ1YsSUFBSSxPQUFPO0FBQ1gsSUFBSSxNQUFNO0FBQ1YsSUFBSSxJQUFJO0FBQ1IsSUFBSSxTQUFTO0FBQ2IsSUFBSSxPQUFPO0FBQ1gsSUFBSSxTQUFTO0FBQ2IsSUFBSSxJQUFJO0FBQ1IsSUFBSSxRQUFRO0FBQ1osSUFBSSxNQUFNO0FBQ1YsSUFBSSxVQUFVO0FBQ2QsSUFBSSxRQUFRO0FBQ1osSUFBSSxRQUFRO0FBQ1osSUFBSSxLQUFLO0FBQ1QsSUFBSSxRQUFRO0FBQ1osSUFBSSxNQUFNO0FBQ1YsSUFBSSxJQUFJO0FBQ1IsSUFBSSxVQUFVO0FBQ2QsSUFBSSxRQUFRO0FBQ1osSUFBSSxPQUFPO0FBQ1gsSUFBSSxPQUFPO0FBQ1gsSUFBSSxPQUFPO0FBQ1gsSUFBSSxVQUFVO0FBQ2QsSUFBSSxXQUFXO0FBQ2YsSUFBSSxTQUFTO0FBQ2IsSUFBSSxVQUFVO0FBQ2QsSUFBSSxTQUFTO0FBQ2IsSUFBSSxVQUFVO0FBQ2QsSUFBSSxVQUFVO0FBQ2QsSUFBSSxPQUFPO0FBQ1gsSUFBSSxNQUFNO0FBQ1YsSUFBSSxNQUFNO0FBQ1YsSUFBSSxRQUFRO0FBQ1osSUFBSSxXQUFXO0FBQ2YsSUFBSSxPQUFPO0FBQ1gsSUFBSSxTQUFTO0FBQ2IsSUFBSSxRQUFRO0FBQ1osSUFBSSxVQUFVO0FBQ2QsSUFBSSxZQUFZO0FBQ2hCLElBQUksSUFBSTtBQUNSLElBQUksS0FBSztBQUNULElBQUksU0FBUztBQUNiLElBQUksS0FBSztBQUNULElBQUksSUFBSTtBQUNSLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsRUFBRSxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEU7QUFDQSxFQUFFLFNBQVMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FB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QztBQUNuQyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRSxTQUFTLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRTtBQUN0QyxJQUFJLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtBQUNuRSxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsTUFBTSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUU7QUFDckMsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEIsUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDL0MsVUFBVSxPQUFPLElBQUksQ0FBQztBQUN0QixTQUFTO0FBQ1QsT0FBTztBQUNQLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUU7QUFDbkMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7QUFDbkUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUU7QUFDckMsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEIsT0FBTztBQUNQLE1BQU0sT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFD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Q0FBQyxLQUFLO0FBQ3pCLE1BQU0sS0FBSyxHQUFHLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sS0FBSyxHQUFHLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sS0FBSyxHQUFHLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sS0FBSyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0UsTUFBTSxLQUFLLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJO0FBQzNELGtDQUFrQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3pDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsTUFBTSxLQUFLLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxNQUFNLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxNQUFNLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQsTUFBTSxhQUFhLE9BQU8sQ0FBQyxDQUFDO0FBQzVCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO0FBQ3pCLE1BQU0sSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0IsTUFBTSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO0FBQ3hDLFFBQVEsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxD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RUFBRSxTQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDbkMsTUFBTSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQzlCLE1BQU0sSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDeEIsUUFBUSxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2pELFFBQVEsS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDOUMsUUFBUSxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUNqQyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDL0MsT0FBTztBQUNQLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0QsTUFBTSxJQUFJLEtBQUssSUFBSSxTQUFTLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDM0MsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0FBQ0EsTUFBTSxJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkUsV0FBVyxJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEUsV0FBVyxJQUFJLE9BQU8sSUFBSSxH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QUFFLFNBQVM7QUFDN0UsTUFBTSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSztBQUMxRSxNQUFNLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ3RCLE1BQU0sTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEU7QUFDQSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDdEIsTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJO0FBQzVFLE1BQU0sS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHO0FBQzdFLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ3RCLE1BQU0sYUFBYSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU07QUFDaEYsTUFBTSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTO0FBQzdFLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxTQUFT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LE9BQU8sR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyQyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLFdBQVcsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JHO0FBQ0EsRUFBRSxTQUFTLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNsRSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzdCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDMUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ25DLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUk7QUFDL0MsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ3pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMxRCxJQUFJLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZFO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO0FBQzlDLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxNQUFNLElBQUksRUFBRTtBQUNoQixNQUFNLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztBQUN4RCxNQUFNLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRTtBQUNyQyxRQUFRLE1BQU0sRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHO0FBQ2hELFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckIsUUFBUSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxZQUFZLENBQUM7QUFDL0UsUUFBUSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLFlBQVksQ0FBQztBQUNoRixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO0FBQ3JDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO0FBQ3pDLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDOUIsTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ3ZELEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxjQUFjLENBQUMsVUFBVSxFQUFFO0FBQ3RDLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztBQUN6QixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJO0FBQ25ELE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBRSxPQUFPO0FBQ3RDLElBQUksS0FBSyxDQUFDLGFBQWEsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUMxRSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0QsRUFBRSxTQUFTLElBQUksR0FBRztBQUNsQixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSxHQUFHO0FBQ0gsRUFBRSxTQUFTLElBQUksR0FBRztBQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNILEVBQUUsU0FBUyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUM5QixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUk7QUFDcEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ3RDLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNILEVBQUUsU0FBUyxRQUFRLENBQUMsT0FBTyxFQUFFO0FBQzdCLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztBQUN6QixJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUN2QixNQUFNLEVBQUUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPO0FBQ25ELE1BQU0sS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvRCxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO0FBQ2pDLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPO0FBQ3BELE1BQU0sS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqRSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQyxFQUFFLFNBQVMsV0FBVyxHQUFHO0FBQ3pCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUM1RCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFFLEdBQUc7QUFDSCxFQUFFLFNBQVMsVUFBVSxHQUFHO0FBQ3hCLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9DLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQzdDLEdBQUc7QUFDSCxFQUFFLFVBQVUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLEVBQUUsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUMvQixJQUFJLElBQUksTUFBTSxHQUFHLFdBQVc7QUFDNUIsTUFBTSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0FBQzNCLE1BQU0sS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNHLEtBQUssQ0FBQztBQUNOLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDdEIsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0gsRUFBRSxTQUFTLE1BQU0sR0FBRztBQUNwQixJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7QUFDekIsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxHQUFHO0FBQ25DLFFBQVEsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNoRCxNQUFNLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDekMsS0FBSztBQUNMLEdBQUc7QUFDSCxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3BCO0FBQ0EsRUFBRSxTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDMUIsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUU7QUFDckIsTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUN4QyxXQUFXLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzVDLFdBQVcsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsS0FBSztBQUNMLElBQUksT0FBTyxDQUFDLENBQUM7QUFDYixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRTtBQUMzQixJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwRixJQUFJLElBQUksSUFBSSxJQUFJLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6RixJQUFJLElBQUksSUFBSSxJQUFJLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzdFLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN2RixJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO0FBQ25DLElBQUksSUFBSSxJQUFJLElBQUksV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3pELElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JELElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ3BHLG1DQUFtQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlELElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNyRSxJQUFJLElBQUksSUFBSSxJQUFJLFFBQVEsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUN0RyxzQ0FBc0MsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3RCxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0QsSUFBSSxJQUFJLElBQUksSUFBSSxTQUFTLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEQsSUFBSSxJQUFJLElBQUksSUFBSSxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDbkcscUNBQXFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDcEUsSUFBSSxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUUsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlELElBQUksSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEUsR0FBRztBQUNILEVBQUUsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFO0FBQzVCLElBQUksSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3JFLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BELElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JELElBQUksSUFBSSxJQUFJLElBQUksV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNwRyxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRCxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDdEcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzlGLElBQUksT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUNsQixHQUFHO0FBQ0gsRUFBRSxTQUFTLGVBQWUsQ0FBQyxJQUFJLEVBQUU7QUFDakMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUNoRCxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUN0QyxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2hGLElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkUsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsT0FBTztBQUM1QixJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDakcsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMvRixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsY0FBYyxDQUFDLElBQUksRUFBRTtBQUNoQyxJQUFJLElBQUksSUFBSSxJQUFJLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNyRCxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRTtBQUN6QixJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QyxJQUFJLEdBQUcsSUFBSSxJQUFJLFVBQVUsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRCxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDMUYsR0FBRztBQUNILEVBQUUsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQzFCLElBQUksR0FBRyxJQUFJLElBQUksVUFBVSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDekMsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ25DLElBQUksR0FBRyxJQUFJLElBQUksVUFBVSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0FBQ3JHLFNBQVMsR0FBRyxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVHLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUs7QUFDL0IsRUFBRTtBQUNGLElBQUksR0FBRyxJQUFJLElBQUksVUFBVSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0FBQ3JHLFNBQVMsSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0FBQ2hGLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFO0FBQzVCLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNwRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEQsR0FBRztBQUNILEVBQUUsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQzFCLElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7QUFDcEUsR0FBRztBQUNILEVBQUUsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ3pCLElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQ25ELElBQUksSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMvRSxHQUFHO0FBQ0gsRUFBRSxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQy9CLElBQUksU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQzNCLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRCxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO0FBQ3JDLE1BQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0IsS0FBSztBQUNMLElBQUksT0FBTyxTQUFTLElBQUksRUFBRTtBQUMxQixNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO0FBQ3JDLFdBQVcsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSCxFQUFFLFNBQVMsS0FBSyxDQUFDLElBQUksRUFBRTtBQUN2QixJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO0FBQ25DLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLEdBQUc7QUFDSCxFQUFFLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDaEMsSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM1RSxJQUFJLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDbEIsR0FBRztBQUNILEVBQUUsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNoQyxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkQsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUMsR0FBRztBQUNILEVBQUUsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNqQyxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRTtBQUM1QixNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QixNQUFNLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7QUFDcEMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxPQUFPLElBQUksRUFBRTtBQUNuQixLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUMvQixJQUFJLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO0FBQ3JDLEdBQUc7QUFDSCxFQUFFLFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDcEM7QUFDQSxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxRixJQUFJLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqRCxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDM0gsR0FBRztBQUNILEVBQUUsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ3pCLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVDLEdBQUc7QUFDSCxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRTtBQUM1QixJQUFJLEdBQUcsSUFBSSxJQUFJLE1BQU0sRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO0FBQ3JDLElBQUksR0FBRyxJQUFJLElBQUksVUFBVSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDekMsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0UsR0FBRztBQUNILEVBQUUsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQzFCLElBQUksR0FBRyxJQUFJLElBQUksVUFBVSxFQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELEdBQUc7QUFDSCxFQUFFLFNBQVMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDL0IsSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxPQUFPO0FBQ1QsSUFBSSxVQUFVLEVBQUUsU0FBUyxVQUFVLEVBQUU7QUFDckMsTUFBTSxJQUFJLFlBQVksR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvRixNQUFNLElBQUksS0FBSyxHQUFHO0FBQ2xCLFFBQVEsUUFBUSxFQUFFLGFBQWE7QUFDL0IsUUFBUSxTQUFTLEVBQUUsSUFBSTtBQUN2QixRQUFRLFNBQVMsRUFBRSxJQUFJO0FBQ3ZCLFFBQVEsRUFBRSxFQUFFLEVBQUU7QUFDZCxRQUFRLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDO0FBQ25GLFFBQVEsU0FBUyxFQUFFLFlBQVksQ0FBQyxTQUFTO0FBQ3pDLFFBQVEsYUFBYSxFQUFFLFlBQVk7QUFDbkMsUUFBUSxPQUFPLEVBQUUsWUFBWSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDO0FBQ3pFLFFBQVEsUUFBUSxFQUFFLENBQUM7QUFDbkIsT0FBTyxDQUFDO0FBQ1IsTUFBTSxJQUFJLFlBQVksQ0FBQyxVQUFVLElBQUksT0FBTyxZQUFZLENBQUMsVUFBVSxJQUFJLFFBQVE7QUFDL0UsUUFBUSxLQUFLLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7QUFDbkQsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssRUFBRSxTQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDbkMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN4QixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7QUFDbEQsVUFBVSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdEMsUUFBUSxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5QyxPQUFPO0FBQ1AsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQztBQUN6QyxNQUFNLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hELE1BQU0sSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzFDLE1BQU0sS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUNyRyxNQUFNLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEdBQUcsQ0FBQztBQUNwQyxNQUFNLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sRUFBRSxTQUFTLEtBQUssRUFBRSxTQUFTLEVBQUU7QUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3BELE1BQU0sSUFBSSxTQUFTLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDaEYsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLFNBQVMsSUFBSSxHQUFHLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDN0UsTUFBTSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDO0FBQzNELE1BQU0sSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFLE9BQU8sT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDeEQsV0FBVyxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksU0FBUyxJQUFJLEdBQUcsRUFBRSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDM0UsV0FBVyxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQ3RGLFdBQVcsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLFFBQVEsSUFBSSxDQUFDLE9BQU87QUFDbkQsUUFBUSxPQUFPLE9BQU8sQ0FBQyxRQUFRLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDeEcsV0FBVyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsV0FBVyxPQUFPLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUNoRSxLQUFLO0FBQ0w7QUFDQSxJQUFJLGFBQWEsRUFBRSxJQUFJO0FBQ3ZCLElBQUksaUJBQWlCLEVBQUUsSUFBSTtBQUMzQixJQUFJLGVBQWUsRUFBRSxJQUFJO0FBQ3pCLElBQUksV0FBVyxFQUFFLElBQUk7QUFDckIsR0FBRyxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBLFVBQVUsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsWUFBWTtBQUMxQztBQUNBLEVBQUUsT0FBTztBQUNULElBQUksVUFBVSxFQUFFLFlBQVk7QUFDNUIsTUFBTSxPQUFPO0FBQ2IsUUFBUSxNQUFNLEVBQUUsS0FBSztBQUNyQixRQUFRLFFBQVEsRUFBRSxLQUFLO0FBQ3ZCLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTCxJQUFJLEtBQUssRUFBRSxVQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDcEMsTUFBTSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDN0I7QUFDQTtBQUNBLE1BQU0sSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ3JCLFFBQVEsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzNCLFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsT0FBTztBQUNQLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRTtBQUM1QixRQUFRLElBQUksS0FBSyxHQUFHLFlBQVksQ0FBQztBQUNqQztBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ2xDLFVBQVUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEtBQUssR0FBRyxXQUFXLENBQUM7QUFDOUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDbEMsVUFBVSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLFVBQVUsS0FBSyxHQUFHLFdBQVcsQ0FBQztBQUM5QixVQUFVLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNsQyxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDaEQsUUFBUSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7QUFDbEMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FFdkIsTUFBTTtBQUNmLFVBQVUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzdCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ2xDLFVBQVUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLFVBQVUsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDakMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLFFBQVEsQ0FBQztBQUN4QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQixNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJLFdBQVcsRUFBRSxHQUFHO0FBQ3BCLEdBQUcsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0g7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3QztBQUNBLENBQUMsQ0FBQzs7OztBQ2xnQkY7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxTQUFTLEdBQUcsRUFBRTtBQUNmLEVBQ0ksR0FBRyxDQUFDQSxVQUErQixFQUFFQyxTQUFpQztBQUMxRSxRQUFRQyxTQUFxQyxDQUFDLENBSzFCO0FBQ3BCLENBQUMsRUFBRSxTQUFTLFVBQVUsRUFBRTtBQUV4QjtBQUNBLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsU0FBUyxNQUFNLEVBQUUsWUFBWSxFQUFFO0FBQ3ZFLElBQUksSUFBSSxZQUFZLEdBQUcsWUFBWSxDQUFDLFlBQVksSUFBSSxPQUFNO0FBQzFELElBQUksT0FBTyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFDaEYsTUFBTSxJQUFJLEVBQUUsWUFBWSxDQUFDLFdBQVcsSUFBSSxNQUFNO0FBQzlDLE1BQU0sS0FBSyxFQUFFLFlBQVk7QUFDekIsTUFBTSxVQUFVLEVBQUUsU0FBUztBQUMzQixNQUFNLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxTQUFTLE1BQU0sRUFBRTtBQUNyQyxRQUFRLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLFNBQVMsR0FBRTtBQUN6RCxRQUFRLE9BQU8sU0FBUztBQUN4QixPQUFPLENBQUM7QUFDUixLQUFLLEVBQUU7QUFDUCxNQUFNLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJO0FBQ3RFLE1BQU0sS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLGNBQWMsSUFBSSxJQUFJO0FBQ3RFLE1BQU0sSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztBQUN0RSxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNsQjtBQUNBLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyRyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFDekcsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMvRixDQUFDLENBQUM7Ozs7QUNwQ0Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxTQUFTLEdBQUcsRUFBRTtBQUNmLEVBQ0ksR0FBRyxDQUFDRixVQUErQixDQUFDLENBSXBCO0FBQ3BCLENBQUMsRUFBRSxTQUFTLFVBQVUsRUFBRTtBQUV4QjtBQUNBLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFdBQVc7QUFDekMsRUFBRSxTQUFTLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3hDLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3ZCLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDdkIsSUFBSSxPQUFPLE9BQU8sQ0FBQztBQUNuQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDaEMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUU7QUFDdkMsTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLGtCQUFrQixDQUFDO0FBQ3JDLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZFLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7QUFDOUIsTUFBTSxPQUFPLFNBQVMsQ0FBQztBQUN2QixLQUFLLE1BQU07QUFDWCxNQUFNLE9BQU8sYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDN0MsSUFBSSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkQ7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsa0JBQWtCLENBQUM7QUFDbkMsSUFBSSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRTtBQUN2QyxNQUFNLE9BQU8sd0JBQXdCLENBQUM7QUFDdEMsS0FBSyxNQUFNLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFO0FBQzlDLE1BQU0sT0FBTyxrQkFBa0IsQ0FBQztBQUNoQyxLQUFLLE1BQU0sSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUU7QUFDOUMsTUFBTSxPQUFPLG1CQUFtQixDQUFDO0FBQ2pDLEtBQUssTUFBTSxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRTtBQUM5QyxNQUFNLE9BQU8sdUJBQXVCLENBQUM7QUFDckMsS0FBSyxNQUFNLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFO0FBQzlDLE1BQU0sT0FBTyx1QkFBdUIsQ0FBQztBQUNyQyxLQUFLLE1BQU07QUFDWCxNQUFNLE9BQU8sT0FBTyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUM3QyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN2QixJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3RDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsZUFBZSxDQUFDO0FBQ2hDLElBQUksT0FBTyxVQUFVLENBQUM7QUFDdEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzFDLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7QUFDeEMsTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QixNQUFNLE9BQU8sU0FBUyxDQUFDO0FBQ3ZCLEtBQUssTUFBTTtBQUNYLE1BQU0sT0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUMxQixJQUFJLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUM5QyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNqQyxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzNCLFFBQVEsT0FBTyxPQUFPLENBQUM7QUFDdkIsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sT0FBTyxRQUFRLENBQUM7QUFDdEIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3hCLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3ZCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPO0FBQ1QsSUFBSSxLQUFLLEVBQUUsU0FBUyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ25DLE1BQU0sSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUMxQixNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQztBQUN6RSxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsRUFBRSxTQUFTLEtBQUssRUFBRTtBQUMvQixNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBLElBQUksVUFBVSxFQUFFLFdBQVc7QUFDM0IsTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFCLEtBQUs7QUFDTCxHQUFHLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0EsVUFBVSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDOUM7QUFDQSxDQUFDLENBQUM7Ozs7QUNoSEY7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxTQUFTLEdBQUcsRUFBRTtBQUNmLEVBQ0ksR0FBRyxDQUFDQSxVQUErQixDQUFDLENBSXBCO0FBQ3BCLENBQUMsRUFBRSxTQUFTLFVBQVUsRUFBRTtBQUV4QjtBQUNBLEVBQUUsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFO0FBQzdCLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEUsR0FDQTtBQUNBLEVBQUUsSUFBSSxZQUFZLEdBQUc7QUFDckIsSUFBSSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxNQUFNO0FBQzVELElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWM7QUFDM0QsSUFBSSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWU7QUFDdkUsSUFBSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO0FBQ3RELElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxTQUFTO0FBQ3JFLElBQUksVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEQsSUFBSSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsaUJBQWlCO0FBQ25FLElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVztBQUNuRSxJQUFJLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZO0FBQzVELElBQUksWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFFBQVE7QUFDbEUsSUFBSSxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsVUFBVTtBQUM1RCxJQUFJLFFBQVEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGFBQWE7QUFDN0QsSUFBSSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUMzRCxJQUFJLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxRQUFRO0FBQ25FLElBQUksU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE9BQU87QUFDMUQsSUFBSSxXQUFXLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZUFBZTtBQUMzRSxJQUFJLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsaUJBQWlCO0FBQ3RFLElBQUksVUFBVSxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQjtBQUN4RCxJQUFJLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLFlBQVk7QUFDMUQsSUFBSSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxTQUFTO0FBQ3JFLElBQUksWUFBWSxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsU0FBUztBQUMzRSxJQUFJLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGVBQWU7QUFDcEUsSUFBSSxRQUFRLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVztBQUNoRSxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxtQkFBbUI7QUFDdkQsSUFBSSxlQUFlLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVztBQUMxRSxJQUFJLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVO0FBQ2hFLElBQUksU0FBUyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUI7QUFDakUsSUFBSSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWM7QUFDL0QsSUFBSSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUztBQUNuRSxJQUFJLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUI7QUFDMUQsSUFBSSxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsbUJBQW1CO0FBQzNELElBQUksdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsV0FBVztBQUNqRSxJQUFJLGNBQWMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVc7QUFDckQsSUFBSSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWTtBQUNqRSxJQUFJLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsU0FBUztBQUNuRSxJQUFJLFFBQVEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxVQUFVO0FBQzlELElBQUksUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLGtCQUFrQjtBQUNuRSxJQUFJLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQjtBQUM5RCxJQUFJLGlCQUFpQixFQUFFLG1CQUFtQjtBQUMxQyxJQUFJLG9CQUFvQixFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsU0FBUztBQUM3RSxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLGNBQWM7QUFDdEUsSUFBSSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsT0FBTztBQUM1RCxJQUFJLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3hELElBQUksT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDbkQsSUFBSSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVztBQUNoRCxJQUFJLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUs7QUFDM0QsSUFBSSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZTtBQUNoRSxJQUFJLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxlQUFlO0FBQ3pELElBQUksWUFBWSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsY0FBYztBQUM1RCxJQUFJLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsV0FBVztBQUMvRCxJQUFJLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVc7QUFDeEQsSUFBSSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsV0FBVztBQUNuRCxJQUFJLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZO0FBQ3RFLElBQUksWUFBWSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVE7QUFDN0QsSUFBSSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTztBQUM3QyxJQUFJLFFBQVEsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsVUFBVTtBQUMzRSxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTO0FBQ3JELElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVc7QUFDM0QsSUFBSSxXQUFXLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxVQUFVO0FBQ3pELElBQUksbUJBQW1CLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQjtBQUN4RSxJQUFJLFVBQVUsRUFBRSxnQkFBZ0I7QUFDaEMsSUFBSSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxVQUFVO0FBQ3BFLElBQUksTUFBTSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVU7QUFDekQsSUFBSSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTTtBQUN2RCxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxhQUFhO0FBQ3hELElBQUksZUFBZSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVM7QUFDOUQsSUFBSSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSztBQUNwRCxJQUFJLEtBQUssRUFBRSxzQkFBc0I7QUFDakMsSUFBSSwwQkFBMEIsRUFBRSxzQkFBc0I7QUFDdEQsSUFBSSwwQkFBMEI7QUFDOUIsSUFBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVTtBQUMvRCxJQUFJLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZTtBQUNsRCxJQUFJLG1CQUFtQixFQUFFLHFCQUFxQjtBQUM5QyxJQUFJLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVO0FBQzlELElBQUksUUFBUSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVk7QUFDN0QsSUFBSSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVE7QUFDeEUsSUFBSSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsVUFBVTtBQUM3RCxJQUFJLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU87QUFDaEUsSUFBSSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVTtBQUM3RCxJQUFJLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLO0FBQ3ZELElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE9BQU87QUFDN0QsSUFBSSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWTtBQUNqRSxJQUFJLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZO0FBQzFELElBQUksZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUTtBQUNuRSxJQUFJLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlO0FBQ3BFLElBQUksWUFBWSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsYUFBYTtBQUM3RSxJQUFJLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsV0FBVztBQUM1RCxJQUFJLDBCQUEwQixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQjtBQUN4RSxJQUFJLFNBQVMsRUFBRSxhQUFhLEVBQUUsVUFBVTtBQUN4QyxJQUFJLFFBQVEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxXQUFXO0FBQ2pFLElBQUksV0FBVyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFVBQVU7QUFDbkUsSUFBSSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsc0JBQXNCO0FBQ3hFLElBQUksU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVM7QUFDeEQsSUFBSSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxPQUFPO0FBQzdELElBQUksTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFlBQVk7QUFDekQsSUFBSSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUTtBQUNyRSxJQUFJLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNO0FBQ25ELElBQUksVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFlBQVk7QUFDOUQsSUFBSSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsU0FBUztBQUM1RCxJQUFJLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVc7QUFDekUsSUFBSSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlO0FBQ3pELElBQUksZUFBZSxFQUFFLGtCQUFrQjtBQUN2QyxJQUFJLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFNBQVM7QUFDbEUsSUFBSSxNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUMzRCxJQUFJLFdBQVcsRUFBRSxlQUFlLEVBQUUsY0FBYztBQUNoRCxJQUFJLFlBQVksRUFBRSxtQkFBbUI7QUFDckMsSUFBSSxVQUFVLEVBQUUsYUFBYSxFQUFFLGtCQUFrQjtBQUNqRCxJQUFJLGVBQWUsRUFBRSxhQUFhO0FBQ2xDLElBQUksU0FBUyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsVUFBVTtBQUNsRSxJQUFJLFFBQVEsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCO0FBQzdDLElBQUksZ0JBQWdCLEVBQUUsaUJBQWlCO0FBQ3ZDLElBQUksWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFlBQVk7QUFDckUsSUFBSSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWTtBQUN4RCxJQUFJLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxXQUFXO0FBQ3BFLElBQUksYUFBYSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVc7QUFDckUsSUFBSSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTztBQUM5RCxJQUFJLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhO0FBQ3hELElBQUksYUFBYSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsVUFBVTtBQUMxRSxJQUFJLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZO0FBQ25ELElBQUksWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWU7QUFDdEUsSUFBSSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVztBQUNqRSxJQUFJLE1BQU0sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXO0FBQzNELElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVE7QUFDdkQsSUFBSSxhQUFhLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUTtBQUM5RCxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTO0FBQ2pELElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGVBQWU7QUFDckUsSUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVztBQUN6RCxJQUFJLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPO0FBQ2pELElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFdBQVc7QUFDM0QsSUFBSSxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsWUFBWTtBQUN4RSxJQUFJLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVc7QUFDM0UsSUFBSSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsYUFBYTtBQUN4RSxJQUFJLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPO0FBQ3BELElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWE7QUFDekQsSUFBSSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWTtBQUNsRSxJQUFJLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFdBQVc7QUFDN0UsSUFBSSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVztBQUMvRCxJQUFJLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxpQkFBaUI7QUFDekUsSUFBSSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTztBQUN0RCxJQUFJLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGFBQWE7QUFDekUsSUFBSSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsV0FBVztBQUM3QyxJQUFJLG1CQUFtQixFQUFFLGFBQWE7QUFDdEMsSUFBSSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTO0FBQy9ELElBQUksS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU87QUFDOUMsSUFBSSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNO0FBQ25FLElBQUksUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGVBQWU7QUFDakUsSUFBSSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCO0FBQ3RELElBQUksZUFBZSxFQUFFLFVBQVU7QUFDL0IsSUFBSSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsYUFBYTtBQUNyRSxJQUFJLFVBQVUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZO0FBQzdELElBQUksZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVTtBQUN2RSxJQUFJLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVO0FBQ3ZELElBQUksUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU07QUFDakQsSUFBSSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYTtBQUM1RCxJQUFJLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPO0FBQ2hELElBQUksVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVk7QUFDbEUsSUFBSSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RCxJQUFJLFFBQVEsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNO0FBQ3JELElBQUksUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVk7QUFDakUsSUFBSSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUTtBQUN2RCxJQUFJLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQzlELElBQUksUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGFBQWE7QUFDbkUsSUFBSSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTTtBQUN0RCxJQUFJLFFBQVEsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLFFBQVE7QUFDckUsSUFBSSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVztBQUNuRCxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlO0FBQzVELElBQUksWUFBWSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDakUsSUFBSSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUztBQUN0RCxJQUFJLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLEtBQUs7QUFDL0QsSUFBSSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsYUFBYTtBQUM1RCxJQUFJLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxjQUFjO0FBQzFELElBQUksU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLElBQUk7QUFDdkQsSUFBSSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVTtBQUNqRCxJQUFJLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVO0FBQzFELElBQUksV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU07QUFDdEQsSUFBSSxjQUFjLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUTtBQUNuRSxJQUFJLGNBQWMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPO0FBQzFELElBQUksUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVU7QUFDekQsSUFBSSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsYUFBYTtBQUM3RCxJQUFJLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0I7QUFDeEQsSUFBSSwyQkFBMkIsRUFBRSxhQUFhO0FBQzlDLElBQUksaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGFBQWE7QUFDcEQsSUFBSSxjQUFjLEVBQUUsYUFBYTtBQUNqQyxJQUFJLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxZQUFZO0FBQ3pELElBQUksY0FBYyxFQUFFLGFBQWE7QUFDakMsSUFBSSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZUFBZTtBQUN0RCxJQUFJLGVBQWUsRUFBRSxRQUFRO0FBQzdCLElBQUksUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGFBQWE7QUFDbEUsSUFBSSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXO0FBQzNFLElBQUksV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFlBQVk7QUFDckUsSUFBSSxhQUFhLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTTtBQUM5RCxJQUFJLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxlQUFlO0FBQzFELElBQUksWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlO0FBQzNDLElBQUksa0JBQWtCLEVBQUUsZ0JBQWdCO0FBQ3hDLElBQUksWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZO0FBQzlDLElBQUksY0FBYyxFQUFFLGdCQUFnQjtBQUNwQyxJQUFJLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxrQkFBa0I7QUFDNUQsSUFBSSxRQUFRLEVBQUUsaUJBQWlCO0FBQy9CLElBQUksVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGVBQWU7QUFDaEUsSUFBSSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVTtBQUM1RCxJQUFJLGlCQUFpQixFQUFFLHNCQUFzQjtBQUM3QyxJQUFJLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUztBQUNwQyxJQUFJLGFBQWEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO0FBQzdELElBQUksU0FBUyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQjtBQUN0RCxJQUFJLFFBQVEsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFNBQVM7QUFDbkUsR0FBRyxDQUFDO0FBQ0osRUFBRSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDMUM7QUFDQSxFQUFFLElBQUksWUFBWSxHQUFHO0FBQ3JCLElBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUTtBQUN2QyxJQUFJLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVk7QUFDL0MsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLO0FBQ3RDLElBQUksU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDM0MsSUFBSSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPO0FBQ3hDLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVO0FBQzNCLEdBQUcsQ0FBQztBQUNKLEVBQUUsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsRUFBRSxVQUFVLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ25GO0FBQ0EsRUFBRSxJQUFJLFdBQVcsR0FBRyxJQUFJLE1BQU0sQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvRTtBQUNBLEVBQUUsSUFBSSxlQUFlLEdBQUcsa0JBQWtCLENBQUM7QUFDM0MsRUFBRSxJQUFJLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4RTtBQUNBLEVBQUUsU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQzdCO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQztBQUN2QztBQUNBO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDM0IsTUFBTSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekIsTUFBTSxPQUFPLFNBQVMsQ0FBQztBQUN2QixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMzQyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztBQUM5QyxRQUFRLE9BQU8sUUFBUSxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDO0FBQ3pELFFBQVEsT0FBTyxRQUFRLENBQUM7QUFDeEIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUM7QUFDcEQsUUFBUSxPQUFPLFFBQVEsQ0FBQztBQUN4QixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxPQUFPLFFBQVEsQ0FBQyxFQUFFO0FBQzdELElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxPQUFPLFFBQVEsQ0FBQyxFQUFFO0FBQzdEO0FBQ0E7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUU7QUFDckQsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxPQUFPLFNBQVMsQ0FBQyxFQUFFO0FBQ3JELElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxVQUFVLENBQUMsRUFBRTtBQUN6RDtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUU7QUFDdEUsTUFBTSxPQUFPLFVBQVUsQ0FBQyxFQUFFO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsQixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQ0E7QUFDQSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFdBQVc7QUFDMUMsSUFBSSxPQUFPO0FBQ1gsTUFBTSxLQUFLLEVBQUUsU0FBUyxNQUFNLEVBQUU7QUFDOUIsUUFBUSxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxPQUFPO0FBQ1AsS0FBSyxDQUFDO0FBQ04sR0FBRyxDQUFDLENBQUM7QUFDTDtBQUNBLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUFDOzs7O0FDalNGO0FBQ0E7QUFDQTtBQUNBLENBQUMsU0FBUyxHQUFHLEVBQUU7QUFDZixFQUNJLEdBQUcsQ0FBQ0EsVUFBK0IsQ0FBQyxDQUlwQjtBQUNwQixDQUFDLEVBQUUsU0FBUyxVQUFVLEVBQUU7QUFFeEI7QUFDQSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFdBQVc7QUFDN0MsSUFBSSxJQUFJLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUM1RixNQUFNLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxLQUFLO0FBQ3hELE1BQU0sUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWM7QUFDMUQsTUFBTSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVk7QUFDM0MsTUFBTSxlQUFlLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2xFLE1BQU0sUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVztBQUNsRCxNQUFNLGNBQWMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFdBQVc7QUFDdkQsTUFBTSxZQUFZLEVBQUUsY0FBYyxFQUFFLGVBQWU7QUFDbkQsTUFBTSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWE7QUFDOUMsTUFBTSxjQUFjLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUztBQUM1RCxNQUFNLHNCQUFzQixFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVk7QUFDdkUsTUFBTSxlQUFlLEVBQUUseUJBQXlCO0FBQ2hELE1BQU0sMkJBQTJCLEVBQUUsUUFBUSxDQUFDO0FBQzVDLElBQUksUUFBUSxHQUFHLG1CQUFtQjtBQUNsQyxJQUFJLElBQUksR0FBRyxZQUFZO0FBQ3ZCLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM1QixJQUFJLE1BQU0sR0FBRyw0QkFBNEIsQ0FBQztBQUMxQztBQUNBLElBQUksUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ2pFLElBQUksSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsSUFBSSxTQUFTLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3ZDLE1BQU0sSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0E7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtBQUMzQixRQUFRLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pDLFVBQVUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzdCLFNBQVMsTUFBTTtBQUNmLFVBQVUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQyxVQUFVLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ2xDLFNBQVM7QUFDVCxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCO0FBQ0EsT0FBTyxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtBQUM5QjtBQUNBLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQzNCLFVBQVUsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDakMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDakMsWUFBWSxPQUFPLE1BQU0sQ0FBQztBQUMxQixXQUFXO0FBQ1gsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkMsWUFBWSxPQUFPLFFBQVEsQ0FBQztBQUM1QixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDdkIsVUFBVSxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUM3QixVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNqQyxZQUFZLE9BQU8sTUFBTSxDQUFDO0FBQzFCLFdBQVc7QUFDWCxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQyxZQUFZLE9BQU8sUUFBUSxDQUFDO0FBQzVCLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRTtBQUMzQixVQUFVLEdBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7QUFDbkMsWUFBWSxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNuQyxXQUFXO0FBQ1gsVUFBVSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsVUFBVSxPQUFPLFFBQVEsQ0FBQztBQUMxQixTQUFTLE1BQU0sR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDMUMsVUFBVSxLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUM5QixVQUFVLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4QixVQUFVLE9BQU8sUUFBUSxDQUFDO0FBQzFCLFNBQVMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRTtBQUN6RyxVQUFVLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFVBQVUsT0FBTyxLQUFLLENBQUM7QUFDdkIsU0FBUyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMxQyxVQUFVLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFVBQVUsT0FBTyxVQUFVLENBQUM7QUFDNUIsU0FBUyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN0QyxVQUFVLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFNBQVMsTUFBTTtBQUNmLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUM5QyxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUN2QyxjQUFjLE9BQU8sU0FBUyxDQUFDO0FBQy9CLGFBQWE7QUFDYixZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuQyxjQUFjLE9BQU8sTUFBTSxDQUFDO0FBQzVCLGFBQWE7QUFDYixZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNyQyxjQUFjLE9BQU8sUUFBUSxDQUFDO0FBQzlCLGFBQWE7QUFDYixZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQzdCLGNBQWMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVCLGFBQWE7QUFDYixXQUFXLE1BQU07QUFDakIsWUFBWSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNULFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUIsT0FBTyxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsQyxRQUFRLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUM3QixVQUFVLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDbkMsWUFBWSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDL0IsV0FBVyxNQUFNO0FBQ2pCLFlBQVksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwQyxZQUFZLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3BDLFdBQVc7QUFDWCxVQUFVLE9BQU8sU0FBUyxDQUFDO0FBQzNCO0FBQ0EsU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDNUM7QUFDQSxVQUFVLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFVBQVUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ3hCLFlBQVksS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDOUIsV0FBVztBQUNYLFVBQVUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLE9BQU8sS0FBSyxDQUFDO0FBQ3ZCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEIsS0FDQTtBQUNBLElBQUksT0FBTztBQUNYLE1BQU0sVUFBVSxFQUFFLFlBQVk7QUFDOUIsUUFBUSxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDLE9BQU87QUFDUCxNQUFNLEtBQUssRUFBRSxVQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDdEMsUUFBUSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdDLE9BQU87QUFDUCxNQUFNLGlCQUFpQixFQUFFLElBQUk7QUFDN0IsTUFBTSxlQUFlLEVBQUUsSUFBSTtBQUMzQixLQUFLLENBQUM7QUFDTixHQUFHLENBQUMsQ0FBQztBQUNMO0FBQ0EsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUM7Ozs7QUNqSkY7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxTQUFTLEdBQUcsRUFBRTtBQUNmLEVBQ0ksR0FBRyxDQUFDQSxVQUErQixFQUFFQyxHQUFxQixFQUFFQyxVQUFtQyxFQUloRjtBQUNuQixDQUFDLEVBQUUsU0FBUyxVQUFVLEVBQUU7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtBQUM3QyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSTtBQUM5RSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRTtBQUNoQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDeEUsdUJBQXVCLE9BQU8sQ0FBQyxJQUFJO0FBQ25DLHVCQUF1QixPQUFPLENBQUMsS0FBSztBQUNwQyx1QkFBdUIsT0FBTyxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pFLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQzVELElBQUksSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxFQUFDO0FBQzVJLElBQUksSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksWUFBWSxFQUFDO0FBQzFGO0FBQ0EsSUFBSSxTQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUU7QUFDbEMsTUFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBTztBQUNqQyxNQUFNLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSTtBQUMxQixNQUFNLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUM7QUFDaEQsTUFBTSxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQU87QUFDN0IsTUFBTSxPQUFPLE1BQU07QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPO0FBQ3ZDLFFBQVEsT0FBTyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDcEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtBQUN6QyxNQUFNLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUU7QUFDekIsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFDO0FBQ2xELGFBQWEsTUFBTSxDQUFDLFNBQVMsR0FBRTtBQUMvQixRQUFRLE9BQU8sU0FBUztBQUN4QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRTtBQUNoQyxRQUFRLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFPO0FBQzNFO0FBQ0EsUUFBUSxJQUFJLFVBQVUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUM5RCxVQUFVLE9BQU8sVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXO0FBQzNELFlBQVksVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFJO0FBQ3hDO0FBQ0EsVUFBVSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxXQUFVO0FBQ2pFO0FBQ0EsZUFBZSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVE7QUFDakY7QUFDQSxTQUFTLE1BQU0sSUFBSSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRTtBQUNsQyxVQUFVLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVTtBQUNyQyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0FBQ3pFLG9DQUFvQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUM7QUFDN0QsUUFBUSxPQUFPLElBQUk7QUFDbkIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ2xDLFVBQVUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFDO0FBQ3pDLFVBQVUsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdGLHNDQUFzQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUM7QUFDaEUsVUFBVSxPQUFPLElBQUk7QUFDckIsU0FBUyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN2QyxVQUFVLE1BQU0sQ0FBQyxTQUFTLEdBQUU7QUFDNUIsVUFBVSxPQUFPLFNBQVM7QUFDMUIsU0FBUyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN2QyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUN0QixVQUFVLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7QUFDckMsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSTtBQUMvRSxNQUFNLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNqQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUM1QixVQUFVLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFDO0FBQzVDLGVBQWUsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUk7QUFDakQsU0FBUyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBQztBQUN0QixTQUFTO0FBQ1QsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUMzRCxRQUFRLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUM7QUFDeEMsT0FBTztBQUNQLE1BQU0sT0FBTyxLQUFLO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7QUFDeEMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDOUUsUUFBUSxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUM7QUFDdkMsUUFBUSxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkcsb0NBQW9DLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBQztBQUM5RCxRQUFRLE9BQU8sSUFBSTtBQUNuQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUM7QUFDaEQsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3RDLFFBQVEsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRTtBQUNsQyxRQUFRLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtBQUN4QixVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUU7QUFDcEIsU0FBUyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtBQUMvQixVQUFVLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSTtBQUNqRSxTQUFTO0FBQ1QsT0FBTztBQUNQLE1BQU0sT0FBTyxLQUFLO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTztBQUNYLE1BQU0sVUFBVSxFQUFFLFdBQVc7QUFDN0IsUUFBUSxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUUsT0FBTztBQUNQO0FBQ0EsTUFBTSxTQUFTLEVBQUUsU0FBUyxLQUFLLEVBQUU7QUFDakMsUUFBUSxPQUFPLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEQsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLEVBQUUsS0FBSztBQUNsQjtBQUNBLE1BQU0sTUFBTSxFQUFFLFNBQVMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUU7QUFDbkQsUUFBUSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDO0FBQ2xGLE9BQU87QUFDUDtBQUNBLE1BQU0sU0FBUyxFQUFFLFNBQVMsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsT0FBTyxLQUFLLENBQUMsT0FBTztBQUM1QixPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFDO0FBQ3pCO0FBQ0EsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUM7QUFDMUMsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQzNHLENBQUMsQ0FBQzs7OztBQ25KRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsR0FBRyxFQUFFO0FBQ2YsRUFDSSxHQUFHLENBQUNGLFVBQStCLENBQUMsQ0FJcEI7QUFDcEIsQ0FBQyxFQUFFLFNBQVMsVUFBVSxFQUFFO0FBRXhCO0FBQ0EsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQzVELEVBQUUsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUNsQyxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssV0FBVyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ3BELElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDOUQsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQztBQUNqQyxFQUFFLElBQUksT0FBTyxHQUFHLHVCQUF1QixDQUFDO0FBQ3hDLEVBQUUsSUFBSSxLQUFLLEdBQUcsMEJBQTBCLENBQUM7QUFDekMsRUFBRSxJQUFJLEtBQUssR0FBRyx1RUFBdUUsQ0FBQztBQUN0RjtBQUNBLEVBQUUsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUM7QUFDckQsUUFBUSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRO0FBQ2pFLFFBQVEsd0NBQXdDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRztBQUN4RSxRQUFRLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUztBQUN4RSxRQUFRLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUztBQUN4RSxRQUFRLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTO0FBQzdELFFBQVEsMEJBQTBCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6QyxFQUFFLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksY0FBYyxDQUFDO0FBQzNELEVBQUUsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVc7QUFDMUMsUUFBUSx1RUFBdUUsQ0FBQztBQUNoRjtBQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEU7QUFDQSxFQUFFLElBQUksV0FBVyxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLO0FBQzlFLFFBQVEsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUs7QUFDdkUsUUFBUSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsRUFBRSxJQUFJLFdBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRTtBQUNBLEVBQUUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLO0FBQzVFLFFBQVEsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVU7QUFDN0UsUUFBUSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPO0FBQzVFLFFBQVEsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTTtBQUM5RSxRQUFRLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVztBQUM3RSxRQUFRLFVBQVUsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsRUFBRSxJQUFJLFlBQVksR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRTtBQUNBLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNyRjtBQUNBLEVBQUUsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzFDLEVBQUUsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsRUFBRSxJQUFJLEtBQUssR0FBRyxrQkFBa0IsQ0FBQztBQUNqQyxFQUFFLElBQUksTUFBTSxHQUFHLDhDQUE4QyxDQUFDO0FBQzlELEVBQUUsSUFBSSxjQUFjLEdBQUcsc0NBQXNDLENBQUM7QUFDOUQ7QUFDQSxFQUFFLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUMxQixJQUFJLFFBQVEsS0FBSyxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUU7QUFDcEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUU7QUFDOUIsSUFBSSxRQUFRLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7QUFDeEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxLQUFLLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUM3QyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ2xDLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMLElBQUksT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxTQUFTLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3BDO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ3BDLE1BQU0sS0FBSyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUM7QUFDcEMsTUFBTSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNDLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0FBQ3hDLElBQUksSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDdEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzFCLEtBQUs7QUFDTCxJQUFJLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzlCO0FBQ0EsSUFBSSxJQUFJLFdBQVcsRUFBRTtBQUNyQixNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMvQixRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNoQyxNQUFNLE9BQU8sT0FBTyxDQUFDO0FBQ3JCLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDeEMsTUFBTSxPQUFPLFVBQVUsQ0FBQztBQUN4QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFO0FBQzNCLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0I7QUFDQTtBQUNBLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ3BCLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDcEIsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixNQUFNLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUMzQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUNwQixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDL0IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ3RDLE1BQU0sT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ3hGLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6QixNQUFNLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUMzQixNQUFNLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQy9CLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUMxQyxNQUFNLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUN4RixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUMvQixNQUFNLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQy9CLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDMUQsUUFBUSxPQUFPLFVBQVUsQ0FBQztBQUMxQixPQUFPO0FBQ1AsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDaEMsUUFBUSxPQUFPLFFBQVEsQ0FBQztBQUN4QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUNkLElBQUksSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDOUMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDdEMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUU7QUFDdEMsTUFBTSxLQUFLLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztBQUN2QyxNQUFNLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDNUMsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLG9FQUFvRSxDQUFDLEVBQUU7QUFDNUYsTUFBTSxPQUFPLFNBQVMsQ0FBQztBQUN2QixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUNqQyxNQUFNLE9BQU8sVUFBVSxDQUFDO0FBQ3hCLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ3ZDLE1BQU0sSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsRUFBRSxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUU7QUFDbkY7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFO0FBQ25FLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFO0FBQy9ELE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFO0FBQ2hFO0FBQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkZBQTZGLENBQUMsRUFBRSxFQUFFLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRTtBQUNoSixNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLEVBQUUsYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFO0FBQzdFLE1BQU0sSUFBSSxhQUFhLEVBQUU7QUFDekI7QUFDQSxVQUFVLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEMsVUFBVSxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUNuQyxVQUFVLE9BQU8sUUFBUSxDQUFDO0FBQzFCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzVCLE1BQU0sS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFDakMsTUFBTSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNDLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUU7QUFDdEMsTUFBTSxLQUFLLENBQUMsUUFBUSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzVELE1BQU0sT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM3QixNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2xDLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDaEMsTUFBTSxPQUFPLFNBQVMsQ0FBQztBQUN2QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNoQyxNQUFNLE9BQU8sU0FBUyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLFVBQVU7QUFDMUUsdUJBQXVCLEtBQUssQ0FBQyxTQUFTLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksTUFBTTtBQUM5RSx1QkFBdUIsS0FBSyxDQUFDLFNBQVMsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUM7QUFDckY7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUNuQyxNQUFNLElBQUksWUFBWSxFQUFFO0FBQ3hCLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ25DLFVBQVUsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDcEMsVUFBVSxPQUFPLFVBQVUsQ0FBQztBQUM1QixTQUFTO0FBQ1QsUUFBUSxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUNuQyxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUCxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDaEQsUUFBUSxLQUFLLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztBQUN4QyxRQUFRLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0MsT0FBTztBQUNQLE1BQU0sS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDL0IsTUFBTSxPQUFPLFVBQVUsQ0FBQztBQUN4QixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xCLElBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3pDLElBQUksU0FBUztBQUNiLE1BQU0sSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQzlELE1BQU0sSUFBSSxLQUFLLEVBQUU7QUFDakIsUUFBUSxJQUFJLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQztBQUNuQyxVQUFVLEtBQUssQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDcEQsUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQixRQUFRLGFBQWEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3pDLE9BQU87QUFDUCxNQUFNLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdELFFBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMzQixRQUFRLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDM0IsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7QUFDeEQsVUFBVSxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3JGLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2QyxVQUFVLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkMsVUFBVSxLQUFLLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUNyQyxVQUFVLElBQUksWUFBWTtBQUMxQixZQUFZLE9BQU8sS0FBSyxDQUFDO0FBQ3pCLFVBQVUsT0FBTyxTQUFTLENBQUM7QUFDM0IsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDdEMsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3JDLFFBQVEsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBYTtBQUN4RCxVQUFVLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDN0IsUUFBUSxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFFBQVEsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFDbkMsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QixPQUFPO0FBQ1AsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUNwQyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEdBQUU7QUFDckIsUUFBUSxPQUFPLElBQUk7QUFDbkIsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDMUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFDaEQsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDNUIsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUMvQixLQUFLLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7QUFDakUsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUMvQixLQUFLO0FBQ0wsSUFBSSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7QUFDcEMsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsRCxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxFQUFFO0FBQzVDLE1BQU0sS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFDakMsS0FBSztBQUNMLElBQUksT0FBTyxTQUFTLENBQUM7QUFDckIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3ZDLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLE1BQU0sS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQzdCLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7QUFDekMsTUFBTSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekIsS0FBSztBQUNMLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLE1BQU0sS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUM7QUFDbkMsUUFBUSxLQUFLLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUNuQyxLQUFLO0FBQ0wsSUFBSSxPQUFPLFNBQVMsQ0FBQztBQUNyQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDcEMsSUFBSSxJQUFJLE1BQU0sR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQzlCLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQztBQUNwQixLQUFLLE1BQU0sSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxFQUFFO0FBQ2pFLE1BQU0sSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6QyxNQUFNLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFO0FBQzVDLFFBQVEsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN0QixRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QixPQUFPO0FBQ1AsS0FBSyxNQUFNLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsRUFBRTtBQUNuRSxNQUFNLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekMsTUFBTSxJQUFJLEtBQUssSUFBSSxPQUFPLEVBQUU7QUFDNUIsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3RCLE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSSxJQUFJLE1BQU0sRUFBRTtBQUNoQixNQUFNLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQy9CLE1BQU0sS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFDakMsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixLQUFLO0FBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO0FBQzdELElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsRUFBRTtBQUMzRCxJQUFJLE9BQU8sT0FBTyxDQUFDO0FBQ25CLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUU7QUFDekMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDeEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLEtBQUssTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDN0MsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLEtBQUs7QUFDTCxJQUFJLFNBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDeEMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDNUIsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEIsT0FBTyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUMxQyxRQUFRLEtBQUssQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQ25DLFFBQVEsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDakMsUUFBUSxPQUFPLFFBQVEsQ0FBQztBQUN4QixPQUFPLE1BQU07QUFDYixRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0IsT0FBTztBQUNQLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNqQyxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ3RCLEtBQUs7QUFDTCxJQUFJLE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUc7QUFDakIsSUFBSSxVQUFVLEVBQUUsV0FBVztBQUMzQixNQUFNLE9BQU87QUFDYixRQUFRLFFBQVEsRUFBRSxTQUFTO0FBQzNCLFFBQVEsTUFBTSxFQUFFLEVBQUU7QUFDbEIsUUFBUSxTQUFTLEVBQUUsSUFBSTtBQUN2QixRQUFRLFdBQVcsRUFBRSxLQUFLO0FBQzFCLFFBQVEsWUFBWSxFQUFFLEtBQUs7QUFDM0IsUUFBUSxZQUFZLEVBQUUsQ0FBQztBQUN2QixRQUFRLGNBQWMsRUFBRSxDQUFDO0FBQ3pCLFFBQVEsZ0JBQWdCLEVBQUUsQ0FBQztBQUMzQixRQUFRLGdCQUFnQixFQUFFLENBQUM7QUFDM0IsUUFBUSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxFQUFFLFNBQVMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUNuQyxNQUFNLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hELE1BQU0sSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3JDO0FBQ0EsTUFBTSxJQUFJLE9BQU8sSUFBSSxLQUFLLEVBQUU7QUFDNUIsUUFBUSxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUNsQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLFNBQVMsS0FBSyxFQUFFLFNBQVMsRUFBRTtBQUN2QyxNQUFNLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLEtBQUssU0FBUyxLQUFLLEdBQUcsSUFBSSxTQUFTLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzdFLFdBQVcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQy9GLFdBQVcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztBQUN4QyxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuQixPQUFPO0FBQ1AsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDL0QsS0FBSztBQUNMO0FBQ0EsSUFBSSxhQUFhLEVBQUUsOEJBQThCO0FBQ2pELElBQUksaUJBQWlCLEVBQUUsSUFBSTtBQUMzQixJQUFJLGVBQWUsRUFBRSxJQUFJO0FBQ3pCLElBQUksV0FBVyxFQUFFLEdBQUc7QUFDcEIsSUFBSSxhQUFhLEVBQUUsWUFBWTtBQUMvQixJQUFJLElBQUksRUFBRSxRQUFRO0FBQ2xCLEdBQUcsQ0FBQztBQUNKLEVBQUUsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBO0FBQ0EsVUFBVSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDL0M7QUFDQSxDQUFDLENBQUM7Ozs7QUN6YUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsU0FBUyxHQUFHLEVBQUU7QUFDZixFQUNJLEdBQUcsQ0FBQ0EsVUFBK0IsQ0FBQyxDQUlwQjtBQUNwQixDQUFDLEVBQUUsU0FBUyxVQUFVLEVBQUU7QUFFeEI7QUFDQSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLFVBQVU7QUFDaEQsSUFBSSxJQUFJLFNBQVMsR0FBRyxTQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDNUMsTUFBTSxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQztBQUM1QyxNQUFNLElBQUksU0FBUyxFQUFFO0FBQ3JCLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ2hDLFFBQVEsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO0FBQ3ZCLFVBQVUsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakQsWUFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0IsWUFBWSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDbEQsY0FBYyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztBQUNoRCxjQUFjLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM3QixhQUFhO0FBQ2IsV0FBVztBQUNYLFVBQVUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLFVBQVUsT0FBTyxPQUFPLENBQUM7QUFDekIsU0FBUztBQUNULFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRTtBQUNoRCxVQUFVLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNoRCxZQUFZLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNoQyxZQUFZLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMzQixXQUFXLE1BQU07QUFDakIsWUFBWSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUIsWUFBWSxPQUFPLE9BQU8sQ0FBQztBQUMzQixXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUCxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQixNQUFNLE9BQU8sT0FBTyxDQUFDO0FBQ3JCLEtBQUssQ0FBQztBQUNOLElBQUksSUFBSSxRQUFRLEdBQUc7QUFDbkIsTUFBTSxVQUFVLEVBQUUsVUFBVTtBQUM1QixRQUFRLE9BQU87QUFDZixVQUFVLElBQUksRUFBRSxPQUFPO0FBQ3ZCLFVBQVUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDMUQsU0FBUyxDQUFDO0FBQ1YsT0FBTztBQUNQLE1BQU0sS0FBSyxFQUFFLFNBQVMsTUFBTSxFQUFFLEtBQUssQ0FBQztBQUNwQyxRQUFRLE9BQU8sTUFBTSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSztBQUN6QyxVQUFVLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0MsUUFBUSxLQUFLLENBQUMsU0FBUyxHQUFHO0FBQzFCLFVBQVUsS0FBSyxFQUFFLEtBQUs7QUFDdEIsVUFBVSxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRTtBQUN0QyxVQUFVLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFO0FBQ25DLFNBQVMsQ0FBQztBQUNWLFFBQVEsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QyxPQUFPO0FBQ1AsTUFBTSxNQUFNLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFDN0IsUUFBUSxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUNqRCxRQUFRLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3JELFVBQVUsV0FBVyxJQUFJLENBQUMsQ0FBQztBQUMzQixTQUFTO0FBQ1QsUUFBUSxPQUFPLFdBQVcsQ0FBQztBQUMzQixPQUFPO0FBQ1AsS0FBSyxDQUFDO0FBQ04sSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUNwQixHQUFHLENBQUMsQ0FBQztBQUNMO0FBQ0EsRUFBRSxJQUFJLFVBQVUsR0FBRywwRUFBMEUsQ0FBQztBQUM5RixFQUFFLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQywySEFBMkgsR0FBRyxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUM7QUFDaEwsRUFBRSxJQUFJLFVBQVUsR0FBRyxvQ0FBb0MsQ0FBQztBQUN4RCxFQUFFLElBQUksVUFBVSxHQUFHO0FBQ25CLElBQUksS0FBSyxFQUFFLFFBQVE7QUFDbkIsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmLEdBQUcsQ0FBQztBQUNKLEVBQUUsSUFBSSxLQUFLLEdBQUc7QUFDZCxJQUFJLEtBQUssRUFBRTtBQUNYLE1BQU07QUFDTixRQUFRLEtBQUssRUFBRSxhQUFhO0FBQzVCLFFBQVEsS0FBSyxFQUFFLE1BQU07QUFDckIsUUFBUSxJQUFJLEVBQUUsU0FBUztBQUN2QixPQUFPLEVBQUU7QUFDVCxRQUFRLEtBQUssRUFBRSxTQUFTO0FBQ3hCLFFBQVEsS0FBSyxFQUFFLEtBQUs7QUFDcEIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsU0FBUztBQUN4QixRQUFRLEtBQUssRUFBRSx1VUFBdVUsR0FBRyxVQUFVO0FBQ25XLE9BQU8sRUFBRTtBQUNULFFBQVEsS0FBSyxFQUFFLG1CQUFtQjtBQUNsQyxRQUFRLEtBQUssRUFBRSxrREFBa0QsR0FBRyxVQUFVO0FBQzlFLE9BQU8sRUFBRTtBQUNULFFBQVEsS0FBSyxFQUFFLGlCQUFpQjtBQUNoQyxRQUFRLEtBQUssRUFBRSxvRkFBb0YsR0FBRyxVQUFVO0FBQ2hILE9BQU8sRUFBRTtBQUNULFFBQVEsS0FBSyxFQUFFLHdCQUF3QjtBQUN2QyxRQUFRLEtBQUssRUFBRSxpSkFBaUosR0FBRyxVQUFVO0FBQzdLLE9BQU8sRUFBRTtBQUNULFFBQVEsS0FBSyxFQUFFLDJCQUEyQjtBQUMxQyxRQUFRLEtBQUssRUFBRSxrRkFBa0YsR0FBRyxVQUFVO0FBQzlHLE9BQU8sRUFBRTtBQUNULFFBQVEsS0FBSyxFQUFFLG1CQUFtQjtBQUNsQyxRQUFRLEtBQUssRUFBRSwrQ0FBK0MsR0FBRyxVQUFVO0FBQzNFLE9BQU8sRUFBRTtBQUNULFFBQVEsS0FBSyxFQUFFLFlBQVk7QUFDM0IsUUFBUSxLQUFLLEVBQUUsVUFBVSxHQUFHLGVBQWU7QUFDM0MsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsVUFBVTtBQUN6QixRQUFRLEtBQUssRUFBRSxVQUFVO0FBQ3pCLE9BQU8sRUFBRTtBQUNULFFBQVEsS0FBSyxFQUFFLGtCQUFrQjtBQUNqQyxRQUFRLEtBQUssRUFBRSxvQkFBb0I7QUFDbkMsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsa0JBQWtCO0FBQ2pDLFFBQVEsS0FBSyxFQUFFLGtCQUFrQjtBQUNqQyxRQUFRLElBQUksRUFBRSxLQUFLO0FBQ25CLE9BQU8sRUFBRTtBQUNULFFBQVEsS0FBSyxFQUFFLGtCQUFrQjtBQUNqQyxRQUFRLEtBQUssRUFBRSxTQUFTO0FBQ3hCLFFBQVEsSUFBSSxFQUFFLEtBQUs7QUFDbkIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsUUFBUTtBQUN2QixRQUFRLEtBQUssRUFBRSx1QkFBdUI7QUFDdEMsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsWUFBWTtBQUMzQixRQUFRLEtBQUssRUFBRSxRQUFRO0FBQ3ZCLFFBQVEsSUFBSSxFQUFFLE1BQU07QUFDcEIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsWUFBWTtBQUMzQixRQUFRLEtBQUssRUFBRSxLQUFLO0FBQ3BCLFFBQVEsSUFBSSxFQUFFLE9BQU87QUFDckIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsUUFBUTtBQUN2QixRQUFRLEtBQUssRUFBRSxJQUFJO0FBQ25CLFFBQVEsSUFBSSxFQUFFLFNBQVM7QUFDdkIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsUUFBUTtBQUN2QixRQUFRLEtBQUssRUFBRSxHQUFHO0FBQ2xCLFFBQVEsSUFBSSxFQUFFLFVBQVU7QUFDeEIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsUUFBUTtBQUN2QixRQUFRLEtBQUssRUFBRSxHQUFHO0FBQ2xCLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsUUFBUTtBQUN2QixRQUFRLEtBQUssRUFBRSxNQUFNO0FBQ3JCLFFBQVEsSUFBSSxFQUFFLE9BQU87QUFDckIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsY0FBYztBQUM3QixRQUFRLEtBQUssRUFBRSxJQUFJO0FBQ25CLFFBQVEsSUFBSSxFQUFFLFNBQVM7QUFDdkIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsY0FBYztBQUM3QixRQUFRLEtBQUssRUFBRSxpSEFBaUg7QUFDaEksUUFBUSxJQUFJLEVBQUUsS0FBSztBQUNuQixPQUFPLEVBQUU7QUFDVCxRQUFRLEtBQUssRUFBRSxrQkFBa0I7QUFDakMsUUFBUSxLQUFLLEVBQUUsNkpBQTZKO0FBQzVLLE9BQU8sRUFBRTtBQUNULFFBQVEsS0FBSyxFQUFFLFFBQVE7QUFDdkIsUUFBUSxLQUFLLEVBQUUsT0FBTztBQUN0QixPQUFPLEVBQUU7QUFDVCxRQUFRLEtBQUssRUFBRSxRQUFRO0FBQ3ZCLFFBQVEsS0FBSyxFQUFFLFNBQVM7QUFDeEIsUUFBUSxJQUFJLEVBQUUsS0FBSztBQUNuQixPQUFPLEVBQUU7QUFDVCxRQUFRLEtBQUssRUFBRSxrQkFBa0I7QUFDakMsUUFBUSxLQUFLLEVBQUUsTUFBTTtBQUNyQixPQUFPLEVBQUU7QUFDVCxRQUFRLEtBQUssRUFBRSxNQUFNO0FBQ3JCLFFBQVEsS0FBSyxFQUFFLE1BQU07QUFDckIsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLE9BQU8sRUFBRTtBQUNiLE1BQU07QUFDTixRQUFRLEtBQUssRUFBRSxjQUFjO0FBQzdCLFFBQVEsS0FBSyxFQUFFLG9CQUFvQjtBQUNuQyxRQUFRLElBQUksRUFBRSxPQUFPO0FBQ3JCLE9BQU8sRUFBRTtBQUNULFFBQVEsS0FBSyxFQUFFLGNBQWM7QUFDN0IsUUFBUSxLQUFLLEVBQUUsUUFBUTtBQUN2QixPQUFPLEVBQUU7QUFDVCxRQUFRLEtBQUssRUFBRSxlQUFlO0FBQzlCLFFBQVEsS0FBSyxFQUFFLGNBQWM7QUFDN0IsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsY0FBYztBQUM3QixRQUFRLEtBQUssRUFBRSxNQUFNO0FBQ3JCLE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSSxHQUFHLEVBQUU7QUFDVCxNQUFNO0FBQ04sUUFBUSxLQUFLLEVBQUUsa0JBQWtCO0FBQ2pDLFFBQVEsS0FBSyxFQUFFLFNBQVM7QUFDeEIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsWUFBWTtBQUMzQixRQUFRLEtBQUssRUFBRSxVQUFVO0FBQ3pCLFFBQVEsSUFBSSxFQUFFLE9BQU87QUFDckIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxLQUFLLEVBQUUsTUFBTTtBQUNyQixRQUFRLEtBQUssRUFBRSxFQUFFO0FBQ2pCLFFBQVEsSUFBSSxFQUFFLE9BQU87QUFDckIsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLE9BQU8sRUFBRTtBQUNiLE1BQU07QUFDTixRQUFRLEtBQUssRUFBRSxhQUFhO0FBQzVCLFFBQVEsS0FBSyxFQUFFLFNBQVM7QUFDeEIsUUFBUSxJQUFJLEVBQUUsT0FBTztBQUNyQixPQUFPLEVBQUU7QUFDVCxRQUFRLEtBQUssRUFBRSxhQUFhO0FBQzVCLFFBQVEsS0FBSyxFQUFFLElBQUk7QUFDbkIsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLElBQUksRUFBRTtBQUNWLE1BQU07QUFDTixRQUFRLEtBQUssRUFBRSxRQUFRO0FBQ3ZCLFFBQVEsS0FBSyxFQUFFLFFBQVE7QUFDdkIsUUFBUSxJQUFJLEVBQUUsS0FBSztBQUNuQixPQUFPLEVBQUUsVUFBVTtBQUNuQixLQUFLO0FBQ0wsSUFBSSxLQUFLLEVBQUU7QUFDWCxNQUFNO0FBQ04sUUFBUSxLQUFLLEVBQUUsUUFBUTtBQUN2QixRQUFRLEtBQUssRUFBRSxRQUFRO0FBQ3ZCLFFBQVEsSUFBSSxFQUFFLEtBQUs7QUFDbkIsT0FBTyxFQUFFLFVBQVU7QUFDbkIsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFO0FBQ2IsTUFBTTtBQUNOLFFBQVEsS0FBSyxFQUFFLFFBQVE7QUFDdkIsUUFBUSxLQUFLLEVBQUUsa0NBQWtDO0FBQ2pELFFBQVEsSUFBSSxFQUFFLEtBQUs7QUFDbkIsT0FBTyxFQUFFLFVBQVU7QUFDbkIsS0FBSztBQUNMLElBQUksUUFBUSxFQUFFO0FBQ2QsTUFBTTtBQUNOLFFBQVEsS0FBSyxFQUFFLFFBQVE7QUFDdkIsUUFBUSxLQUFLLEVBQUUsK0JBQStCO0FBQzlDLFFBQVEsSUFBSSxFQUFFLEtBQUs7QUFDbkIsT0FBTyxFQUFFLFVBQVU7QUFDbkIsS0FBSztBQUNMLElBQUksRUFBRSxFQUFFO0FBQ1IsTUFBTTtBQUNOLFFBQVEsS0FBSyxFQUFFLFFBQVE7QUFDdkIsUUFBUSxLQUFLLEVBQUUsK0JBQStCO0FBQzlDLFFBQVEsSUFBSSxFQUFFLEtBQUs7QUFDbkIsT0FBTyxFQUFFLFVBQVU7QUFDbkIsS0FBSztBQUNMLElBQUksS0FBSyxFQUFFO0FBQ1gsTUFBTTtBQUNOLFFBQVEsS0FBSyxFQUFFLFFBQVE7QUFDdkIsUUFBUSxLQUFLLEVBQUUsU0FBUztBQUN4QixRQUFRLElBQUksRUFBRSxLQUFLO0FBQ25CLE9BQU8sRUFBRSxVQUFVO0FBQ25CLEtBQUs7QUFDTCxHQUFHLENBQUM7QUFDSixFQUFFLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFO0FBQ3pCLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ2xCLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRCxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksT0FBTyxFQUFFLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUMxQyxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRCxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUssTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDN0MsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkQsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMzRDtBQUNBLENBQUMsQ0FBQzs7OztBQ3ZSRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsU0FBUyxHQUFHLEVBQUU7QUFDZixFQUNJLEdBQUcsQ0FBQ0EsVUFBK0IsQ0FBQyxDQUlwQjtBQUNwQixDQUFDLEVBQUUsU0FBUyxVQUFVLEVBQUU7QUFFeEI7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLE1BQU0sRUFBRSxZQUFZLEVBQUU7QUFDNUQsRUFBRSxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQ3JDO0FBQ0EsRUFBRSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDM0IsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRCxHQUFHO0FBQ0gsRUFBRSxTQUFTLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDekIsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1RCxHQUFHO0FBQ0gsRUFBRSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNyRDtBQUNBO0FBQ0EsRUFBRSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkcsSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUztBQUMxRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRO0FBQ3BGO0FBQ0EsSUFBSSxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUI7QUFDbkg7QUFDQSxJQUFJLGFBQWEsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0I7QUFDdkcsSUFBSSxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQjtBQUNoSCxJQUFJLGtCQUFrQixDQUFDLGlCQUFpQjtBQUN4QztBQUNBLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTztBQUMzRDtBQUNBLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsVUFBVTtBQUNqSCxJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVU7QUFDakQ7QUFDQSxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsVUFBVTtBQUM3RyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVTtBQUNoSCxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxXQUFXO0FBQ2pILElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxXQUFXO0FBQ3RDO0FBQ0EsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGNBQWM7QUFDaEgsSUFBSSxTQUFTLENBQUMsWUFBWTtBQUMxQjtBQUNBLElBQUksZUFBZSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxpQkFBaUI7QUFDekcsSUFBSSxnQkFBZ0I7QUFDcEI7QUFDQSxJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLGFBQWE7QUFDekcsSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLGNBQWM7QUFDeEc7QUFDQSxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxZQUFZO0FBQzFFLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsRUFBRSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUTtBQUNqRix5QkFBeUIsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSTtBQUM3RSx5QkFBeUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzdFO0FBQ0EsRUFBRSxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUUsRUFBRSxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFELEVBQUUsSUFBSSxhQUFhLEdBQUcsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQy9FO0FBQ0EsRUFBRSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUU7QUFDL0IsSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7QUFDcEMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLElBQUksSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCLElBQUksSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdEMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDNUMsUUFBUSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0RixNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QixNQUFNLE9BQU8sU0FBUyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksR0FBRztBQUMvQixNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckQsSUFBSSxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDaEQsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuRixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN2QixNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEMsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixLQUFLO0FBQ0wsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDMUIsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sT0FBTyxVQUFVLENBQUM7QUFDeEIsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ25DLElBQUksT0FBTyxTQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDbkMsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVCLE1BQU0sT0FBTyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQzNDLFFBQVEsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RCxhQUFhLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQztBQUNyQyxhQUFhLElBQUksRUFBRSxJQUFJLEdBQUcsSUFBSSxNQUFNLElBQUksS0FBSyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDN0UsYUFBYSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzNCLE9BQU87QUFDUCxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksT0FBTyxTQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDbkMsTUFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQzlCLE1BQU0sT0FBTyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQzNDLFFBQVEsSUFBSSxFQUFFLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU07QUFDM0MsUUFBUSxPQUFPLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztBQUN6QyxPQUFPO0FBQ1AsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLE1BQU0sT0FBTyxRQUFRLENBQUM7QUFDdEIsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPO0FBQ1QsSUFBSSxVQUFVLEVBQUUsU0FBUyxPQUFPLEVBQUU7QUFDbEMsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLEVBQUUsU0FBUyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ25DLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDekMsTUFBTSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQyxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsQyxNQUFNLElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRTtBQUMvQixRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQ25ELGFBQWEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRyxTQUFTLENBQUM7QUFDeEQsYUFBYSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxHQUFHLFlBQVksQ0FBQztBQUMzRCxPQUFPO0FBQ1AsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVMsTUFBTSxLQUFLLElBQUksUUFBUSxDQUFDLENBQUM7QUFDdEQsUUFBUSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDO0FBQ3pELGFBQWEsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUM5RCxPQUFPO0FBQ1AsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sRUFBRSxTQUFTLEtBQUssRUFBRSxTQUFTLEVBQUU7QUFDdkMsTUFBTSxJQUFJLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFVBQVUsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRixLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsRUFBRSxJQUFJO0FBQ3JCLElBQUksaUJBQWlCLEVBQUUsTUFBTTtBQUM3QixJQUFJLGVBQWUsRUFBRSxJQUFJO0FBQ3pCLEdBQUcsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0g7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQztBQUNBLENBQUMsQ0FBQzs7OztBQzlKRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsU0FBUyxHQUFHLEVBQUU7QUFDZixFQUNJLEdBQUcsQ0FBQ0EsVUFBK0IsQ0FBQyxDQUlwQjtBQUNwQixDQUFDLEVBQUUsU0FBUyxVQUFVLEVBQUU7QUFFeEI7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxTQUFTLE9BQU8sRUFBRSxhQUFhLEVBQUU7QUFDdEU7QUFDQTtBQUNBLEVBQUUsSUFBSSxVQUFVLEdBQUcsNEJBQTRCLENBQUM7QUFDaEQsRUFBRSxJQUFJLEtBQUssUUFBUSxVQUFVLENBQUM7QUFDOUIsRUFBRSxJQUFJLE1BQU0sT0FBTyw4QkFBOEIsQ0FBQztBQUNsRCxFQUFFLElBQUksVUFBVSxHQUFHLDhCQUE4QixDQUFDO0FBQ2xELEVBQUUsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDNUM7QUFDQTtBQUNBLEVBQUUsSUFBSSxVQUFVLFVBQVUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQzlHLEVBQUUsSUFBSSxXQUFXLFNBQVMsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxVQUFVLEdBQUcsd0JBQXdCLENBQUMsQ0FBQztBQUM3RixFQUFFLElBQUksYUFBYSxPQUFPLElBQUksTUFBTSxDQUFDLFdBQVcsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxXQUFXLENBQUMsQ0FBQztBQUN2RztBQUNBLEVBQUUsU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUNwQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1g7QUFDQTtBQUNBLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDcEIsTUFBTSxLQUFLLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQztBQUNuQyxNQUFNLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUNwQixNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMzQixRQUFRLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM3QixRQUFRLEtBQUssQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLFFBQVEsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMvQyxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ2hELE1BQU0sT0FBTyxRQUFRLENBQUM7QUFDdEIsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDM0QsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLHVEQUF1RCxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtBQUM1RixNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEVBQTRFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ2pILE1BQU0sT0FBTyxVQUFVLENBQUM7QUFDeEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGlHQUFpRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtBQUN0SSxNQUFNLE9BQU8sWUFBWSxDQUFDO0FBQzFCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLG9EQUFvRCxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtBQUN6RixNQUFNLE9BQU8sWUFBWSxDQUFDO0FBQzFCLEtBQUs7QUFDTCxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDakUsTUFBTSxPQUFPLFlBQVksQ0FBQztBQUMxQixLQUFLO0FBQ0wsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ2pFLE1BQU0sT0FBTyxZQUFZLENBQUM7QUFDMUIsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDckUsTUFBTSxPQUFPLFlBQVksQ0FBQztBQUMxQixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMxRCxNQUFNLE9BQU8sU0FBUyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDN0UsTUFBTSxPQUFPLFlBQVksQ0FBQztBQUMxQixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDbEQsTUFBTSxPQUFPLFNBQVMsQ0FBQztBQUN2QixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLDREQUE0RCxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtBQUNqRyxNQUFNLE9BQU8sVUFBVSxDQUFDO0FBQ3hCLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEIsSUFBSSxPQUFPLE9BQU8sQ0FBQztBQUNuQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDdEMsSUFBSSxJQUFJLElBQUksRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDM0MsSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDM0MsTUFBTSxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDcEMsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQVEsTUFBTTtBQUNkLE9BQU87QUFDUCxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDO0FBQzFDLEtBQUs7QUFDTCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3pCLE1BQU0sS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFDakMsS0FBSztBQUNMLElBQUksT0FBTyxRQUFRLENBQUM7QUFDcEIsR0FDQTtBQUNBLEVBQUUsU0FBUyxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUN2QyxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQztBQUNuQixJQUFJLE1BQU0sS0FBSyxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUNwRSxNQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM3RCxNQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM3RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMLElBQUksSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsRUFBRTtBQUNqQyxNQUFNLEtBQUssQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQ2pDLEtBQUs7QUFDTCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTztBQUNULElBQUksVUFBVSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSxJQUFJLEtBQUssRUFBRSxTQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDbkMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQztBQUN6QyxNQUFNLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMLElBQUksaUJBQWlCLEVBQUUsSUFBSTtBQUMzQixJQUFJLGVBQWUsRUFBRSxJQUFJO0FBQ3pCLEdBQUcsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0g7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLG9CQUFvQixFQUFFO0FBQzVDLEVBQUUsSUFBSSxFQUFFLGFBQWE7QUFDckIsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBLENBQUMsQ0FBQzs7OztBQy9LRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsR0FBRyxFQUFFO0FBQ2YsRUFDSSxHQUFHLENBQUNBLFVBQStCLENBQUMsQ0FJcEI7QUFDcEIsQ0FBQyxFQUFFLFNBQVMsVUFBVSxFQUFFO0FBRXhCO0FBQ0EsSUFBSSxPQUFPLEdBQUc7QUFDZCxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVk7QUFDL0QsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsV0FBVztBQUMxRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLFVBQVU7QUFDM0UsQ0FBQyxDQUFDO0FBQ0YsSUFBSSxjQUFjLEdBQUc7QUFDckIsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYTtBQUMxRCxDQUFDLENBQUM7QUFDRjtBQUNBLFVBQVUsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDL0U7QUFDQSxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUM7QUFDMUIsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQ3pCLElBQUksYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLElBQUksb0JBQW9CLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDL0UsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQ3ZCLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQztBQUMzQixJQUFJLFVBQVUsR0FBRyxzQkFBc0IsQ0FBQztBQUN4QyxJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDOUIsSUFBSSxtQkFBbUIsR0FBRyxjQUFjLENBQUM7QUFDekM7QUFDQSxTQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUU7QUFDaEMsRUFBRSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsT0FBTyxRQUFRLENBQUM7QUFDNUMsRUFBRSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDcEI7QUFDQSxJQUFJLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzlCLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDcEQ7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUssTUFBTTtBQUNYLE1BQU0sS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDN0IsTUFBTSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUNqQyxNQUFNLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzdCLE1BQU0sS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDL0IsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ2QsSUFBSSxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUM7QUFDbkQsUUFBUSxDQUFDLGNBQWMsR0FBRyxJQUFJLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRTtBQUMxRSxNQUFNLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzdCLE1BQU0sS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDNUIsTUFBTSxLQUFLLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUM1QyxNQUFNLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7QUFDM0QsTUFBTSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUM1QixNQUFNLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLE1BQU0sS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzVCLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3ZCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7QUFDekIsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDM0MsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEQsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdkIsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtBQUN0QixJQUFJLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtBQUM5QixNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxPQUFPLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDL0QsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUMxRCxLQUFLO0FBQ0wsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdkIsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNyQixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FDQTtBQUNBLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFdBQVc7QUFDekMsRUFBRSxPQUFPO0FBQ1QsSUFBSSxVQUFVLEVBQUUsV0FBVztBQUMzQixNQUFNLE9BQU87QUFDYjtBQUNBLFFBQVEsV0FBVyxFQUFFLEtBQUs7QUFDMUI7QUFDQSxRQUFRLFFBQVEsRUFBRSxLQUFLO0FBQ3ZCO0FBQ0EsUUFBUSxjQUFjLEVBQUUsS0FBSztBQUM3QjtBQUNBLFFBQVEsTUFBTSxFQUFFLElBQUk7QUFDcEI7QUFDQSxRQUFRLFNBQVMsRUFBRSxLQUFLO0FBQ3hCLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTCxJQUFJLEtBQUssRUFBRSxTQUFTO0FBQ3BCLElBQUksU0FBUyxFQUFFLFNBQVMsS0FBSyxFQUFFO0FBQy9CLE1BQU0sS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ25FLEtBQUs7QUFDTCxHQUFHLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0EsVUFBVSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRCxDQUFDLENBQUM7Ozs7QUNoSUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsU0FBUyxHQUFHLEVBQUU7QUFDZixFQUNJLEdBQUcsQ0FBQ0EsVUFBK0IsQ0FBQyxDQUlwQjtBQUNwQixDQUFDLEVBQUUsU0FBUyxVQUFVLEVBQUU7QUFFeEI7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxXQUFXO0FBQ3pDLEVBQUUsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFO0FBQzNCLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoRSxJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsR0FBRztBQUNILEVBQUUsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLGdEQUFnRDtBQUM1RSw0QkFBNEIscUVBQXFFO0FBQ2pHLDRCQUE0Qix3RUFBd0U7QUFDcEcsNEJBQTRCLHFFQUFxRTtBQUNqRyw0QkFBNEIsMEVBQTBFO0FBQ3RHLDRCQUE0QiwyRUFBMkU7QUFDdkcsNEJBQTRCLHdFQUF3RTtBQUNwRyw0QkFBNEIsc0VBQXNFO0FBQ2xHLDRCQUE0QiwyRUFBMkU7QUFDdkcsNEJBQTRCLHlFQUF5RTtBQUNyRyw0QkFBNEIsNEVBQTRFO0FBQ3hHLDRCQUE0Qiw0RUFBNEU7QUFDeEcsNEJBQTRCLDhFQUE4RTtBQUMxRyw0QkFBNEIsaUZBQWlGO0FBQzdHLDRCQUE0Qix1RUFBdUU7QUFDbkcsNEJBQTRCLHVFQUF1RTtBQUNuRyw0QkFBNEIsc0VBQXNFO0FBQ2xHLDRCQUE0Qix5RUFBeUU7QUFDckcsNEJBQTRCLDBFQUEwRTtBQUN0Ryw0QkFBNEIseUVBQXlFO0FBQ3JHLDRCQUE0QiwyRUFBMkU7QUFDdkcsNEJBQTRCLDJFQUEyRTtBQUN2Ryw0QkFBNEIsMEVBQTBFO0FBQ3RHLDRCQUE0QiwrRUFBK0U7QUFDM0csNEJBQTRCLDBFQUEwRTtBQUN0Ryw0QkFBNEIsK0VBQStFO0FBQzNHLDRCQUE0QixpRkFBaUY7QUFDN0csNEJBQTRCLDRFQUE0RTtBQUN4Ryw0QkFBNEIsZ0ZBQWdGO0FBQzVHLDRCQUE0Qix5RUFBeUU7QUFDckcsNEJBQTRCLHdFQUF3RTtBQUNwRyw0QkFBNEIsMkVBQTJFO0FBQ3ZHLDRCQUE0Qix3RUFBd0U7QUFDcEcsNEJBQTRCLDBFQUEwRTtBQUN0Ryw0QkFBNEIsNkVBQTZFO0FBQ3pHLDRCQUE0Qix3RUFBd0UsQ0FBQyxDQUFDO0FBQ3RHLEVBQUUsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLHNFQUFzRTtBQUNsRyw0QkFBNEIsZ0ZBQWdGO0FBQzVHLDRCQUE0Qiw0RUFBNEU7QUFDeEcsNEJBQTRCLHdFQUF3RTtBQUNwRyw0QkFBNEIsMkVBQTJFO0FBQ3ZHLDRCQUE0QiwrRUFBK0U7QUFDM0csNEJBQTRCLDRFQUE0RTtBQUN4Ryw0QkFBNEIsNkVBQTZFO0FBQ3pHLDRCQUE0QiwyRUFBMkU7QUFDdkcsNEJBQTRCLDRFQUE0RTtBQUN4Ryw0QkFBNEIsNEVBQTRFO0FBQ3hHLDRCQUE0QiwrRUFBK0U7QUFDM0csNEJBQTRCLGtGQUFrRjtBQUM5Ryw0QkFBNEIsaUZBQWlGO0FBQzdHLDRCQUE0QiwyRUFBMkU7QUFDdkcsNEJBQTRCLGdGQUFnRjtBQUM1Ryw0QkFBNEIsK0VBQStFO0FBQzNHLDRCQUE0QiwrRUFBK0U7QUFDM0csNEJBQTRCLGlGQUFpRjtBQUM3Ryw0QkFBNEIsMkVBQTJFO0FBQ3ZHLDRCQUE0QixnRkFBZ0Y7QUFDNUcsNEJBQTRCLGtGQUFrRjtBQUM5Ryw0QkFBNEIsdUVBQXVFO0FBQ25HLDRCQUE0Qix5RUFBeUU7QUFDckcsNEJBQTRCLHdEQUF3RCxDQUFDLENBQUM7QUFDdEYsRUFBRSxJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztBQUMvRixFQUFFLElBQUksY0FBYyxHQUFHLG9CQUFvQixDQUFDO0FBQzVDLEVBQUUsU0FBUyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN2QixJQUFJLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1QixHQUFHO0FBQ0gsRUFBRSxTQUFTLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3BDLElBQUksSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztBQUMxQyxJQUFJLEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQy9CLElBQUksSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsTUFBTSxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzNELFdBQVcsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ2pELE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzVCLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoQyxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ3RCLEtBQUs7QUFDTCxTQUFTLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtBQUN6QixNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sT0FBTyxRQUFRLENBQUM7QUFDdEIsS0FBSztBQUNMLFNBQVMsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDM0MsTUFBTSxPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTCxTQUFTLElBQUksRUFBRSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ3BELE1BQU0sT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNqRCxLQUFLO0FBQ0wsU0FBUyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQzNDLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSztBQUNMLFNBQVMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ3hCLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLE9BQU8sU0FBUyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxTQUFTLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRTtBQUN4QixNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUMxQyxNQUFNLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtBQUNyRixRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLE9BQU87QUFDUCxXQUFXO0FBQ1gsUUFBUSxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUNsQyxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLE9BQU87QUFDUCxLQUFLO0FBQ0wsU0FBUyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDeEIsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDaEMsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixLQUFLO0FBQ0wsU0FBUyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEMsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sT0FBTyxVQUFVLENBQUM7QUFDeEIsS0FBSztBQUNMLFNBQVM7QUFDVCxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbkMsTUFBTSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDaEQsTUFBTSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDO0FBQ3pELFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsTUFBTSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDN0QsUUFBUSxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUNsQyxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLE9BQU87QUFDUCxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxTQUFTLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3ZDLElBQUksSUFBSSxRQUFRLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQztBQUM3QixJQUFJLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUMvQixNQUFNLElBQUksRUFBRSxJQUFJLEdBQUcsSUFBSSxRQUFRLEVBQUU7QUFDakMsUUFBUSxLQUFLLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUNuQyxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsTUFBTSxRQUFRLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLEdBQUc7QUFDSCxFQUFFLFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDeEMsSUFBSSxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3pCLElBQUksT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFO0FBQy9CLE1BQU0sSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7QUFDdEMsUUFBUSxLQUFLLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUNuQyxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsTUFBTSxJQUFJLEVBQUUsSUFBSSxHQUFHO0FBQ25CLFFBQVEsUUFBUSxFQUFFLENBQUM7QUFDbkIsV0FBVyxJQUFJLEVBQUUsSUFBSSxHQUFHO0FBQ3hCLFFBQVEsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNyQixLQUFLO0FBQ0wsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0gsRUFBRSxPQUFPO0FBQ1QsSUFBSSxVQUFVLEVBQUUsV0FBVztBQUMzQixNQUFNLE9BQU87QUFDYixRQUFRLFFBQVEsRUFBRSxTQUFTO0FBQzNCLFFBQVEsWUFBWSxFQUFFLEtBQUs7QUFDM0IsUUFBUSxRQUFRLEVBQUUsS0FBSztBQUN2QixPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0wsSUFBSSxLQUFLLEVBQUUsU0FBUyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ25DLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDekMsTUFBTSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNDLEtBQUs7QUFDTCxHQUFHLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0EsQ0FBQyxDQUFDOzs7O0FDaE1GO0FBQ0E7QUFDQTtBQUNBLENBQUMsU0FBUyxHQUFHLEVBQUU7QUFDZixFQUNJLEdBQUcsQ0FBQ0EsVUFBK0IsQ0FBQyxDQUlwQjtBQUNwQixDQUFDLEVBQUUsU0FBUyxVQUFVLEVBQUU7QUFFeEI7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxTQUFTLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDaEUsRUFBRSxJQUFJLEtBQUssR0FBRztBQUNkLElBQUksSUFBSSxFQUFFLFNBQVM7QUFDbkIsSUFBSSxJQUFJLEVBQUUsU0FBUztBQUNuQixJQUFJLE1BQU0sRUFBRSxTQUFTO0FBQ3JCLElBQUksS0FBSyxFQUFFLFNBQVM7QUFDcEIsSUFBSSxXQUFXLEVBQUUsU0FBUztBQUMxQixJQUFJLEtBQUssRUFBRSxTQUFTO0FBQ3BCLElBQUksU0FBUyxFQUFFLFNBQVM7QUFDeEIsSUFBSSxJQUFJLEVBQUUsU0FBUztBQUNuQixJQUFJLElBQUksRUFBRSxTQUFTO0FBQ25CLElBQUksU0FBUyxFQUFFLFNBQVM7QUFDeEIsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUNwQixJQUFJLElBQUksRUFBRSxTQUFTO0FBQ25CLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDckIsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUNwQixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDckIsSUFBSSxNQUFNLEVBQUUsU0FBUztBQUNyQixJQUFJLEtBQUssRUFBRSxTQUFTO0FBQ3BCLElBQUksT0FBTyxFQUFFLFNBQVM7QUFDdEIsSUFBSSxNQUFNLEVBQUUsU0FBUztBQUNyQixHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsSUFBSSxVQUFVLEdBQUcsWUFBWSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7QUFDakQsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRTtBQUMvQixJQUFJLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN6QyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDckIsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM3QyxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM5RDtBQUNBLEVBQUUsU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUNwQyxJQUFJLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzQjtBQUNBLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7QUFDbkMsTUFBTSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNDLEtBQUs7QUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUNwQixNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMzQixRQUFRLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFFBQVEsS0FBSyxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUM7QUFDekMsUUFBUSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdDLE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDcEIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDM0IsUUFBUSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDN0IsUUFBUSxLQUFLLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztBQUN0QyxRQUFRLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0MsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ2xDLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixNQUFNLE9BQU8sWUFBWSxDQUFDO0FBQzFCLEtBQUs7QUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUNwQixNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxPQUFPLE9BQU8sQ0FBQztBQUNyQixLQUFLO0FBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksWUFBWSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3JFLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZCLE1BQU0sSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDNUMsUUFBUSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUM5QyxRQUFRLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFDO0FBQ3RDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUM5QyxRQUFRLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakMsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzdCLFVBQVUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQyxTQUFTO0FBQ1QsUUFBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDaEMsVUFBVSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVM7QUFDVCxPQUFPO0FBQ1AsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixLQUFLO0FBQ0wsSUFBSSxLQUFLLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN6QyxNQUFNLE9BQU8sVUFBVSxDQUFDO0FBQ3hCLEtBQUs7QUFDTCxJQUFJLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3BDLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2pDLE1BQU0sT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDakUsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJO0FBQ2YsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3RDLElBQUksSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzNDLElBQUksT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQzNDLE1BQU0sSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3BDLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFPLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQztBQUMxQyxLQUFLO0FBQ0wsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN6QixNQUFNLEtBQUssQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQ2pDLEtBQUs7QUFDTCxJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLEdBQ0E7QUFDQSxFQUFFLFNBQVMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDdkMsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLENBQUM7QUFDbkIsSUFBSSxNQUFNLEtBQUssQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDcEUsTUFBTSxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDN0QsTUFBTSxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksSUFBSSxDQUFDLEVBQUU7QUFDakMsTUFBTSxLQUFLLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUNqQyxLQUFLO0FBQ0wsSUFBSSxPQUFPLFNBQVMsQ0FBQztBQUNyQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDMUMsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLENBQUM7QUFDbkIsSUFBSSxPQUFPLEtBQUssQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUMvRCxNQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ2pFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRTtBQUMzQixNQUFNLEtBQUssQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQ2pDLEtBQUs7QUFDTCxJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTztBQUNULElBQUksVUFBVSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlGLElBQUksS0FBSyxFQUFFLFNBQVMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUNuQyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLGlCQUFpQixFQUFFLElBQUk7QUFDM0IsSUFBSSxlQUFlLEVBQUUsSUFBSTtBQUN6QixJQUFJLFdBQVcsRUFBRSxZQUFZLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxJQUFJO0FBQ3pELEdBQUcsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0g7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRTtBQUN0QyxFQUFFLElBQUksRUFBRSxRQUFRO0FBQ2hCLEVBQUUsVUFBVSxFQUFFO0FBQ2QsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUNwQixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksT0FBTyxFQUFFLFNBQVM7QUFDdEIsSUFBSSxPQUFPLEVBQUUsU0FBUztBQUN0QixJQUFJLFlBQVksRUFBRSxTQUFTO0FBQzNCLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDckIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLFVBQVUsRUFBRSxTQUFTO0FBQ3pCLElBQUksVUFBVSxFQUFFLFNBQVM7QUFDekIsSUFBSSxhQUFhLEVBQUUsU0FBUztBQUM1QixJQUFJLE1BQU0sRUFBRSxTQUFTO0FBQ3JCLElBQUksT0FBTyxFQUFFLFNBQVM7QUFDdEIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksU0FBUyxFQUFFLFNBQVM7QUFDeEIsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUNwQixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksUUFBUSxFQUFFLFNBQVM7QUFDdkIsSUFBSSxTQUFTLEVBQUUsU0FBUztBQUN4QixJQUFJLEtBQUssRUFBRSxTQUFTO0FBQ3BCLElBQUksSUFBSSxFQUFFLFNBQVM7QUFDbkIsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUNwQixJQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3RCLElBQUksU0FBUyxFQUFFLFNBQVM7QUFDeEIsSUFBSSxNQUFNLEVBQUUsU0FBUztBQUNyQjtBQUNBO0FBQ0EsSUFBSSxPQUFPLEVBQUUsU0FBUztBQUN0QixJQUFJLFVBQVUsRUFBRSxTQUFTO0FBQ3pCLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDckIsSUFBSSxPQUFPLEVBQUUsU0FBUztBQUN0QjtBQUNBO0FBQ0EsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUNwQixJQUFJLE1BQU0sRUFBRSxTQUFTO0FBQ3JCLElBQUksS0FBSyxFQUFFLFNBQVM7QUFDcEIsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUNwQixJQUFJLEtBQUssRUFBRSxTQUFTO0FBQ3BCLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDckIsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUNwQixJQUFJLElBQUksRUFBRSxTQUFTO0FBQ25CO0FBQ0E7QUFDQSxJQUFJLGVBQWUsRUFBRSxTQUFTO0FBQzlCLElBQUksT0FBTyxFQUFFLFNBQVM7QUFDdEIsSUFBSSxNQUFNLEVBQUUsU0FBUztBQUNyQixJQUFJLGNBQWMsRUFBRSxTQUFTO0FBQzdCLElBQUksZUFBZSxFQUFFLFNBQVM7QUFDOUI7QUFDQSxLQUFLLEtBQUssRUFBRSxNQUFNO0FBQ2xCLEtBQUssT0FBTyxFQUFFLE1BQU07QUFDcEIsS0FBSyxNQUFNLEVBQUUsTUFBTTtBQUNuQixLQUFLLE1BQU0sRUFBRSxNQUFNO0FBQ25CLEtBQUssUUFBUSxFQUFFLE1BQU07QUFDckIsS0FBSyxNQUFNLEVBQUUsTUFBTTtBQUNuQjtBQUNBO0FBQ0EsS0FBSyxNQUFNLEVBQUUsU0FBUztBQUN0QixHQUFHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBLFVBQVUsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFO0FBQ3ZDLEVBQUUsSUFBSSxFQUFFLFFBQVE7QUFDaEIsRUFBRSxVQUFVLEVBQUU7QUFDZCxJQUFJLFVBQVUsRUFBRSxTQUFTO0FBQ3pCLElBQUksUUFBUSxFQUFFLFNBQVM7QUFDdkIsSUFBSSxNQUFNLEVBQUUsU0FBUztBQUNyQixJQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3RCLElBQUksT0FBTyxFQUFFLFNBQVM7QUFDdEIsSUFBSSxTQUFTLEVBQUUsU0FBUztBQUN4QixJQUFJLFVBQVUsRUFBRSxTQUFTO0FBQ3pCLElBQUksS0FBSyxFQUFFLFNBQVM7QUFDcEIsSUFBSSxNQUFNLEVBQUUsU0FBUztBQUNyQixJQUFJLFVBQVUsRUFBRSxTQUFTO0FBQ3pCLElBQUksUUFBUSxFQUFFLFNBQVM7QUFDdkIsSUFBSSxNQUFNLEVBQUUsU0FBUztBQUNyQixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksU0FBUyxFQUFFLFNBQVM7QUFDeEIsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUNwQixJQUFJLFVBQVUsRUFBRSxTQUFTO0FBQ3pCLElBQUksUUFBUSxFQUFFLFNBQVM7QUFDdkIsSUFBSSxTQUFTLEVBQUUsU0FBUztBQUN4QixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksV0FBVyxFQUFFLFNBQVM7QUFDMUIsSUFBSSxVQUFVLEVBQUUsU0FBUztBQUN6QixJQUFJLE1BQU0sRUFBRSxTQUFTO0FBQ3JCLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDckIsSUFBSSxPQUFPLEVBQUUsU0FBUztBQUN0QixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksUUFBUSxFQUFFLFNBQVM7QUFDdkIsSUFBSSxTQUFTLEVBQUUsU0FBUztBQUN4QixJQUFJLFdBQVcsRUFBRSxTQUFTO0FBQzFCLElBQUksS0FBSyxFQUFFLFNBQVM7QUFDcEIsSUFBSSxNQUFNLEVBQUUsU0FBUztBQUNyQixJQUFJLFVBQVUsRUFBRSxTQUFTO0FBQ3pCLElBQUksU0FBUyxFQUFFLFNBQVM7QUFDeEIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLFNBQVMsRUFBRSxTQUFTO0FBQ3hCLElBQUksUUFBUSxFQUFFLFNBQVM7QUFDdkIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksSUFBSSxFQUFFLFNBQVM7QUFDbkIsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUNwQixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDckIsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUNwQixJQUFJLE1BQU0sRUFBRSxTQUFTO0FBQ3JCLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDckIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksT0FBTyxFQUFFLFNBQVM7QUFDdEIsSUFBSSxTQUFTLEVBQUUsU0FBUztBQUN4QixJQUFJLFdBQVcsRUFBRSxTQUFTO0FBQzFCLElBQUksT0FBTyxFQUFFLFNBQVM7QUFDdEIsSUFBSSxZQUFZLEVBQUUsU0FBUztBQUMzQixJQUFJLGFBQWEsRUFBRSxTQUFTO0FBQzVCLElBQUksVUFBVSxFQUFFLFNBQVM7QUFDekIsSUFBSSxPQUFPLEVBQUUsU0FBUztBQUN0QixJQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3RCLElBQUksVUFBVSxFQUFFLFNBQVM7QUFDekIsSUFBSSxPQUFPLEVBQUUsU0FBUztBQUN0QixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksT0FBTyxFQUFFLFNBQVM7QUFDdEIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLFVBQVUsRUFBRSxTQUFTO0FBQ3pCLElBQUksU0FBUyxFQUFFLFNBQVM7QUFDeEIsSUFBSSxXQUFXLEVBQUUsU0FBUztBQUMxQixJQUFJLE1BQU0sRUFBRSxTQUFTO0FBQ3JCLElBQUksUUFBUSxFQUFFLFNBQVM7QUFDdkIsSUFBSSxVQUFVLEVBQUUsU0FBUztBQUN6QixJQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3RCLElBQUksU0FBUyxFQUFFLFNBQVM7QUFDeEIsSUFBSSxVQUFVLEVBQUUsU0FBUztBQUN6QjtBQUNBO0FBQ0EsSUFBSSxNQUFNLEVBQUUsU0FBUztBQUNyQixJQUFJLEtBQUssRUFBRSxTQUFTO0FBQ3BCLElBQUksS0FBSyxFQUFFLFNBQVM7QUFDcEIsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUNwQixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksS0FBSyxFQUFFLFNBQVM7QUFDcEIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLEtBQUssRUFBRSxTQUFTO0FBQ3BCLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDckIsSUFBSSxPQUFPLEVBQUUsU0FBUztBQUN0QjtBQUNBLElBQUksT0FBTyxFQUFFLFNBQVM7QUFDdEIsSUFBSSxVQUFVLEVBQUUsU0FBUztBQUN6QixHQUFHO0FBQ0gsRUFBRSxhQUFhLEVBQUUsSUFBSTtBQUNyQixDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0E7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRTtBQUNwQyxFQUFFLElBQUksRUFBRSxRQUFRO0FBQ2hCLEVBQUUsVUFBVSxFQUFFO0FBQ2QsSUFBSSxTQUFTLEVBQUUsU0FBUztBQUN4QixJQUFJLEtBQUssRUFBRSxTQUFTO0FBQ3BCLElBQUksU0FBUyxFQUFFLFNBQVM7QUFDeEIsSUFBSSxNQUFNLEVBQUUsU0FBUztBQUNyQixJQUFJLFVBQVUsRUFBRSxTQUFTO0FBQ3pCLElBQUksSUFBSSxFQUFFLFNBQVM7QUFDbkIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3RCLElBQUksUUFBUSxFQUFFLFNBQVM7QUFDdkIsSUFBSSxPQUFPLEVBQUUsU0FBUztBQUN0QixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksSUFBSSxFQUFFLFNBQVM7QUFDbkIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3RCLElBQUksVUFBVSxFQUFFLFNBQVM7QUFDekIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLFNBQVMsRUFBRSxTQUFTO0FBQ3hCLElBQUksS0FBSyxFQUFFLFNBQVM7QUFDcEIsSUFBSSxXQUFXLEVBQUUsU0FBUztBQUMxQixJQUFJLFdBQVcsRUFBRSxTQUFTO0FBQzFCLElBQUksT0FBTyxFQUFFLFNBQVM7QUFDdEIsSUFBSSxNQUFNLEVBQUUsU0FBUztBQUNyQixJQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLEtBQUssRUFBRSxTQUFTO0FBQ3BCLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDckIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLE1BQU0sRUFBRSxTQUFTO0FBQ3JCLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDckIsR0FBRztBQUNILEVBQUUsYUFBYSxFQUFFLElBQUk7QUFDckIsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBLENBQUMsQ0FBQzs7OztBQ3RXRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxTQUFTLEdBQUcsRUFBRTtBQUNmLEVBQ0ksR0FBRyxDQUFDQSxVQUErQixDQUFDLENBSXBCO0FBQ3BCLENBQUM7QUFDRDtBQUNBLENBQUMsU0FBUyxVQUFVLEVBQUU7QUFFdEI7QUFDQSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFNBQVMsTUFBTSxFQUFFLFlBQVksRUFBRTtBQUNuRTtBQUNBLElBQUksSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUN2QyxJQUFJLElBQUksUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9DLElBQUksSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0MsSUFBSSxJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUN6QztBQUNBLElBQUksSUFBSSxvQkFBb0IsR0FBRyw0QkFBNEIsQ0FBQztBQUM1RCxJQUFJLElBQUksb0JBQW9CLEdBQUcsMkNBQTJDLENBQUM7QUFDM0UsSUFBSSxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDMUIsSUFBSSxJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUM7QUFDakM7QUFDQSxJQUFJLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUM3QyxNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QixNQUFNLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDOUMsTUFBTSxJQUFJLFFBQVEsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQy9CLE1BQU0sT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFO0FBQ2pDLFFBQVEsSUFBSSxRQUFRLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRTtBQUNuQyxVQUFVLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFVBQVUsTUFBTTtBQUNoQixTQUFTO0FBQ1QsUUFBUSxRQUFRLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE9BQU87QUFDUCxNQUFNLE9BQU8sU0FBUyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUN4QyxNQUFNLElBQUksT0FBTyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7QUFDOUIsTUFBTSxPQUFPLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDM0MsUUFBUSxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDbkMsVUFBVSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNoQyxVQUFVLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFVBQVUsTUFBTTtBQUNoQixTQUFTO0FBQ1QsUUFBUSxPQUFPLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztBQUN6QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUN2QyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsTUFBTSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHO0FBQy9EO0FBQ0E7QUFDQSxNQUFNLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNqQztBQUNBLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxTQUFTLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakgsV0FBVyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUU7QUFDQSxNQUFNLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDeEI7QUFDQSxNQUFNLElBQUksUUFBUSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sU0FBUyxDQUFDO0FBQy9ELFdBQVcsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDbkUsV0FBVyxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM5RCxXQUFXLE9BQU8sVUFBVSxDQUFDO0FBQzdCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUN4QyxNQUFNLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHO0FBQ3BDO0FBQ0EsTUFBTSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUM1QixNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0FBQ0EsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQ3hCLFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUI7QUFDQSxRQUFRLE9BQU8sT0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQy9DLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMvQixNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMzQixRQUFRLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakMsT0FBTztBQUNQLE1BQU0sSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDNUIsVUFBVSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFFBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDeEIsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksT0FBTztBQUNYLE1BQU0sVUFBVSxFQUFFLFdBQVc7QUFDN0IsUUFBUSxPQUFPO0FBQ2YsVUFBVSxRQUFRLEVBQUUsSUFBSTtBQUN4QixVQUFVLEtBQUssRUFBRSxDQUFDO0FBQ2xCLFVBQVUsR0FBRyxFQUFFLElBQUk7QUFDbkIsU0FBUyxDQUFDO0FBQ1YsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLEVBQUUsU0FBUyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3JDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtBQUNuQyxVQUFVLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0MsU0FBUztBQUNUO0FBQ0EsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN6QixVQUFVLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRTtBQUM5QixVQUFVLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFVBQVUsT0FBTyxJQUFJLENBQUM7QUFDdEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0I7QUFDQTtBQUNBLFFBQVEsR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDekMsVUFBVSxLQUFLLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDO0FBQzVDLFNBQVM7QUFDVDtBQUNBLGFBQWEsR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDOUMsVUFBVSxLQUFLLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDO0FBQzdDLFNBQVM7QUFDVDtBQUNBLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0FBQzdELFVBQVUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLFVBQVUsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDaEMsVUFBVSxPQUFPLFVBQVUsQ0FBQztBQUM1QixTQUFTO0FBQ1Q7QUFDQSxhQUFhLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9DLFVBQVUsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDaEMsVUFBVSxPQUFPLFVBQVUsQ0FBQztBQUM1QixTQUFTO0FBQ1Q7QUFDQSxhQUFhLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNyQyxVQUFVLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQ3RDLFNBQVM7QUFDVDtBQUNBLGFBQWEsR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ3BFLFVBQVUsS0FBSyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7QUFDdkMsU0FBUztBQUNUO0FBQ0EsYUFBYSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDM0IsVUFBVSxLQUFLLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQztBQUN2QyxTQUFTO0FBQ1Q7QUFDQSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQyxVQUFVLEtBQUssQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUM7QUFDOUMsU0FBUztBQUNUO0FBQ0EsYUFBYTtBQUNiLFVBQVUsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDaEMsVUFBVSxPQUFPLE9BQU8sQ0FBQztBQUN6QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0MsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLEVBQUUsU0FBUyxLQUFLLEVBQUUsU0FBUyxFQUFFO0FBQ3pDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDM0Q7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDaEMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDbEQsUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDakQsUUFBUSxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUMxRCxRQUFRLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3pELFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxHQUFHLEtBQUssR0FBRyxDQUFDO0FBQ3BCLFVBQVUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDO0FBQ2xDO0FBQ0EsVUFBVSxPQUFPLENBQUMsQ0FBQztBQUNuQixPQUFPO0FBQ1A7QUFDQSxNQUFNLGlCQUFpQixFQUFFLElBQUk7QUFDN0IsTUFBTSxlQUFlLEVBQUUsSUFBSTtBQUMzQixNQUFNLFdBQVcsRUFBRSxJQUFJO0FBQ3ZCLEtBQUssQ0FBQztBQUNOLEdBQUcsQ0FBQyxDQUFDO0FBQ0w7QUFDQSxFQUFFLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUN0QixJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUNyQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxnQkFBZ0IsR0FBRywrYUFBK2EsQ0FBQztBQUN6YyxFQUFFLElBQUksZUFBZSxHQUFHLDROQUE0TixDQUFDO0FBQ3JQLEVBQUUsSUFBSSxhQUFhLEdBQUcsNkJBQTZCLENBQUM7QUFDcEQ7QUFDQSxFQUFFLFNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDNUIsSUFBSSxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVE7QUFDaEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QjtBQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUU7QUFDdEIsTUFBTSxJQUFJLEdBQUc7QUFDYixRQUFRLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRztBQUM1QixVQUFVLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7QUFDdEMsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2QixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEIsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDdEIsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUNyQyxNQUFNLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVDLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRTtBQUMzQixJQUFJLElBQUksRUFBRSxVQUFVO0FBQ3BCLElBQUksUUFBUSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztBQUNyQyxJQUFJLE9BQU8sRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ25DLElBQUksS0FBSyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUM7QUFDL0IsR0FBRyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7Ozs7QUNwUEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsU0FBUyxHQUFHLEVBQUU7QUFDZixFQUNJLEdBQUcsQ0FBQ0EsVUFBK0IsQ0FBQyxDQUlwQjtBQUNwQixDQUFDLEVBQUUsU0FBUyxVQUFVLEVBQUU7QUFFeEI7QUFDQSxFQUFFLElBQUksU0FBUyxHQUFHO0FBQ2xCLElBQUksTUFBTSxFQUFFO0FBQ1osTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDMUIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUM7QUFDcEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7QUFDbEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztBQUMzUCxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7QUFDakMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7QUFDbkQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNsTSxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7QUFDbkMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDekIsS0FBSztBQUNMLElBQUksRUFBRSxFQUFFO0FBQ1IsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsQ0FBQztBQUNyRyxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUM7QUFDMUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUM7QUFDNVMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQ2pDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQ25MLE1BQU0sWUFBWSxHQUFHLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDbE0sTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO0FBQ25DLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQ3pCLEtBQUs7QUFDTCxJQUFJLE9BQU8sRUFBRTtBQUNiLE1BQU0sVUFBVSxHQUFHLElBQUk7QUFDdkIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxDQUFDO0FBQ3JHLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQztBQUMxRCxNQUFNLFlBQVksR0FBRyxJQUFJO0FBQ3pCLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztBQUNqQyxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztBQUNuTCxNQUFNLFlBQVksR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ2xNLE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUNuQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUN6QixLQUFLO0FBQ0wsSUFBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUU7QUFDMUQsSUFBSSxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksUUFBUSxFQUFDO0FBQzNFLElBQUksT0FBTztBQUNYLE1BQU0sVUFBVSxFQUFFLFlBQVk7QUFDOUIsTUFBTSxTQUFTLEVBQUUsV0FBVztBQUM1QixNQUFNLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7QUFDM0MsTUFBTSxXQUFXLEdBQUcsR0FBRztBQUN2QixNQUFNLGlCQUFpQixHQUFHLElBQUk7QUFDOUIsTUFBTSxlQUFlLEdBQUcsSUFBSTtBQUM1QixLQUFLLENBQUM7QUFDTixHQUFHLENBQUMsQ0FBQztBQUNMO0FBQ0EsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNuRCxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ2pGO0FBQ0EsRUFBRSxTQUFTLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtBQUN0QyxJQUFJLE9BQU8sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9ELEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFO0FBQzlCLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekQsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFlBQVksR0FBRztBQUMxQixJQUFJLE9BQU87QUFDWCxNQUFNLFNBQVMsR0FBRyxLQUFLO0FBQ3ZCLE1BQU0sUUFBUSxHQUFHLEtBQUs7QUFDdEIsTUFBTSxlQUFlLEdBQUcsS0FBSztBQUM3QixNQUFNLFFBQVEsR0FBRyxLQUFLO0FBQ3RCLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQy9CLElBQUksT0FBTztBQUNYLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTO0FBQ2xDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRO0FBQ2hDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlO0FBQzlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRO0FBQ2hDLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUU7QUFDekM7QUFDQSxJQUFJLE9BQU8sU0FBUyxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ3JDLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ25FLFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtBQUM3QixRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3ZELFVBQVUsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDbEMsVUFBVSxPQUFPLFNBQVMsQ0FBQztBQUMzQixTQUFTO0FBQ1QsUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDMUUsVUFBVSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUIsVUFBVSxPQUFPLFNBQVMsQ0FBQztBQUMzQixTQUFTO0FBQ1QsT0FBTztBQUNQLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO0FBQzVCLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3JELFVBQVUsTUFBTSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDbkM7QUFDQSxVQUFVLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM5QixRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDNUUsUUFBUSxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUMvQixRQUFRLE9BQU8sUUFBUSxDQUFDO0FBQ3hCLE9BQU87QUFDUCxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtBQUMzQixRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNqRCxVQUFVLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ2xDO0FBQ0EsVUFBVSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUIsUUFBUSxPQUFPLFFBQVEsQ0FBQztBQUN4QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUMvRixRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDeEUsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QjtBQUNBLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQzFFLFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekI7QUFDQSxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDbkUsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QjtBQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUN6RixRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3pGLFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUI7QUFDQTtBQUNBLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQy9GLFFBQVEsT0FBTyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDdkMsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QixPQUFPO0FBQ1AsTUFBTSxJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUU7QUFDbkMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtBQUM5RyxVQUFVLE9BQU8sV0FBVyxDQUFDO0FBQzdCLFNBQVM7QUFDVCxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQzVDLFVBQVUsT0FBTyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDMUMsVUFBVSxPQUFPLFNBQVMsQ0FBQztBQUMzQixTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckIsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQSxDQUFDLENBQUM7Ozs7QUM5S0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsR0FBRyxFQUFFO0FBQ2YsRUFDSSxHQUFHLENBQUNBLFVBQStCLENBQUMsQ0FJcEI7QUFDcEIsQ0FBQyxFQUFFLFNBQVMsVUFBVSxFQUFFO0FBRXhCO0FBQ0EsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxXQUFXO0FBQzVDLElBQUksU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFO0FBQy9CLE1BQU0sT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLGVBQWUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBQzNFLElBQUksSUFBSSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsNENBQTRDLENBQUMsQ0FBQztBQUNuRixJQUFJLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbEQsSUFBSSxJQUFJLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxJQUFJLElBQUksV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDM0QsSUFBSSxJQUFJLGVBQWUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xWO0FBQ0EsSUFBSSxJQUFJLG1CQUFtQixHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5cUIsSUFBSSxJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUN6RCxJQUFJLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM5QztBQUNBLElBQUksU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUN0QyxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ3hCLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBUSxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUM5QixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtBQUNBLE1BQU0sSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDbkMsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUM1QixRQUFRLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDO0FBQ2xDLFVBQVUsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDaEMsYUFBYSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFDcEUsVUFBVSxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUN6RCxRQUFRLElBQUksRUFBRSxJQUFJLEdBQUc7QUFDckIsVUFBVSxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsVUFBVSxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNoQyxPQUFPO0FBQ1A7QUFDQTtBQUNBLE1BQU0sSUFBSSxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLFFBQVEsQ0FBQztBQUMzQyxRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzVCO0FBQ0E7QUFDQSxNQUFNLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN0QixRQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUMzQixRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLE9BQU87QUFDUDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLENBQUM7QUFDMUQsUUFBUSxPQUFPLFFBQVEsQ0FBQztBQUN4QjtBQUNBO0FBQ0EsTUFBTSxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDckIsUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDaEMsVUFBVSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsVUFBVSxPQUFPLFFBQVEsQ0FBQztBQUMxQixTQUFTLE1BQU07QUFDZixVQUFVLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM3QixVQUFVLE9BQU8sT0FBTyxDQUFDO0FBQ3pCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ3hFLFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUI7QUFDQTtBQUNBLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0FBQ3hDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM3QixRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QixRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUN4RCxRQUFRLE9BQU8sWUFBWSxDQUFDO0FBQzVCO0FBQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO0FBQ3RDLFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekI7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDbkMsUUFBUSxPQUFPLFVBQVUsQ0FBQztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ3BDLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3RCLFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0E7QUFDQSxNQUFNLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN0QixRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QixRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzVCLFFBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQyxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLE9BQU87QUFDUDtBQUNBO0FBQ0EsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEIsTUFBTSxPQUFPLE9BQU8sQ0FBQztBQUNyQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU87QUFDWCxNQUFNLFVBQVUsRUFBRSxXQUFXO0FBQzdCLFFBQVEsT0FBTztBQUNmLFVBQVUsS0FBSyxFQUFFLEtBQUs7QUFDdEIsVUFBVSxXQUFXLEVBQUUsQ0FBQztBQUN4QixTQUFTLENBQUM7QUFDVixPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssRUFBRSxTQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDckMsUUFBUSxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdDLFFBQVEsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ3RDLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsT0FBTztBQUNQLEtBQUssQ0FBQztBQUNOLEdBQUcsQ0FBQyxDQUFDO0FBQ0w7QUFDQSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQzs7OztBQ25KRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsR0FBRyxFQUFFO0FBQ2YsRUFDSSxHQUFHLENBQUNBLFVBQStCLENBQUMsQ0FJcEI7QUFDcEIsQ0FBQyxFQUFFLFNBQVMsVUFBVSxFQUFFO0FBRXhCO0FBQ0EsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxNQUFNLEVBQUU7QUFDaEQ7QUFDQSxFQUFFLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUN0QixJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QyxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEUsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUcsS0FBSztBQUN0Qiw4QkFBOEIsMEJBQTBCO0FBQ3hELHVCQUF1Qiw4K0pBQTgrSjtBQUNyZ0ssS0FBSyxDQUFDO0FBQ047QUFDQSxFQUFFLElBQUksY0FBYyxHQUFHLEtBQUs7QUFDNUIsNEJBQTRCLHFGQUFxRjtBQUNqSCxLQUFLLENBQUM7QUFDTjtBQUNBLEVBQUUsSUFBSSxrQkFBa0IsR0FBRyxLQUFLO0FBQ2hDLGdDQUFnQyxrR0FBa0c7QUFDbEksS0FBSyxDQUFDO0FBQ047QUFDQSxFQUFFLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO0FBQzNDLEVBQUUsU0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsRUFBRSxTQUFTLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3BDO0FBQ0E7QUFDQSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0I7QUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMvQjtBQUNBO0FBQ0EsSUFBSSxJQUFJLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUM1QyxNQUFNLE9BQU8sU0FBUyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxTQUFTLElBQUksY0FBYyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZELE1BQU0sT0FBTyxZQUFZLENBQUM7QUFDMUIsS0FBSztBQUNMLFNBQVMsSUFBSSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMzRCxNQUFNLE9BQU8sVUFBVSxDQUFDO0FBQ3hCLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0IsSUFBSSxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkYsU0FBUyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMzQyxNQUFNLEtBQUssQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO0FBQ3JDLE1BQU0sT0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFDLEtBQUs7QUFDTCxTQUFTLElBQUksRUFBRSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzNDLE1BQU0sS0FBSyxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQztBQUN4QyxNQUFNLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdDLEtBQUs7QUFDTCxTQUFTLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLFNBQVMsSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN0RixTQUFTLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ3RDLE1BQU0sS0FBSyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkMsTUFBTSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNDLEtBQUs7QUFDTCxTQUFTLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRTtBQUN4QixNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QixNQUFNLE9BQU8sR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2QyxLQUFLO0FBQ0wsU0FBUyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDeEIsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sT0FBTyxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3pDLEtBQUs7QUFDTCxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM1QixNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkMsS0FBSztBQUNMLFNBQVMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ25DLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3BDLEtBQUs7QUFDTCxTQUFTLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzQixLQUFLO0FBQ0wsU0FBUztBQUNULE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNsQyxNQUFNLE9BQU8sR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN6QyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3hDLElBQUksSUFBSSxRQUFRLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQztBQUM3QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUN6QyxNQUFNLElBQUksUUFBUSxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDakMsUUFBUSxLQUFLLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUNuQyxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsTUFBTSxRQUFRLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTCxJQUFJLE9BQU8sR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUMzQyxJQUFJLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDekMsTUFBTSxJQUFJLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRTtBQUNwQyxRQUFRLEtBQUssQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQ25DLFFBQVEsTUFBTTtBQUNkLE9BQU87QUFDUCxNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxXQUFXLENBQUMsS0FBSyxFQUFFO0FBQzlCLElBQUksT0FBTyxTQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDbkMsTUFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQzlCLE1BQU0sT0FBTyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQzNDLFFBQVEsSUFBSSxFQUFFLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTztBQUNuQyxVQUFVLE1BQU07QUFDaEIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztBQUN6QyxPQUFPO0FBQ1AsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQy9DLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTztBQUNULElBQUksVUFBVSxFQUFFLFNBQVMsSUFBSSxFQUFFO0FBQy9CLE1BQU0sT0FBTyxDQUFDLFFBQVEsRUFBRSxTQUFTO0FBQ2pDLGNBQWMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ25DLGNBQWMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxFQUFFLFNBQVMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUNuQyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUNsQixNQUFNLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsTUFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUM5RCxXQUFXLElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRTtBQUNwQyxRQUFRLElBQUksT0FBTyxJQUFJLE1BQU0sRUFBRSxLQUFLLEdBQUcsUUFBUSxDQUFDO0FBQ2hELGFBQWEsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLElBQUksU0FBUyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDakUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE9BQU8sSUFBSSxNQUFNLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDckQsUUFBUSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ3ZCLFFBQVEsSUFBSSxPQUFPLElBQUksUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQy9FLGFBQWEsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsT0FBTztBQUNQLFdBQVcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUMsV0FBVyxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUQsV0FBVyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RSxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLFNBQVMsS0FBSyxFQUFFLFNBQVMsRUFBRTtBQUN2QyxNQUFNLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUMvQixRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sT0FBTyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDL0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxhQUFhLEVBQUUsR0FBRztBQUN0QixHQUFHLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0EsVUFBVSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNwRDtBQUNBLENBQUMsQ0FBQzs7OztBQ2pMRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxTQUFTLEdBQUcsRUFBRTtBQUNmLEVBQ0ksR0FBRyxDQUFDQSxVQUErQixFQUFFQyxNQUFrQyxDQUFDLENBSXhEO0FBQ3BCLENBQUMsRUFBRSxTQUFTLFVBQVUsRUFBRTtBQUV4QjtBQUNBLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7QUFDbkMsRUFBRSxLQUFLLENBQUM7QUFDUjtBQUNBLElBQUksQ0FBQyxLQUFLLEVBQUUsaUVBQWlFLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQztBQUMvRjtBQUNBO0FBQ0EsSUFBSSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0FBQ3BELElBQUksRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtBQUNwRCxJQUFJLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7QUFDcEQ7QUFDQTtBQUNBLElBQUksQ0FBQyxLQUFLLEVBQUUsMFBBQTBQLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztBQUN6UjtBQUNBO0FBQ0EsSUFBSSxDQUFDLEtBQUssRUFBRSwrQ0FBK0MsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDNUYsSUFBSSxDQUFDLEtBQUssRUFBRSxtQ0FBbUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDaEY7QUFDQTtBQUNBLElBQUksQ0FBQyxLQUFLLEVBQUUsMGxGQUEwbEYsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDO0FBQ3puRixJQUFJLENBQUMsS0FBSyxFQUFFLDZDQUE2QyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztBQUMxRixJQUFJLENBQUMsS0FBSyxFQUFFLGtEQUFrRCxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztBQUMvRjtBQUNBO0FBQ0EsSUFBSSxDQUFDLEtBQUssRUFBRSxxM0JBQXEzQixFQUFFLEtBQUssRUFBRSxNQUFNLENBQUM7QUFDajVCLElBQUksQ0FBQyxLQUFLLEVBQUUsbVhBQW1YLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztBQUNsWjtBQUNBO0FBQ0EsSUFBSSxDQUFDLEtBQUssRUFBRSxzUkFBc1IsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDdFU7QUFDQTtBQUNBLElBQUksQ0FBQyxLQUFLLEVBQUUsME1BQTBNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDO0FBQzFQO0FBQ0E7QUFDQSxJQUFJLENBQUMsS0FBSyxFQUFFLDBFQUEwRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztBQUMxSDtBQUNBO0FBQ0EsSUFBSSxDQUFDLEtBQUssRUFBRSx5SUFBeUksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDekw7QUFDQTtBQUNBLElBQUksQ0FBQyxLQUFLLEVBQUUsMEhBQTBILEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDO0FBQ3hLO0FBQ0E7QUFDQSxJQUFJLENBQUMsS0FBSyxFQUFFLHVHQUF1RyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztBQUN2SjtBQUNBO0FBQ0EsSUFBSSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDcEUsSUFBSSxDQUFDLEtBQUssRUFBRSwwQ0FBMEMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDMUY7QUFDQTtBQUNBLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUM7QUFDeEM7QUFDQTtBQUNBLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQztBQUN0RDtBQUNBO0FBQ0EsSUFBSSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQztBQUM5QztBQUNBO0FBQ0EsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQztBQUN2QztBQUNBO0FBQ0EsSUFBSSxDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQztBQUNqRDtBQUNBO0FBQ0EsSUFBSSxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDO0FBQ25ELEdBQUc7QUFDSCxFQUFFLE9BQU8sRUFBRTtBQUNYLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztBQUN2RCxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDO0FBQ25DLEdBQUc7QUFDSCxFQUFFLElBQUksRUFBRTtBQUNSLElBQUksYUFBYSxFQUFFLHdIQUF3SDtBQUMzSSxJQUFJLGlCQUFpQixFQUFFLElBQUk7QUFDM0IsSUFBSSxlQUFlLEVBQUUsSUFBSTtBQUN6QixJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDM0IsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0g7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUM7Ozs7QUM5RkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsR0FBRyxFQUFFO0FBQ2YsRUFDSSxHQUFHLENBQUNELFVBQStCLENBQUMsQ0FJcEI7QUFDcEIsQ0FBQyxFQUFFLFNBQVMsVUFBVSxFQUFFO0FBRXhCO0FBQ0EsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsV0FBVztBQUM3QztBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUc7QUFDakIsSUFBSSxXQUFXLFdBQVcsQ0FBQztBQUMzQixJQUFJLGVBQWUsT0FBTyxDQUFDO0FBQzNCLElBQUksaUJBQWlCLEtBQUssQ0FBQztBQUMzQixJQUFJLFFBQVEsY0FBYyxDQUFDO0FBQzNCLElBQUksZ0JBQWdCLE1BQU0sQ0FBQztBQUMzQixJQUFJLE9BQU8sZUFBZSxDQUFDO0FBQzNCLElBQUksZUFBZSxPQUFPLENBQUM7QUFDM0IsSUFBSSxpQkFBaUIsS0FBSyxDQUFDO0FBQzNCLElBQUksbUJBQW1CLEdBQUcsQ0FBQztBQUMzQixJQUFJLGdCQUFnQixNQUFNLENBQUM7QUFDM0IsSUFBSSxnQkFBZ0IsTUFBTSxFQUFFO0FBQzVCLElBQUksUUFBUSxjQUFjLEVBQUU7QUFDNUIsSUFBSSxLQUFLLGlCQUFpQixFQUFFO0FBQzVCLEdBQUcsQ0FBQztBQUNKLEVBQUUsU0FBUyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtBQUN0QyxJQUFJLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDMUMsSUFBSSxJQUFJLEdBQUcsQ0FBQztBQUNaO0FBQ0E7QUFDQSxJQUFJLFFBQVEsWUFBWSxJQUFJLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztBQUM3RixTQUFTLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDO0FBQy9GLFNBQVMsR0FBRyxZQUFZLElBQUksUUFBUSxDQUFDLFFBQVEsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7QUFDOUYsU0FBUyxHQUFHLFlBQVksSUFBSSxRQUFRLENBQUMsT0FBTyxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7QUFDN0YsU0FBUyxHQUFHLFlBQVksSUFBSSxRQUFRLENBQUMsT0FBTyxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztBQUMvRixTQUFTLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixDQUFDO0FBQ2pHO0FBQ0E7QUFDQSxTQUFTLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQyxlQUFlLFFBQVEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztBQUM5RixTQUFTLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQyxpQkFBaUIsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO0FBQzlGLFNBQVMsR0FBRyxZQUFZLElBQUksUUFBUSxDQUFDLGdCQUFnQixPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7QUFDN0YsU0FBUyxHQUFHLFlBQVksSUFBSSxRQUFRLENBQUMsZUFBZSxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7QUFDOUYsU0FBUyxHQUFHLFlBQVksSUFBSSxRQUFRLENBQUMsaUJBQWlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztBQUM5RixTQUFTLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO0FBQzlGLFNBQVMsR0FBRyxZQUFZLElBQUksUUFBUSxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7QUFDM0YsU0FBUyxHQUFHLFlBQVksSUFBSSxRQUFRLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztBQUMzRjtBQUNBO0FBQ0EsU0FBUyxHQUFHLFlBQVksSUFBSSxRQUFRLENBQUMsbUJBQW1CLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO0FBQ3RHLFNBQVMsR0FBRyxZQUFZLElBQUksUUFBUSxDQUFDLG1CQUFtQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztBQUN0RztBQUNBO0FBQ0EsU0FBUyxJQUFJLENBQUMsSUFBSSxHQUFHO0FBQ3JCO0FBQ0EsZUFBZSxZQUFZLElBQUksUUFBUSxDQUFDLFdBQVc7QUFDbkQsZUFBZSxZQUFZLElBQUksUUFBUSxDQUFDLFFBQVE7QUFDaEQsZUFBZSxZQUFZLElBQUksUUFBUSxDQUFDLE9BQU87QUFDL0MsZUFBZSxZQUFZLElBQUksUUFBUSxDQUFDLFFBQVE7QUFDaEQsY0FBYztBQUNkLGFBQWEsR0FBRyxHQUFHLFlBQVksQ0FBQztBQUNoQztBQUNBO0FBQ0EsU0FBUyxHQUFHLFlBQVksSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7QUFDdEY7QUFDQTtBQUNBLFNBQVMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTztBQUNULElBQUksVUFBVSxFQUFFLFdBQVc7QUFDM0IsT0FBTyxPQUFPO0FBQ2QsV0FBVyxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVc7QUFDMUMsV0FBVyxJQUFJLE9BQU8sRUFBRTtBQUN4QixXQUFXLE9BQU8sSUFBSSxFQUFFO0FBQ3hCLFdBQVcsTUFBTSxLQUFLLEVBQUU7QUFDeEIsV0FBVyxLQUFLLE1BQU0sRUFBRTtBQUN4QixXQUFXLEtBQUssTUFBTSxFQUFFO0FBQ3hCLFFBQVEsQ0FBQztBQUNULEtBQUs7QUFDTCxJQUFJLEtBQUssRUFBRSxTQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDbkMsTUFBTSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBTSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDcEIsU0FBUyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLFNBQVMsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFNBQVMsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySCxTQUFTLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BDLFNBQVMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxPQUFPLFVBQVUsQ0FBQztBQUMxRCxTQUFTLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2QixTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEMsU0FBUyxPQUFPLFVBQVUsQ0FBQztBQUMzQixPQUFPO0FBQ1AsTUFBTSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDcEIsUUFBUSxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xILFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDekMsUUFBUSxPQUFPLFlBQVksQ0FBQztBQUM1QixPQUFPO0FBQ1AsTUFBTSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDcEIsVUFBVSxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLFVBQVUsT0FBTyxVQUFVLENBQUM7QUFDNUIsT0FBTztBQUNQLE1BQU0sR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ3BCLFVBQVUsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsQyxVQUFVLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUMvQixVQUFVLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFHLFVBQVUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDekMsVUFBVSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsVUFBVSxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLFVBQVUsT0FBTyxTQUFTLENBQUM7QUFDM0IsT0FBTztBQUNQLE1BQU0sR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ3BCLFVBQVUsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsQyxVQUFVLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDOUQsVUFBVSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsR0FBRztBQUM3RCxjQUFjLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkMsV0FBVztBQUNYLFVBQVUsT0FBTyxRQUFRLENBQUM7QUFDMUIsT0FBTztBQUNQLE1BQU0sSUFBSSxFQUFFLElBQUksR0FBRyxHQUFHO0FBQ3RCLFVBQVUsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuQyxVQUFVLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUM5QixVQUFVLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pHLFVBQVUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkMsVUFBVSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsVUFBVSxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLFVBQVUsT0FBTyxVQUFVLENBQUM7QUFDNUIsT0FBTztBQUNQLE1BQU0sSUFBSSxFQUFFLElBQUksR0FBRyxHQUFHO0FBQ3RCLFVBQVUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLFVBQVUsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuQyxVQUFVLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUM5QixVQUFVLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFHLFVBQVUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkMsVUFBVSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsVUFBVSxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLFVBQVUsT0FBTyxVQUFVLENBQUM7QUFDNUIsT0FBTztBQUNQLE1BQU0sSUFBSSxFQUFFLElBQUksR0FBRyxHQUFHO0FBQ3RCLFVBQVUsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsQyxPQUFPO0FBQ1AsTUFBTSxJQUFJLEVBQUUsSUFBSSxHQUFHLEdBQUc7QUFDdEIsVUFBVSxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBO0FBQ0E7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLHVCQUF1QixFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBLFVBQVUsQ0FBQyxVQUFVLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDekQ7QUFDQTtBQUNBLFVBQVUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDcEQ7QUFDQSxDQUFDLENBQUM7Ozs7QUNsTUY7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxTQUFTLEdBQUcsRUFBRTtBQUNmLEVBQ0ksR0FBRyxDQUFDQSxVQUErQixDQUFDLENBSXBCO0FBQ3BCLENBQUMsRUFBRSxTQUFTLFVBQVUsRUFBRTtBQUV4QjtBQUNBLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFdBQVc7QUFDM0MsRUFBRSxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUU7QUFDN0IsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzNELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQztBQUNuRSxFQUFFLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUM5RCxFQUFFLElBQUksZUFBZSxHQUFHLElBQUksTUFBTSxDQUFDLDJEQUEyRCxDQUFDLENBQUM7QUFDaEcsRUFBRSxJQUFJLGdCQUFnQixHQUFHLElBQUksTUFBTSxDQUFDLHNEQUFzRCxDQUFDLENBQUM7QUFDNUYsRUFBRSxJQUFJLGdCQUFnQixHQUFHLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdEQsRUFBRSxJQUFJLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5QyxFQUFFLElBQUksV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLCtDQUErQyxDQUFDLENBQUM7QUFDaEY7QUFDQSxFQUFFLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQztBQUM1QixJQUFJLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLO0FBQ3JFLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDckYsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU07QUFDcEYsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSztBQUN6RixJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNO0FBQzdGLElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTO0FBQ3hGLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVU7QUFDakYsR0FBRyxDQUFDLENBQUM7QUFDTDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQzVCLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGFBQWE7QUFDL0UsSUFBSSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRO0FBQy9GLElBQUksU0FBUyxFQUFFLFFBQVEsRUFB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QWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLEtBQUssK0JBQStCLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLEtBQUssK0JBQStCLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUM7QUFDckQsZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUM7QUFDckQsZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLEtBQUssK0JBQStCLENBQUM7QUFDckQsZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUM7QUFDckQsZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUM7QUFDckQsZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQsZ0JBQWdCLElBQUksZ0NBQWdDLENBQUM7QUFDckQ7QUFD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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxnQkFBZ0IsTUFBTSwyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGdCQUFnQixPQUFPLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGdCQUFnQixPQUFPLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQ7QUFDQSxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQztBQUNsRCxnQkFBZ0IsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQztBQUNsRCxnQkFBZ0IsT0FBTywwQkFBMEIsQ0FBQztBQUNsRCxnQkFBZ0IsSUFBSSw2QkFBNkIsQ0FBQztBQUNsRCxnQkFBZ0IsT0FBTywwQkFBMEIsQ0FBQztBQUNsRCxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQztBQUNsRCxnQkFBZ0IsU0FBUyx3QkFBd0IsQ0FBQztBQUNsRCxnQkFBZ0IsT0FBTywwQkFBMEIsQ0FBQztBQUNsRCxnQkFBZ0IsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQztBQUNsRCxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQztBQUNsRCxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQztBQUNsRCxnQkFBZ0IsSUFBSSw2QkFBNkIsQ0FBQztBQUNsRCxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQztBQUNsRCxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUNsRCxnQkFBZ0IsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQztBQUNsRCxnQkFBZ0IsUUFBUSx5QkFBeUIsQ0FBQztB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QWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLEdBQUcsOEJBQThCLENBQUM7QUFDbEQsZ0JBQWdCLFFBQVEseUJBQXlCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLEVBQUUsK0JBQStCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNkJBQTZCLENBQUM7QUFDbkQsZ0JBQWdCLFNBQVMsd0JBQXdCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLENBQUMsZ0NBQWdDLElBQUk7QUFDckQsZ0JBQWdCLEdBQUcsOEJBQThCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLEVBQUUsZ0NBQWdDLENBQUM7QUFDbkQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLEVBQUUsK0JBQStCLENBQUM7QUFDbEQsZ0JBQWdCLEdBQUcsOEJBQThCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLEdBQUcsOEJBQThCLENBQUM7QUFDbEQsZ0JBQWdCLEdBQUcsK0JBQStCLENBQUM7QUFDbkQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLFNBQVMsd0JBQXdCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLEdBQUcsOEJBQThCLENBQUM7QUFDbEQsZ0JBQWdCLEdBQUcsOEJBQThCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLFNBQVMsd0JBQXdCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLENBQUMsZ0NBQWdDLElBQUk7QUFDckQsZ0JBQWdCLEVBQUUsK0JBQStCLElBQUk7QUFDckQsZ0JBQWdCLEVBQUUsK0JBQStCLElBQUk7QUFDckQsZ0JBQWdCLFNBQVMsd0JBQXdCLElBQUk7QUFDckQsZ0JBQWdCLEVBQUUsK0JBQStCLElBQUk7QUFDckQsZ0JBQWdCLEVBQUUsK0JBQStCLElBQUk7QUFDckQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLFFBQVEseUJBQXlCLENBQUM7QUFDbEQsZ0JBQWdCLFFBQVEseUJBQXlCLENBQUM7QUFDbEQsZ0JBQWdCLFFBQVEseUJBQXlCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLEdBQUcsOEJBQThCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLFFBQVEseUJBQXlCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLFNBQVMsd0JBQXdCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLENBQUMsZ0NBQWdDLElBQUk7QUFDckQsZ0JBQWdCLEdBQUcsOEJBQThCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLFFBQVEseUJBQXlCLENBQUM7QUFDbEQsZ0JBQWdCLFVBQVUsdUJBQXVCLENBQUM7QUFDbEQsZ0JBQWdCLFNBQVMsd0JBQXdCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLFdBQVcsc0JBQXNCLENBQUM7QUFDbEQsZ0JBQWdCLFdBQVcsc0JBQXNCLENBQUM7QUFDbEQsZ0JBQWdCLFFBQVEseUJBQXlCLENBQUM7QUFDbEQsZ0JBQWdCLFVBQVUsdUJBQXVCLENBQUM7QUFDbEQsZ0JBQWdCLFVBQVUsdUJBQXVCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLFFBQVEseUJBQXlCLENBQUM7QUFDbEQsZ0JBQWdCLFFBQVEseUJBQXlCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLFVBQVUsdUJBQXVCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUM7QUFDbEQsZ0JBQWdCLFFBQVEseUJBQXlCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsZ0JBQWdCLFFBQVEseUJBQXlCLENBQUM7QUFDbEQsZ0JBQWdCLElBQUksNkJBQTZCLENBQUM7QUFDbEQsZ0JBQWdCLE9BQU8sMEJBQTBCLENBQUM7QUFDbEQsZ0JBQWdCLEdBQUcsOEJBQThCLENBQUM7QUFDbEQsZ0JB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QUFDLENBQUMsQ0FBQztBQUNoRyx3Q0FBd0MsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ2xELGdEQUFnRCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLGdEQUFnRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNoRyx3Q0FBd0MsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLGdEQUFnRCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLGdEQUFnRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRyxxQ0FBcUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQy9DLHdDQUF3QyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRCx3Q0FBd0MsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ2xELGdEQUFnRCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLGdEQUFnRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNqRyx3Q0FBd0MsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ2xELGdEQUFnRCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLGdEQUFnRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNqRyx3Q0FBd0MsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ2xELGdEQUFnRCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLGdEQUFnRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNqRyx3Q0FBd0MsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ2xELGdEQUFnRCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLGdEQUFnRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNqRyx3Q0FBd0MsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLGdEQUFnRCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLGdEQUFnRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RyxxQ0FBcUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQy9DLHdDQUF3QyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRCx3Q0FBd0MsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ2xELGdEQUFnRCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLGdEQUFnRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDM0csd0NBQXdDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQztBQUNsRCxnREFBZ0QsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyRSxnREFBZ0QsT0FB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QUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNQLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLE9BQU07QUFDTixJQUFJLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUMxQixFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN2RCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDN0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ1QsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUNBLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUNEO0FBQ0EsQ0FBQyxDQUFDOzs7O0FDcDBCRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsR0FBRyxFQUFFO0FBQ2YsRUFDSSxHQUFHLENBQUNBLFVBQStCLEVBQUVDLFNBQWlDLEVBQUVDLEtBQXlCLENBQUMsQ0FJbEY7QUFDcEIsQ0FBQyxFQUFFLFNBQVMsVUFBVSxFQUFFO0FBRXhCO0FBQ0EsRUFBRSxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUU7QUFDekIsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLElBQUksT0FBTyxHQUFHLENBQUM7QUFDZixHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7QUFDN0MsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELElBQUksT0FBTyxVQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDcEMsTUFBTSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDbEYsUUFBUSxLQUFLLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNELFFBQVEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsT0FBTztBQUNQLE1BQU0sS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9DLE1BQU0sT0FBTyxRQUFRLENBQUM7QUFDdEIsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNILEVBQUUsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN2QyxJQUFJLE9BQU8sU0FBUyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNGLEdBQUc7QUFDSCxFQUFFLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN2RDtBQUNBLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ3JGLE1BQU0sS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDNUIsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsRUFBRTtBQUN4RTtBQUNBLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUNwQztBQUNBLFFBQVEsS0FBSyxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUM7QUFDdkMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUM7QUFDbEMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLFlBQVksQ0FBQztBQUNyRCxXQUFXLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25DLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2QixTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLE9BQU87QUFDUCxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDekM7QUFDQSxRQUFRLEtBQUssQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO0FBQ3ZDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QixVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDakMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM3QixPQUFPO0FBQ1AsTUFBTSxPQUFPLFlBQVksQ0FBQztBQUMxQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUNBLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7QUFDeEIsWUFBWSxPQUFPLElBQUksT0FBTyxLQUFLLEtBQUs7QUFDeEMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztBQUN2QyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDekUsTUFBTSxJQUFJLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDN0MsUUFBUSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFRLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELFFBQVEsTUFBTTtBQUNkLE9BQU87QUFDUCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ2xELEtBQUs7QUFDTCxJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxXQUFXLEdBQUcsb0ZBQW9GO0FBQ3hHLElBQUkscUZBQXFGO0FBQ3pGLElBQUksZ0ZBQWdGO0FBQ3BGLElBQUksa0ZBQWtGO0FBQ3RGLElBQUksdUZBQXVGO0FBQzNGLElBQUksd0VBQXdFLENBQUM7QUFDN0UsRUFBRSxJQUFJLFFBQVEsR0FBRyxxSEFBcUgsQ0FBQztBQUN2SSxFQUFFLElBQUksVUFBVSxHQUFHLGdqU0FBZ2pTLENBQUM7QUFDcGtTLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUcsRUFBRSxVQUFVLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekQ7QUFDQSxFQUFFLElBQUksU0FBUyxHQUFHO0FBQ2xCLElBQUksSUFBSSxFQUFFLE9BQU87QUFDakIsSUFBSSxVQUFVLEVBQUUsS0FBSztBQUNyQixJQUFJLFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDO0FBQ25DLElBQUksYUFBYSxFQUFFLFFBQVEsQ0FBQyw4REFBOEQsQ0FBQztBQUMzRixJQUFJLFdBQVcsRUFBRSxRQUFRLENBQUMsMENBQTBDLENBQUM7QUFDckUsSUFBSSxLQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQztBQUM3QixJQUFJLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDO0FBQ2pDLElBQUksZ0JBQWdCLEVBQUUsSUFBSTtBQUMxQixJQUFJLEtBQUssRUFBRTtBQUNYLE1BQU0sR0FBRyxFQUFFLFNBQVMsTUFBTSxFQUFFO0FBQzVCLFFBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuQyxRQUFRLE9BQU8sWUFBWSxDQUFDO0FBQzVCLE9BQU87QUFDUCxNQUFNLEdBQUcsRUFBRSxTQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDbkMsUUFBUSxJQUFJLE1BQU0sQ0FBQztBQUNuQixRQUFRLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDNUMsVUFBVSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLFVBQVUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwQyxVQUFVLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsVUFBVSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLFVBQVUsSUFBSSxLQUFLLEVBQUU7QUFDckIsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLFlBQVksS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3RCxZQUFZLE9BQU8sUUFBUSxDQUFDO0FBQzVCLFdBQVc7QUFDWCxTQUFTO0FBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixPQUFPO0FBQ1AsTUFBTSxHQUFHLEVBQUUsU0FBUyxNQUFNLEVBQUU7QUFDNUIsUUFBUSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFFLFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsT0FBTztBQUNQLE1BQU0sR0FBRyxFQUFFLFNBQVMsTUFBTSxFQUFFO0FBQzVCLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzdCLFVBQVUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1RSxVQUFVLE9BQU8sU0FBUyxDQUFDO0FBQzNCLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUCxNQUFNLEdBQUcsRUFBRSxTQUFTLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDcEMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9ELFFBQVEsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMsUUFBUSxPQUFPLFFBQVEsQ0FBQztBQUN4QixPQUFPO0FBQ1AsTUFBTSxHQUFHLEVBQUUsU0FBUyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ3BDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUNuRCxVQUFVLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUCxNQUFNLEdBQUcsRUFBRSxTQUFTLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDcEMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztBQUN2RCxZQUFZLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQzFELFVBQVUsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsTUFBTSxFQUFFLFlBQVksRUFBRTtBQUM5RCxJQUFJLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUM7QUFDdEcsSUFBSSxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN4RDtBQUNBLElBQUksU0FBUyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUNyQyxNQUFNLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDO0FBQzNDLE1BQU0sSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUM5RyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDbEIsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDckMsVUFBVSxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNsQyxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBQztBQUN6RyxVQUFVLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUNyQyxVQUFVLE9BQU8sTUFBTSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxHQUFHLEVBQUU7QUFDMUQsVUFBVSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDcEUsVUFBVSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUM7QUFDL0IsU0FBUyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQ3BFLFVBQVUsTUFBTSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUN6QyxVQUFVLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzFDLFNBQVMsTUFBTTtBQUNmLFVBQVUsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNoRCxRQUFRLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkUsUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRTtBQUMzQixVQUFVLElBQUksS0FBSyxJQUFJLFFBQVEsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RyxlQUFlLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0QsVUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDOUMsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsT0FBTyxNQUFNLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzVFLFFBQVEsS0FBSyxDQUFDLE9BQU8sR0FBRyxR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TyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFB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QUFDO0FBQ3pDLElBQUksT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3BKLEdBQUc7QUFDSCxFQUFFLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDO0FBQzVDLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3ZCLElBQUksR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDMUMsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztBQUMvQixJQUFJLE9BQU0sU0FBUyxDQUFDO0FBQ3BCLEdBQUc7QUFDSCxFQUFFLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUUsRUFBRSxTQUFTLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ3BDLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ3JDLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFO0FBQy9CLE1BQU0sR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0MsTUFBTSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNuQyxLQUFLO0FBQ0wsSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztBQUNwQyxJQUFJLE9BQU0sUUFBUSxDQUFDO0FBQ25CLEdBQUc7QUFDSCxFQUFFLFNBQVMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakgsRUFBRSxTQUFTLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRyxFQUFFLE9BQU07QUFDUixJQUFJLFVBQVUsQ0FBQyxVQUFVO0FBQ3pCLE1BQU0sT0FBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTO0FBQy9CLGFBQWEsT0FBTyxDQUFDLElBQUk7QUFDekIsYUFBYSxNQUFNLENBQUMsQ0FBQztBQUNyQixhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixLQUFLO0FBQ0wsSUFBSSxLQUFLLENBQUMsU0FBUyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2hDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdEIsUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSTtBQUNuRCxVQUFVLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNwQyxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzFDLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0MsTUFBTSxHQUFHLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO0FBQ25HLFFBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ2pDLE9BQU87QUFDUCxNQUFNLEdBQUcsT0FBTyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM3RCxXQUFXLEdBQUcsT0FBTyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNsRSxXQUFXLEdBQUcsT0FBTyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNsRSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2QyxRQUFRLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdFLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEUsT0FBTztBQUNQLFdBQVcsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FB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LE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdGLFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsT0FBTztBQUNQLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzlCLFFBQVEsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVGLFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsT0FBTztBQUNQLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzdCLFFBQVEsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNGLFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBTSxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDckIsUUFBUSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDM0IsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QixPQUFPLE1BQU0sSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDekMsUUFBUSxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxJQUFJLEVBQUU7QUFDbEIsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDLFVBQVUsUUFB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T0FBTyxFQUFFLEtBQUssQ0FBQztBQUNwRSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQztBQUNuRSxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUNqQyxRQUFRLE9BQU8sUUFBUSxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNuQyxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUNuQyxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM5QixRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCO0FBQ0EsTUFBTSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDcEMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU07QUFDbEQsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU07QUFDcEQsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU07QUFDbkQsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU07QUFDbEQsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU07QUFDcEQsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1B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LE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDL0MsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUU7QUFDMUM7QUFDQSxJQUFJLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDNUMsTUFBTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkMsTUFBTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkMsTUFBTSxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsTUFBTSxJQUFJLFlBQVksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksUUFBUSxLQUFLLEtBQUssTUFBTSxRQUFRLEtBQUssS0FBSyxJQUFJLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RIO0FBQ0EsTUFBTSxJQUFJLFlBQVksRUFBRTtBQUN4QixRQUFRLElBQUksUUFBUSxLQUFLLEtBQUssSUFBSSxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRTtBQUM1RCxRQUFRLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQy9CLFVBQVUsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNULFFBQVEsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDcEMsUUFBUSxPQUFPLFFBQVEsQ0FBQztBQUN4QixPQUFPLE1BQU0sSUFBSSxRQUFRLEtBQUssR0FBRyxJQUFJLFFBQVEsS0FBSyxHQUFHLEVBQUU7QUFDdkQsUUFBUSxLQUFLLENBQUMsU0FBUyxHQUFHLDJCQUEyQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3ZFLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3RCLFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxPQUFPLFFBQVEsQ0FBQztBQUN4QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLGVBQWUsQ0FBQztBQUMzQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsMkJBQTJCLENBQUMsZ0JBQWdCLEVBQUU7QUFDekQsSUFBSSxPQUFPLFNBQVMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUNuQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUNqQyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QixRQUFRLEtBQUssQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7QUFDM0MsUUFBUSxPQUFPLFVBQVUsQ0FBQztBQUMxQixPQUFPLE1BQU07QUFDYixRQUFRLE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4QyxPQUFPO0FBQ1AsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDekIsSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQyxFQUFFO0FBQ2hDLE1BQU0sS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzFCLE1BQU0sSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbkQsTUFBTSxJQUFJLGFBQWEsR0FBRyxlQUFlLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUM5RCxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7QUFDckQsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTztBQUN6QztBQUNBLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDcEMsSUFBSSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0I7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzVCLE1BQU0sS0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVELE1BQU0sT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1QyxLQUFLO0FBQ0wsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDNUIsTUFBTSxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsTUFBTSxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDNUIsTUFBTSxLQUFLLENBQUMsU0FBUyxHQUFHLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELE1BQU0sT0FBTyxVQUFVLENBQUM7QUFDeEIsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ2xDLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRCxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDekI7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDdEIsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDcEMsVUFBVSxPQUFPLE1BQU0sQ0FBQztBQUN4QixTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDdEIsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEIsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDckMsVUFBVSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsVUFBVSxPQUFPLFdBQVcsQ0FBQztBQUM3QixTQUFTLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQzFDLFVBQVUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsT0FBTyxLQUFLLENBQUM7QUFDdkIsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ3RCLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDckMsVUFBVSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsVUFBVSxPQUFPLFNBQVMsQ0FBQztBQUMzQixTQUFTO0FBQ1QsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDbkMsVUFBVSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsVUFBVSxPQUFPLEtBQUssQ0FBQztBQUN2QixTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxNQUFNLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN0QixRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QixRQUFRLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakMsUUFBUSxPQUFPLFlBQVksQ0FBQztBQUM1QixPQUFPO0FBQ1A7QUFDQTtBQUNBLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztBQUNyQyxRQUFRLE9BQU8sUUFBUSxDQUFDO0FBQ3hCO0FBQ0E7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7QUFDdkMsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QjtBQUNBLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztBQUN0QyxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN6RCxRQUFRLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ3BDLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDdEI7QUFDQSxRQUFRLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUN0QyxVQUFVLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixVQUFVLE9BQU8sTUFBTSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN0QjtBQUNBLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3RDLFVBQVUsT0FBTyxZQUFZLENBQUM7QUFDOUIsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQ3BCLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ25DLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ3JDLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMseURBQXlELENBQUMsRUFBRTtBQUNuRixRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBO0FBQ0EsTUFBTSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDdEIsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEIsUUFBUSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2pDLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQsVUFBVSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2hELFVBQVUsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2pELFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDckQsWUFBWSxPQUFPLFVBQVUsQ0FBQztBQUM5QixXQUFXLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDNUQsWUFBWSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNsQyxZQUFZLE9BQU8sVUFBVSxDQUFDO0FBQzlCLFdBQVcsTUFBTSxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDMUQsWUFBWSxPQUFPLFVBQVUsQ0FBQztBQUM5QixXQUFXO0FBQ1gsVUFBVSxPQUFPLEtBQUssQ0FBQztBQUN2QixTQUFTO0FBQ1QsYUFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLFVBQVUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDL0IsVUFBVSxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMxRCxVQUFVLE9BQU8sVUFBVSxDQUFDO0FBQzVCLFNBQVM7QUFDVCxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUMsVUFBVSxPQUFPLEtBQUssQ0FBQztBQUN2QixTQUFTO0FBQ1QsYUFBWTtBQUNaLFVBQVUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsT0FBTyxLQUFLLENBQUM7QUFDdkIsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDL0MsVUFBVSxPQUFPLFlBQVksQ0FBQztBQUM5QixTQUFTO0FBQ1QsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdEIsUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTCxTQUFRO0FBQ1I7QUFDQSxNQUFNLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN0QixRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QjtBQUNBLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7QUFDMUQsVUFBVSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNqQyxZQUFZLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLFdBQVc7QUFDWCxVQUFVLE9BQU8sUUFBUSxDQUFDO0FBQzFCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDL0IsVUFBVSxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1QsUUFBUSxPQUFPLFFBQVEsQ0FBQztBQUN4QixPQUFPO0FBQ1A7QUFDQTtBQUNBLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDL0IsVUFBVSxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN2QyxRQUFRLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQy9CLFVBQVUsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN6RCxRQUFRLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDL0IsVUFBVSxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixPQUFPO0FBQ1A7QUFDQTtBQUNBLE1BQU0sSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ3RCLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3RCLFFBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQyxRQUFRLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQy9CLFVBQVUsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNULFFBQVEsT0FBTyxZQUFZLENBQUM7QUFDNUIsT0FBTztBQUNQO0FBQ0E7QUFDQSxNQUFNLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN0QixRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QixRQUFRLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLFFBQVEsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsRUFBRSxVQUFVLENBQUM7QUFDOUQsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMvQixVQUFVLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVCxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLE9BQU87QUFDUDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDcEMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMvQixVQUFVLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVCxRQUFRLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDOUMsUUFBUSxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDaEQsVUFBVSxPQUFPLE1BQU0sQ0FBQztBQUN4QixTQUFTLE1BQU0sSUFBSSxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3ZELFVBQVUsT0FBTyxTQUFTLENBQUM7QUFDM0IsU0FBUyxNQUFNLElBQUksZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzFELFVBQVUsS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDMUQsVUFBVSxPQUFPLFVBQVUsQ0FBQztBQUM1QixTQUFTLE1BQU07QUFDZixVQUFVLE9BQU8sS0FBSyxDQUFDO0FBQ3ZCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLE1BQU0sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDN0IsUUFBUSxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUM3QixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUM5QixNQUFNLE9BQU8sVUFBVSxDQUFDO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3JDLElBQUksSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDNUMsSUFBSSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQyxJQUFJLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuQztBQUNBLElBQUksSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSyxHQUFHLENBQUM7QUFDakQsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7QUFDeEIsTUFBTSxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDckQ7QUFDQSxNQUFNLElBQUksaUJBQWlCLEdBQUcsWUFBWSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JGO0FBQ0EsTUFBTSxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDekI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwRCxRQUFRLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxpQkFBaUI7QUFDN0MsVUFBVSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTztBQUNULElBQUksVUFBVSxFQUFFLFdBQVc7QUFDM0IsTUFBTSxPQUFPO0FBQ2IsUUFBUSxTQUFTLEVBQUUsU0FBUztBQUM1QixRQUFRLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0MsUUFBUSxXQUFXLEVBQUUsQ0FBQztBQUN0QixRQUFRLFVBQVUsRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsUUFBUSxXQUFXLEVBQUUsRUFBRTtBQUN2QixRQUFRLGFBQWEsRUFBRSxFQUFFO0FBQ3pCLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTCxJQUFJLEtBQUssRUFBRSxTQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDbkMsTUFBTSxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsTUFBTSxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDcEU7QUFDQSxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLFNBQVMsS0FBSyxFQUFFO0FBQzVCLE1BQU0sT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNwQyxLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0osQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ1Y7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3QztBQUNBLENBQUMsQ0FBQzs7OztBQ3JjRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsU0FBUyxHQUFHLEVBQUU7QUFDZixFQUNJLEdBQUcsQ0FBQ0QsVUFBK0IsQ0FBQyxDQUlwQjtBQUNwQixDQUFDLEVBQUUsU0FBUyxVQUFVLEVBQUU7QUFFeEI7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxZQUFZO0FBQzVDLElBQUksSUFBSSxPQUFPLEdBQUcsU0FBUyxFQUFFLE9BQU8sR0FBRyxTQUFTLEVBQUUsTUFBTSxHQUFHLFFBQVE7QUFDbkUsUUFBUSxJQUFJLEdBQUcsTUFBTSxFQUFFLE1BQU0sR0FBRyxRQUFRLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUM5RCxJQUFJLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsSUFBSSxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDL0IsUUFBUSxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0MsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BFLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsb21FQUFvbUUsQ0FBQyxDQUFDO0FBQ3RvRSxJQUFJLElBQUksVUFBVSxHQUFHLFlBQVksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0FBQ25FO0FBQ0EsSUFBSSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUM1QyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QixLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0FBQzVDLFFBQVEsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM1RSxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUM3QixRQUFRLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7QUFDbkQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxpTUFBaU0sQ0FBQyxDQUFDO0FBQ3RPLElBQUksSUFBSSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsNk1BQTZNLENBQUMsQ0FBQztBQUNqUCxJQUFJLElBQUksVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLHFPQUFxTyxDQUFDLENBQUM7QUFDdlEsSUFBSSxJQUFJLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQyw4Z0JBQThnQixDQUFDLENBQUM7QUFDcGpCO0FBQ0EsSUFBSSxTQUFTLGNBQWMsRUFBRSxNQUFNLEVBQUU7QUFDckMsUUFBUSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLGFBQWEsRUFBRSxNQUFNLEVBQUU7QUFDcEMsUUFBUSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDMUMsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlDLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO0FBQzdCLFlBQVksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDNUMsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLFdBQVcsRUFBRSxNQUFNLEVBQUU7QUFDbEMsUUFBUSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDeEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPO0FBQ1gsUUFBUSxVQUFVLEVBQUUsWUFBWTtBQUNoQyxZQUFZLE9BQU87QUFDbkIsZ0JBQWdCLFdBQVcsRUFBRSxJQUFJO0FBQ2pDLGdCQUFnQixXQUFXLEVBQUUsQ0FBQztBQUM5QixnQkFBZ0IsSUFBSSxFQUFFLEtBQUs7QUFDM0IsZ0JBQWdCLFlBQVksRUFBRSxLQUFLO0FBQ25DLGdCQUFnQixVQUFVLEVBQUUsS0FBSztBQUNqQyxhQUFhLENBQUM7QUFDZCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEtBQUssRUFBRSxVQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDeEMsWUFBWSxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUMzRDtBQUNBLGdCQUFnQixLQUFLLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN6RCxhQUFhO0FBQ2I7QUFDQTtBQUNBLFlBQVksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUU7QUFDbkMsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLGFBQWE7QUFDYixZQUFZLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztBQUNsQztBQUNBLFlBQVksT0FBTyxLQUFLLENBQUMsSUFBSTtBQUM3QixnQkFBZ0IsS0FBSyxRQUFRO0FBQzdCLG9CQUFvQixJQUFJLElBQUksRUFBRSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzlDLG9CQUFvQixPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDM0Qsd0JBQXdCLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN0RDtBQUNBLDRCQUE0QixLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUMvQyw0QkFBNEIsTUFBTTtBQUNsQyx5QkFBeUI7QUFDekIsd0JBQXdCLE9BQU8sR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDO0FBQzNELHFCQUFxQjtBQUNyQixvQkFBb0IsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxTQUFTO0FBQzlCLG9CQUFvQixJQUFJLElBQUksRUFBRSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQy9DLG9CQUFvQixPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7QUFDM0Qsd0JBQXdCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxRQUFRLEVBQUU7QUFDckQ7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDL0MsNEJBQTRCLE1BQU07QUFDbEMseUJBQXlCO0FBQ3pCLHdCQUF3QixRQUFRLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELHFCQUFxQjtBQUNyQixvQkFBb0IsVUFBVSxHQUFHLE9BQU8sQ0FBQztBQUN6QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxnQkFBZ0I7QUFDckMsb0JBQW9CLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNwRTtBQUNBLHdCQUF3QixLQUFLLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUMvQyxxQkFBcUIsS0FBSTtBQUN6QjtBQUNBLHdCQUF3QixNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3pELHdCQUF3QixVQUFVLEdBQUcsT0FBTyxDQUFDO0FBQzdDLHdCQUF3QixNQUFNO0FBQzlCLHFCQUFxQjtBQUNyQixnQkFBZ0I7QUFDaEIsb0JBQW9CLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzQztBQUNBLG9CQUFvQixJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDcEMsd0JBQXdCLEtBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQzlDLHdCQUF3QixVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQzVDO0FBQ0EscUJBQXFCLE1BQU0sSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO0FBQzFDLHdCQUF3QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUN6RSw0QkFBNEIsSUFBSSxPQUFPLEtBQUssQ0FBQyxVQUFVLElBQUksUUFBUSxFQUFFO0FBQ3JFLGdDQUFnQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUNyRCw2QkFBNkI7QUFDN0IsNEJBQTRCLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDOUMseUJBQXlCLE1BQU07QUFDL0IsNEJBQTRCLE1BQU0sQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUMxRSw0QkFBNEIsVUFBVSxHQUFHLElBQUksQ0FBQztBQUM5Qyx5QkFBeUI7QUFDekIscUJBQXFCLE1BQU0sSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO0FBQzFDLHdCQUF3QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDN0MsNEJBQTRCLEtBQUssQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQ25ELDRCQUE0QixVQUFVLEdBQUcsT0FBTyxDQUFDO0FBQ2pELHlCQUF5QixNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUN4RCw0QkFBNEIsVUFBVSxHQUFHLElBQUksQ0FBQztBQUM5Qyx5QkFBeUIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDcEQsNEJBQTRCLEtBQUssQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7QUFDMUQsNEJBQTRCLFVBQVUsR0FBRyxPQUFPLENBQUM7QUFDakQseUJBQXlCLE1BQU07QUFDL0IsNEJBQTRCLElBQUksT0FBTyxHQUFHLElBQUksRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDdEYsNEJBQTRCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNyRCxnQ0FBZ0MsWUFBWSxHQUFHLElBQUksQ0FBQztBQUNwRCw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCw2QkFBNkI7QUFDN0IsNEJBQTRCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUN0RCxnQ0FBZ0MsT0FBTyxHQUFHLGNBQWMsQ0FBQztBQUN6RCw2QkFBNkIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDN0QsZ0NBQWdDLE9BQU8sR0FBRyxhQUFhLENBQUM7QUFDeEQsNkJBQTZCLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzdELGdDQUFnQyxPQUFPLEdBQUcsV0FBVyxDQUFDO0FBQ3RELDZCQUE2QixNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUM3RCxnQ0FBZ0MsT0FBTyxHQUFHLGVBQWUsQ0FBQztBQUMxRCw2QkFBNkIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ3pFLGdDQUFnQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ2pELGdDQUFnQyxPQUFPLEdBQUcsZUFBZSxDQUFDO0FBQzFEO0FBQ0EsNkJBQTZCLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRTtBQUN0RCxnQ0FBZ0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRCw2QkFBNkI7QUFDN0IsNEJBQTRCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUNqRCxnQ0FBZ0MsSUFBSSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDL0Q7QUFDQSxvQ0FBb0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1RCxpQ0FBaUM7QUFDakMsZ0NBQWdDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNuRCxvQ0FBb0MsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN4RCw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHFCQUFxQixNQUFNLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3RGLHdCQUF3QixVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQzVDLHFCQUFxQixNQUFNLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRTtBQUMxQyx3QkFBd0IsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzNDLHdCQUF3QixVQUFVLEdBQUcsT0FBTyxDQUFDO0FBQzdDLHFCQUFxQixNQUFNLElBQUksRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ3ZELHNCQUFzQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUNqRiw0QkFBNEIsT0FBTyxJQUFJLE1BQU0sQ0FBQztBQUM5Qyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDNUY7QUFDQSw0QkFBNEIsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEYseUJBQXlCLE1BQU07QUFDL0I7QUFDQSw0QkFBNEIsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzlDLDRCQUE0QixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ3RFO0FBQ0E7QUFDQSxnQ0FBZ0MsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzNGLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsd0JBQXdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRTtBQUNBLHdCQUF3QixHQUFHLE9BQU8sS0FBSyxDQUFDLFlBQVksSUFBSSxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3ZGLHdCQUF3QixHQUFHLE9BQU8sS0FBSyxDQUFDLFVBQVUsSUFBSSxRQUFRLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25GO0FBQ0Esd0JBQXdCLFVBQVUsR0FBRyxPQUFPLENBQUM7QUFDN0MscUJBQXFCLE1BQU0sSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDdkQsd0JBQXdCLFVBQVUsR0FBRyxPQUFPLENBQUM7QUFDN0Msd0JBQXdCLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFDNUcsNEJBQTRCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QztBQUNBLDRCQUE0QixHQUFHLE9BQU8sS0FBSyxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUM7QUFDckUsZ0NBQWdDLEdBQUcsRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztBQUM3RCxvQ0FBb0MsVUFBVSxHQUFHLE9BQU8sQ0FBQztBQUN6RCxvQ0FBb0MsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDL0QsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3Qiw0QkFBNEIsR0FBRyxPQUFPLEtBQUssQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDO0FBQ25FLGdDQUFnQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUM7QUFDM0Qsb0NBQW9DLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdEQsb0NBQW9DLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQzdELGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHFCQUFxQixNQUFNO0FBQzNCLHdCQUF3QixNQUFNLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDdEU7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO0FBQ3pGLDRCQUE0QixVQUFVLEdBQUcsT0FBTyxDQUFDO0FBQ2pELHlCQUF5QixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDdkQscUJBQXFCO0FBQ3JCLGFBQWE7QUFDYixZQUFZLE9BQU8sQ0FBQyxPQUFPLEtBQUssQ0FBQyxZQUFZLElBQUksUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLFVBQVUsSUFBSSxRQUFRLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDO0FBQ25JLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ2pDLFlBQVksSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRSxPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDcEUsWUFBWSxPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0FBQzVDLFNBQVM7QUFDVDtBQUNBLFFBQVEsYUFBYSxFQUFFLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQztBQUM1QyxRQUFRLFdBQVcsRUFBRSxJQUFJO0FBQ3pCLEtBQUssQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDO0FBQ0g7QUFDQSxVQUFVLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNqRDtBQUNBLENBQUMsQ0FBQzs7OztBQ3hRRjtBQUNBO0FBQ0E7QUFDQSxDQUFDLFNBQVMsR0FBRyxFQUFFO0FBQ2YsRUFDSSxHQUFHLENBQUNBLFVBQStCLENBQUMsQ0FJcEI7QUFDcEIsQ0FBQyxFQUFFLFNBQVMsVUFBVSxFQUFFO0FBRXhCO0FBQ0EsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsV0FBVztBQUMxQztBQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLEVBQUUsU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtBQUMvQixJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM3QixLQUFLO0FBQ0wsR0FDQTtBQUNBLEVBQUUsSUFBSSxXQUFXLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEMsRUFBRSxJQUFJLGNBQWMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJO0FBQ3ZHLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3hFLEVBQUUsSUFBSSxjQUFjLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTztBQUMzRyxJQUFJLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTO0FBQzdHLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUk7QUFDMUcsSUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU07QUFDeEcsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTztBQUMzRyxJQUFJLEtBQUssRUFBRSxLQUFLLENBQUMs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QyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFD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V0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFB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LFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0s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