From 1f7b6db214953c41d46c443aed2768ea3b753b4e Mon Sep 17 00:00:00 2001 From: Antoine Griffard Date: Wed, 7 Sep 2022 14:12:09 +0200 Subject: [PATCH] jQuery 3.6.1 in Setup --- .../OrchardCore.Setup/package-lock.json | 14 +- .../OrchardCore.Setup/package.json | 2 +- .../wwwroot/Scripts/setup.js | 222 +++++++++--------- .../wwwroot/Scripts/setup.min.js | 8 +- 4 files changed, 125 insertions(+), 121 deletions(-) diff --git a/src/OrchardCore.Modules/OrchardCore.Setup/package-lock.json b/src/OrchardCore.Modules/OrchardCore.Setup/package-lock.json index e42d9b3a67f..cbe94dde672 100644 --- a/src/OrchardCore.Modules/OrchardCore.Setup/package-lock.json +++ b/src/OrchardCore.Modules/OrchardCore.Setup/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "dependencies": { "bootstrap": "5.1.3", - "jquery": "3.6.0" + "jquery": "3.6.1" } }, "node_modules/@popperjs/core": { @@ -35,9 +35,9 @@ } }, "node_modules/jquery": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", - "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz", + "integrity": "sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==" } }, "dependencies": { @@ -54,9 +54,9 @@ "requires": {} }, "jquery": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", - "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz", + "integrity": "sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==" } } } diff --git a/src/OrchardCore.Modules/OrchardCore.Setup/package.json b/src/OrchardCore.Modules/OrchardCore.Setup/package.json index 45b8ab57212..c19a411a0a8 100644 --- a/src/OrchardCore.Modules/OrchardCore.Setup/package.json +++ b/src/OrchardCore.Modules/OrchardCore.Setup/package.json @@ -3,6 +3,6 @@ "version": "1.0.0", "dependencies": { "bootstrap": "5.1.3", - "jquery": "3.6.0" + "jquery": "3.6.1" } } diff --git a/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.js b/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.js index a94b7eeb5f4..be488c9f7f5 100644 --- a/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.js +++ b/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.js @@ -6,7 +6,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } /*! - * jQuery JavaScript Library v3.6.0 + * jQuery JavaScript Library v3.6.1 * https://jquery.com/ * * Includes Sizzle.js @@ -16,7 +16,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = * Released under the MIT license * https://jquery.org/license * - * Date: 2021-03-02T17:08Z + * Date: 2022-08-26T17:52Z */ (function (global, factory) { "use strict"; @@ -28,7 +28,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = // (such as Node.js), expose a factory as module.exports. // This accentuates the need for the creation of a real `window`. // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. + // See ticket trac-14549 for more info. module.exports = global.document ? factory(global, true) : function (w) { if (!w.document) { throw new Error("jQuery requires a window with a document"); @@ -130,7 +130,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = // unguarded in another place, it seems safer to define global only for this module - var version = "3.6.0", + var version = "3.6.1", // Define a local copy of jQuery jQuery = function jQuery(selector, context) { // The jQuery object is actually just the init constructor 'enhanced' @@ -2713,8 +2713,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = var rootjQuery, // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) + // Prioritize #id over to avoid XSS via location.hash (trac-9521) + // Strict HTML recognition (trac-11290: must start with <) // Shortcut simple #id case for speed rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, init = jQuery.fn.init = function (selector, context, root) { @@ -3463,7 +3463,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before - // the ready event fires. See #6781 + // the ready event fires. See trac-6781 readyWait: 1, // Handle when the DOM is ready ready: function ready(wait) { @@ -3567,7 +3567,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = return letter.toUpperCase(); } // Convert dashed to camelCase; used by the css and data modules // Support: IE <=9 - 11, Edge 12 - 15 - // Microsoft forgot to hump their vendor prefix (#9572) + // Microsoft forgot to hump their vendor prefix (trac-9572) function camelCase(string) { @@ -3596,7 +3596,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = if (!value) { value = {}; // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. + // but we should not, see trac-8335. // Always return an empty object. if (acceptData(owner)) { @@ -3808,7 +3808,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = while (i--) { // Support: IE 11 only - // The attrs elements can be null (#14894) + // The attrs elements can be null (trac-14894) if (attrs[i]) { name = attrs[i].name; @@ -4196,9 +4196,9 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = var fragment = document.createDocumentFragment(), div = fragment.appendChild(document.createElement("div")), input = document.createElement("input"); // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) + // Check state lost if the name is set (trac-11217) // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) + // `name` and `type` must use .setAttribute for WWA (trac-14901) input.setAttribute("type", "radio"); input.setAttribute("checked", "checked"); @@ -4216,7 +4216,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = div.innerHTML = ""; support.option = !!div.lastChild; - })(); // We have to close these tags to support XHTML (#13200) + })(); // We have to close these tags to support XHTML (trac-13200) var wrapMap = { @@ -4238,7 +4238,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = function getAll(context, tag) { // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) + // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) var ret; if (typeof context.getElementsByTagName !== "undefined") { @@ -4308,7 +4308,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = jQuery.merge(nodes, tmp.childNodes); // Remember the top-level container - tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392) + tmp = fragment.firstChild; // Ensure the created nodes are orphaned (trac-12392) tmp.textContent = ""; } @@ -4710,14 +4710,14 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) !(event.type === "click" && event.button >= 1)) { for (; cur !== this; cur = cur.parentNode || this) { - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + // Don't check non-elements (trac-13208) + // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) if (cur.nodeType === 1 && !(event.type === "click" && cur.disabled === true)) { matchedHandlers = []; matchedSelectors = {}; for (i = 0; i < delegateCount; i++) { - handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203) + handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (trac-13203) sel = handleObj.selector + " "; @@ -4932,7 +4932,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only src.returnValue === false ? returnTrue : returnFalse; // Create target properties // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) + // Target should not be a text node (trac-504, trac-13143) this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target; this.currentTarget = src.currentTarget; @@ -5041,10 +5041,10 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = return true; }, - // Suppress native focus or blur as it's already being fired - // in leverageNative. - _default: function _default() { - return true; + // Suppress native focus or blur if we're currently inside + // a leveraged native-event stack + _default: function _default(event) { + return dataPriv.get(event.target, type); }, delegateType: delegateType }; @@ -5130,7 +5130,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = rnoInnerhtml = /\s*$/g; // Prefer a tbody over its parent table for containing new rows + rcleanScript = /^\s*\s*$/g; // Prefer a tbody over its parent table for containing new rows function manipulationTarget(elem, content) { if (nodeName(elem, "table") && nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr")) { @@ -5238,7 +5238,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = scripts = jQuery.map(getAll(fragment, "script"), disableScript); hasScripts = scripts.length; // Use the original fragment for the last item // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). + // being emptied incorrectly in certain situations (trac-8070). for (; i < l; i++) { node = fragment; @@ -5273,6 +5273,11 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = }, doc); } } else { + // Unwrap a CDATA section containing script contents. This shouldn't be + // needed as in XML documents they're already not visible when + // inspecting element contents and in HTML documents they have no + // meaning but we're preserving that logic for backwards compatibility. + // This will be removed completely in 4.0. See gh-4904. DOMEval(node.textContent.replace(rcleanScript, ""), node, doc); } } @@ -5530,9 +5535,10 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = }; }); var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i"); + var rcustomProp = /^--/; var getStyles = function getStyles(elem) { - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) // IE throws on elements created in popups // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" var view = elem.ownerDocument.defaultView; @@ -5564,6 +5570,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = }; var rboxStyle = new RegExp(cssExpand.join("|"), "i"); + var whitespace = "[\\x20\\t\\r\\n\\f]"; + var rtrimCSS = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"); (function () { // Executing both pixelPosition & boxSizingReliable tests require only one layout @@ -5616,7 +5624,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = if (!div.style) { return; } // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) + // Style of cloned element affects source element cloned (trac-8908) div.style.backgroundClip = "content-box"; @@ -5689,17 +5697,27 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = minWidth, maxWidth, ret, + isCustomProp = rcustomProp.test(name), // Support: Firefox 51+ // Retrieving style before computed somehow // fixes an issue with getting wrong values // on detached elements style = elem.style; computed = computed || getStyles(elem); // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) + // .css('filter') (IE 9 only, trac-12537) + // .css('--customProperty) (gh-3144) if (computed) { - ret = computed.getPropertyValue(name) || computed[name]; + ret = computed.getPropertyValue(name) || computed[name]; // trim whitespace for custom property (issue gh-4926) + + if (isCustomProp) { + // rtrim treats U+000D CARRIAGE RETURN and U+000C FORM FEED + // as whitespace while CSS does not, but this is not a problem + // because CSS preprocessing replaces them with U+000A LINE FEED + // (which *is* CSS whitespace) + // https://www.w3.org/TR/css-syntax-3/#input-preprocessing + ret = ret.replace(rtrimCSS, "$1"); + } if (ret === "" && !isAttached(elem)) { ret = jQuery.style(elem, name); @@ -5784,7 +5802,6 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = // except "table", "table-cell", or "table-caption" // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, cssShow = { position: "absolute", visibility: "hidden", @@ -5971,13 +5988,13 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value if (value !== undefined) { - type = _typeof(value); // Convert "+=" or "-=" to relative numbers (#7345) + type = _typeof(value); // Convert "+=" or "-=" to relative numbers (trac-7345) if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) { - value = adjustCSS(elem, name, ret); // Fixes bug #9237 + value = adjustCSS(elem, name, ret); // Fixes bug trac-9237 type = "number"; - } // Make sure that null and NaN values aren't set (#7116) + } // Make sure that null and NaN values aren't set (trac-7116) if (value == null || value !== value) { @@ -6555,7 +6572,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = var currentTime = fxNow || createFxNow(), remaining = Math.max(0, animation.startTime + animation.duration - currentTime), // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) temp = remaining / animation.duration || 0, percent = 1 - temp, index = 0, @@ -6922,7 +6939,6 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = // Default speed _default: 400 }; // Based off of the plugin by Clint Helfers, with permission. - // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ jQuery.fn.delay = function (time, type) { time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; @@ -7120,8 +7136,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = // Support: IE <=9 - 11 only // elem.tabIndex doesn't always return the // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) + // Use proper attribute retrieval (trac-12072) var tabindex = jQuery.find.attr(elem, "tabindex"); if (tabindex) { @@ -7204,14 +7219,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = jQuery.fn.extend({ addClass: function addClass(value) { - var classes, - elem, - cur, - curValue, - clazz, - j, - finalValue, - i = 0; + var classNames, cur, curValue, className, i, finalValue; if (isFunction(value)) { return this.each(function (j) { @@ -7219,19 +7227,19 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = }); } - classes = classesToArray(value); + classNames = classesToArray(value); - if (classes.length) { - while (elem = this[i++]) { - curValue = getClass(elem); - cur = elem.nodeType === 1 && " " + stripAndCollapse(curValue) + " "; + if (classNames.length) { + return this.each(function () { + curValue = getClass(this); + cur = this.nodeType === 1 && " " + stripAndCollapse(curValue) + " "; if (cur) { - j = 0; + for (i = 0; i < classNames.length; i++) { + className = classNames[i]; - while (clazz = classes[j++]) { - if (cur.indexOf(" " + clazz + " ") < 0) { - cur += clazz + " "; + if (cur.indexOf(" " + className + " ") < 0) { + cur += className + " "; } } // Only assign if different to avoid unneeded rendering. @@ -7239,23 +7247,16 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = finalValue = stripAndCollapse(cur); if (curValue !== finalValue) { - elem.setAttribute("class", finalValue); + this.setAttribute("class", finalValue); } } - } + }); } return this; }, removeClass: function removeClass(value) { - var classes, - elem, - cur, - curValue, - clazz, - j, - finalValue, - i = 0; + var classNames, cur, curValue, className, i, finalValue; if (isFunction(value)) { return this.each(function (j) { @@ -7267,21 +7268,20 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = return this.attr("class", ""); } - classes = classesToArray(value); + classNames = classesToArray(value); - if (classes.length) { - while (elem = this[i++]) { - curValue = getClass(elem); // This expression is here for better compressibility (see addClass) + if (classNames.length) { + return this.each(function () { + curValue = getClass(this); // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && " " + stripAndCollapse(curValue) + " "; + cur = this.nodeType === 1 && " " + stripAndCollapse(curValue) + " "; if (cur) { - j = 0; + for (i = 0; i < classNames.length; i++) { + className = classNames[i]; // Remove *all* instances - while (clazz = classes[j++]) { - // Remove *all* instances - while (cur.indexOf(" " + clazz + " ") > -1) { - cur = cur.replace(" " + clazz + " ", " "); + while (cur.indexOf(" " + className + " ") > -1) { + cur = cur.replace(" " + className + " ", " "); } } // Only assign if different to avoid unneeded rendering. @@ -7289,39 +7289,41 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = finalValue = stripAndCollapse(cur); if (curValue !== finalValue) { - elem.setAttribute("class", finalValue); + this.setAttribute("class", finalValue); } } - } + }); } return this; }, toggleClass: function toggleClass(value, stateVal) { - var type = _typeof(value), + var classNames, + className, + i, + self, + type = _typeof(value), isValidValue = type === "string" || Array.isArray(value); - if (typeof stateVal === "boolean" && isValidValue) { - return stateVal ? this.addClass(value) : this.removeClass(value); - } - if (isFunction(value)) { return this.each(function (i) { jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal); }); } - return this.each(function () { - var className, i, self, classNames; + if (typeof stateVal === "boolean" && isValidValue) { + return stateVal ? this.addClass(value) : this.removeClass(value); + } + classNames = classesToArray(value); + return this.each(function () { if (isValidValue) { // Toggle individual class names - i = 0; self = jQuery(this); - classNames = classesToArray(value); - while (className = classNames[i++]) { - // Check each className given, space separated list + for (i = 0; i < classNames.length; i++) { + className = classNames[i]; // Check each className given, space separated list + if (self.hasClass(className)) { self.removeClass(className); } else { @@ -7430,7 +7432,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = get: function get(elem) { var val = jQuery.find.attr(elem, "value"); return val != null ? val : // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) + // option.text throws exceptions (trac-14686, trac-14858) // Strip and collapse whitespace // https://html.spec.whatwg.org/#strip-and-collapse-whitespace stripAndCollapse(jQuery.text(elem)); @@ -7456,7 +7458,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = for (; i < max; i++) { option = options[i]; // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) + // IE8-9 doesn't update selected after form reset (trac-2551) if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, "optgroup"))) { @@ -7578,8 +7580,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) { return; - } // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + } // Determine event propagation path in advance, per W3C events spec (trac-9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) if (!onlyHandlers && !special.noBubble && !isWindow(elem)) { @@ -7630,7 +7632,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = if (!onlyHandlers && !event.isDefaultPrevented()) { if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) { // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) + // Don't do default actions on window, that's where global variables be (trac-6170) if (ontype && isFunction(elem[type]) && !isWindow(elem)) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ontype]; @@ -7866,7 +7868,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = rhash = /#.*$/, rantiCache = /([?&])_=[^&]*/, rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - // #7653, #8125, #8152: local protocol detection + // trac-7653, trac-8125, trac-8152: local protocol detection rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\/\//, @@ -7888,7 +7890,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = * 3) selection will start with transport dataType and THEN go to "*" if needed */ transports = {}, - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression allTypes = "*/".concat("*"), // Anchor tag for parsing the document origin originAnchor = document.createElement("a"); @@ -7946,7 +7948,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*"); } // A special extend for ajax options // that takes "flat" options (not to be deep extended) - // Fixes #9887 + // Fixes trac-9887 function ajaxExtend(target, src) { @@ -8317,10 +8319,10 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = deferred.promise(jqXHR); // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) + // Handle falsy url in the settings object (trac-10093: consistency with old signature) // We also use the url parameter if available - s.url = ((url || s.url || location.href) + "").replace(rprotocol, location.protocol + "//"); // Alias method option to type as per ticket #12004 + s.url = ((url || s.url || location.href) + "").replace(rprotocol, location.protocol + "//"); // Alias method option to type as per ticket trac-12004 s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list @@ -8355,7 +8357,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = if (completed) { return jqXHR; } // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) fireGlobals = jQuery.event && s.global; // Watch for a new set of requests @@ -8378,7 +8380,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = uncached = s.url.slice(cacheURL.length); // If data is available and should be processed, append data to url if (s.data && (s.processData || typeof s.data === "string")) { - cacheURL += (rquery.test(cacheURL) ? "&" : "?") + s.data; // #9682: remove data so that it's not used in an eventual retry + cacheURL += (rquery.test(cacheURL) ? "&" : "?") + s.data; // trac-9682: remove data so that it's not used in an eventual retry delete s.data; } // Add or update anti-cache param if needed @@ -8620,7 +8622,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = jQuery._evalUrl = function (url, options, doc) { return jQuery.ajax({ url: url, - // Make this explicit, since user can override this through ajaxSetup (#11264) + // Make this explicit, since user can override this through ajaxSetup (trac-11264) type: "GET", dataType: "script", cache: true, @@ -8717,7 +8719,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = // File protocol always yields status code 0, assume 200 0: 200, // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 + // trac-1450: sometimes IE returns 1223 when it should be 204 1223: 204 }, xhrSupported = jQuery.ajaxSettings.xhr(); @@ -8774,7 +8776,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = if (typeof xhr.status !== "number") { complete(0, "error"); } else { - complete( // File: protocol always yields status 0; see #8605, #14207 + complete( // File: protocol always yields status 0; see trac-8605, trac-14207 xhr.status, xhr.statusText); } } else { @@ -8823,7 +8825,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = // Do send the request (this may raise an exception) xhr.send(options.hasContent && options.data || null); } catch (e) { - // #14683: Only rethrow if this hasn't been notified as an error yet + // trac-14683: Only rethrow if this hasn't been notified as an error yet if (_callback) { throw e; } @@ -9358,8 +9360,10 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = }; }); // Support: Android <=4.0 only // Make sure we trim BOM and NBSP + // Require that the "whitespace run" starts from a non-whitespace + // to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. - var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; // Bind a function to a context, optionally partially applying any + var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; // Bind a function to a context, optionally partially applying any // arguments. // jQuery.proxy is deprecated to promote standards (specifically Function#bind) // However, it is not slated for removal any time soon @@ -9420,7 +9424,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = }; jQuery.trim = function (text) { - return text == null ? "" : (text + "").replace(rtrim, ""); + return text == null ? "" : (text + "").replace(rtrim, "$1"); }; // Register as a named AMD module, since jQuery can be concatenated with other // files that may use define, but not via a proper concatenation script that // understands anonymous AMD modules. A named AMD is safest and most robust @@ -9456,8 +9460,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = return jQuery; }; // Expose jQuery and $ identifiers, even in AMD - // (#7102#comment:10, https://github.com/jquery/jquery/pull/557) - // and CommonJS for browser emulators (#13566) + // (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) + // and CommonJS for browser emulators (trac-13566) if (typeof noGlobal === "undefined") { @@ -17195,4 +17199,4 @@ function togglePasswordVisibility(passwordCtl, togglePasswordCtl) { }); }; })(jQuery); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5qcyIsIi4uLy4uL3NyYy9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcyIsIi4uLy4uL3NyYy9kb20tdXRpbHMvaW5zdGFuY2VPZi5qcyIsIi4uLy4uL3NyYy9kb20tdXRpbHMvZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRTY3JvbGxQYXJlbnQuanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIi4uLy4uL3NyYy9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzIiwiLi4vLi4vc3JjL2VudW1zLmpzIiwiLi4vLi4vc3JjL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwiLi4vLi4vc3JjL3V0aWxzL2RlYm91bmNlLmpzIiwiLi4vLi4vc3JjL3V0aWxzL2Zvcm1hdC5qcyIsIi4uLy4uL3NyYy91dGlscy92YWxpZGF0ZU1vZGlmaWVycy5qcyIsIi4uLy4uL3NyYy91dGlscy91bmlxdWVCeS5qcyIsIi4uLy4uL3NyYy91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzIiwiLi4vLi4vc3JjL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCIuLi8uLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uLy4uL3NyYy9kb20tdXRpbHMvZ2V0RG9jdW1lbnRSZWN0LmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9jb250YWlucy5qcyIsIi4uLy4uL3NyYy91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCIuLi8uLi9zcmMvdXRpbHMvZ2V0VmFyaWF0aW9uLmpzIiwiLi4vLi4vc3JjL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsIi4uLy4uL3NyYy91dGlscy9jb21wdXRlT2Zmc2V0cy5qcyIsIi4uLy4uL3NyYy91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCIuLi8uLi9zcmMvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwiLi4vLi4vc3JjL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsIi4uLy4uL3NyYy91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsIi4uLy4uL3NyYy9jcmVhdGVQb3BwZXIuanMiLCIuLi8uLi9zcmMvbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzIiwiLi4vLi4vc3JjL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwiLi4vLi4vc3JjL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwiLi4vLi4vc3JjL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIi4uLy4uL3NyYy9tb2RpZmllcnMvb2Zmc2V0LmpzIiwiLi4vLi4vc3JjL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwiLi4vLi4vc3JjL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwiLi4vLi4vc3JjL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwiLi4vLi4vc3JjL21vZGlmaWVycy9mbGlwLmpzIiwiLi4vLi4vc3JjL3V0aWxzL2dldEFsdEF4aXMuanMiLCIuLi8uLi9zcmMvdXRpbHMvd2l0aGluLmpzIiwiLi4vLi4vc3JjL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCIuLi8uLi9zcmMvbW9kaWZpZXJzL2Fycm93LmpzIiwiLi4vLi4vc3JjL21vZGlmaWVycy9oaWRlLmpzIiwiLi4vLi4vc3JjL3BvcHBlci1saXRlLmpzIiwiLi4vLi4vc3JjL3BvcHBlci5qcyIsIi4uLy4uL2pzL3NyYy91dGlsL2luZGV4LmpzIiwiLi4vLi4vanMvc3JjL2RvbS9ldmVudC1oYW5kbGVyLmpzIiwiLi4vLi4vanMvc3JjL2RvbS9kYXRhLmpzIiwiLi4vLi4vanMvc3JjL2Jhc2UtY29tcG9uZW50LmpzIiwiLi4vLi4vanMvc3JjL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcyIsIi4uLy4uL2pzL3NyYy9hbGVydC5qcyIsIi4uLy4uL2pzL3NyYy9idXR0b24uanMiLCIuLi8uLi9qcy9zcmMvZG9tL21hbmlwdWxhdG9yLmpzIiwiLi4vLi4vanMvc3JjL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMiLCIuLi8uLi9qcy9zcmMvY2Fyb3VzZWwuanMiLCIuLi8uLi9qcy9zcmMvY29sbGFwc2UuanMiLCIuLi8uLi9qcy9zcmMvZHJvcGRvd24uanMiLCIuLi8uLi9qcy9zcmMvdXRpbC9zY3JvbGxiYXIuanMiLCIuLi8uLi9qcy9zcmMvdXRpbC9iYWNrZHJvcC5qcyIsIi4uLy4uL2pzL3NyYy91dGlsL2ZvY3VzdHJhcC5qcyIsIi4uLy4uL2pzL3NyYy9tb2RhbC5qcyIsIi4uLy4uL2pzL3NyYy9vZmZjYW52YXMuanMiLCIuLi8uLi9qcy9zcmMvdXRpbC9zYW5pdGl6ZXIuanMiLCIuLi8uLi9qcy9zcmMvdG9vbHRpcC5qcyIsIi4uLy4uL2pzL3NyYy9wb3BvdmVyLmpzIiwiLi4vLi4vanMvc3JjL3Njcm9sbHNweS5qcyIsIi4uLy4uL2pzL3NyYy90YWIuanMiLCIuLi8uLi9qcy9zcmMvdG9hc3QuanMiLCIuLi8uLi9qcy9pbmRleC51bWQuanMiLCJzZXR1cC5qcyIsInN0cmVuZ3RoLmpzIl0sIm5hbWVzIjpbImdsb2JhbCIsImZhY3RvcnkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZG9jdW1lbnQiLCJ3IiwiRXJyb3IiLCJ3aW5kb3ciLCJub0dsb2JhbCIsImFyciIsImdldFByb3RvIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJzbGljZSIsImZsYXQiLCJhcnJheSIsImNhbGwiLCJjb25jYXQiLCJhcHBseSIsInB1c2giLCJpbmRleE9mIiwiY2xhc3MydHlwZSIsInRvU3RyaW5nIiwiaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJmblRvU3RyaW5nIiwiT2JqZWN0RnVuY3Rpb25TdHJpbmciLCJzdXBwb3J0IiwiaXNGdW5jdGlvbiIsIm9iaiIsIm5vZGVUeXBlIiwiaXRlbSIsImlzV2luZG93IiwicHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyIsInR5cGUiLCJzcmMiLCJub25jZSIsIm5vTW9kdWxlIiwiRE9NRXZhbCIsImNvZGUiLCJub2RlIiwiZG9jIiwiaSIsInZhbCIsInNjcmlwdCIsImNyZWF0ZUVsZW1lbnQiLCJ0ZXh0IiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiaGVhZCIsImFwcGVuZENoaWxkIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwidG9UeXBlIiwidmVyc2lvbiIsImpRdWVyeSIsInNlbGVjdG9yIiwiY29udGV4dCIsImZuIiwiaW5pdCIsInByb3RvdHlwZSIsImpxdWVyeSIsImNvbnN0cnVjdG9yIiwibGVuZ3RoIiwidG9BcnJheSIsImdldCIsIm51bSIsInB1c2hTdGFjayIsImVsZW1zIiwicmV0IiwibWVyZ2UiLCJwcmV2T2JqZWN0IiwiZWFjaCIsImNhbGxiYWNrIiwibWFwIiwiZWxlbSIsImFyZ3VtZW50cyIsImZpcnN0IiwiZXEiLCJsYXN0IiwiZXZlbiIsImdyZXAiLCJfZWxlbSIsIm9kZCIsImxlbiIsImoiLCJlbmQiLCJzb3J0Iiwic3BsaWNlIiwiZXh0ZW5kIiwib3B0aW9ucyIsIm5hbWUiLCJjb3B5IiwiY29weUlzQXJyYXkiLCJjbG9uZSIsInRhcmdldCIsImRlZXAiLCJpc1BsYWluT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwidW5kZWZpbmVkIiwiZXhwYW5kbyIsIk1hdGgiLCJyYW5kb20iLCJyZXBsYWNlIiwiaXNSZWFkeSIsImVycm9yIiwibXNnIiwibm9vcCIsInByb3RvIiwiQ3RvciIsImlzRW1wdHlPYmplY3QiLCJnbG9iYWxFdmFsIiwiaXNBcnJheUxpa2UiLCJtYWtlQXJyYXkiLCJyZXN1bHRzIiwiaW5BcnJheSIsInNlY29uZCIsImludmVydCIsImNhbGxiYWNrSW52ZXJzZSIsIm1hdGNoZXMiLCJjYWxsYmFja0V4cGVjdCIsImFyZyIsInZhbHVlIiwiZ3VpZCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwic3BsaXQiLCJfaSIsInRvTG93ZXJDYXNlIiwiU2l6emxlIiwiRXhwciIsImdldFRleHQiLCJpc1hNTCIsInRva2VuaXplIiwiY29tcGlsZSIsInNlbGVjdCIsIm91dGVybW9zdENvbnRleHQiLCJzb3J0SW5wdXQiLCJoYXNEdXBsaWNhdGUiLCJzZXREb2N1bWVudCIsImRvY0VsZW0iLCJkb2N1bWVudElzSFRNTCIsInJidWdneVFTQSIsInJidWdneU1hdGNoZXMiLCJjb250YWlucyIsIkRhdGUiLCJwcmVmZXJyZWREb2MiLCJkaXJydW5zIiwiZG9uZSIsImNsYXNzQ2FjaGUiLCJjcmVhdGVDYWNoZSIsInRva2VuQ2FjaGUiLCJjb21waWxlckNhY2hlIiwibm9ubmF0aXZlU2VsZWN0b3JDYWNoZSIsInNvcnRPcmRlciIsImEiLCJiIiwicG9wIiwicHVzaE5hdGl2ZSIsImxpc3QiLCJib29sZWFucyIsIndoaXRlc3BhY2UiLCJpZGVudGlmaWVyIiwiYXR0cmlidXRlcyIsInBzZXVkb3MiLCJyd2hpdGVzcGFjZSIsIlJlZ0V4cCIsInJ0cmltIiwicmNvbW1hIiwicmNvbWJpbmF0b3JzIiwicmRlc2NlbmQiLCJycHNldWRvIiwicmlkZW50aWZpZXIiLCJtYXRjaEV4cHIiLCJyaHRtbCIsInJpbnB1dHMiLCJyaGVhZGVyIiwicm5hdGl2ZSIsInJxdWlja0V4cHIiLCJyc2libGluZyIsInJ1bmVzY2FwZSIsImZ1bmVzY2FwZSIsImVzY2FwZSIsIm5vbkhleCIsImhpZ2giLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJyY3NzZXNjYXBlIiwiZmNzc2VzY2FwZSIsImNoIiwiYXNDb2RlUG9pbnQiLCJjaGFyQ29kZUF0IiwidW5sb2FkSGFuZGxlciIsImluRGlzYWJsZWRGaWVsZHNldCIsImFkZENvbWJpbmF0b3IiLCJkaXNhYmxlZCIsIm5vZGVOYW1lIiwiZGlyIiwibmV4dCIsImNoaWxkTm9kZXMiLCJlIiwiZWxzIiwic2VlZCIsIm0iLCJuaWQiLCJtYXRjaCIsImdyb3VwcyIsIm5ld1NlbGVjdG9yIiwibmV3Q29udGV4dCIsIm93bmVyRG9jdW1lbnQiLCJleGVjIiwiZ2V0RWxlbWVudEJ5SWQiLCJpZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInFzYSIsInRlc3QiLCJ0ZXN0Q29udGV4dCIsInNjb3BlIiwidG9TZWxlY3RvciIsImpvaW4iLCJxdWVyeVNlbGVjdG9yQWxsIiwicXNhRXJyb3IiLCJyZW1vdmVBdHRyaWJ1dGUiLCJrZXlzIiwiY2FjaGUiLCJrZXkiLCJjYWNoZUxlbmd0aCIsInNoaWZ0IiwibWFya0Z1bmN0aW9uIiwiYXNzZXJ0IiwiZWwiLCJhZGRIYW5kbGUiLCJhdHRycyIsImhhbmRsZXIiLCJhdHRySGFuZGxlIiwic2libGluZ0NoZWNrIiwiY3VyIiwiZGlmZiIsInNvdXJjZUluZGV4IiwibmV4dFNpYmxpbmciLCJjcmVhdGVJbnB1dFBzZXVkbyIsImNyZWF0ZUJ1dHRvblBzZXVkbyIsImNyZWF0ZURpc2FibGVkUHNldWRvIiwiaXNEaXNhYmxlZCIsImNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8iLCJhcmd1bWVudCIsIm1hdGNoSW5kZXhlcyIsIm5hbWVzcGFjZSIsIm5hbWVzcGFjZVVSSSIsImRvY3VtZW50RWxlbWVudCIsImhhc0NvbXBhcmUiLCJzdWJXaW5kb3ciLCJkZWZhdWx0VmlldyIsInRvcCIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImNsYXNzTmFtZSIsImNyZWF0ZUNvbW1lbnQiLCJnZXRCeUlkIiwiZ2V0RWxlbWVudHNCeU5hbWUiLCJmaWx0ZXIiLCJhdHRySWQiLCJmaW5kIiwiZ2V0QXR0cmlidXRlTm9kZSIsInRhZyIsInRtcCIsImlucHV0IiwiaW5uZXJIVE1MIiwibWF0Y2hlc1NlbGVjdG9yIiwid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwib01hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwiZGlzY29ubmVjdGVkTWF0Y2giLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsImFkb3duIiwiYnVwIiwiY29tcGFyZSIsInNvcnREZXRhY2hlZCIsImF1cCIsImFwIiwiYnAiLCJ1bnNoaWZ0IiwiZXhwciIsImVsZW1lbnRzIiwiYXR0ciIsInNwZWNpZmllZCIsInNlbCIsInVuaXF1ZVNvcnQiLCJkdXBsaWNhdGVzIiwiZGV0ZWN0RHVwbGljYXRlcyIsInNvcnRTdGFibGUiLCJ0ZXh0Q29udGVudCIsImZpcnN0Q2hpbGQiLCJub2RlVmFsdWUiLCJzZWxlY3RvcnMiLCJjcmVhdGVQc2V1ZG8iLCJyZWxhdGl2ZSIsInByZUZpbHRlciIsImV4Y2VzcyIsInVucXVvdGVkIiwibm9kZU5hbWVTZWxlY3RvciIsInBhdHRlcm4iLCJvcGVyYXRvciIsImNoZWNrIiwicmVzdWx0Iiwid2hhdCIsIl9hcmd1bWVudCIsInNpbXBsZSIsImZvcndhcmQiLCJvZlR5cGUiLCJfY29udGV4dCIsInhtbCIsInVuaXF1ZUNhY2hlIiwib3V0ZXJDYWNoZSIsIm5vZGVJbmRleCIsInN0YXJ0IiwicGFyZW50IiwidXNlQ2FjaGUiLCJsYXN0Q2hpbGQiLCJ1bmlxdWVJRCIsInBzZXVkbyIsImFyZ3MiLCJzZXRGaWx0ZXJzIiwiaWR4IiwibWF0Y2hlZCIsIm1hdGNoZXIiLCJ1bm1hdGNoZWQiLCJsYW5nIiwiZWxlbUxhbmciLCJoYXNoIiwibG9jYXRpb24iLCJhY3RpdmVFbGVtZW50IiwiaGFzRm9jdXMiLCJocmVmIiwidGFiSW5kZXgiLCJjaGVja2VkIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEluZGV4IiwiX21hdGNoSW5kZXhlcyIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsInN1Ym1pdCIsInJlc2V0IiwiZmlsdGVycyIsInBhcnNlT25seSIsInRva2VucyIsInNvRmFyIiwicHJlRmlsdGVycyIsImNhY2hlZCIsImNvbWJpbmF0b3IiLCJiYXNlIiwic2tpcCIsImNoZWNrTm9uRWxlbWVudHMiLCJkb25lTmFtZSIsIm9sZENhY2hlIiwibmV3Q2FjaGUiLCJlbGVtZW50TWF0Y2hlciIsIm1hdGNoZXJzIiwibXVsdGlwbGVDb250ZXh0cyIsImNvbnRleHRzIiwiY29uZGVuc2UiLCJuZXdVbm1hdGNoZWQiLCJtYXBwZWQiLCJzZXRNYXRjaGVyIiwicG9zdEZpbHRlciIsInBvc3RGaW5kZXIiLCJwb3N0U2VsZWN0b3IiLCJ0ZW1wIiwicHJlTWFwIiwicG9zdE1hcCIsInByZWV4aXN0aW5nIiwibWF0Y2hlckluIiwibWF0Y2hlck91dCIsIm1hdGNoZXJGcm9tVG9rZW5zIiwiY2hlY2tDb250ZXh0IiwibGVhZGluZ1JlbGF0aXZlIiwiaW1wbGljaXRSZWxhdGl2ZSIsIm1hdGNoQ29udGV4dCIsIm1hdGNoQW55Q29udGV4dCIsIm1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyIsImVsZW1lbnRNYXRjaGVycyIsInNldE1hdGNoZXJzIiwiYnlTZXQiLCJieUVsZW1lbnQiLCJzdXBlck1hdGNoZXIiLCJvdXRlcm1vc3QiLCJtYXRjaGVkQ291bnQiLCJzZXRNYXRjaGVkIiwiY29udGV4dEJhY2t1cCIsImRpcnJ1bnNVbmlxdWUiLCJ0b2tlbiIsImNvbXBpbGVkIiwiX25hbWUiLCJkZWZhdWx0VmFsdWUiLCJ1bmlxdWUiLCJpc1hNTERvYyIsImVzY2FwZVNlbGVjdG9yIiwidW50aWwiLCJ0cnVuY2F0ZSIsImlzIiwic2libGluZ3MiLCJuIiwicm5lZWRzQ29udGV4dCIsIm5lZWRzQ29udGV4dCIsInJzaW5nbGVUYWciLCJ3aW5ub3ciLCJxdWFsaWZpZXIiLCJub3QiLCJzZWxmIiwicm9vdGpRdWVyeSIsInJvb3QiLCJwYXJzZUhUTUwiLCJyZWFkeSIsInJwYXJlbnRzcHJldiIsImd1YXJhbnRlZWRVbmlxdWUiLCJjaGlsZHJlbiIsImNvbnRlbnRzIiwicHJldiIsImhhcyIsInRhcmdldHMiLCJsIiwiY2xvc2VzdCIsImluZGV4IiwicHJldkFsbCIsImFkZCIsImFkZEJhY2siLCJzaWJsaW5nIiwicGFyZW50cyIsInBhcmVudHNVbnRpbCIsIm5leHRBbGwiLCJuZXh0VW50aWwiLCJwcmV2VW50aWwiLCJjb250ZW50RG9jdW1lbnQiLCJjb250ZW50IiwicmV2ZXJzZSIsInJub3RodG1sd2hpdGUiLCJjcmVhdGVPcHRpb25zIiwib2JqZWN0IiwiXyIsImZsYWciLCJDYWxsYmFja3MiLCJmaXJpbmciLCJtZW1vcnkiLCJmaXJlZCIsImxvY2tlZCIsInF1ZXVlIiwiZmlyaW5nSW5kZXgiLCJmaXJlIiwib25jZSIsInN0b3BPbkZhbHNlIiwicmVtb3ZlIiwiZW1wdHkiLCJkaXNhYmxlIiwibG9jayIsImZpcmVXaXRoIiwiSWRlbnRpdHkiLCJ2IiwiVGhyb3dlciIsImV4IiwiYWRvcHRWYWx1ZSIsInJlc29sdmUiLCJyZWplY3QiLCJub1ZhbHVlIiwibWV0aG9kIiwicHJvbWlzZSIsImZhaWwiLCJ0aGVuIiwiRGVmZXJyZWQiLCJmdW5jIiwidHVwbGVzIiwic3RhdGUiLCJhbHdheXMiLCJkZWZlcnJlZCIsInBpcGUiLCJmbnMiLCJuZXdEZWZlciIsInR1cGxlIiwicmV0dXJuZWQiLCJwcm9ncmVzcyIsIm5vdGlmeSIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsIm9uUHJvZ3Jlc3MiLCJtYXhEZXB0aCIsImRlcHRoIiwic3BlY2lhbCIsInRoYXQiLCJtaWdodFRocm93IiwiVHlwZUVycm9yIiwibm90aWZ5V2l0aCIsInJlc29sdmVXaXRoIiwicHJvY2VzcyIsImV4Y2VwdGlvbkhvb2siLCJzdGFja1RyYWNlIiwicmVqZWN0V2l0aCIsImdldFN0YWNrSG9vayIsInNldFRpbWVvdXQiLCJzdGF0ZVN0cmluZyIsIndoZW4iLCJzaW5nbGVWYWx1ZSIsInJlbWFpbmluZyIsInJlc29sdmVDb250ZXh0cyIsInJlc29sdmVWYWx1ZXMiLCJwcmltYXJ5IiwidXBkYXRlRnVuYyIsInJlcnJvck5hbWVzIiwic3RhY2siLCJjb25zb2xlIiwid2FybiIsIm1lc3NhZ2UiLCJyZWFkeUV4Y2VwdGlvbiIsInJlYWR5TGlzdCIsInJlYWR5V2FpdCIsIndhaXQiLCJjb21wbGV0ZWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVhZHlTdGF0ZSIsImRvU2Nyb2xsIiwiYWNjZXNzIiwiY2hhaW5hYmxlIiwiZW1wdHlHZXQiLCJyYXciLCJidWxrIiwiX2tleSIsInJtc1ByZWZpeCIsInJkYXNoQWxwaGEiLCJmY2FtZWxDYXNlIiwiX2FsbCIsImxldHRlciIsInRvVXBwZXJDYXNlIiwiY2FtZWxDYXNlIiwic3RyaW5nIiwiYWNjZXB0RGF0YSIsIm93bmVyIiwiRGF0YSIsInVpZCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwic2V0IiwiZGF0YSIsInByb3AiLCJoYXNEYXRhIiwiZGF0YVByaXYiLCJkYXRhVXNlciIsInJicmFjZSIsInJtdWx0aURhc2giLCJnZXREYXRhIiwiSlNPTiIsInBhcnNlIiwiZGF0YUF0dHIiLCJyZW1vdmVEYXRhIiwiX2RhdGEiLCJfcmVtb3ZlRGF0YSIsImRlcXVldWUiLCJzdGFydExlbmd0aCIsImhvb2tzIiwiX3F1ZXVlSG9va3MiLCJzdG9wIiwic2V0dGVyIiwiY2xlYXJRdWV1ZSIsImNvdW50IiwiZGVmZXIiLCJwbnVtIiwic291cmNlIiwicmNzc051bSIsImNzc0V4cGFuZCIsImlzQXR0YWNoZWQiLCJjb21wb3NlZCIsImdldFJvb3ROb2RlIiwiaXNIaWRkZW5XaXRoaW5UcmVlIiwic3R5bGUiLCJkaXNwbGF5IiwiY3NzIiwiYWRqdXN0Q1NTIiwidmFsdWVQYXJ0cyIsInR3ZWVuIiwiYWRqdXN0ZWQiLCJzY2FsZSIsIm1heEl0ZXJhdGlvbnMiLCJjdXJyZW50VmFsdWUiLCJpbml0aWFsIiwidW5pdCIsImNzc051bWJlciIsImluaXRpYWxJblVuaXQiLCJkZWZhdWx0RGlzcGxheU1hcCIsImdldERlZmF1bHREaXNwbGF5IiwiYm9keSIsInNob3dIaWRlIiwic2hvdyIsInZhbHVlcyIsImhpZGUiLCJ0b2dnbGUiLCJyY2hlY2thYmxlVHlwZSIsInJ0YWdOYW1lIiwicnNjcmlwdFR5cGUiLCJmcmFnbWVudCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJkaXYiLCJjaGVja0Nsb25lIiwiY2xvbmVOb2RlIiwibm9DbG9uZUNoZWNrZWQiLCJvcHRpb24iLCJ3cmFwTWFwIiwidGhlYWQiLCJjb2wiLCJ0ciIsInRkIiwiX2RlZmF1bHQiLCJ0Ym9keSIsInRmb290IiwiY29sZ3JvdXAiLCJjYXB0aW9uIiwidGgiLCJvcHRncm91cCIsImdldEFsbCIsInNldEdsb2JhbEV2YWwiLCJyZWZFbGVtZW50cyIsImJ1aWxkRnJhZ21lbnQiLCJzY3JpcHRzIiwic2VsZWN0aW9uIiwiaWdub3JlZCIsIndyYXAiLCJhdHRhY2hlZCIsIm5vZGVzIiwiY3JlYXRlVGV4dE5vZGUiLCJodG1sUHJlZmlsdGVyIiwicnR5cGVuYW1lc3BhY2UiLCJyZXR1cm5UcnVlIiwicmV0dXJuRmFsc2UiLCJleHBlY3RTeW5jIiwic2FmZUFjdGl2ZUVsZW1lbnQiLCJlcnIiLCJvbiIsInR5cGVzIiwib25lIiwib3JpZ0ZuIiwiZXZlbnQiLCJvZmYiLCJoYW5kbGVPYmpJbiIsImV2ZW50SGFuZGxlIiwiZXZlbnRzIiwidCIsImhhbmRsZU9iaiIsImhhbmRsZXJzIiwibmFtZXNwYWNlcyIsIm9yaWdUeXBlIiwiZWxlbURhdGEiLCJjcmVhdGUiLCJoYW5kbGUiLCJ0cmlnZ2VyZWQiLCJkaXNwYXRjaCIsImRlbGVnYXRlVHlwZSIsImJpbmRUeXBlIiwiZGVsZWdhdGVDb3VudCIsInNldHVwIiwibWFwcGVkVHlwZXMiLCJvcmlnQ291bnQiLCJ0ZWFyZG93biIsInJlbW92ZUV2ZW50IiwibmF0aXZlRXZlbnQiLCJoYW5kbGVyUXVldWUiLCJmaXgiLCJkZWxlZ2F0ZVRhcmdldCIsInByZURpc3BhdGNoIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJjdXJyZW50VGFyZ2V0IiwiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLCJybmFtZXNwYWNlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3N0RGlzcGF0Y2giLCJtYXRjaGVkSGFuZGxlcnMiLCJtYXRjaGVkU2VsZWN0b3JzIiwiYnV0dG9uIiwiYWRkUHJvcCIsImhvb2siLCJFdmVudCIsImVudW1lcmFibGUiLCJvcmlnaW5hbEV2ZW50Iiwid3JpdGFibGUiLCJsb2FkIiwibm9CdWJibGUiLCJjbGljayIsImxldmVyYWdlTmF0aXZlIiwidHJpZ2dlciIsImJlZm9yZXVubG9hZCIsInJldHVyblZhbHVlIiwibm90QXN5bmMiLCJzYXZlZCIsImlzVHJpZ2dlciIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInByb3BzIiwiaXNEZWZhdWx0UHJldmVudGVkIiwiZGVmYXVsdFByZXZlbnRlZCIsInJlbGF0ZWRUYXJnZXQiLCJ0aW1lU3RhbXAiLCJub3ciLCJpc1NpbXVsYXRlZCIsImFsdEtleSIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwiY2hhbmdlZFRvdWNoZXMiLCJjdHJsS2V5IiwiZGV0YWlsIiwiZXZlbnRQaGFzZSIsIm1ldGFLZXkiLCJwYWdlWCIsInBhZ2VZIiwic2hpZnRLZXkiLCJ2aWV3IiwiY2hhckNvZGUiLCJrZXlDb2RlIiwiYnV0dG9ucyIsImNsaWVudFgiLCJjbGllbnRZIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJwb2ludGVySWQiLCJwb2ludGVyVHlwZSIsInNjcmVlblgiLCJzY3JlZW5ZIiwidGFyZ2V0VG91Y2hlcyIsInRvRWxlbWVudCIsInRvdWNoZXMiLCJ3aGljaCIsImZvY3VzIiwiYmx1ciIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmxlYXZlIiwib3JpZyIsInJlbGF0ZWQiLCJybm9Jbm5lcmh0bWwiLCJyY2hlY2tlZCIsInJjbGVhblNjcmlwdCIsIm1hbmlwdWxhdGlvblRhcmdldCIsImRpc2FibGVTY3JpcHQiLCJyZXN0b3JlU2NyaXB0IiwiY2xvbmVDb3B5RXZlbnQiLCJkZXN0IiwicGRhdGFPbGQiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwiZml4SW5wdXQiLCJkb21NYW5pcCIsImNvbGxlY3Rpb24iLCJoYXNTY3JpcHRzIiwiaU5vQ2xvbmUiLCJ2YWx1ZUlzRnVuY3Rpb24iLCJodG1sIiwiX2V2YWxVcmwiLCJrZWVwRGF0YSIsImNsZWFuRGF0YSIsImRhdGFBbmRFdmVudHMiLCJkZWVwRGF0YUFuZEV2ZW50cyIsInNyY0VsZW1lbnRzIiwiZGVzdEVsZW1lbnRzIiwiaW5QYWdlIiwiZGV0YWNoIiwiYXBwZW5kIiwicHJlcGVuZCIsImluc2VydEJlZm9yZSIsImJlZm9yZSIsImFmdGVyIiwicmVwbGFjZVdpdGgiLCJyZXBsYWNlQ2hpbGQiLCJhcHBlbmRUbyIsInByZXBlbmRUbyIsImluc2VydEFmdGVyIiwicmVwbGFjZUFsbCIsIm9yaWdpbmFsIiwiaW5zZXJ0Iiwicm51bW5vbnB4IiwiZ2V0U3R5bGVzIiwib3BlbmVyIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN3YXAiLCJvbGQiLCJyYm94U3R5bGUiLCJjb21wdXRlU3R5bGVUZXN0cyIsImNvbnRhaW5lciIsImNzc1RleHQiLCJkaXZTdHlsZSIsInBpeGVsUG9zaXRpb25WYWwiLCJyZWxpYWJsZU1hcmdpbkxlZnRWYWwiLCJyb3VuZFBpeGVsTWVhc3VyZXMiLCJtYXJnaW5MZWZ0IiwicmlnaHQiLCJwaXhlbEJveFN0eWxlc1ZhbCIsImJveFNpemluZ1JlbGlhYmxlVmFsIiwid2lkdGgiLCJwb3NpdGlvbiIsInNjcm9sbGJveFNpemVWYWwiLCJvZmZzZXRXaWR0aCIsIm1lYXN1cmUiLCJyb3VuZCIsInBhcnNlRmxvYXQiLCJyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwiYm94U2l6aW5nUmVsaWFibGUiLCJwaXhlbEJveFN0eWxlcyIsInBpeGVsUG9zaXRpb24iLCJyZWxpYWJsZU1hcmdpbkxlZnQiLCJzY3JvbGxib3hTaXplIiwicmVsaWFibGVUckRpbWVuc2lvbnMiLCJ0YWJsZSIsInRyQ2hpbGQiLCJ0clN0eWxlIiwiaGVpZ2h0IiwicGFyc2VJbnQiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiY3VyQ1NTIiwiY29tcHV0ZWQiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImFkZEdldEhvb2tJZiIsImNvbmRpdGlvbkZuIiwiaG9va0ZuIiwiY3NzUHJlZml4ZXMiLCJlbXB0eVN0eWxlIiwidmVuZG9yUHJvcHMiLCJ2ZW5kb3JQcm9wTmFtZSIsImNhcE5hbWUiLCJmaW5hbFByb3BOYW1lIiwiZmluYWwiLCJjc3NQcm9wcyIsInJkaXNwbGF5c3dhcCIsInJjdXN0b21Qcm9wIiwiY3NzU2hvdyIsInZpc2liaWxpdHkiLCJjc3NOb3JtYWxUcmFuc2Zvcm0iLCJsZXR0ZXJTcGFjaW5nIiwiZm9udFdlaWdodCIsInNldFBvc2l0aXZlTnVtYmVyIiwic3VidHJhY3QiLCJtYXgiLCJib3hNb2RlbEFkanVzdG1lbnQiLCJkaW1lbnNpb24iLCJib3giLCJpc0JvcmRlckJveCIsInN0eWxlcyIsImNvbXB1dGVkVmFsIiwiZXh0cmEiLCJkZWx0YSIsImNlaWwiLCJnZXRXaWR0aE9ySGVpZ2h0IiwiYm94U2l6aW5nTmVlZGVkIiwidmFsdWVJc0JvcmRlckJveCIsIm9mZnNldFByb3AiLCJnZXRDbGllbnRSZWN0cyIsImNzc0hvb2tzIiwib3BhY2l0eSIsIm9yaWdOYW1lIiwiaXNDdXN0b21Qcm9wIiwic2V0UHJvcGVydHkiLCJpc0Zpbml0ZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbGJveFNpemVCdWdneSIsImxlZnQiLCJtYXJnaW4iLCJwYWRkaW5nIiwiYm9yZGVyIiwicHJlZml4Iiwic3VmZml4IiwiZXhwYW5kIiwiZXhwYW5kZWQiLCJwYXJ0cyIsIlR3ZWVuIiwiZWFzaW5nIiwicHJvcEhvb2tzIiwicnVuIiwicGVyY2VudCIsImVhc2VkIiwiZHVyYXRpb24iLCJwb3MiLCJzdGVwIiwiZngiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwibGluZWFyIiwicCIsInN3aW5nIiwiY29zIiwiUEkiLCJmeE5vdyIsImluUHJvZ3Jlc3MiLCJyZnh0eXBlcyIsInJydW4iLCJzY2hlZHVsZSIsImhpZGRlbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImludGVydmFsIiwidGljayIsImNyZWF0ZUZ4Tm93IiwiZ2VuRngiLCJpbmNsdWRlV2lkdGgiLCJjcmVhdGVUd2VlbiIsImFuaW1hdGlvbiIsIkFuaW1hdGlvbiIsInR3ZWVuZXJzIiwiZGVmYXVsdFByZWZpbHRlciIsIm9wdHMiLCJvbGRmaXJlIiwicHJvcFR3ZWVuIiwicmVzdG9yZURpc3BsYXkiLCJpc0JveCIsImFuaW0iLCJkYXRhU2hvdyIsInVucXVldWVkIiwib3ZlcmZsb3ciLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJwcm9wRmlsdGVyIiwic3BlY2lhbEVhc2luZyIsInByb3BlcnRpZXMiLCJzdG9wcGVkIiwicHJlZmlsdGVycyIsImN1cnJlbnRUaW1lIiwic3RhcnRUaW1lIiwidHdlZW5zIiwib3JpZ2luYWxQcm9wZXJ0aWVzIiwib3JpZ2luYWxPcHRpb25zIiwiZ290b0VuZCIsImJpbmQiLCJjb21wbGV0ZSIsInRpbWVyIiwidHdlZW5lciIsInByZWZpbHRlciIsInNwZWVkIiwib3B0Iiwic3BlZWRzIiwiZmFkZVRvIiwidG8iLCJhbmltYXRlIiwib3B0YWxsIiwiZG9BbmltYXRpb24iLCJmaW5pc2giLCJzdG9wUXVldWUiLCJ0aW1lcnMiLCJjc3NGbiIsInNsaWRlRG93biIsInNsaWRlVXAiLCJzbGlkZVRvZ2dsZSIsImZhZGVJbiIsImZhZGVPdXQiLCJmYWRlVG9nZ2xlIiwic2xvdyIsImZhc3QiLCJkZWxheSIsInRpbWUiLCJ0aW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiY2hlY2tPbiIsIm9wdFNlbGVjdGVkIiwicmFkaW9WYWx1ZSIsImJvb2xIb29rIiwicmVtb3ZlQXR0ciIsIm5UeXBlIiwiYXR0ckhvb2tzIiwiYm9vbCIsImF0dHJOYW1lcyIsImdldHRlciIsImxvd2VyY2FzZU5hbWUiLCJyZm9jdXNhYmxlIiwicmNsaWNrYWJsZSIsInJlbW92ZVByb3AiLCJwcm9wRml4IiwidGFiaW5kZXgiLCJzdHJpcEFuZENvbGxhcHNlIiwiZ2V0Q2xhc3MiLCJjbGFzc2VzVG9BcnJheSIsImFkZENsYXNzIiwiY2xhc3NlcyIsImN1clZhbHVlIiwiY2xhenoiLCJmaW5hbFZhbHVlIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsInN0YXRlVmFsIiwiaXNWYWxpZFZhbHVlIiwiY2xhc3NOYW1lcyIsImhhc0NsYXNzIiwicnJldHVybiIsInZhbEhvb2tzIiwib3B0aW9uU2V0IiwiZm9jdXNpbiIsInJmb2N1c01vcnBoIiwic3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2siLCJvbmx5SGFuZGxlcnMiLCJidWJibGVUeXBlIiwib250eXBlIiwibGFzdEVsZW1lbnQiLCJldmVudFBhdGgiLCJwYXJlbnRXaW5kb3ciLCJzaW11bGF0ZSIsInRyaWdnZXJIYW5kbGVyIiwiYXR0YWNoZXMiLCJycXVlcnkiLCJwYXJzZVhNTCIsInBhcnNlckVycm9yRWxlbSIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsInJicmFja2V0IiwickNSTEYiLCJyc3VibWl0dGVyVHlwZXMiLCJyc3VibWl0dGFibGUiLCJidWlsZFBhcmFtcyIsInRyYWRpdGlvbmFsIiwicGFyYW0iLCJzIiwidmFsdWVPckZ1bmN0aW9uIiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic2VyaWFsaXplIiwic2VyaWFsaXplQXJyYXkiLCJyMjAiLCJyaGFzaCIsInJhbnRpQ2FjaGUiLCJyaGVhZGVycyIsInJsb2NhbFByb3RvY29sIiwicm5vQ29udGVudCIsInJwcm90b2NvbCIsInRyYW5zcG9ydHMiLCJhbGxUeXBlcyIsIm9yaWdpbkFuY2hvciIsImFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsInN0cnVjdHVyZSIsImRhdGFUeXBlRXhwcmVzc2lvbiIsImRhdGFUeXBlIiwiZGF0YVR5cGVzIiwiaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMiLCJqcVhIUiIsImluc3BlY3RlZCIsInNlZWtpbmdUcmFuc3BvcnQiLCJpbnNwZWN0IiwicHJlZmlsdGVyT3JGYWN0b3J5IiwiZGF0YVR5cGVPclRyYW5zcG9ydCIsImFqYXhFeHRlbmQiLCJmbGF0T3B0aW9ucyIsImFqYXhTZXR0aW5ncyIsImFqYXhIYW5kbGVSZXNwb25zZXMiLCJyZXNwb25zZXMiLCJjdCIsImZpbmFsRGF0YVR5cGUiLCJmaXJzdERhdGFUeXBlIiwibWltZVR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImNvbnZlcnRlcnMiLCJhamF4Q29udmVydCIsInJlc3BvbnNlIiwiaXNTdWNjZXNzIiwiY29udjIiLCJjdXJyZW50IiwiY29udiIsInJlc3BvbnNlRmllbGRzIiwiZGF0YUZpbHRlciIsImFjdGl2ZSIsImxhc3RNb2RpZmllZCIsImV0YWciLCJ1cmwiLCJpc0xvY2FsIiwicHJvdG9jb2wiLCJwcm9jZXNzRGF0YSIsImFzeW5jIiwiY29udGVudFR5cGUiLCJhY2NlcHRzIiwianNvbiIsImFqYXhTZXR1cCIsInNldHRpbmdzIiwiYWpheFByZWZpbHRlciIsImFqYXhUcmFuc3BvcnQiLCJhamF4IiwidHJhbnNwb3J0IiwiY2FjaGVVUkwiLCJyZXNwb25zZUhlYWRlcnNTdHJpbmciLCJyZXNwb25zZUhlYWRlcnMiLCJ0aW1lb3V0VGltZXIiLCJ1cmxBbmNob3IiLCJmaXJlR2xvYmFscyIsInVuY2FjaGVkIiwiY2FsbGJhY2tDb250ZXh0IiwiZ2xvYmFsRXZlbnRDb250ZXh0IiwiY29tcGxldGVEZWZlcnJlZCIsInN0YXR1c0NvZGUiLCJyZXF1ZXN0SGVhZGVycyIsInJlcXVlc3RIZWFkZXJzTmFtZXMiLCJzdHJBYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInNldFJlcXVlc3RIZWFkZXIiLCJvdmVycmlkZU1pbWVUeXBlIiwic3RhdHVzIiwiYWJvcnQiLCJzdGF0dXNUZXh0IiwiZmluYWxUZXh0IiwiY3Jvc3NEb21haW4iLCJob3N0IiwiaGFzQ29udGVudCIsImlmTW9kaWZpZWQiLCJoZWFkZXJzIiwiYmVmb3JlU2VuZCIsInN1Y2Nlc3MiLCJzZW5kIiwibmF0aXZlU3RhdHVzVGV4dCIsIm1vZGlmaWVkIiwiZ2V0SlNPTiIsImdldFNjcmlwdCIsIndyYXBBbGwiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIndyYXBJbm5lciIsImh0bWxJc0Z1bmN0aW9uIiwidW53cmFwIiwidmlzaWJsZSIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwieGhyU3VjY2Vzc1N0YXR1cyIsInhoclN1cHBvcnRlZCIsImNvcnMiLCJlcnJvckNhbGxiYWNrIiwib3BlbiIsInVzZXJuYW1lIiwieGhyRmllbGRzIiwib25sb2FkIiwib25lcnJvciIsIm9uYWJvcnQiLCJvbnRpbWVvdXQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZXNwb25zZVR5cGUiLCJyZXNwb25zZVRleHQiLCJiaW5hcnkiLCJzY3JpcHRBdHRycyIsImNoYXJzZXQiLCJzY3JpcHRDaGFyc2V0IiwiZXZ0Iiwib2xkQ2FsbGJhY2tzIiwicmpzb25wIiwianNvbnAiLCJqc29ucENhbGxiYWNrIiwib3JpZ2luYWxTZXR0aW5ncyIsImNhbGxiYWNrTmFtZSIsIm92ZXJ3cml0dGVuIiwicmVzcG9uc2VDb250YWluZXIiLCJqc29uUHJvcCIsImNyZWF0ZUhUTUxEb2N1bWVudCIsImltcGxlbWVudGF0aW9uIiwia2VlcFNjcmlwdHMiLCJwYXJzZWQiLCJwYXJhbXMiLCJhbmltYXRlZCIsIm9mZnNldCIsInNldE9mZnNldCIsImN1clBvc2l0aW9uIiwiY3VyTGVmdCIsImN1ckNTU1RvcCIsImN1clRvcCIsImN1ck9mZnNldCIsImN1ckNTU0xlZnQiLCJjYWxjdWxhdGVQb3NpdGlvbiIsImN1ckVsZW0iLCJ1c2luZyIsInJlY3QiLCJ3aW4iLCJwYWdlWU9mZnNldCIsInBhZ2VYT2Zmc2V0Iiwib2Zmc2V0UGFyZW50IiwicGFyZW50T2Zmc2V0Iiwic2Nyb2xsVG8iLCJIZWlnaHQiLCJXaWR0aCIsImRlZmF1bHRFeHRyYSIsImZ1bmNOYW1lIiwidW5iaW5kIiwiZGVsZWdhdGUiLCJ1bmRlbGVnYXRlIiwiaG92ZXIiLCJmbk92ZXIiLCJmbk91dCIsInByb3h5IiwiaG9sZFJlYWR5IiwiaG9sZCIsInBhcnNlSlNPTiIsImlzTnVtZXJpYyIsImlzTmFOIiwidHJpbSIsImRlZmluZSIsImFtZCIsIl9qUXVlcnkiLCJfJCIsIiQiLCJub0NvbmZsaWN0IiwiZWxlbWVudCIsImluY2x1ZGVTY2FsZSIsInNjYWxlWCIsInNjYWxlWSIsImJvdHRvbSIsIngiLCJ5IiwiZ2V0V2luZG93IiwiZ2V0V2luZG93U2Nyb2xsIiwiaXNFbGVtZW50IiwiT3duRWxlbWVudCIsIkVsZW1lbnQiLCJpc0hUTUxFbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJpc1NoYWRvd1Jvb3QiLCJTaGFkb3dSb290IiwiZ2V0SFRNTEVsZW1lbnRTY3JvbGwiLCJnZXROb2RlU2Nyb2xsIiwiZ2V0Tm9kZU5hbWUiLCJnZXREb2N1bWVudEVsZW1lbnQiLCJnZXRXaW5kb3dTY3JvbGxCYXJYIiwiaXNTY3JvbGxQYXJlbnQiLCJpc0VsZW1lbnRTY2FsZWQiLCJnZXRDb21wb3NpdGVSZWN0IiwiZWxlbWVudE9yVmlydHVhbEVsZW1lbnQiLCJpc0ZpeGVkIiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJzY3JvbGwiLCJvZmZzZXRzIiwiY2xpZW50TGVmdCIsImNsaWVudFRvcCIsImdldExheW91dFJlY3QiLCJjbGllbnRSZWN0IiwiYWJzIiwib2Zmc2V0TGVmdCIsIm9mZnNldFRvcCIsImdldFBhcmVudE5vZGUiLCJhc3NpZ25lZFNsb3QiLCJnZXRTY3JvbGxQYXJlbnQiLCJsaXN0U2Nyb2xsUGFyZW50cyIsInNjcm9sbFBhcmVudCIsImlzQm9keSIsIl9lbGVtZW50JG93bmVyRG9jdW1lbiIsInZpc3VhbFZpZXdwb3J0IiwidXBkYXRlZExpc3QiLCJpc1RhYmxlRWxlbWVudCIsImdldFRydWVPZmZzZXRQYXJlbnQiLCJnZXRDb250YWluaW5nQmxvY2siLCJpc0ZpcmVmb3giLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJpc0lFIiwiZWxlbWVudENzcyIsImN1cnJlbnROb2RlIiwidHJhbnNmb3JtIiwicGVyc3BlY3RpdmUiLCJjb250YWluIiwid2lsbENoYW5nZSIsImdldE9mZnNldFBhcmVudCIsImF1dG8iLCJiYXNlUGxhY2VtZW50cyIsImNsaXBwaW5nUGFyZW50cyIsInZpZXdwb3J0IiwicG9wcGVyIiwicmVmZXJlbmNlIiwidmFyaWF0aW9uUGxhY2VtZW50cyIsInJlZHVjZSIsImFjYyIsInBsYWNlbWVudCIsInBsYWNlbWVudHMiLCJiZWZvcmVSZWFkIiwicmVhZCIsImFmdGVyUmVhZCIsImJlZm9yZU1haW4iLCJtYWluIiwiYWZ0ZXJNYWluIiwiYmVmb3JlV3JpdGUiLCJ3cml0ZSIsImFmdGVyV3JpdGUiLCJtb2RpZmllclBoYXNlcyIsIm9yZGVyIiwibW9kaWZpZXJzIiwiTWFwIiwidmlzaXRlZCIsIlNldCIsImZvckVhY2giLCJtb2RpZmllciIsInJlcXVpcmVzIiwicmVxdWlyZXNJZkV4aXN0cyIsImRlcCIsImRlcE1vZGlmaWVyIiwib3JkZXJNb2RpZmllcnMiLCJvcmRlcmVkTW9kaWZpZXJzIiwicGhhc2UiLCJkZWJvdW5jZSIsInBlbmRpbmciLCJQcm9taXNlIiwiZm9ybWF0Iiwic3RyIiwiYyIsIklOVkFMSURfTU9ESUZJRVJfRVJST1IiLCJNSVNTSU5HX0RFUEVOREVOQ1lfRVJST1IiLCJWQUxJRF9QUk9QRVJUSUVTIiwidmFsaWRhdGVNb2RpZmllcnMiLCJlbmFibGVkIiwiZWZmZWN0IiwicmVxdWlyZW1lbnQiLCJtb2QiLCJ1bmlxdWVCeSIsImlkZW50aWZpZXJzIiwiZ2V0QmFzZVBsYWNlbWVudCIsIm1lcmdlQnlOYW1lIiwibWVyZ2VkIiwiZXhpc3RpbmciLCJnZXRWaWV3cG9ydFJlY3QiLCJjbGllbnRXaWR0aCIsImNsaWVudEhlaWdodCIsIm1pbiIsImdldERvY3VtZW50UmVjdCIsIndpblNjcm9sbCIsInNjcm9sbFdpZHRoIiwic2Nyb2xsSGVpZ2h0IiwiZGlyZWN0aW9uIiwiY2hpbGQiLCJyb290Tm9kZSIsImlzU2FtZU5vZGUiLCJyZWN0VG9DbGllbnRSZWN0IiwiZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QiLCJnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZSIsImNsaXBwaW5nUGFyZW50IiwiZ2V0Q2xpcHBpbmdQYXJlbnRzIiwiY2FuRXNjYXBlQ2xpcHBpbmciLCJjbGlwcGVyRWxlbWVudCIsImdldENsaXBwaW5nUmVjdCIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwibWFpbkNsaXBwaW5nUGFyZW50cyIsImZpcnN0Q2xpcHBpbmdQYXJlbnQiLCJjbGlwcGluZ1JlY3QiLCJhY2NSZWN0IiwiZ2V0VmFyaWF0aW9uIiwiZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IiwiY29tcHV0ZU9mZnNldHMiLCJiYXNlUGxhY2VtZW50IiwidmFyaWF0aW9uIiwiY29tbW9uWCIsImNvbW1vblkiLCJtYWluQXhpcyIsImdldEZyZXNoU2lkZU9iamVjdCIsIm1lcmdlUGFkZGluZ09iamVjdCIsInBhZGRpbmdPYmplY3QiLCJleHBhbmRUb0hhc2hNYXAiLCJoYXNoTWFwIiwiZGV0ZWN0T3ZlcmZsb3ciLCJlbGVtZW50Q29udGV4dCIsImFsdEJvdW5kYXJ5IiwiYWx0Q29udGV4dCIsInBvcHBlclJlY3QiLCJyZWN0cyIsImNsaXBwaW5nQ2xpZW50UmVjdCIsImNvbnRleHRFbGVtZW50IiwicmVmZXJlbmNlQ2xpZW50UmVjdCIsInBvcHBlck9mZnNldHMiLCJzdHJhdGVneSIsInBvcHBlckNsaWVudFJlY3QiLCJlbGVtZW50Q2xpZW50UmVjdCIsIm92ZXJmbG93T2Zmc2V0cyIsIm9mZnNldERhdGEiLCJtb2RpZmllcnNEYXRhIiwibXVsdGlwbHkiLCJheGlzIiwiSU5WQUxJRF9FTEVNRU5UX0VSUk9SIiwiSU5GSU5JVEVfTE9PUF9FUlJPUiIsIkRFRkFVTFRfT1BUSU9OUyIsImFyZVZhbGlkRWxlbWVudHMiLCJzb21lIiwicG9wcGVyR2VuZXJhdG9yIiwiZ2VuZXJhdG9yT3B0aW9ucyIsImRlZmF1bHRNb2RpZmllcnMiLCJkZWZhdWx0T3B0aW9ucyIsImNyZWF0ZVBvcHBlciIsImVmZmVjdENsZWFudXBGbnMiLCJpc0Rlc3Ryb3llZCIsImluc3RhbmNlIiwic2V0T3B0aW9ucyIsInNldE9wdGlvbnNBY3Rpb24iLCJjbGVhbnVwTW9kaWZpZXJFZmZlY3RzIiwic2Nyb2xsUGFyZW50cyIsImZsaXBNb2RpZmllciIsIm1hcmdpblRvcCIsIm1hcmdpblJpZ2h0IiwibWFyZ2luQm90dG9tIiwicnVuTW9kaWZpZXJFZmZlY3RzIiwidXBkYXRlIiwiZm9yY2VVcGRhdGUiLCJfX2RlYnVnX2xvb3BzX18iLCJkZXN0cm95Iiwib25GaXJzdFVwZGF0ZSIsImNsZWFudXBGbiIsIm5vb3BGbiIsInBhc3NpdmUiLCJyZXNpemUiLCJ1bnNldFNpZGVzIiwicm91bmRPZmZzZXRzQnlEUFIiLCJkcHIiLCJkZXZpY2VQaXhlbFJhdGlvIiwibWFwVG9TdHlsZXMiLCJncHVBY2NlbGVyYXRpb24iLCJhZGFwdGl2ZSIsInJvdW5kT2Zmc2V0cyIsImhhc1giLCJoYXNZIiwic2lkZVgiLCJzaWRlWSIsImhlaWdodFByb3AiLCJ3aWR0aFByb3AiLCJjb21tb25TdHlsZXMiLCJjb21wdXRlU3R5bGVzIiwidHJhbnNpdGlvblByb3BlcnR5IiwicHJvcGVydHkiLCJhcnJvdyIsImFwcGx5U3R5bGVzIiwiYXNzaWduIiwiaW5pdGlhbFN0eWxlcyIsInN0eWxlUHJvcGVydGllcyIsImF0dHJpYnV0ZSIsImRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZIiwiaW52ZXJ0RGlzdGFuY2UiLCJza2lkZGluZyIsImRpc3RhbmNlIiwiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCJnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCIsImNvbXB1dGVBdXRvUGxhY2VtZW50IiwiZmxpcFZhcmlhdGlvbnMiLCJhbGxvd2VkQXV0b1BsYWNlbWVudHMiLCJhbGxQbGFjZW1lbnRzIiwiYWxsb3dlZFBsYWNlbWVudHMiLCJvdmVyZmxvd3MiLCJnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyIsIm9wcG9zaXRlUGxhY2VtZW50IiwiZmxpcCIsIl9za2lwIiwiY2hlY2tNYWluQXhpcyIsImFsdEF4aXMiLCJjaGVja0FsdEF4aXMiLCJzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMiLCJmYWxsYmFja1BsYWNlbWVudHMiLCJwcmVmZXJyZWRQbGFjZW1lbnQiLCJpc0Jhc2VQbGFjZW1lbnQiLCJyZWZlcmVuY2VSZWN0IiwiY2hlY2tzTWFwIiwibWFrZUZhbGxiYWNrQ2hlY2tzIiwiZmlyc3RGaXR0aW5nUGxhY2VtZW50IiwiaXNTdGFydFZhcmlhdGlvbiIsImlzVmVydGljYWwiLCJtYWluVmFyaWF0aW9uU2lkZSIsImFsdFZhcmlhdGlvblNpZGUiLCJjaGVja3MiLCJldmVyeSIsIm51bWJlck9mQ2hlY2tzIiwiZml0dGluZ1BsYWNlbWVudCIsImdldEFsdEF4aXMiLCJ3aXRoaW4iLCJtYXRoTWF4IiwibWF0aE1pbiIsInByZXZlbnRPdmVyZmxvdyIsInRldGhlciIsInRldGhlck9mZnNldCIsInRldGhlck9mZnNldFZhbHVlIiwibWFpblNpZGUiLCJhbHRTaWRlIiwiYWRkaXRpdmUiLCJtaW5MZW4iLCJtYXhMZW4iLCJhcnJvd0VsZW1lbnQiLCJhcnJvd1JlY3QiLCJhcnJvd1BhZGRpbmdPYmplY3QiLCJhcnJvd1BhZGRpbmdNaW4iLCJhcnJvd1BhZGRpbmdNYXgiLCJhcnJvd0xlbiIsIm1pbk9mZnNldCIsIm1heE9mZnNldCIsImFycm93T2Zmc2V0UGFyZW50IiwiY2xpZW50T2Zmc2V0Iiwib2Zmc2V0TW9kaWZpZXJWYWx1ZSIsInRldGhlck1pbiIsInRldGhlck1heCIsInByZXZlbnRlZE9mZnNldCIsInRvUGFkZGluZ09iamVjdCIsIm1pblByb3AiLCJtYXhQcm9wIiwiZW5kRGlmZiIsInN0YXJ0RGlmZiIsImNsaWVudFNpemUiLCJjZW50ZXJUb1JlZmVyZW5jZSIsImNlbnRlciIsImF4aXNQcm9wIiwiY2VudGVyT2Zmc2V0IiwicXVlcnlTZWxlY3RvciIsImdldFNpZGVPZmZzZXRzIiwicHJldmVudGVkT2Zmc2V0cyIsImlzQW55U2lkZUZ1bGx5Q2xpcHBlZCIsInNpZGUiLCJyZWZlcmVuY2VPdmVyZmxvdyIsInBvcHBlckFsdE92ZXJmbG93IiwicmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzIiwicG9wcGVyRXNjYXBlT2Zmc2V0cyIsImlzUmVmZXJlbmNlSGlkZGVuIiwiaGFzUG9wcGVyRXNjYXBlZCIsImV2ZW50TGlzdGVuZXJzIiwiTUFYX1VJRCIsIk1JTExJU0VDT05EU19NVUxUSVBMSUVSIiwiVFJBTlNJVElPTl9FTkQiLCJnZXRVSUQiLCJmbG9vciIsImdldFNlbGVjdG9yIiwiaHJlZkF0dHIiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJnZXRTZWxlY3RvckZyb21FbGVtZW50IiwiZ2V0RWxlbWVudEZyb21TZWxlY3RvciIsImdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50IiwidHJhbnNpdGlvbkR1cmF0aW9uIiwidHJhbnNpdGlvbkRlbGF5IiwiZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24iLCJOdW1iZXIiLCJmbG9hdFRyYW5zaXRpb25EZWxheSIsInRyaWdnZXJUcmFuc2l0aW9uRW5kIiwiZGlzcGF0Y2hFdmVudCIsImdldEVsZW1lbnQiLCJ0eXBlQ2hlY2tDb25maWciLCJjb21wb25lbnROYW1lIiwiY29uZmlnIiwiY29uZmlnVHlwZXMiLCJleHBlY3RlZFR5cGVzIiwidmFsdWVUeXBlIiwiaXNWaXNpYmxlIiwiTm9kZSIsIkVMRU1FTlRfTk9ERSIsImNsYXNzTGlzdCIsImhhc0F0dHJpYnV0ZSIsImZpbmRTaGFkb3dSb290IiwiYXR0YWNoU2hhZG93IiwicmVmbG93IiwiZ2V0alF1ZXJ5IiwiRE9NQ29udGVudExvYWRlZENhbGxiYWNrcyIsIm9uRE9NQ29udGVudExvYWRlZCIsImlzUlRMIiwiZGVmaW5lSlF1ZXJ5UGx1Z2luIiwicGx1Z2luIiwiTkFNRSIsIkpRVUVSWV9OT19DT05GTElDVCIsImpRdWVyeUludGVyZmFjZSIsIkNvbnN0cnVjdG9yIiwiZXhlY3V0ZSIsImV4ZWN1dGVBZnRlclRyYW5zaXRpb24iLCJ0cmFuc2l0aW9uRWxlbWVudCIsIndhaXRGb3JUcmFuc2l0aW9uIiwiZHVyYXRpb25QYWRkaW5nIiwiZW11bGF0ZWREdXJhdGlvbiIsImNhbGxlZCIsImdldE5leHRBY3RpdmVFbGVtZW50Iiwic2hvdWxkR2V0TmV4dCIsImlzQ3ljbGVBbGxvd2VkIiwibGlzdExlbmd0aCIsIm5hbWVzcGFjZVJlZ2V4Iiwic3RyaXBOYW1lUmVnZXgiLCJzdHJpcFVpZFJlZ2V4IiwiZXZlbnRSZWdpc3RyeSIsInVpZEV2ZW50IiwiY3VzdG9tRXZlbnRzIiwiY3VzdG9tRXZlbnRzUmVnZXgiLCJuYXRpdmVFdmVudHMiLCJnZXRVaWRFdmVudCIsImdldEV2ZW50IiwiYm9vdHN0cmFwSGFuZGxlciIsIm9uZU9mZiIsIkV2ZW50SGFuZGxlciIsImJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyIiwiZG9tRWxlbWVudHMiLCJmaW5kSGFuZGxlciIsImRlbGVnYXRpb25TZWxlY3RvciIsInVpZEV2ZW50TGlzdCIsIm9yaWdpbmFsSGFuZGxlciIsIm5vcm1hbGl6ZVBhcmFtcyIsIm9yaWdpbmFsVHlwZUV2ZW50IiwiZGVsZWdhdGlvbkZuIiwiZGVsZWdhdGlvbiIsInR5cGVFdmVudCIsImdldFR5cGVFdmVudCIsImlzTmF0aXZlIiwiYWRkSGFuZGxlciIsIndyYXBGbiIsInByZXZpb3VzRm4iLCJyZW1vdmVIYW5kbGVyIiwiQm9vbGVhbiIsInJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyIsInN0b3JlRWxlbWVudEV2ZW50IiwiaGFuZGxlcktleSIsImluTmFtZXNwYWNlIiwiaXNOYW1lc3BhY2UiLCJlbGVtZW50RXZlbnQiLCJrZXlIYW5kbGVycyIsImpRdWVyeUV2ZW50IiwibmF0aXZlRGlzcGF0Y2giLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsIkN1c3RvbUV2ZW50IiwiZWxlbWVudE1hcCIsImluc3RhbmNlTWFwIiwic2l6ZSIsImZyb20iLCJWRVJTSU9OIiwiQmFzZUNvbXBvbmVudCIsIl9lbGVtZW50IiwiREFUQV9LRVkiLCJkaXNwb3NlIiwiRVZFTlRfS0VZIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3BlcnR5TmFtZSIsIl9xdWV1ZUNhbGxiYWNrIiwiaXNBbmltYXRlZCIsImdldEluc3RhbmNlIiwiZW5hYmxlRGlzbWlzc1RyaWdnZXIiLCJjb21wb25lbnQiLCJjbGlja0V2ZW50IiwidGFnTmFtZSIsImdldE9yQ3JlYXRlSW5zdGFuY2UiLCJFVkVOVF9DTE9TRSIsIkVWRU5UX0NMT1NFRCIsIkNMQVNTX05BTUVfRkFERSIsIkNMQVNTX05BTUVfU0hPVyIsIkFsZXJ0IiwiY2xvc2UiLCJjbG9zZUV2ZW50IiwiX2Rlc3Ryb3lFbGVtZW50IiwiREFUQV9BUElfS0VZIiwiQ0xBU1NfTkFNRV9BQ1RJVkUiLCJTRUxFQ1RPUl9EQVRBX1RPR0dMRSIsIkVWRU5UX0NMSUNLX0RBVEFfQVBJIiwiQnV0dG9uIiwibm9ybWFsaXplRGF0YSIsIm5vcm1hbGl6ZURhdGFLZXkiLCJjaHIiLCJNYW5pcHVsYXRvciIsInNldERhdGFBdHRyaWJ1dGUiLCJyZW1vdmVEYXRhQXR0cmlidXRlIiwiZ2V0RGF0YUF0dHJpYnV0ZXMiLCJkYXRhc2V0IiwicHVyZUtleSIsImNoYXJBdCIsImdldERhdGFBdHRyaWJ1dGUiLCJOT0RFX1RFWFQiLCJTZWxlY3RvckVuZ2luZSIsImZpbmRPbmUiLCJhbmNlc3RvciIsInByZXZpb3VzIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsIm5leHRFbGVtZW50U2libGluZyIsImZvY3VzYWJsZUNoaWxkcmVuIiwiZm9jdXNhYmxlcyIsIkFSUk9XX0xFRlRfS0VZIiwiQVJST1dfUklHSFRfS0VZIiwiVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCIsIlNXSVBFX1RIUkVTSE9MRCIsIkRlZmF1bHQiLCJrZXlib2FyZCIsInNsaWRlIiwicGF1c2UiLCJ0b3VjaCIsIkRlZmF1bHRUeXBlIiwiT1JERVJfTkVYVCIsIk9SREVSX1BSRVYiLCJESVJFQ1RJT05fTEVGVCIsIkRJUkVDVElPTl9SSUdIVCIsIktFWV9UT19ESVJFQ1RJT04iLCJFVkVOVF9TTElERSIsIkVWRU5UX1NMSUQiLCJFVkVOVF9LRVlET1dOIiwiRVZFTlRfTU9VU0VFTlRFUiIsIkVWRU5UX01PVVNFTEVBVkUiLCJFVkVOVF9UT1VDSFNUQVJUIiwiRVZFTlRfVE9VQ0hNT1ZFIiwiRVZFTlRfVE9VQ0hFTkQiLCJFVkVOVF9QT0lOVEVSRE9XTiIsIkVWRU5UX1BPSU5URVJVUCIsIkVWRU5UX0RSQUdfU1RBUlQiLCJFVkVOVF9MT0FEX0RBVEFfQVBJIiwiQ0xBU1NfTkFNRV9DQVJPVVNFTCIsIkNMQVNTX05BTUVfU0xJREUiLCJDTEFTU19OQU1FX0VORCIsIkNMQVNTX05BTUVfU1RBUlQiLCJDTEFTU19OQU1FX05FWFQiLCJDTEFTU19OQU1FX1BSRVYiLCJDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQiLCJTRUxFQ1RPUl9BQ1RJVkUiLCJTRUxFQ1RPUl9BQ1RJVkVfSVRFTSIsIlNFTEVDVE9SX0lURU0iLCJTRUxFQ1RPUl9JVEVNX0lNRyIsIlNFTEVDVE9SX05FWFRfUFJFViIsIlNFTEVDVE9SX0lORElDQVRPUlMiLCJTRUxFQ1RPUl9JTkRJQ0FUT1IiLCJTRUxFQ1RPUl9EQVRBX1NMSURFIiwiU0VMRUNUT1JfREFUQV9SSURFIiwiUE9JTlRFUl9UWVBFX1RPVUNIIiwiUE9JTlRFUl9UWVBFX1BFTiIsIkNhcm91c2VsIiwiX2l0ZW1zIiwiX2ludGVydmFsIiwiX2FjdGl2ZUVsZW1lbnQiLCJfaXNQYXVzZWQiLCJfaXNTbGlkaW5nIiwidG91Y2hUaW1lb3V0IiwidG91Y2hTdGFydFgiLCJ0b3VjaERlbHRhWCIsIl9jb25maWciLCJfZ2V0Q29uZmlnIiwiX2luZGljYXRvcnNFbGVtZW50IiwiX3RvdWNoU3VwcG9ydGVkIiwibWF4VG91Y2hQb2ludHMiLCJfcG9pbnRlckV2ZW50IiwiUG9pbnRlckV2ZW50IiwiX2FkZEV2ZW50TGlzdGVuZXJzIiwiX3NsaWRlIiwibmV4dFdoZW5WaXNpYmxlIiwiY3ljbGUiLCJjbGVhckludGVydmFsIiwiX3VwZGF0ZUludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJ2aXNpYmlsaXR5U3RhdGUiLCJhY3RpdmVJbmRleCIsIl9nZXRJdGVtSW5kZXgiLCJfaGFuZGxlU3dpcGUiLCJhYnNEZWx0YXgiLCJfa2V5ZG93biIsIl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzIiwiaGFzUG9pbnRlclBlblRvdWNoIiwibW92ZSIsIml0ZW1JbWciLCJfZ2V0SXRlbUJ5T3JkZXIiLCJpc05leHQiLCJfdHJpZ2dlclNsaWRlRXZlbnQiLCJldmVudERpcmVjdGlvbk5hbWUiLCJ0YXJnZXRJbmRleCIsImZyb21JbmRleCIsIl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50IiwiYWN0aXZlSW5kaWNhdG9yIiwiaW5kaWNhdG9ycyIsImVsZW1lbnRJbnRlcnZhbCIsImRlZmF1bHRJbnRlcnZhbCIsImRpcmVjdGlvbk9yT3JkZXIiLCJfZGlyZWN0aW9uVG9PcmRlciIsImFjdGl2ZUVsZW1lbnRJbmRleCIsIm5leHRFbGVtZW50IiwibmV4dEVsZW1lbnRJbmRleCIsImlzQ3ljbGluZyIsImRpcmVjdGlvbmFsQ2xhc3NOYW1lIiwib3JkZXJDbGFzc05hbWUiLCJfb3JkZXJUb0RpcmVjdGlvbiIsInNsaWRlRXZlbnQiLCJ0cmlnZ2VyU2xpZEV2ZW50IiwiY29tcGxldGVDYWxsQmFjayIsImFjdGlvbiIsInJpZGUiLCJjYXJvdXNlbEludGVyZmFjZSIsInNsaWRlSW5kZXgiLCJkYXRhQXBpQ2xpY2tIYW5kbGVyIiwiY2Fyb3VzZWxzIiwiRVZFTlRfU0hPVyIsIkVWRU5UX1NIT1dOIiwiRVZFTlRfSElERSIsIkVWRU5UX0hJRERFTiIsIkNMQVNTX05BTUVfQ09MTEFQU0UiLCJDTEFTU19OQU1FX0NPTExBUFNJTkciLCJDTEFTU19OQU1FX0NPTExBUFNFRCIsIkNMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOIiwiQ0xBU1NfTkFNRV9IT1JJWk9OVEFMIiwiV0lEVEgiLCJIRUlHSFQiLCJTRUxFQ1RPUl9BQ1RJVkVTIiwiQ29sbGFwc2UiLCJfaXNUcmFuc2l0aW9uaW5nIiwiX3RyaWdnZXJBcnJheSIsInRvZ2dsZUxpc3QiLCJmaWx0ZXJFbGVtZW50IiwiZm91bmRFbGVtIiwiX3NlbGVjdG9yIiwiX2luaXRpYWxpemVDaGlsZHJlbiIsIl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MiLCJfaXNTaG93biIsImFjdGl2ZXMiLCJhY3RpdmVzRGF0YSIsInRlbXBBY3RpdmVEYXRhIiwic3RhcnRFdmVudCIsImVsZW1BY3RpdmUiLCJfZ2V0RGltZW5zaW9uIiwiY2FwaXRhbGl6ZWREaW1lbnNpb24iLCJzY3JvbGxTaXplIiwidHJpZ2dlckFycmF5TGVuZ3RoIiwidHJpZ2dlckFycmF5IiwiaXNPcGVuIiwic2VsZWN0b3JFbGVtZW50cyIsIkVTQ0FQRV9LRVkiLCJTUEFDRV9LRVkiLCJUQUJfS0VZIiwiQVJST1dfVVBfS0VZIiwiQVJST1dfRE9XTl9LRVkiLCJSSUdIVF9NT1VTRV9CVVRUT04iLCJSRUdFWFBfS0VZRE9XTiIsIkVWRU5UX0tFWURPV05fREFUQV9BUEkiLCJFVkVOVF9LRVlVUF9EQVRBX0FQSSIsIkNMQVNTX05BTUVfRFJPUFVQIiwiQ0xBU1NfTkFNRV9EUk9QRU5EIiwiQ0xBU1NfTkFNRV9EUk9QU1RBUlQiLCJDTEFTU19OQU1FX05BVkJBUiIsIlNFTEVDVE9SX01FTlUiLCJTRUxFQ1RPUl9OQVZCQVJfTkFWIiwiU0VMRUNUT1JfVklTSUJMRV9JVEVNUyIsIlBMQUNFTUVOVF9UT1AiLCJQTEFDRU1FTlRfVE9QRU5EIiwiUExBQ0VNRU5UX0JPVFRPTSIsIlBMQUNFTUVOVF9CT1RUT01FTkQiLCJQTEFDRU1FTlRfUklHSFQiLCJQTEFDRU1FTlRfTEVGVCIsInBvcHBlckNvbmZpZyIsImF1dG9DbG9zZSIsIkRyb3Bkb3duIiwiX3BvcHBlciIsIl9tZW51IiwiX2dldE1lbnVFbGVtZW50IiwiX2luTmF2YmFyIiwiX2RldGVjdE5hdmJhciIsInNob3dFdmVudCIsImdldFBhcmVudEZyb21FbGVtZW50IiwiX2NyZWF0ZVBvcHBlciIsIl9jb21wbGV0ZUhpZGUiLCJoaWRlRXZlbnQiLCJQb3BwZXIiLCJyZWZlcmVuY2VFbGVtZW50IiwiX2dldFBvcHBlckNvbmZpZyIsImlzRGlzcGxheVN0YXRpYyIsIl9nZXRQbGFjZW1lbnQiLCJwYXJlbnREcm9wZG93biIsImlzRW5kIiwiX2dldE9mZnNldCIsInBvcHBlckRhdGEiLCJkZWZhdWx0QnNQb3BwZXJDb25maWciLCJfc2VsZWN0TWVudUl0ZW0iLCJpdGVtcyIsInRvZ2dsZXMiLCJjb21wb3NlZFBhdGgiLCJpc01lbnVUYXJnZXQiLCJpc0FjdGl2ZSIsImdldFRvZ2dsZUJ1dHRvbiIsImNsZWFyTWVudXMiLCJkYXRhQXBpS2V5ZG93bkhhbmRsZXIiLCJTRUxFQ1RPUl9GSVhFRF9DT05URU5UIiwiU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQiLCJTY3JvbGxCYXJIZWxwZXIiLCJnZXRXaWR0aCIsImRvY3VtZW50V2lkdGgiLCJpbm5lcldpZHRoIiwiX2Rpc2FibGVPdmVyRmxvdyIsIl9zZXRFbGVtZW50QXR0cmlidXRlcyIsImNhbGN1bGF0ZWRWYWx1ZSIsIl9zYXZlSW5pdGlhbEF0dHJpYnV0ZSIsInN0eWxlUHJvcCIsInNjcm9sbGJhcldpZHRoIiwibWFuaXB1bGF0aW9uQ2FsbEJhY2siLCJfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayIsIl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzIiwiYWN0dWFsVmFsdWUiLCJyZW1vdmVQcm9wZXJ0eSIsImNhbGxCYWNrIiwiaXNPdmVyZmxvd2luZyIsInJvb3RFbGVtZW50IiwiY2xpY2tDYWxsYmFjayIsIkVWRU5UX01PVVNFRE9XTiIsIkJhY2tkcm9wIiwiX2lzQXBwZW5kZWQiLCJfYXBwZW5kIiwiX2dldEVsZW1lbnQiLCJfZW11bGF0ZUFuaW1hdGlvbiIsImJhY2tkcm9wIiwidHJhcEVsZW1lbnQiLCJhdXRvZm9jdXMiLCJFVkVOVF9GT0NVU0lOIiwiRVZFTlRfS0VZRE9XTl9UQUIiLCJUQUJfTkFWX0ZPUldBUkQiLCJUQUJfTkFWX0JBQ0tXQVJEIiwiRm9jdXNUcmFwIiwiX2lzQWN0aXZlIiwiX2xhc3RUYWJOYXZEaXJlY3Rpb24iLCJhY3RpdmF0ZSIsIl9oYW5kbGVGb2N1c2luIiwiX2hhbmRsZUtleWRvd24iLCJkZWFjdGl2YXRlIiwiRVZFTlRfSElERV9QUkVWRU5URUQiLCJFVkVOVF9SRVNJWkUiLCJFVkVOVF9DTElDS19ESVNNSVNTIiwiRVZFTlRfS0VZRE9XTl9ESVNNSVNTIiwiRVZFTlRfTU9VU0VVUF9ESVNNSVNTIiwiRVZFTlRfTU9VU0VET1dOX0RJU01JU1MiLCJDTEFTU19OQU1FX09QRU4iLCJDTEFTU19OQU1FX1NUQVRJQyIsIk9QRU5fU0VMRUNUT1IiLCJTRUxFQ1RPUl9ESUFMT0ciLCJTRUxFQ1RPUl9NT0RBTF9CT0RZIiwiTW9kYWwiLCJfZGlhbG9nIiwiX2JhY2tkcm9wIiwiX2luaXRpYWxpemVCYWNrRHJvcCIsIl9mb2N1c3RyYXAiLCJfaW5pdGlhbGl6ZUZvY3VzVHJhcCIsIl9pZ25vcmVCYWNrZHJvcENsaWNrIiwiX3Njcm9sbEJhciIsIl9pc0FuaW1hdGVkIiwiX2FkanVzdERpYWxvZyIsIl9zZXRFc2NhcGVFdmVudCIsIl9zZXRSZXNpemVFdmVudCIsIl9zaG93QmFja2Ryb3AiLCJfc2hvd0VsZW1lbnQiLCJfaGlkZU1vZGFsIiwiaHRtbEVsZW1lbnQiLCJoYW5kbGVVcGRhdGUiLCJtb2RhbEJvZHkiLCJ0cmFuc2l0aW9uQ29tcGxldGUiLCJfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbiIsIl9yZXNldEFkanVzdG1lbnRzIiwiaXNNb2RhbE92ZXJmbG93aW5nIiwiaXNCb2R5T3ZlcmZsb3dpbmciLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsImFsbFJlYWR5T3BlbiIsIkNMQVNTX05BTUVfQkFDS0RST1AiLCJPZmZjYW52YXMiLCJjb21wbGV0ZUNhbGxiYWNrIiwidXJpQXR0cmlidXRlcyIsIkFSSUFfQVRUUklCVVRFX1BBVFRFUk4iLCJTQUZFX1VSTF9QQVRURVJOIiwiREFUQV9VUkxfUEFUVEVSTiIsImFsbG93ZWRBdHRyaWJ1dGUiLCJhbGxvd2VkQXR0cmlidXRlTGlzdCIsImF0dHJpYnV0ZU5hbWUiLCJyZWdFeHAiLCJhdHRyaWJ1dGVSZWdleCIsIkRlZmF1bHRBbGxvd2xpc3QiLCJhcmVhIiwiYnIiLCJlbSIsImhyIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaW1nIiwibGkiLCJvbCIsInByZSIsInNtYWxsIiwic3BhbiIsInN1YiIsInN1cCIsInN0cm9uZyIsInUiLCJ1bCIsInNhbml0aXplSHRtbCIsInVuc2FmZUh0bWwiLCJhbGxvd0xpc3QiLCJzYW5pdGl6ZUZuIiwiZG9tUGFyc2VyIiwiY3JlYXRlZERvY3VtZW50IiwiZWxlbWVudE5hbWUiLCJhdHRyaWJ1dGVMaXN0IiwiYWxsb3dlZEF0dHJpYnV0ZXMiLCJDTEFTU19QUkVGSVgiLCJESVNBTExPV0VEX0FUVFJJQlVURVMiLCJ0ZW1wbGF0ZSIsInRpdGxlIiwiY3VzdG9tQ2xhc3MiLCJzYW5pdGl6ZSIsIkF0dGFjaG1lbnRNYXAiLCJBVVRPIiwiVE9QIiwiUklHSFQiLCJCT1RUT00iLCJMRUZUIiwiSElERSIsIkhJRERFTiIsIlNIT1ciLCJTSE9XTiIsIklOU0VSVEVEIiwiQ0xJQ0siLCJGT0NVU0lOIiwiRk9DVVNPVVQiLCJNT1VTRUVOVEVSIiwiTU9VU0VMRUFWRSIsIkNMQVNTX05BTUVfTU9EQUwiLCJIT1ZFUl9TVEFURV9TSE9XIiwiSE9WRVJfU1RBVEVfT1VUIiwiU0VMRUNUT1JfVE9PTFRJUF9JTk5FUiIsIlNFTEVDVE9SX01PREFMIiwiRVZFTlRfTU9EQUxfSElERSIsIlRSSUdHRVJfSE9WRVIiLCJUUklHR0VSX0ZPQ1VTIiwiVFJJR0dFUl9DTElDSyIsIlRSSUdHRVJfTUFOVUFMIiwiVG9vbHRpcCIsIl9pc0VuYWJsZWQiLCJfdGltZW91dCIsIl9ob3ZlclN0YXRlIiwiX2FjdGl2ZVRyaWdnZXIiLCJ0aXAiLCJfc2V0TGlzdGVuZXJzIiwiZW5hYmxlIiwidG9nZ2xlRW5hYmxlZCIsIl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQiLCJfaXNXaXRoQWN0aXZlVHJpZ2dlciIsIl9lbnRlciIsIl9sZWF2ZSIsImdldFRpcEVsZW1lbnQiLCJfaGlkZU1vZGFsSGFuZGxlciIsIl9kaXNwb3NlUG9wcGVyIiwiaXNXaXRoQ29udGVudCIsInNoYWRvd1Jvb3QiLCJpc0luVGhlRG9tIiwiZ2V0VGl0bGUiLCJ0aXBJZCIsImF0dGFjaG1lbnQiLCJfZ2V0QXR0YWNobWVudCIsIl9hZGRBdHRhY2htZW50Q2xhc3MiLCJfcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24iLCJwcmV2SG92ZXJTdGF0ZSIsIl9jbGVhblRpcENsYXNzIiwic2V0Q29udGVudCIsIl9zYW5pdGl6ZUFuZFNldENvbnRlbnQiLCJ0ZW1wbGF0ZUVsZW1lbnQiLCJzZXRFbGVtZW50Q29udGVudCIsInVwZGF0ZUF0dGFjaG1lbnQiLCJfZ2V0RGVsZWdhdGVDb25maWciLCJfaGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlIiwiX2dldEJhc2ljQ2xhc3NQcmVmaXgiLCJ0cmlnZ2VycyIsImV2ZW50SW4iLCJldmVudE91dCIsIl9maXhUaXRsZSIsIm9yaWdpbmFsVGl0bGVUeXBlIiwiZGF0YUF0dHJpYnV0ZXMiLCJiYXNpY0NsYXNzUHJlZml4UmVnZXgiLCJ0YWJDbGFzcyIsInRDbGFzcyIsIlNFTEVDVE9SX1RJVExFIiwiU0VMRUNUT1JfQ09OVEVOVCIsIlBvcG92ZXIiLCJfZ2V0Q29udGVudCIsIkVWRU5UX0FDVElWQVRFIiwiRVZFTlRfU0NST0xMIiwiQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNIiwiU0VMRUNUT1JfREFUQV9TUFkiLCJTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCIsIlNFTEVDVE9SX05BVl9MSU5LUyIsIlNFTEVDVE9SX05BVl9JVEVNUyIsIlNFTEVDVE9SX0xJU1RfSVRFTVMiLCJTRUxFQ1RPUl9MSU5LX0lURU1TIiwiU0VMRUNUT1JfRFJPUERPV04iLCJTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUiLCJNRVRIT0RfT0ZGU0VUIiwiTUVUSE9EX1BPU0lUSU9OIiwiU2Nyb2xsU3B5IiwiX3Njcm9sbEVsZW1lbnQiLCJfb2Zmc2V0cyIsIl90YXJnZXRzIiwiX2FjdGl2ZVRhcmdldCIsIl9zY3JvbGxIZWlnaHQiLCJfcHJvY2VzcyIsInJlZnJlc2giLCJhdXRvTWV0aG9kIiwib2Zmc2V0TWV0aG9kIiwib2Zmc2V0QmFzZSIsIl9nZXRTY3JvbGxUb3AiLCJfZ2V0U2Nyb2xsSGVpZ2h0IiwidGFyZ2V0U2VsZWN0b3IiLCJ0YXJnZXRCQ1IiLCJfZ2V0T2Zmc2V0SGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJtYXhTY3JvbGwiLCJfYWN0aXZhdGUiLCJfY2xlYXIiLCJpc0FjdGl2ZVRhcmdldCIsInF1ZXJpZXMiLCJsaW5rIiwibGlzdEdyb3VwIiwibmF2SXRlbSIsInNweSIsIkNMQVNTX05BTUVfRFJPUERPV05fTUVOVSIsIlNFTEVDVE9SX0FDVElWRV9VTCIsIlNFTEVDVE9SX0RST1BET1dOX0FDVElWRV9DSElMRCIsIlRhYiIsImxpc3RFbGVtZW50IiwiaXRlbVNlbGVjdG9yIiwiYWN0aXZlRWxlbWVudHMiLCJpc1RyYW5zaXRpb25pbmciLCJfdHJhbnNpdGlvbkNvbXBsZXRlIiwiZHJvcGRvd25DaGlsZCIsImRyb3Bkb3duRWxlbWVudCIsImRyb3Bkb3duIiwiRVZFTlRfTU9VU0VPVkVSIiwiRVZFTlRfTU9VU0VPVVQiLCJFVkVOVF9GT0NVU09VVCIsIkNMQVNTX05BTUVfSElERSIsIkNMQVNTX05BTUVfU0hPV0lORyIsImF1dG9oaWRlIiwiVG9hc3QiLCJfaGFzTW91c2VJbnRlcmFjdGlvbiIsIl9oYXNLZXlib2FyZEludGVyYWN0aW9uIiwiX2NsZWFyVGltZW91dCIsIl9tYXliZVNjaGVkdWxlSGlkZSIsIl9vbkludGVyYWN0aW9uIiwiaXNJbnRlcmFjdGluZyIsInRvZ2dsZUNvbm5lY3Rpb25TdHJpbmdBbmRQcmVmaXgiLCJjaGFuZ2UiLCJyZWZyZXNoRGVzY3JpcHRpb24iLCJyZWNpcGVOYW1lIiwicmVjaXBlRGlzcGxheU5hbWUiLCJyZWNpcGVEZXNjcmlwdGlvbiIsInNldExvY2FsaXphdGlvblVybCIsImN1bHR1cmVzTGlzdCIsInRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eSIsInBhc3N3b3JkQ3RsIiwidG9nZ2xlUGFzc3dvcmRDdGwiLCJpY29uIiwic3RyZW5ndGgiLCJtaW5MZW5ndGgiLCJ1cHBlckNhc2UiLCJsb3dlckNhc2UiLCJudW1iZXJzIiwic3BlY2lhbGNoYXJzIiwiY2FwaXRhbGxldHRlcnMiLCJsb3dlcmxldHRlcnMiLCJudW1iZXIiLCJzcGVjaWFsY2hhciIsInZhbGlkIiwiY3JlYXRlUHJvZ3Jlc3NCYXIiLCJnZXRQZXJjZW50YWdlIiwidG9GaXhlZCIsImdldExldmVsIiwiY2hlY2tTdHJlbmd0aCIsInRvdGFsIiwicGVyY2VudGFnZSIsImxldmVsIiwiZGF0YVRyYW5zZmVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFFLFVBQVVB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Qk0sVUFBM0IsRUFBdUNDLEtBQXZDLEVBQThDO01BQzFDLElBQUk5M0QsRUFBRSxHQUFHcThCLENBQUMsQ0FBQyxrQ0FBa0N3N0IsVUFBbEMsR0FBK0MsV0FBL0MsR0FBNkQvaUMsUUFBUSxDQUFDdGYsS0FBdEUsR0FBOEUsMkRBQTlFLEdBQTRJc2lELEtBQTVJLEdBQW9KLHNDQUFwSixHQUE2TEQsVUFBN0wsR0FBME0sa0JBQTNNLENBQVY7TUFDQSxJQUFJdGdFLE1BQU0sR0FBRzhrQyxDQUFDLENBQUN2SCxRQUFRLENBQUN2OUIsTUFBVixDQUFkO01BQ0FBLE1BQU0sQ0FBQzBXLEtBQVA7TUFDQTFXLE1BQU0sQ0FBQytwQixNQUFQLENBQWN0aEIsRUFBZDtJQUNIOztJQUVELEtBQUs4ckIsSUFBTCxDQUFVLGVBQVYsRUFBMkIsVUFBVXBTLEtBQVYsRUFBaUI7TUFDeENpK0MsYUFBYSxDQUFDdDdCLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUWxvQyxHQUFSLEVBQUQsQ0FBYjtJQUNILENBRkQ7SUFHQSxLQUFLMjNCLElBQUwsQ0FBVSxNQUFWLEVBQWtCLFVBQVVwUyxLQUFWLEVBQWlCO01BQy9CaStDLGFBQWEsQ0FBQ2orQyxLQUFLLENBQUMwQyxhQUFOLENBQW9CMjdDLFlBQXBCLENBQWlDL2pELE9BQWpDLENBQXlDLE1BQXpDLENBQUQsQ0FBYjtJQUNILENBRkQ7SUFJQSxLQUFLdkgsT0FBTCxDQUFhLE1BQWIsRUFBcUI2TSxFQUFyQixDQUF3QixRQUF4QixFQUFrQyxZQUFZO01BQzFDLElBQUksQ0FBQ2crQyxLQUFMLEVBQVk7UUFDUjU5QyxLQUFLLENBQUNnQyxjQUFOO01BQ0g7SUFDSixDQUpEO0VBS0gsQ0FuRkQ7QUFvRkgsQ0F0RkEsRUFzRkMzbUIsTUF0RkQsQ0FBRCIsImZpbGUiOiJzZXR1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My42LjBcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAyMS0wMy0wMlQxNzowOFpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgZmxhdCA9IGFyci5mbGF0ID8gZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmZsYXQuY2FsbCggYXJyYXkgKTtcbn0gOiBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuY29uY2F0LmFwcGx5KCBbXSwgYXJyYXkgKTtcbn07XG5cblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTU3LCBGaXJlZm94IDw9NTJcblx0XHQvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcblx0XHQvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuXHRcdC8vIFdlIGRvbid0IHdhbnQgdG8gY2xhc3NpZnkgKmFueSogRE9NIG5vZGUgYXMgYSBmdW5jdGlvbi5cblx0XHQvLyBTdXBwb3J0OiBRdFdlYiA8PTMuOC41LCBXZWJLaXQgPD01MzQuMzQsIHdraHRtbHRvcGRmIHRvb2wgPD0wLjEyLjVcblx0XHQvLyBQbHVzIGZvciBvbGQgV2ViS2l0LCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgY29sbGVjdGlvbnNcblx0XHQvLyAoZS5nLiwgYHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKSA9PT0gXCJmdW5jdGlvblwiYCkuIChnaC00NzU2KVxuXHRcdHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gXCJudW1iZXJcIiAmJlxuXHRcdFx0dHlwZW9mIG9iai5pdGVtICE9PSBcImZ1bmN0aW9uXCI7XG5cdH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxuXG5cblx0dmFyIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgPSB7XG5cdFx0dHlwZTogdHJ1ZSxcblx0XHRzcmM6IHRydWUsXG5cdFx0bm9uY2U6IHRydWUsXG5cdFx0bm9Nb2R1bGU6IHRydWVcblx0fTtcblxuXHRmdW5jdGlvbiBET01FdmFsKCBjb2RlLCBub2RlLCBkb2MgKSB7XG5cdFx0ZG9jID0gZG9jIHx8IGRvY3VtZW50O1xuXG5cdFx0dmFyIGksIHZhbCxcblx0XHRcdHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCBcInNjcmlwdFwiICk7XG5cblx0XHRzY3JpcHQudGV4dCA9IGNvZGU7XG5cdFx0aWYgKCBub2RlICkge1xuXHRcdFx0Zm9yICggaSBpbiBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNjQrLCBFZGdlIDE4K1xuXHRcdFx0XHQvLyBTb21lIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIFwibm9uY2VcIiBwcm9wZXJ0eSBvbiBzY3JpcHRzLlxuXHRcdFx0XHQvLyBPbiB0aGUgb3RoZXIgaGFuZCwganVzdCB1c2luZyBgZ2V0QXR0cmlidXRlYCBpcyBub3QgZW5vdWdoIGFzXG5cdFx0XHRcdC8vIHRoZSBgbm9uY2VgIGF0dHJpYnV0ZSBpcyByZXNldCB0byBhbiBlbXB0eSBzdHJpbmcgd2hlbmV2ZXIgaXRcblx0XHRcdFx0Ly8gYmVjb21lcyBicm93c2luZy1jb250ZXh0IGNvbm5lY3RlZC5cblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvaHRtbC9pc3N1ZXMvMjM2OVxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jbm9uY2UtYXR0cmlidXRlc1xuXHRcdFx0XHQvLyBUaGUgYG5vZGUuZ2V0QXR0cmlidXRlYCBjaGVjayB3YXMgYWRkZWQgZm9yIHRoZSBzYWtlIG9mXG5cdFx0XHRcdC8vIGBqUXVlcnkuZ2xvYmFsRXZhbGAgc28gdGhhdCBpdCBjYW4gZmFrZSBhIG5vbmNlLWNvbnRhaW5pbmcgbm9kZVxuXHRcdFx0XHQvLyB2aWEgYW4gb2JqZWN0LlxuXHRcdFx0XHR2YWwgPSBub2RlWyBpIF0gfHwgbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoIGkgKTtcblx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSggaSwgdmFsICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZG9jLmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApO1xuXHR9XG5cblxuZnVuY3Rpb24gdG9UeXBlKCBvYmogKSB7XG5cdGlmICggb2JqID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIG9iaiArIFwiXCI7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHkgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cblx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdHR5cGVvZiBvYmo7XG59XG4vKiBnbG9iYWwgU3ltYm9sICovXG4vLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuZXNsaW50cmMuanNvbiB3b3VsZCBjcmVhdGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbFxuLy8gdW5ndWFyZGVkIGluIGFub3RoZXIgcGxhY2UsIGl0IHNlZW1zIHNhZmVyIHRvIGRlZmluZSBnbG9iYWwgb25seSBmb3IgdGhpcyBtb2R1bGVcblxuXG5cbnZhclxuXHR2ZXJzaW9uID0gXCIzLjYuMFwiLFxuXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XG5cdGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblxuXHRcdC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJ1xuXHRcdC8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVkZWQpXG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTtcblx0fTtcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxuXHRsZW5ndGg6IDAsXG5cblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcblxuXHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcblx0XHRpZiAoIG51bSA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XG5cdFx0cmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XG5cdH0sXG5cblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XG5cdH0sXG5cblx0bGFzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIC0xICk7XG5cdH0sXG5cblx0ZXZlbjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICggaSArIDEgKSAlIDI7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0b2RkOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gaSAlIDI7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0ZXE6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XG5cdH0sXG5cblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuXHQvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC5cblx0cHVzaDogcHVzaCxcblx0c29ydDogYXJyLnNvcnQsXG5cdHNwbGljZTogYXJyLnNwbGljZVxufTtcblxualF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxuXHRcdGkgPSAxLFxuXHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0ZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xuXHRcdGkrKztcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IE9iamVjdC5wcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCBuYW1lID09PSBcIl9fcHJvdG9fX1wiIHx8IHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcblx0XHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblxuXHRcdFx0XHRcdC8vIEVuc3VyZSBwcm9wZXIgdHlwZSBmb3IgdGhlIHNvdXJjZSB2YWx1ZVxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgJiYgIUFycmF5LmlzQXJyYXkoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBbXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhY29weUlzQXJyYXkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0ge307XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgcHJvdG8sIEN0b3I7XG5cblx0XHQvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXNcblx0XHQvLyBVc2UgdG9TdHJpbmcgaW5zdGVhZCBvZiBqUXVlcnkudHlwZSB0byBjYXRjaCBob3N0IG9iamVjdHNcblx0XHRpZiAoICFvYmogfHwgdG9TdHJpbmcuY2FsbCggb2JqICkgIT09IFwiW29iamVjdCBPYmplY3RdXCIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cHJvdG8gPSBnZXRQcm90byggb2JqICk7XG5cblx0XHQvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBlIChlLmcuLCBgT2JqZWN0LmNyZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluXG5cdFx0aWYgKCAhcHJvdG8gKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBPYmplY3RzIHdpdGggcHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIGJ5IGEgZ2xvYmFsIE9iamVjdCBmdW5jdGlvblxuXHRcdEN0b3IgPSBoYXNPd24uY2FsbCggcHJvdG8sIFwiY29uc3RydWN0b3JcIiApICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIGZuVG9TdHJpbmcuY2FsbCggQ3RvciApID09PSBPYmplY3RGdW5jdGlvblN0cmluZztcblx0fSxcblxuXHRpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBuYW1lO1xuXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIHByb3ZpZGVkIGNvbnRleHQ7IGZhbGxzIGJhY2sgdG8gdGhlIGdsb2JhbCBvbmVcblx0Ly8gaWYgbm90IHNwZWNpZmllZC5cblx0Z2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUsIG9wdGlvbnMsIGRvYyApIHtcblx0XHRET01FdmFsKCBjb2RlLCB7IG5vbmNlOiBvcHRpb25zICYmIG9wdGlvbnMubm9uY2UgfSwgZG9jICk7XG5cdH0sXG5cblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XG5cblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHtcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHQvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcblxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggcmV0LFxuXHRcdFx0XHRcdHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gZmxhdCggcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0XHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0fSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG52YXIgU2l6emxlID1cbi8qIVxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy42XG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanMuZm91bmRhdGlvbi9cbiAqXG4gKiBEYXRlOiAyMDIxLTAyLTE2XG4gKi9cbiggZnVuY3Rpb24oIHdpbmRvdyApIHtcbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICgge30gKS5oYXNPd25Qcm9wZXJ0eSxcblx0YXJyID0gW10sXG5cdHBvcCA9IGFyci5wb3AsXG5cdHB1c2hOYXRpdmUgPSBhcnIucHVzaCxcblx0cHVzaCA9IGFyci5wdXNoLFxuXHRzbGljZSA9IGFyci5zbGljZSxcblxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIGxpc3RbIGkgXSA9PT0gZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufFwiICtcblx0XHRcImlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2Vcblx0d2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixcblxuXHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXN5bnRheC0zLyNpZGVudC10b2tlbi1kaWFncmFtXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIj98XFxcXFxcXFxbXlxcXFxyXFxcXG5cXFxcZl18W1xcXFx3LV18W15cXDAtXFxcXHg3Zl0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdXG5cdFx0Ly8gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblxuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblxuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCIqXCIgKSxcblx0cmRlc2NlbmQgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCJ8PlwiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRcIklEXCI6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIkNMQVNTXCI6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJUQUdcIjogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdFwiQVRUUlwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdFwibmVlZHNDb250ZXh0XCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmh0bWwgPSAvSFRNTCQvaSxcblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgKyBcIj98XFxcXFxcXFwoW15cXFxcclxcXFxuXFxcXGZdKVwiLCBcImdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggZXNjYXBlLCBub25IZXggKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGUuc2xpY2UoIDEgKSAtIDB4MTAwMDA7XG5cblx0XHRyZXR1cm4gbm9uSGV4ID9cblxuXHRcdFx0Ly8gU3RyaXAgdGhlIGJhY2tzbGFzaCBwcmVmaXggZnJvbSBhIG5vbi1oZXggZXNjYXBlIHNlcXVlbmNlXG5cdFx0XHRub25IZXggOlxuXG5cdFx0XHQvLyBSZXBsYWNlIGEgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIHdpdGggdGhlIGVuY29kZWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdFx0Ly8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCksIG1hbnVhbGx5IGNvbnN0cnVjdCBhXG5cdFx0XHQvLyBzdXJyb2dhdGUgcGFpclxuXHRcdFx0aGlnaCA8IDAgP1xuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb25cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG5cdHJjc3Nlc2NhcGUgPSAvKFtcXDAtXFx4MWZcXHg3Zl18Xi0/XFxkKXxeLSR8W15cXDAtXFx4MWZcXHg3Zi1cXHVGRkZGXFx3LV0vZyxcblx0ZmNzc2VzY2FwZSA9IGZ1bmN0aW9uKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdFx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdFx0Ly8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXG5cdFx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArXG5cdFx0XHRcdGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0XHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzXG5cdC8vIFNlZSBzZXREb2N1bWVudCgpXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxuXHQvLyBlcnJvciBpbiBJRVxuXHR1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0c2V0RG9jdW1lbnQoKTtcblx0fSxcblxuXHRpbkRpc2FibGVkRmllbGRzZXQgPSBhZGRDb21iaW5hdG9yKFxuXHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImZpZWxkc2V0XCI7XG5cdFx0fSxcblx0XHR7IGRpcjogXCJwYXJlbnROb2RlXCIsIG5leHQ6IFwibGVnZW5kXCIgfVxuXHQpO1xuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoIGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkgKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xufSBjYXRjaCAoIGUgKSB7XG5cdHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID9cblxuXHRcdC8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlXG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBlbHMgKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHQvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGhcblx0XHRcdHdoaWxlICggKCB0YXJnZXRbIGorKyBdID0gZWxzWyBpKysgXSApICkge31cblx0XHRcdHRhcmdldC5sZW5ndGggPSBqIC0gMTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmICggbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoICggbSA9IG1hdGNoWyAxIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoIGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSAmJlxuXHRcdFx0XHRcdFx0XHRjb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAyIF0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggbSA9IG1hdGNoWyAzIF0gKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiZcblx0XHRcdFx0XHRjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdGlmICggc3VwcG9ydC5xc2EgJiZcblx0XHRcdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXSAmJlxuXHRcdFx0XHQoICFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApICkgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA4IG9ubHlcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0KCBub2RlVHlwZSAhPT0gMSB8fCBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwib2JqZWN0XCIgKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhlIHRlY2huaXF1ZSBoYXMgdG8gYmUgdXNlZCBhcyB3ZWxsIHdoZW4gYSBsZWFkaW5nIGNvbWJpbmF0b3IgaXMgdXNlZFxuXHRcdFx0XHQvLyBhcyBzdWNoIHNlbGVjdG9ycyBhcmUgbm90IHJlY29nbml6ZWQgYnkgcXVlcnlTZWxlY3RvckFsbC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0KCByZGVzY2VuZC50ZXN0KCBzZWxlY3RvciApIHx8IHJjb21iaW5hdG9ycy50ZXN0KCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBXZSBjYW4gdXNlIDpzY29wZSBpbnN0ZWFkIG9mIHRoZSBJRCBoYWNrIGlmIHRoZSBicm93c2VyXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydHMgaXQgJiBpZiB3ZSdyZSBub3QgY2hhbmdpbmcgdGhlIGNvbnRleHQuXG5cdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICE9PSBjb250ZXh0IHx8ICFzdXBwb3J0LnNjb3BlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFx0aWYgKCAoIG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSApICkge1xuXHRcdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKCBuaWQgPSBleHBhbmRvICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1sgaSBdID0gKCBuaWQgPyBcIiNcIiArIG5pZCA6IFwiOnNjb3BlXCIgKSArIFwiIFwiICtcblx0XHRcdFx0XHRcdFx0dG9TZWxlY3RvciggZ3JvdXBzWyBpIF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuICggY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSApO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xuICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXG4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7XG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdCggXCJ8XCIgKSxcblx0XHRpID0gYXJyLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRFeHByLmF0dHJIYW5kbGVbIGFyclsgaSBdIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLm5leHRTaWJsaW5nICkgKSB7XG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhID8gMSA6IC0xO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gKCBuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIiApICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZFxuICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7XG5cblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6XG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWRcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZFxuXHRcdFx0Ly8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhIFwiZm9ybVwiIHByb3BlcnR5LlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnRcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDYgLSAxMVxuXHRcdFx0XHQvLyBVc2UgdGhlIGlzRGlzYWJsZWQgc2hvcnRjdXQgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGRpc2FibGVkIGZpZWxkc2V0IGFuY2VzdG9yc1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pc0Rpc2FibGVkID09PSBkaXNhYmxlZCB8fFxuXG5cdFx0XHRcdFx0Ly8gV2hlcmUgdGhlcmUgaXMgbm8gaXNEaXNhYmxlZCwgY2hlY2sgbWFudWFsbHlcblx0XHRcdFx0XHQvKiBqc2hpbnQgLVcwMTggKi9cblx0XHRcdFx0XHRlbGVtLmlzRGlzYWJsZWQgIT09ICFkaXNhYmxlZCAmJlxuXHRcdFx0XHRcdGluRGlzYWJsZWRGaWVsZHNldCggZWxlbSApID09PSBkaXNhYmxlZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXG5cdFx0Ly8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LlxuXHRcdC8vIFNvbWUgdmljdGltcyBnZXQgY2F1Z2h0IGluIG91ciBuZXQgKGxhYmVsLCBsZWdlbmQsIG1lbnUsIHRyYWNrKSwgYnV0IGl0IHNob3VsZG4ndFxuXHRcdC8vIGV2ZW4gZXhpc3Qgb24gdGhlbSwgbGV0IGFsb25lIGhhdmUgYSBib29sZWFuIHZhbHVlLlxuXHRcdH0gZWxzZSBpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKCBqID0gbWF0Y2hJbmRleGVzWyBpIF0gKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbIGogXSA9ICEoIG1hdGNoZXNbIGogXSA9IHNlZWRbIGogXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbmFtZXNwYWNlID0gZWxlbSAmJiBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRkb2NFbGVtID0gZWxlbSAmJiAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkuZG9jdW1lbnRFbGVtZW50O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OFxuXHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGUgbG9hZGluZyBpZnJhbWVzXG5cdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC80ODMzXG5cdHJldHVybiAhcmh0bWwudGVzdCggbmFtZXNwYWNlIHx8IGRvY0VsZW0gJiYgZG9jRWxlbS5ub2RlTmFtZSB8fCBcIkhUTUxcIiApO1xufTtcblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdHZhciBoYXNDb21wYXJlLCBzdWJXaW5kb3csXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggZG9jID09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XG5cdH1cblxuXHQvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlc1xuXHRkb2N1bWVudCA9IGRvYztcblx0ZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0ZG9jdW1lbnRJc0hUTUwgPSAhaXNYTUwoIGRvY3VtZW50ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHQvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvcnMgKGpRdWVyeSAjMTM5MzYpXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggcHJlZmVycmVkRG9jICE9IGRvY3VtZW50ICYmXG5cdFx0KCBzdWJXaW5kb3cgPSBkb2N1bWVudC5kZWZhdWx0VmlldyApICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExLCBFZGdlXG5cdFx0aWYgKCBzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHlcblx0XHR9IGVsc2UgaWYgKCBzdWJXaW5kb3cuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSAxMSssIEVkZ2UgMTIgLSAxOCssIENocm9tZSA8PTE2IC0gMjUgb25seSwgRmlyZWZveCA8PTMuNiAtIDMxIG9ubHksXG5cdC8vIFNhZmFyaSA0IC0gNSBvbmx5LCBPcGVyYSA8PTExLjYgLSAxMi54IG9ubHlcblx0Ly8gSUUvRWRnZSAmIG9sZGVyIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIDpzY29wZSBwc2V1ZG8tY2xhc3MuXG5cdC8vIFN1cHBvcnQ6IFNhZmFyaSA2LjAgb25seVxuXHQvLyBTYWZhcmkgNi4wIHN1cHBvcnRzIDpzY29wZSBidXQgaXQncyBhbiBhbGlhcyBvZiA6cm9vdCB0aGVyZS5cblx0c3VwcG9ydC5zY29wZSA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXHRcdHJldHVybiB0eXBlb2YgZWwucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0IWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOnNjb3BlIGZpZWxkc2V0IGRpdlwiICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0LyogQXR0cmlidXRlc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gU3VwcG9ydDogSUU8OFxuXHQvLyBWZXJpZnkgdGhhdCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXNcblx0Ly8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpXG5cdHN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmNsYXNzTmFtZSA9IFwiaVwiO1xuXHRcdHJldHVybiAhZWwuZ2V0QXR0cmlidXRlKCBcImNsYXNzTmFtZVwiICk7XG5cdH0gKTtcblxuXHQvKiBnZXRFbGVtZW50KHMpQnkqXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudCggXCJcIiApICk7XG5cdFx0cmV0dXJuICFlbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCIqXCIgKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvLyBTdXBwb3J0OiBJRTw5XG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtbWF0aWNhbGx5LXNldCBuYW1lcyxcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBleHBhbmRvO1xuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gSUQgZmlsdGVyIGFuZCBmaW5kXG5cdGlmICggc3VwcG9ydC5nZXRCeUlkICkge1xuXHRcdEV4cHIuZmlsdGVyWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0RXhwci5maW5kWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblx0XHRcdFx0cmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0RXhwci5maWx0ZXJbIFwiSURcIiBdID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdEV4cHIuZmluZFsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgbm9kZSwgaSwgZWxlbXMsXG5cdFx0XHRcdFx0ZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0Ly8gVmVyaWZ5IHRoZSBpZCBhdHRyaWJ1dGVcblx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lXG5cdFx0XHRcdFx0ZWxlbXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBpZCApO1xuXHRcdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Ly8gVGFnXG5cdEV4cHIuZmluZFsgXCJUQUdcIiBdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/XG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0XHR9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdHRtcCA9IFtdLFxuXHRcdFx0XHRpID0gMCxcblxuXHRcdFx0XHQvLyBCeSBoYXBweSBjb2luY2lkZW5jZSwgYSAoYnJva2VuKSBnRUJUTiBhcHBlYXJzIG9uIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgdG9vXG5cdFx0XHRcdHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50c1xuXHRcdFx0aWYgKCB0YWcgPT09IFwiKlwiICkge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IHJlc3VsdHNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0dG1wLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdG1wO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmRbIFwiQ0xBU1NcIiBdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qIFFTQS9tYXRjaGVzU2VsZWN0b3Jcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnRcblxuXHQvLyBtYXRjaGVzU2VsZWN0b3IoOmFjdGl2ZSkgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKElFOS9PcGVyYSAxMS41KVxuXHRyYnVnZ3lNYXRjaGVzID0gW107XG5cblx0Ly8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSlcblx0Ly8gV2UgYWxsb3cgdGhpcyBiZWNhdXNlIG9mIGEgYnVnIGluIElFOC85IHRoYXQgdGhyb3dzIGFuIGVycm9yXG5cdC8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWVcblx0Ly8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3Jcblx0Ly8gU2VlIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OFxuXHRyYnVnZ3lRU0EgPSBbXTtcblxuXHRpZiAoICggc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSApICkge1xuXG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0XHR2YXIgaW5wdXQ7XG5cblx0XHRcdC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2Vcblx0XHRcdC8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseVxuXHRcdFx0Ly8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsXG5cdFx0XHQvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzU5XG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlubmVySFRNTCA9IFwiPGEgaWQ9J1wiICsgZXhwYW5kbyArIFwiJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPlwiICtcblx0XHRcdFx0XCI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2XG5cdFx0XHQvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9XG5cdFx0XHQvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCBcInNhZmVcIiBmb3IgV2luUlRcblx0XHRcdC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvblxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIlttc2FsbG93Y2FwdHVyZV49JyddXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseVxuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbc2VsZWN0ZWRdXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44K1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwifj1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHRcdC8vIElFIDExL0VkZ2UgZG9uJ3QgZmluZCBlbGVtZW50cyBvbiBhIGBbbmFtZT0nJ11gIHF1ZXJ5IGluIHNvbWUgY2FzZXMuXG5cdFx0XHQvLyBBZGRpbmcgYSB0ZW1wb3JhcnkgYXR0cmlidXRlIHRvIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhlIHNlbGVjdGlvbiB3b3Jrc1xuXHRcdFx0Ly8gYXJvdW5kIHRoZSBpc3N1ZS5cblx0XHRcdC8vIEludGVyZXN0aW5nbHksIElFIDEwICYgb2xkZXIgZG9uJ3Qgc2VlbSB0byBoYXZlIHRoZSBpc3N1ZS5cblx0XHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIlwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9JyddXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqbmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKj1cIiArXG5cdFx0XHRcdFx0d2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmNoZWNrZWRcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmNoZWNrZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4K1xuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MVxuXHRcdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2libGluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlsc1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLiMuK1srfl1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9My42IC0gNSBvbmx5XG5cdFx0XHQvLyBPbGQgRmlyZWZveCBkb2Vzbid0IHRocm93IG9uIGEgYmFkbHktZXNjYXBlZCBpZGVudGlmaWVyLlxuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbCggXCJcXFxcXFxmXCIgKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIltcXFxcclxcXFxuXFxcXGZdXCIgKTtcblx0XHR9ICk7XG5cblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdFx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZVxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPWRdXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIipbKl4kfCF+XT89XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZClcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmVuYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdFx0XHQvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHNcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpkaXNhYmxlZFwiICkubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IE9wZXJhIDEwIC0gMTEgb25seVxuXHRcdFx0Ly8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVkb3Ncblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiKiw6eFwiICk7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCIsLio6XCIgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgPSBybmF0aXZlLnRlc3QoICggbWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fFxuXHRcdGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yICkgKSApICkge1xuXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHRcdFx0Ly8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSlcblx0XHRcdHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGVsLCBcIipcIiApO1xuXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uXG5cdFx0XHQvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkXG5cdFx0XHRtYXRjaGVzLmNhbGwoIGVsLCBcIltzIT0nJ106eFwiICk7XG5cdFx0XHRyYnVnZ3lNYXRjaGVzLnB1c2goIFwiIT1cIiwgcHNldWRvcyApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oIFwifFwiICkgKTtcblx0cmJ1Z2d5TWF0Y2hlcyA9IHJidWdneU1hdGNoZXMubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneU1hdGNoZXMuam9pbiggXCJ8XCIgKSApO1xuXG5cdC8qIENvbnRhaW5zXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblx0aGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApO1xuXG5cdC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlclxuXHQvLyBQdXJwb3NlZnVsbHkgc2VsZi1leGNsdXNpdmVcblx0Ly8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXHRcdFx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGFkb3duLmNvbnRhaW5zID9cblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxuXHRcdFx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHRcdFx0KSApO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0aWYgKCBiICkge1xuXHRcdFx0XHR3aGlsZSAoICggYiA9IGIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0XHRcdGlmICggYiA9PT0gYSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0LyogU29ydGluZ1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHRzb3J0T3JkZXIgPSBoYXNDb21wYXJlID9cblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCggIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSApICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGEgPT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRjb250YWlucyggcHJlZmVycmVkRG9jLCBhICkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYiA9PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGIgKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTtcblx0fSA6XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXG5cdFx0XHRhcCA9IFsgYSBdLFxuXHRcdFx0YnAgPSBbIGIgXTtcblxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBlcWVxZXEgKi9cblx0XHRcdHJldHVybiBhID09IGRvY3VtZW50ID8gLTEgOlxuXHRcdFx0XHRiID09IGRvY3VtZW50ID8gMSA6XG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgZXFlcWVxICovXG5cdFx0XHRcdGF1cCA/IC0xIDpcblx0XHRcdFx0YnVwID8gMSA6XG5cdFx0XHRcdHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblxuXHRcdC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrXG5cdFx0fSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7XG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cblx0XHRjdXIgPSBhO1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0YXAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXHRcdGN1ciA9IGI7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRicC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cblx0XHQvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeVxuXHRcdHdoaWxlICggYXBbIGkgXSA9PT0gYnBbIGkgXSApIHtcblx0XHRcdGkrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gaSA/XG5cblx0XHRcdC8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvclxuXHRcdFx0c2libGluZ0NoZWNrKCBhcFsgaSBdLCBicFsgaSBdICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3Rcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBlcWVxZXEgKi9cblx0XHRcdGFwWyBpIF0gPT0gcHJlZmVycmVkRG9jID8gLTEgOlxuXHRcdFx0YnBbIGkgXSA9PSBwcmVmZXJyZWREb2MgPyAxIDpcblx0XHRcdC8qIGVzbGludC1lbmFibGUgZXFlcWVxICovXG5cdFx0XHQwO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn07XG5cblNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkge1xuXHRzZXREb2N1bWVudCggZWxlbSApO1xuXG5cdGlmICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgJiYgZG9jdW1lbnRJc0hUTUwgJiZcblx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgZXhwciArIFwiIFwiIF0gJiZcblx0XHQoICFyYnVnZ3lNYXRjaGVzIHx8ICFyYnVnZ3lNYXRjaGVzLnRlc3QoIGV4cHIgKSApICYmXG5cdFx0KCAhcmJ1Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkge1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTtcblxuXHRcdFx0Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdFx0aWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fFxuXG5cdFx0XHRcdC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50XG5cdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIGV4cHIsIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdH1cblx0cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0dmFyIGZuID0gRXhwci5hdHRySGFuZGxlWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSxcblxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID9cblx0XHR2YWwgOlxuXHRcdHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6XG5cdFx0XHQoIHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApICkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdG51bGw7XG59O1xuXG5TaXp6bGUuZXNjYXBlID0gZnVuY3Rpb24oIHNlbCApIHtcblx0cmV0dXJuICggc2VsICsgXCJcIiApLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcbn07XG5cblNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHRoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzO1xuXHRzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTtcblx0cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTtcblxuXHRpZiAoIGhhc0R1cGxpY2F0ZSApIHtcblx0XHR3aGlsZSAoICggZWxlbSA9IHJlc3VsdHNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgXSApIHtcblx0XHRcdFx0aiA9IGR1cGxpY2F0ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdHJlc3VsdHMuc3BsaWNlKCBkdXBsaWNhdGVzWyBqIF0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDbGVhciBpbnB1dCBhZnRlciBzb3J0aW5nIHRvIHJlbGVhc2Ugb2JqZWN0c1xuXHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvcHVsbC8yMjVcblx0c29ydElucHV0ID0gbnVsbDtcblxuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXNcbiAqIEBwYXJhbSB7QXJyYXl8RWxlbWVudH0gZWxlbVxuICovXG5nZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0dmFyIG5vZGUsXG5cdFx0cmV0ID0gXCJcIixcblx0XHRpID0gMCxcblx0XHRub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0aWYgKCAhbm9kZVR5cGUgKSB7XG5cblx0XHQvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheVxuXHRcdHdoaWxlICggKCBub2RlID0gZWxlbVsgaSsrIF0gKSApIHtcblxuXHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdHJldCArPSBnZXRUZXh0KCBub2RlICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0cmV0ICs9IGdldFRleHQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVWYWx1ZTtcblx0fVxuXG5cdC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlc1xuXG5cdHJldHVybiByZXQ7XG59O1xuXG5FeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0Ly8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWRcblx0XHRcdG1hdGNoWyAzIF0gPSAoIG1hdGNoWyAzIF0gfHwgbWF0Y2hbIDQgXSB8fFxuXHRcdFx0XHRtYXRjaFsgNSBdIHx8IFwiXCIgKS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAyIF0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbIDMgXSA9IFwiIFwiICsgbWF0Y2hbIDMgXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAxIF0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblxuXHRcdFx0XHQvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudFxuXHRcdFx0XHRpZiAoICFtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbIDQgXSA9ICsoIG1hdGNoWyA0IF0gP1xuXHRcdFx0XHRcdG1hdGNoWyA1IF0gKyAoIG1hdGNoWyA2IF0gfHwgMSApIDpcblx0XHRcdFx0XHQyICogKCBtYXRjaFsgMyBdID09PSBcImV2ZW5cIiB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbIDUgXSA9ICsoICggbWF0Y2hbIDcgXSArIG1hdGNoWyA4IF0gKSB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiICk7XG5cblx0XHRcdFx0Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHR2YXIgZXhjZXNzLFxuXHRcdFx0XHR1bnF1b3RlZCA9ICFtYXRjaFsgNiBdICYmIG1hdGNoWyAyIF07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByWyBcIkNISUxEXCIgXS50ZXN0KCBtYXRjaFsgMCBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gbWF0Y2hbIDQgXSB8fCBtYXRjaFsgNSBdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblxuXHRcdFx0XHQvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KVxuXHRcdFx0XHQoIGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApICkgJiZcblxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KCBleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGggKSApIHtcblxuXHRcdFx0XHQvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleFxuXHRcdFx0XHRtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KVxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7XG5cdFx0fVxuXHR9LFxuXG5cdGZpbHRlcjoge1xuXG5cdFx0XCJUQUdcIjogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7XG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlTmFtZVNlbGVjdG9yLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSBcIipcIiA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDTEFTU1wiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkge1xuXHRcdFx0dmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyBcIiBcIiBdO1xuXG5cdFx0XHRyZXR1cm4gcGF0dGVybiB8fFxuXHRcdFx0XHQoIHBhdHRlcm4gPSBuZXcgUmVnRXhwKCBcIihefFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcdFx0XCIpXCIgKyBjbGFzc05hbWUgKyBcIihcIiArIHdoaXRlc3BhY2UgKyBcInwkKVwiICkgKSAmJiBjbGFzc0NhY2hlKFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdChcblx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHxcblx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFwiXCJcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0fSApO1xuXHRcdH0sXG5cblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHRcdFx0aWYgKCByZXN1bHQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiIT1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFvcGVyYXRvciApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdCArPSBcIlwiO1xuXG5cdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG5cblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIF9hcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBjYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsIG5vZGUsIG5vZGVJbmRleCwgc3RhcnQsXG5cdFx0XHRcdFx0XHRkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyBcIm5leHRTaWJsaW5nXCIgOiBcInByZXZpb3VzU2libGluZ1wiLFxuXHRcdFx0XHRcdFx0cGFyZW50ID0gZWxlbS5wYXJlbnROb2RlLFxuXHRcdFx0XHRcdFx0bmFtZSA9IG9mVHlwZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHR1c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZSxcblx0XHRcdFx0XHRcdGRpZmYgPSBmYWxzZTtcblxuXHRcdFx0XHRcdGlmICggcGFyZW50ICkge1xuXG5cdFx0XHRcdFx0XHQvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdFx0XHRpZiAoIHNpbXBsZSApIHtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCBkaXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSBub2RlWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8ICggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBXaGVuIGZvdW5kLCBjYWNoZSBpbmRleGVzIG9uIGBwYXJlbnRgIGFuZCBicmVha1xuXHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cblx0XHRcdC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZVxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3Nlc1xuXHRcdFx0Ly8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnNcblx0XHRcdC8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3Ncblx0XHRcdHZhciBhcmdzLFxuXHRcdFx0XHRmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8udG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIHBzZXVkbzogXCIgKyBwc2V1ZG8gKTtcblxuXHRcdFx0Ly8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdFxuXHRcdFx0Ly8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb25cblx0XHRcdC8vIGp1c3QgYXMgU2l6emxlIGRvZXNcblx0XHRcdGlmICggZm5bIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0cmV0dXJuIGZuKCBhcmd1bWVudCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXNcblx0XHRcdGlmICggZm4ubGVuZ3RoID4gMSApIHtcblx0XHRcdFx0YXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sIFwiXCIsIGFyZ3VtZW50IF07XG5cdFx0XHRcdHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm47XG5cdFx0fVxuXHR9LFxuXG5cdHBzZXVkb3M6IHtcblxuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xuXHRcdFwibm90XCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaSBdID0gISggbWF0Y2hlc1sgaSBdID0gZWxlbSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApIDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0bWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0XCJoYXNcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXG5cdFx0Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWVcblx0XHQvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLFxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXG5cdFx0Ly8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuXG5cdFx0Ly8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS5cIlxuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG9cblx0XHRcImxhbmdcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHtcblxuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdCggbGFuZyB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoIGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcblx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcInhtbDpsYW5nXCIgKSB8fCBlbGVtLmdldEF0dHJpYnV0ZSggXCJsYW5nXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKCBlbGVtID0gZWxlbS5wYXJlbnROb2RlICkgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmXG5cdFx0XHRcdCggIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkgKSAmJlxuXHRcdFx0XHQhISggZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCApO1xuXHRcdH0sXG5cblx0XHQvLyBCb29sZWFuIHByb3BlcnRpZXNcblx0XHRcImVuYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXG5cdFx0XCJkaXNhYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLFxuXG5cdFx0XCJjaGVja2VkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmICEhZWxlbS5jaGVja2VkICkgfHxcblx0XHRcdFx0KCBub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQgKTtcblx0XHR9LFxuXG5cdFx0XCJzZWxlY3RlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBDb250ZW50c1xuXHRcdFwiZW1wdHlcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJwYXJlbnRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvc1sgXCJlbXB0eVwiIF0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSApID09IG51bGwgfHxcblx0XHRcdFx0XHRhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0gKSxcblxuXHRcdFwibGFzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggX21hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xuXHRcdH0gKSxcblxuXHRcdFwiZXFcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSApLFxuXG5cdFx0XCJldmVuXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcIm9kZFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDE7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgP1xuXHRcdFx0XHRhcmd1bWVudCArIGxlbmd0aCA6XG5cdFx0XHRcdGFyZ3VtZW50ID4gbGVuZ3RoID9cblx0XHRcdFx0XHRsZW5ndGggOlxuXHRcdFx0XHRcdGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwiZ3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApXG5cdH1cbn07XG5cbkV4cHIucHNldWRvc1sgXCJudGhcIiBdID0gRXhwci5wc2V1ZG9zWyBcImVxXCIgXTtcblxuLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3NcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7XG59XG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApO1xufVxuXG4vLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnNcbmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XG5FeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpO1xuXG50b2tlbml6ZSA9IFNpenpsZS50b2tlbml6ZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgcGFyc2VPbmx5ICkge1xuXHR2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSxcblx0XHRzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLFxuXHRcdGNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoIGNhY2hlZCApIHtcblx0XHRyZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApO1xuXHR9XG5cblx0c29GYXIgPSBzZWxlY3Rvcjtcblx0Z3JvdXBzID0gW107XG5cdHByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRlcjtcblxuXHR3aGlsZSAoIHNvRmFyICkge1xuXG5cdFx0Ly8gQ29tbWEgYW5kIGZpcnN0IHJ1blxuXHRcdGlmICggIW1hdGNoZWQgfHwgKCBtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRpZiAoIG1hdGNoICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWyAwIF0ubGVuZ3RoICkgfHwgc29GYXI7XG5cdFx0XHR9XG5cdFx0XHRncm91cHMucHVzaCggKCB0b2tlbnMgPSBbXSApICk7XG5cdFx0fVxuXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29tYmluYXRvcnNcblx0XHRpZiAoICggbWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCgge1xuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbIDAgXS5yZXBsYWNlKCBydHJpbSwgXCIgXCIgKVxuXHRcdFx0fSApO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKCBtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkgKSAmJiAoICFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KCBtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSApICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCgge1xuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcblx0XHRcdFx0fSApO1xuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggIW1hdGNoZWQgKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3Ncblx0Ly8gaWYgd2UncmUganVzdCBwYXJzaW5nXG5cdC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2Vuc1xuXHRyZXR1cm4gcGFyc2VPbmx5ID9cblx0XHRzb0Zhci5sZW5ndGggOlxuXHRcdHNvRmFyID9cblx0XHRcdFNpenpsZS5lcnJvciggc2VsZWN0b3IgKSA6XG5cblx0XHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufTtcblxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRzZWxlY3RvciA9IFwiXCI7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1sgaSBdLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IDpcblxuXHRcdC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50c1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKCBvbGRDYWNoZSA9IHVuaXF1ZUNhY2hlWyBrZXkgXSApICYmXG5cdFx0XHRcdFx0XHRcdG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0cmV0dXJuICggbmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAoIG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkge1xuXHRyZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggIW1hdGNoZXJzWyBpIF0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSA6XG5cdFx0bWF0Y2hlcnNbIDAgXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1sgaSBdLCByZXN1bHRzICk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwgKSB7XG5cdHZhciBlbGVtLFxuXHRcdG5ld1VubWF0Y2hlZCA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsXG5cdFx0bWFwcGVkID0gbWFwICE9IG51bGw7XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyhcblx0XHRcdFx0c2VsZWN0b3IgfHwgXCIqXCIsXG5cdFx0XHRcdGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsXG5cdFx0XHRcdFtdXG5cdFx0XHQpLFxuXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cblx0XHRcdG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgP1xuXHRcdFx0XHRjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdGVsZW1zLFxuXG5cdFx0XHRtYXRjaGVyT3V0ID0gbWF0Y2hlciA/XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdFx0cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0W10gOlxuXG5cdFx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdFx0cmVzdWx0cyA6XG5cdFx0XHRcdG1hdGNoZXJJbjtcblxuXHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXHRcdFx0bWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwb3N0RmlsdGVyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xuXHRcdFx0dGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7XG5cdFx0XHRwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7XG5cblx0XHRcdC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW5cblx0XHRcdGkgPSB0ZW1wLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICggZWxlbSA9IHRlbXBbIGkgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXJPdXRbIHBvc3RNYXBbIGkgXSBdID0gISggbWF0Y2hlckluWyBwb3N0TWFwWyBpIF0gXSA9IGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggc2VlZCApIHtcblx0XHRcdGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7XG5cdFx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblxuXHRcdFx0XHRcdC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0c1xuXHRcdFx0XHRcdHRlbXAgPSBbXTtcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXG5cdFx0XHRcdFx0XHRcdHRlbXAucHVzaCggKCBtYXRjaGVySW5bIGkgXSA9IGVsZW0gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCAoIG1hdGNoZXJPdXQgPSBbXSApLCB0ZW1wLCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkXG5cdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSAmJlxuXHRcdFx0XHRcdFx0KCB0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFsgaSBdICkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFsgdGVtcCBdID0gISggcmVzdWx0c1sgdGVtcCBdID0gZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMCBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIFwiIFwiIF0sXG5cdFx0aSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLFxuXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcblx0XHRtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIHJldCA9ICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAoXG5cdFx0XHRcdCggY2hlY2tDb250ZXh0ID0gY29udGV4dCApLm5vZGVUeXBlID9cblx0XHRcdFx0XHRtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0XHRtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7XG5cblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBpIF0udHlwZSBdICkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvciggZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIgKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1sgaSBdLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zWyBpIF0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBqIF0udHlwZSBdICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzZXRNYXRjaGVyKFxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxuXHRcdFx0XHRcdGkgPiAxICYmIHRvU2VsZWN0b3IoXG5cblx0XHRcdFx0XHQvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYFxuXHRcdFx0XHRcdHRva2Vuc1xuXHRcdFx0XHRcdFx0LnNsaWNlKCAwLCBpIC0gMSApXG5cdFx0XHRcdFx0XHQuY29uY2F0KCB7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gXCIgXCIgPyBcIipcIiA6IFwiXCIgfSApXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAoIHRva2VucyA9IHRva2Vucy5zbGljZSggaiApICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIHRvU2VsZWN0b3IoIHRva2VucyApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7XG5cdHZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0YnlFbGVtZW50ID0gZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0c3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkge1xuXHRcdFx0dmFyIGVsZW0sIGosIG1hdGNoZXIsXG5cdFx0XHRcdG1hdGNoZWRDb3VudCA9IDAsXG5cdFx0XHRcdGkgPSBcIjBcIixcblx0XHRcdFx0dW5tYXRjaGVkID0gc2VlZCAmJiBbXSxcblx0XHRcdFx0c2V0TWF0Y2hlZCA9IFtdLFxuXHRcdFx0XHRjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCxcblxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XG5cdFx0XHRcdGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kWyBcIlRBR1wiIF0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxuXHRcdFx0XHRkaXJydW5zVW5pcXVlID0gKCBkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSApLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xuXHRcdFx0Ly8gU3VwcG9ydDogSUU8OSwgU2FmYXJpXG5cdFx0XHQvLyBUb2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogXCJsZW5ndGhcIjsgU2FmYXJpOiA8bnVtYmVyPikgbWF0Y2hpbmcgZWxlbWVudHMgYnkgaWRcblx0XHRcdGZvciAoIDsgaSAhPT0gbGVuICYmICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRcdGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVyc1xuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xuXG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSApICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gc2V0TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2VlZCApIHtcblxuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKCB1bm1hdGNoZWRbIGkgXSB8fCBzZXRNYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkWyBpIF0gPSBwb3AuY2FsbCggcmVzdWx0cyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXNcblx0XHRcdFx0XHRzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHNcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xuXG5cdFx0XHRcdC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZ1xuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHQoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHtcblxuXHRcdFx0XHRcdFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5tYXRjaGVkO1xuXHRcdH07XG5cblx0cmV0dXJuIGJ5U2V0ID9cblx0XHRtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDpcblx0XHRzdXBlck1hdGNoZXI7XG59XG5cbmNvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7XG5cdHZhciBpLFxuXHRcdHNldE1hdGNoZXJzID0gW10sXG5cdFx0ZWxlbWVudE1hdGNoZXJzID0gW10sXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggIWNhY2hlZCApIHtcblxuXHRcdC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudFxuXHRcdGlmICggIW1hdGNoICkge1xuXHRcdFx0bWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHR9XG5cdFx0aSA9IG1hdGNoLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFsgaSBdICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKFxuXHRcdFx0c2VsZWN0b3IsXG5cdFx0XHRtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKVxuXHRcdCk7XG5cblx0XHQvLyBTYXZlIHNlbGVjdG9yIGFuZCB0b2tlbml6YXRpb25cblx0XHRjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0fVxuXHRyZXR1cm4gY2FjaGVkO1xufTtcblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5zZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoICggc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvciApICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICggdG9rZW4gPSB0b2tlbnNbIDAgXSApLnR5cGUgPT09IFwiSURcIiAmJlxuXHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDEgXS50eXBlIF0gKSB7XG5cblx0XHRcdGNvbnRleHQgPSAoIEV4cHIuZmluZFsgXCJJRFwiIF0oIHRva2VuLm1hdGNoZXNbIDAgXVxuXHRcdFx0XHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSwgY29udGV4dCApIHx8IFtdIClbIDAgXTtcblx0XHRcdGlmICggIWNvbnRleHQgKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHQvLyBQcmVjb21waWxlZCBtYXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNlc3RyeSwgc28gc3RlcCB1cCBhIGxldmVsXG5cdFx0XHR9IGVsc2UgaWYgKCBjb21waWxlZCApIHtcblx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZ1xuXHRcdGkgPSBtYXRjaEV4cHJbIFwibmVlZHNDb250ZXh0XCIgXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1sgaSBdO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICggdHlwZSA9IHRva2VuLnR5cGUgKSBdICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggKCBmaW5kID0gRXhwci5maW5kWyB0eXBlIF0gKSApIHtcblxuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoIHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbIDAgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1sgMCBdLnR5cGUgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0KSApICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KCBcIlwiICkuc29ydCggc29ydE9yZGVyICkuam9pbiggXCJcIiApID09PSBleHBhbmRvO1xuXG4vLyBTdXBwb3J0OiBDaHJvbWUgMTQtMzUrXG4vLyBBbHdheXMgYXNzdW1lIGR1cGxpY2F0ZXMgaWYgdGhleSBhcmVuJ3QgcGFzc2VkIHRvIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uXG5zdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMgPSAhIWhhc0R1cGxpY2F0ZTtcblxuLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50XG5zZXREb2N1bWVudCgpO1xuXG4vLyBTdXBwb3J0OiBXZWJraXQ8NTM3LjMyIC0gU2FmYXJpIDYuMC4zL0Nocm9tZSAyNSAoZml4ZWQgaW4gQ2hyb21lIDI3KVxuLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqXG5zdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdC8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKVxuXHRyZXR1cm4gZWwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApICkgJiAxO1xufSApO1xuXG4vLyBTdXBwb3J0OiBJRTw4XG4vLyBQcmV2ZW50IGF0dHJpYnV0ZS9wcm9wZXJ0eSBcImludGVycG9sYXRpb25cIlxuLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNjQyOSUyOFZTLjg1JTI5LmFzcHhcbmlmICggIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcImhyZWZcIiApID09PSBcIiNcIjtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBcInR5cGV8aHJlZnxoZWlnaHR8d2lkdGhcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwidHlwZVwiID8gMSA6IDIgKTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8aW5wdXQvPlwiO1xuXHRlbC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiLCBcIlwiICk7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IFwiXCI7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggXCJ2YWx1ZVwiLCBmdW5jdGlvbiggZWxlbSwgX25hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSApO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzXG5pZiAoICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0cmV0dXJuIGVsLmdldEF0dHJpYnV0ZSggXCJkaXNhYmxlZFwiICkgPT0gbnVsbDtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBib29sZWFucywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciB2YWw7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdID09PSB0cnVlID8gbmFtZS50b0xvd2VyQ2FzZSgpIDpcblx0XHRcdFx0KCB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdFx0bnVsbDtcblx0XHR9XG5cdH0gKTtcbn1cblxucmV0dXJuIFNpenpsZTtcblxufSApKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlO1xuXG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cblx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn1cbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW2Etel1bXlxcL1xcMD46XFx4MjBcXHRcXHJcXG5cXGZdKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcLz8+KD86PFxcL1xcMT58KSQvaSApO1xuXG5cblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbmdsZSBlbGVtZW50XG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBGaWx0ZXJlZCBkaXJlY3RseSBmb3IgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggc2VsZWN0b3JzXG5cdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLCByZXQsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIFtdICk7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCApIDogcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSspKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxuXHRcdFx0XHRcdFx0dGhpc1sgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzWyAwIF0gPSBzZWxlY3Rvcjtcblx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gSEFORExFOiAkKGZ1bmN0aW9uKVxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxuXHRcdH0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHR0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApO1xuXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxuXHRcdGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XG5cdFx0XHRcdFx0XHR0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlXG5cdFx0XHRcdFx0XHRjdXIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7XG5cblx0XHRcdFx0XHRcdG1hdGNoZWQucHVzaCggY3VyICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XG5cdH0sXG5cblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcblx0XHR9XG5cblx0XHQvLyBJbmRleCBpbiBzZWxlY3RvclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG5cdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcyxcblxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXG5cdFx0XHRlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW1cblx0XHQpO1xuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcblx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHRhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkge1xuXHR3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XG5cdHJldHVybiBjdXI7XG59XG5cbmpRdWVyeS5lYWNoKCB7XG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsO1xuXHR9LFxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiApO1xuXHR9LFxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApO1xuXHR9LFxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTtcblx0fSxcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdGlmICggZWxlbS5jb250ZW50RG9jdW1lbnQgIT0gbnVsbCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMStcblx0XHRcdC8vIDxvYmplY3Q+IGVsZW1lbnRzIHdpdGggbm8gYGRhdGFgIGF0dHJpYnV0ZSBoYXMgYW4gb2JqZWN0XG5cdFx0XHQvLyBgY29udGVudERvY3VtZW50YCB3aXRoIGEgYG51bGxgIHByb3RvdHlwZS5cblx0XHRcdGdldFByb3RvKCBlbGVtLmNvbnRlbnREb2N1bWVudCApICkge1xuXG5cdFx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHksIGlPUyA3IG9ubHksIEFuZHJvaWQgQnJvd3NlciA8PTQuMyBvbmx5XG5cdFx0Ly8gVHJlYXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgYXMgYSByZWd1bGFyIG9uZSBpbiBicm93c2VycyB0aGF0XG5cdFx0Ly8gZG9uJ3Qgc3VwcG9ydCBpdC5cblx0XHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRlbXBsYXRlXCIgKSApIHtcblx0XHRcdGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0b1R5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5mdW5jdGlvbiBJZGVudGl0eSggdiApIHtcblx0cmV0dXJuIHY7XG59XG5mdW5jdGlvbiBUaHJvd2VyKCBleCApIHtcblx0dGhyb3cgZXg7XG59XG5cbmZ1bmN0aW9uIGFkb3B0VmFsdWUoIHZhbHVlLCByZXNvbHZlLCByZWplY3QsIG5vVmFsdWUgKSB7XG5cdHZhciBtZXRob2Q7XG5cblx0dHJ5IHtcblxuXHRcdC8vIENoZWNrIGZvciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3Jcblx0XHRpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciB0aGVuYWJsZXNcblx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XG5cdFx0XHQvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApXG5cdFx0XHQvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKVxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xuXHRcdH1cblxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcblx0Ly8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpblxuXHQvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFsbHkgc3VwcHJlc3MgcmVqZWN0aW9uLlxuXHR9IGNhdGNoICggdmFsdWUgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5XG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxuXHRcdHJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTtcblx0fVxufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcyxcblx0XHRcdFx0Ly8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXVxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSwgMiBdLFxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMSwgXCJyZWplY3RlZFwiIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYXRjaFwiOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIF9pLCB0dXBsZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBNYXAgdHVwbGVzIChwcm9ncmVzcywgZG9uZSwgZmFpbCkgdG8gYXJndW1lbnRzIChkb25lLCBmYWlsLCBwcm9ncmVzcylcblx0XHRcdFx0XHRcdFx0dmFyIGZuID0gaXNGdW5jdGlvbiggZm5zWyB0dXBsZVsgNCBdIF0gKSAmJiBmbnNbIHR1cGxlWyA0IF0gXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5wcm9ncmVzcyhmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5ub3RpZnkgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZG9uZShmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZXNvbHZlIH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0Zm5zID0gbnVsbDtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGVuOiBmdW5jdGlvbiggb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIG9uUHJvZ3Jlc3MgKSB7XG5cdFx0XHRcdFx0dmFyIG1heERlcHRoID0gMDtcblx0XHRcdFx0XHRmdW5jdGlvbiByZXNvbHZlKCBkZXB0aCwgZGVmZXJyZWQsIGhhbmRsZXIsIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRhcmdzID0gYXJndW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCwgdGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHNcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggPCBtYXhEZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCA9IGhhbmRsZXIuYXBwbHkoIHRoYXQsIGFyZ3MgKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNDhcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggXCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb25cIiApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9ucyAyLjMuMy4xLCAzLjVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU0XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC03NVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmV0cmlldmUgYHRoZW5gIG9ubHkgb25jZVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhlbiA9IHJldHVybmVkICYmXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuNFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02NFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IGNoZWNrIG9iamVjdHMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlbmFiaWxpdHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCB0eXBlb2YgcmV0dXJuZWQgPT09IFwib2JqZWN0XCIgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgcmV0dXJuZWQgPT09IFwiZnVuY3Rpb25cIiApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhIHJldHVybmVkIHRoZW5hYmxlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoZW4gKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTcGVjaWFsIHByb2Nlc3NvcnMgKG5vdGlmeSkganVzdCB3YWl0IGZvciByZXNvbHV0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgYWxzbyBob29rIGludG8gcHJvZ3Jlc3Ncblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBkaXNyZWdhcmQgb2xkZXIgcmVzb2x1dGlvbiB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhEZXB0aCsrO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGggKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGFsbCBvdGhlciByZXR1cm5lZCB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBJZGVudGl0eSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIHJldHVybmVkIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQcm9jZXNzIHRoZSB2YWx1ZShzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZhdWx0IHByb2Nlc3MgaXMgcmVzb2x2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHNwZWNpYWwgfHwgZGVmZXJyZWQucmVzb2x2ZVdpdGggKSggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IG5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBjYXRjaCBhbmQgcmVqZWN0IGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzID0gc3BlY2lhbCA/XG5cdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93IDpcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soIGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKyAxID49IG1heERlcHRoICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gVGhyb3dlciApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgZSBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4xXG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3XG5cdFx0XHRcdFx0XHRcdC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb21cblx0XHRcdFx0XHRcdFx0Ly8gc3Vic2VxdWVudCBlcnJvcnNcblx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDYWxsIGFuIG9wdGlvbmFsIGhvb2sgdG8gcmVjb3JkIHRoZSBzdGFjaywgaW4gY2FzZSBvZiBleGNlcHRpb25cblx0XHRcdFx0XHRcdFx0XHQvLyBzaW5jZSBpdCdzIG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5bmNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXG5cdFx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdFRocm93ZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XG5cblx0XHRcdC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZWplY3RlZFwiXG5cdFx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDMgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2ssXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgcHJpbWFyeSBEZWZlcnJlZFxuXHRcdFx0cHJpbWFyeSA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRwcmltYXJ5LnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBwcmltYXJ5LmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIHByaW1hcnkucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggcHJpbWFyeS5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gcHJpbWFyeS50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBwcmltYXJ5LnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcmltYXJ5LnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIHN0YWNrICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHlcblx0Ly8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWVcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcblx0XHR3aW5kb3cuY29uc29sZS53YXJuKCBcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiICsgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIHN0YWNrICk7XG5cdH1cbn07XG5cblxuXG5cbmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdHRocm93IGVycm9yO1xuXHR9ICk7XG59O1xuXG5cblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdHJlYWR5TGlzdFxuXHRcdC50aGVuKCBmbiApXG5cblx0XHQvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cFxuXHRcdC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFja1xuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cblx0XHQuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHRcdGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTtcblx0XHR9ICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47XG5cbi8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbi8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHlcbi8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxufSBlbHNlIHtcblxuXHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xufVxuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIHRvVHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwgX2tleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggY2hhaW5hYmxlICkge1xuXHRcdHJldHVybiBlbGVtcztcblx0fVxuXG5cdC8vIEdldHNcblx0aWYgKCBidWxrICkge1xuXHRcdHJldHVybiBmbi5jYWxsKCBlbGVtcyApO1xuXHR9XG5cblx0cmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xufTtcblxuXG4vLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcbnZhciBybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW2Etel0pL2c7XG5cbi8vIFVzZWQgYnkgY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuZnVuY3Rpb24gZmNhbWVsQ2FzZSggX2FsbCwgbGV0dGVyICkge1xuXHRyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXNcbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcbi8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MilcbmZ1bmN0aW9uIGNhbWVsQ2FzZSggc3RyaW5nICkge1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgXCJtcy1cIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTtcbn1cbnZhciBhY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdC8vIEFjY2VwdHMgb25seTpcblx0Ly8gIC0gTm9kZVxuXHQvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFXG5cdC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFXG5cdC8vICAtIE9iamVjdFxuXHQvLyAgICAtIEFueVxuXHRyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBEYXRhKCkge1xuXHR0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7XG59XG5cbkRhdGEudWlkID0gMTtcblxuRGF0YS5wcm90b3R5cGUgPSB7XG5cblx0Y2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBvd25lciBvYmplY3QgYWxyZWFkeSBoYXMgYSBjYWNoZVxuXHRcdHZhciB2YWx1ZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdC8vIElmIG5vdCwgY3JlYXRlIG9uZVxuXHRcdGlmICggIXZhbHVlICkge1xuXHRcdFx0dmFsdWUgPSB7fTtcblxuXHRcdFx0Ly8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsXG5cdFx0XHQvLyBidXQgd2Ugc2hvdWxkIG5vdCwgc2VlICM4MzM1LlxuXHRcdFx0Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIG93bmVyICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlclxuXHRcdFx0XHQvLyB1c2UgcGxhaW4gYXNzaWdubWVudFxuXHRcdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHQvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZVxuXHRcdFx0XHQvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHtcblx0XHR2YXIgcHJvcCxcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3Ncblx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIGRhdGEgKSBdID0gdmFsdWU7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XG5cdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMuY2FjaGUoIG93bmVyICkgOlxuXG5cdFx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBjYW1lbENhc2UoIGtleSApIF07XG5cdH0sXG5cdGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gSW4gY2FzZXMgd2hlcmUgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZFxuXHRcdC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1ZSBwcm92aWRlZFxuXHRcdC8vXG5cdFx0Ly8gVGFrZSB0aGUgXCJyZWFkXCIgcGF0aCBhbmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lXG5cdFx0Ly8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdFxuXHRcdC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXlcblx0XHQvL1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICkgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcblx0XHR9XG5cblx0XHQvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vIGFyZSBzcGVjaWZpZWQsIHNldCBvciBleHRlbmQgKGV4aXN0aW5nIG9iamVjdHMpIHdpdGggZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xuXHRcdC8vICAgMi4gQSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly9cblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcblxuXHRcdC8vIFNpbmNlIHRoZSBcInNldFwiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50c1xuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBrZXk7XG5cdH0sXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdGlmICggY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGtleSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5c1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBrZXkgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLlxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc2V0IGNhbWVsQ2FzZSBrZXlzLCBzbyByZW1vdmUgdGhhdC5cblx0XHRcdFx0a2V5ID0ga2V5Lm1hcCggY2FtZWxDYXNlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRrZXkgPSBjYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHRcdC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2Vcblx0XHRcdFx0a2V5ID0ga2V5IGluIGNhY2hlID9cblx0XHRcdFx0XHRbIGtleSBdIDpcblx0XHRcdFx0XHQoIGtleS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdICk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBrZXkubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlbIGkgXSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YVxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDVcblx0XHRcdC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzXG5cdFx0XHQvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDcgKGJ1ZyByZXN0cmljdGVkKVxuXHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHR2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0cmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApO1xuXHR9XG59O1xudmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTtcblxudmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTtcblxuXG5cbi8vXHRJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5XG4vL1xuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcbi8vXHQyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2Vcbi8vXHRcdHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS5cbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxuLy9cdDQuIF9OZXZlcl8gZXhwb3NlIFwicHJpdmF0ZVwiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSlcbi8vXHQ1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcylcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcblxudmFyIHJicmFjZSA9IC9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLyxcblx0cm11bHRpRGFzaCA9IC9bQS1aXS9nO1xuXG5mdW5jdGlvbiBnZXREYXRhKCBkYXRhICkge1xuXHRpZiAoIGRhdGEgPT09IFwidHJ1ZVwiICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcImZhbHNlXCIgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcIm51bGxcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXG5cdGlmICggZGF0YSA9PT0gK2RhdGEgKyBcIlwiICkge1xuXHRcdHJldHVybiArZGF0YTtcblx0fVxuXG5cdGlmICggcmJyYWNlLnRlc3QoIGRhdGEgKSApIHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSApO1xuXHR9XG5cblx0cmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnlcblx0Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlXG5cdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0bmFtZSA9IFwiZGF0YS1cIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKTtcblx0XHRkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcblxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkYXRhID0gZ2V0RGF0YSggZGF0YSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXJcblx0XHRcdGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApO1xuXHR9LFxuXG5cdGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fSxcblxuXHQvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZFxuXHQvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC5cblx0X2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgaSwgbmFtZSwgZGF0YSxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gR2V0cyBhbGwgdmFsdWVzXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdGhpcy5sZW5ndGggKSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0gKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiApICkge1xuXHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAoIzE0ODk0KVxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyc1sgaSBdICkge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cnNbIGkgXS5uYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IGNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzXG5cdFx0aWYgKCB0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGRhdGE7XG5cblx0XHRcdC8vIFRoZSBjYWxsaW5nIGpRdWVyeSBvYmplY3QgKGVsZW1lbnQgbWF0Y2hlcykgaXMgbm90IGVtcHR5XG5cdFx0XHQvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZVxuXHRcdFx0Ly8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3Rcblx0XHRcdC8vIHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGZvciBlbGVtID0gdGhpc1sgMCBdIHdoaWNoIHdpbGxcblx0XHRcdC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuXG5cdFx0XHRpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIFRoZSBrZXkgd2lsbCBhbHdheXMgYmUgY2FtZWxDYXNlZCBpbiBEYXRhXG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gXCJkaXNjb3ZlclwiIHRoZSBkYXRhIGluXG5cdFx0XHRcdC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnNcblx0XHRcdFx0ZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzdG9yZSB0aGUgY2FtZWxDYXNlZCBrZXlcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7XG5cdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHF1ZXVlO1xuXG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0dHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcblx0XHRcdHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXBcblx0XHRcdGlmICggZGF0YSApIHtcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgQXJyYXkuaXNBcnJheSggZGF0YSApICkge1xuXHRcdFx0XHRcdHF1ZXVlID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcblx0XHR9XG5cdH0sXG5cblx0ZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksXG5cdFx0XHRzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCxcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcblx0XHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksXG5cdFx0XHRuZXh0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XG5cdFx0XHR9O1xuXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxuXHRcdGlmICggZm4gPT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0c3RhcnRMZW5ndGgtLTtcblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXG5cdFx0XHQvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiApIHtcblx0XHRcdFx0cXVldWUudW5zaGlmdCggXCJpbnByb2dyZXNzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvblxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApO1xuXHRcdH1cblxuXHRcdGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkge1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxuXHRfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dmFyIGtleSA9IHR5cGUgKyBcInF1ZXVlSG9va3NcIjtcblx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwge1xuXHRcdFx0ZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLmFkZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgXCJxdWV1ZVwiLCBrZXkgXSApO1xuXHRcdFx0fSApXG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBzZXR0ZXIgPSAyO1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGRhdGEgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IFwiZnhcIjtcblx0XHRcdHNldHRlci0tO1xuXHRcdH1cblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcyA6XG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTtcblxuXHRcdFx0XHQvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZVxuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiAmJiBxdWV1ZVsgMCBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdH0sXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHR9ICk7XG5cdH0sXG5cdGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0fSxcblxuXHQvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlXG5cdC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KVxuXHRwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkge1xuXHRcdHZhciB0bXAsXG5cdFx0XHRjb3VudCA9IDEsXG5cdFx0XHRkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLFxuXHRcdFx0aSA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0cmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICEoIC0tY291bnQgKSApIHtcblx0XHRcdFx0XHRkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG9iaiA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRtcCA9IGRhdGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArIFwicXVldWVIb29rc1wiICk7XG5cdFx0XHRpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmVzb2x2ZSgpO1xuXHRcdHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTtcblx0fVxufSApO1xudmFyIHBudW0gPSAoIC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvICkuc291cmNlO1xuXG52YXIgcmNzc051bSA9IG5ldyBSZWdFeHAoIFwiXig/OihbKy1dKT18KShcIiArIHBudW0gKyBcIikoW2EteiVdKikkXCIsIFwiaVwiICk7XG5cblxudmFyIGNzc0V4cGFuZCA9IFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdO1xuXG52YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cblxuXHR2YXIgaXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cdFx0fSxcblx0XHRjb21wb3NlZCA9IHsgY29tcG9zZWQ6IHRydWUgfTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBpT1MgMTAuMCAtIDEwLjIgb25seVxuXHQvLyBDaGVjayBhdHRhY2htZW50IGFjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMgd2hlbiBwb3NzaWJsZSAoZ2gtMzUwNClcblx0Ly8gU3VwcG9ydDogaU9TIDEwLjAtMTAuMiBvbmx5XG5cdC8vIEVhcmx5IGlPUyAxMCB2ZXJzaW9ucyBzdXBwb3J0IGBhdHRhY2hTaGFkb3dgIGJ1dCBub3QgYGdldFJvb3ROb2RlYCxcblx0Ly8gbGVhZGluZyB0byBlcnJvcnMuIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGBnZXRSb290Tm9kZWAuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50LmdldFJvb3ROb2RlICkge1xuXHRcdGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Um9vdE5vZGUoIGNvbXBvc2VkICkgPT09IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHR9O1xuXHR9XG52YXIgaXNIaWRkZW5XaXRoaW5UcmVlID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xuXG5cdFx0Ly8gaXNIaWRkZW5XaXRoaW5UcmVlIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247XG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ZWxlbSA9IGVsIHx8IGVsZW07XG5cblx0XHQvLyBJbmxpbmUgc3R5bGUgdHJ1bXBzIGFsbFxuXHRcdHJldHVybiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8XG5cdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiZcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBjaGVjayBjb21wdXRlZCBzdHlsZVxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQzIC0gNDVcblx0XHRcdC8vIERpc2Nvbm5lY3RlZCBlbGVtZW50cyBjYW4gaGF2ZSBjb21wdXRlZCBkaXNwbGF5OiBub25lLCBzbyBmaXJzdCBjb25maXJtIHRoYXQgZWxlbSBpc1xuXHRcdFx0Ly8gaW4gdGhlIGRvY3VtZW50LlxuXHRcdFx0aXNBdHRhY2hlZCggZWxlbSApICYmXG5cblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiO1xuXHR9O1xuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcpXG5cdC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSlcblx0Ly8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICgjMTQ5MDEpXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xuXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIG9ubHlcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHQvLyBJRSA8PTkgcmVwbGFjZXMgPG9wdGlvbj4gdGFncyB3aXRoIHRoZWlyIGNvbnRlbnRzIHdoZW4gaW5zZXJ0ZWQgb3V0c2lkZSBvZlxuXHQvLyB0aGUgc2VsZWN0IGVsZW1lbnQuXG5cdGRpdi5pbm5lckhUTUwgPSBcIjxvcHRpb24+PC9vcHRpb24+XCI7XG5cdHN1cHBvcnQub3B0aW9uID0gISFkaXYubGFzdENoaWxkO1xufSApKCk7XG5cblxuLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMClcbnZhciB3cmFwTWFwID0ge1xuXG5cdC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlXG5cdC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW5cblx0Ly8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLlxuXHR0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXG5cdGNvbDogWyAyLCBcIjx0YWJsZT48Y29sZ3JvdXA+XCIsIFwiPC9jb2xncm91cD48L3RhYmxlPlwiIF0sXG5cdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcblx0dGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXG5cdF9kZWZhdWx0OiBbIDAsIFwiXCIsIFwiXCIgXVxufTtcblxud3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDtcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuaWYgKCAhc3VwcG9ydC5vcHRpb24gKSB7XG5cdHdyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbiA9IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXTtcbn1cblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKCMxNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBhdHRhY2hlZCwgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIHRvVHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG52YXIgcnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTErXG4vLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91cywgZXhjZXB0IHdoZW4gdGhleSBhcmUgbm8tb3AuXG4vLyBTbyBleHBlY3QgZm9jdXMgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGFjdGl2ZSxcbi8vIGFuZCBibHVyIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGFscmVhZHkgYWN0aXZlLlxuLy8gKGZvY3VzIGFuZCBibHVyIGFyZSBhbHdheXMgc3luY2hyb25vdXMgaW4gb3RoZXIgc3VwcG9ydGVkIGJyb3dzZXJzLFxuLy8gdGhpcyBqdXN0IGRlZmluZXMgd2hlbiB3ZSBjYW4gY291bnQgb24gaXQpLlxuZnVuY3Rpb24gZXhwZWN0U3luYyggZWxlbSwgdHlwZSApIHtcblx0cmV0dXJuICggZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSApID09PSAoIHR5cGUgPT09IFwiZm9jdXNcIiApO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIE9ubHkgYXR0YWNoIGV2ZW50cyB0byBvYmplY3RzIHRoYXQgYWNjZXB0IGRhdGFcblx0XHRpZiAoICFhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0gT2JqZWN0LmNyZWF0ZSggbnVsbCApO1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXG5cdFx0XHQvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3Rcblx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSxcblxuXHRcdFx0aGFuZGxlcnMgPSAoXG5cdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0KVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpc1xuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGhhbmRsZU9iai5uYW1lc3BhY2UgPT09IGZhbHNlIHx8XG5cdFx0XHRcdFx0ZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4KVxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgcmV0dXJuVHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgZXhwZWN0U3luYyApIHtcblxuXHQvLyBNaXNzaW5nIGV4cGVjdFN5bmMgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFleHBlY3RTeW5jICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgbm90QXN5bmMsIHJlc3VsdCxcblx0XHRcdFx0c2F2ZWQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0aWYgKCAoIGV2ZW50LmlzVHJpZ2dlciAmIDEgKSAmJiB0aGlzWyB0eXBlIF0gKSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcblx0XHRcdFx0Ly8gU2F2ZWQgZGF0YSBzaG91bGQgYmUgZmFsc2UgaW4gc3VjaCBjYXNlcywgYnV0IG1pZ2h0IGJlIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3Rcblx0XHRcdFx0Ly8gZnJvbSBhbiBhc3luYyBuYXRpdmUgaGFuZGxlciAoZ2gtNDM1MClcblx0XHRcdFx0aWYgKCAhc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHQvLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91c1xuXHRcdFx0XHRcdG5vdEFzeW5jID0gZXhwZWN0U3luYyggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCB8fCBub3RBc3luYyApIHtcblx0XHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDg2K1xuXHRcdFx0XHRcdFx0Ly8gSW4gQ2hyb21lLCBpZiBhbiBlbGVtZW50IGhhdmluZyBhIGZvY3Vzb3V0IGhhbmRsZXIgaXMgYmx1cnJlZCBieVxuXHRcdFx0XHRcdFx0Ly8gY2xpY2tpbmcgb3V0c2lkZSBvZiBpdCwgaXQgaW52b2tlcyB0aGUgaGFuZGxlciBzeW5jaHJvbm91c2x5LiBJZlxuXHRcdFx0XHRcdFx0Ly8gdGhhdCBoYW5kbGVyIGNhbGxzIGAucmVtb3ZlKClgIG9uIHRoZSBlbGVtZW50LCB0aGUgZGF0YSBpcyBjbGVhcmVkLFxuXHRcdFx0XHRcdFx0Ly8gbGVhdmluZyBgcmVzdWx0YCB1bmRlZmluZWQuIFdlIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCB0aGlzLlxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdCAmJiByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nIHRoZVxuXHRcdFx0XHQvLyBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCB7XG5cdFx0XHRcdFx0dmFsdWU6IGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHRcdC8vIEV4dGVuZCB3aXRoIHRoZSBwcm90b3R5cGUgdG8gcmVzZXQgdGhlIGFib3ZlIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRqUXVlcnkuZXh0ZW5kKCBzYXZlZFsgMCBdLCBqUXVlcnkuRXZlbnQucHJvdG90eXBlICksXG5cdFx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxuXHRcdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIEFib3J0IGhhbmRsaW5nIG9mIHRoZSBuYXRpdmUgZXZlbnRcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cdHdoaWNoOiB0cnVlXG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHByZXNzIG5hdGl2ZSBmb2N1cyBvciBibHVyIGFzIGl0J3MgYWxyZWFkeSBiZWluZyBmaXJlZFxuXHRcdC8vIGluIGxldmVyYWdlTmF0aXZlLlxuXHRcdF9kZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRkZWxlZ2F0ZVR5cGU6IGRlbGVnYXRlVHlwZVxuXHR9O1xufSApO1xuXG4vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3Ncbi8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuXG4vLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dFxuLy9cbi8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHlcbi8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOlxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4XG4vLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLlxualF1ZXJ5LmVhY2goIHtcblx0bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIixcblx0bW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcblx0cG9pbnRlcmxlYXZlOiBcInBvaW50ZXJvdXRcIlxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcblx0XHRkZWxlZ2F0ZVR5cGU6IGZpeCxcblx0XHRiaW5kVHlwZTogZml4LFxuXG5cdFx0aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmV0LFxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxuXHRcdFx0XHRyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCxcblx0XHRcdFx0aGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqO1xuXG5cdFx0XHQvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTtcblx0XHRcdFx0cmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XG5cdH0sXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcblx0XHRpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHtcblxuXHRcdFx0Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudFxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcblx0XHRcdFx0aGFuZGxlT2JqLm5hbWVzcGFjZSA/XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDpcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3Rvcixcblx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0XHR0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbnZhclxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzIG9ubHlcblx0Ly8gSW4gSUUvRWRnZSB1c2luZyByZWdleCBncm91cHMgaGVyZSBjYXVzZXMgc2V2ZXJlIHNsb3dkb3ducy5cblx0Ly8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi9cblx0cm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksXG5cblx0Ly8gY2hlY2tlZD1cImNoZWNrZWRcIiBvciBjaGVja2VkXG5cdHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxcblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO1xuXG4vLyBQcmVmZXIgYSB0Ym9keSBvdmVyIGl0cyBwYXJlbnQgdGFibGUgZm9yIGNvbnRhaW5pbmcgbmV3IHJvd3NcbmZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHtcblx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0YWJsZVwiICkgJiZcblx0XHRub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSApIHtcblxuXHRcdHJldHVybiBqUXVlcnkoIGVsZW0gKS5jaGlsZHJlbiggXCJ0Ym9keVwiIClbIDAgXSB8fCBlbGVtO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbi8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb25cbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XG5cdGVsZW0udHlwZSA9ICggZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgIT09IG51bGwgKSArIFwiL1wiICsgZWxlbS50eXBlO1xuXHRyZXR1cm4gZWxlbTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7XG5cdGlmICggKCBlbGVtLnR5cGUgfHwgXCJcIiApLnNsaWNlKCAwLCA1ICkgPT09IFwidHJ1ZS9cIiApIHtcblx0XHRlbGVtLnR5cGUgPSBlbGVtLnR5cGUuc2xpY2UoIDUgKTtcblx0fSBlbHNlIHtcblx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggXCJ0eXBlXCIgKTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuZ2V0KCBzcmMgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZGVzdCwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGZsYXQoIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0sIGRvYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KVxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XG5cdHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSBcImNvbnRlbnQtYm94XCI7XG5cblx0alF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwge1xuXHRcdGJveFNpemluZ1JlbGlhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7XG5cdFx0fSxcblx0XHRwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsQm94U3R5bGVzVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7XG5cdFx0fSxcblx0XHRzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYm94U2l6ZVZhbDtcblx0XHR9LFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gQmVoYXZpb3IgaW4gSUUgOSBpcyBtb3JlIHN1YnRsZSB0aGFuIGluIG5ld2VyIHZlcnNpb25zICYgaXQgcGFzc2VzXG5cdFx0Ly8gc29tZSB2ZXJzaW9ucyBvZiB0aGlzIHRlc3Q7IG1ha2Ugc3VyZSBub3QgdG8gbWFrZSBpdCBwYXNzIHRoZXJlIVxuXHRcdC8vXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA3MCtcblx0XHQvLyBPbmx5IEZpcmVmb3ggaW5jbHVkZXMgYm9yZGVyIHdpZHRoc1xuXHRcdC8vIGluIGNvbXB1dGVkIGRpbWVuc2lvbnMuIChnaC00NTI5KVxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0YWJsZSwgdHIsIHRyQ2hpbGQsIHRyU3R5bGU7XG5cdFx0XHRpZiAoIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0YWJsZVwiICk7XG5cdFx0XHRcdHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0clwiICk7XG5cdFx0XHRcdHRyQ2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0XHRcdFx0dGFibGUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGVcIjtcblx0XHRcdFx0dHIuc3R5bGUuY3NzVGV4dCA9IFwiYm9yZGVyOjFweCBzb2xpZFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0Ly8gSGVpZ2h0IHNldCB0aHJvdWdoIGNzc1RleHQgZG9lcyBub3QgZ2V0IGFwcGxpZWQuXG5cdFx0XHRcdC8vIENvbXB1dGVkIGhlaWdodCB0aGVuIGNvbWVzIGJhY2sgYXMgMC5cblx0XHRcdFx0dHIuc3R5bGUuaGVpZ2h0ID0gXCIxcHhcIjtcblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5oZWlnaHQgPSBcIjlweFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgOCBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEluIG91ciBib2R5QmFja2dyb3VuZC5odG1sIGlmcmFtZSxcblx0XHRcdFx0Ly8gZGlzcGxheSBmb3IgYWxsIGRpdiBlbGVtZW50cyBpcyBzZXQgdG8gXCJpbmxpbmVcIixcblx0XHRcdFx0Ly8gd2hpY2ggY2F1c2VzIGEgcHJvYmxlbSBvbmx5IGluIEFuZHJvaWQgOCBDaHJvbWUgODYuXG5cdFx0XHRcdC8vIEVuc3VyaW5nIHRoZSBkaXYgaXMgZGlzcGxheTogYmxvY2tcblx0XHRcdFx0Ly8gZ2V0cyBhcm91bmQgdGhpcyBpc3N1ZS5cblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudFxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdGFibGUgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHIgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHJDaGlsZCApO1xuXG5cdFx0XHRcdHRyU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggdHIgKTtcblx0XHRcdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPSAoIHBhcnNlSW50KCB0clN0eWxlLmhlaWdodCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyVG9wV2lkdGgsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlckJvdHRvbVdpZHRoLCAxMCApICkgPT09IHRyLm9mZnNldEhlaWdodDtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIHRhYmxlICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVUckRpbWVuc2lvbnNWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBfZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xuXG5cdC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW5cblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XG5cdHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApO1xuXHRyZXR1cm4gbWF0Y2hlcyA/XG5cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHtcblx0dmFyIGkgPSBkaW1lbnNpb24gPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXHRcdGV4dHJhID0gMCxcblx0XHRkZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0aWYgKCBib3ggPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBib3ggKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGNvbnRlbnQtYm94LCB3ZSdyZSBzZWVraW5nIFwicGFkZGluZ1wiIG9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIlxuXHRcdGlmICggIWlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBBZGQgcGFkZGluZ1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEZvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCIsIGFkZCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHRyYSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGJvcmRlci1ib3ggKGNvbnRlbnQgKyBwYWRkaW5nICsgYm9yZGVyKSwgd2UncmUgc2Vla2luZyBcImNvbnRlbnRcIiBvclxuXHRcdC8vIFwicGFkZGluZ1wiIG9yIFwibWFyZ2luXCJcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIsIHN1YnRyYWN0IHBhZGRpbmdcblx0XHRcdGlmICggYm94ID09PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiBvciBcInBhZGRpbmdcIiwgc3VidHJhY3QgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbFxuXHRpZiAoICFpc0JvcmRlckJveCAmJiBjb21wdXRlZFZhbCA+PSAwICkge1xuXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlclxuXHRcdC8vIEFzc3VtaW5nIGludGVnZXIgc2Nyb2xsIGd1dHRlciwgc3VidHJhY3QgdGhlIHJlc3QgYW5kIHJvdW5kIGRvd25cblx0XHRkZWx0YSArPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKFxuXHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdGNvbXB1dGVkVmFsIC1cblx0XHRcdGRlbHRhIC1cblx0XHRcdGV4dHJhIC1cblx0XHRcdDAuNVxuXG5cdFx0Ly8gSWYgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIHVua25vd24sIHRoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXJcblx0XHQvLyBVc2UgYW4gZXhwbGljaXQgemVybyB0byBhdm9pZCBOYU4gKGdoLTM5NjQpXG5cdFx0KSApIHx8IDA7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIFVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guXG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS5cblx0XHQhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCBcInRyXCIgKSB8fFxuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdFx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHRcdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHZpc2libGUgJiBjb25uZWN0ZWRcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImdyaWRBcmVhXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uRW5kXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uU3RhcnRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dFbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dTdGFydFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KVxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7XG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyBidWcgIzkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0XG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lOyBvdGhlcndpc2UsIHJlamVjdFxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH0gKSxcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcblxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0cmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcblx0XHRpZiAoIHJlc3VsdCApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRyZXN1bHQuc3RvcC5iaW5kKCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XG5cdH1cblxuXHQvLyBBdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRhbmltYXRpb25cblx0XHQucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcblxuXHRqUXVlcnkuZngudGltZXIoXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdGFuaW06IGFuaW1hdGlvbixcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxuXHRcdH0gKVxuXHQpO1xuXG5cdHJldHVybiBhbmltYXRpb247XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblxuXHR0d2VlbmVyczoge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7XG5cdFx0XHRhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTtcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9IF1cblx0fSxcblxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XG5cdFx0XHRwcm9wcyA9IFsgXCIqXCIgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXHRcdH1cblxuXHRcdHZhciBwcm9wLFxuXHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0bGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH1cblx0fSxcblxuXHRwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSxcblxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcblx0XHRpZiAoIHByZXBlbmQgKSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApO1xuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuXHRcdFx0aXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFpc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcblx0fTtcblxuXHQvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlmIGZ4IGFyZSBvZmZcblx0aWYgKCBqUXVlcnkuZngub2ZmICkge1xuXHRcdG9wdC5kdXJhdGlvbiA9IDA7XG5cblx0fSBlbHNlIHtcblx0XHRpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcblx0aWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xuXHR9XG5cblx0Ly8gUXVldWVpbmdcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcblxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcblx0XHRcdG9wdC5vbGQuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0LnF1ZXVlICkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gb3B0O1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0aGluVHJlZSApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcblxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9LFxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSxcblx0XHRcdG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSxcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3Rcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xuXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xuXHRcdFx0XHRcdGFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0ZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247XG5cblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XG5cdFx0XHR0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHtcblx0XHR2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkge1xuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRzdG9wKCBnb3RvRW5kICk7XG5cdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcblx0XHRcdGNsZWFyUXVldWUgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBjbGVhclF1ZXVlICkge1xuXHRcdFx0dGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXG5cdFx0XHRcdGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyBcInF1ZXVlSG9va3NcIixcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApO1xuXG5cdFx0XHRpZiAoIGluZGV4ICkge1xuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xuXHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpbmRleCBpbiBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkge1xuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiZcblx0XHRcdFx0XHQoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHtcblxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcblx0XHRcdFx0XHRkZXF1ZXVlID0gZmFsc2U7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxuXHRcdFx0Ly8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaFxuXHRcdFx0Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLlxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbmRleCxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLFxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xuXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XG5cblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xuXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE0MTExNjIzMzM0Ny9odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxuXHRcdFx0XHRcdGVsZW0uaHJlZlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuLy8gZXNsaW50IHJ1bGUgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG5cdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNwZWNcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHtcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzO1xuXG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRpID0gMDtcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXHRcdFx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRcdFx0d2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZSwgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Y2xhc3NOYW1lID0gXCIgXCIgKyBzZWxlY3RvciArIFwiIFwiO1xuXHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHQoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggZ2V0Q2xhc3MoIGVsZW0gKSApICsgXCIgXCIgKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkgKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxuLy8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG4vLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuLy9cbi8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMVxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG4vLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XG5cdGpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxuXHRcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApO1xuXHRcdH07XG5cblx0XHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gSGFuZGxlOiByZWd1bGFyIG5vZGVzICh2aWEgYHRoaXMub3duZXJEb2N1bWVudGApLCB3aW5kb3dcblx0XHRcdFx0Ly8gKHZpYSBgdGhpcy5kb2N1bWVudGApICYgZG9jdW1lbnQgKHZpYSBgdGhpc2ApLlxuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0geyBndWlkOiBEYXRlLm5vdygpIH07XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbCwgcGFyc2VyRXJyb3JFbGVtO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdHBhcnNlckVycm9yRWxlbSA9IHhtbCAmJiB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApWyAwIF07XG5cdGlmICggIXhtbCB8fCBwYXJzZXJFcnJvckVsZW0gKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIChcblx0XHRcdHBhcnNlckVycm9yRWxlbSA/XG5cdFx0XHRcdGpRdWVyeS5tYXAoIHBhcnNlckVycm9yRWxlbS5jaGlsZE5vZGVzLCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsLnRleHRDb250ZW50O1xuXHRcdFx0XHR9ICkuam9pbiggXCJcXG5cIiApIDpcblx0XHRcdFx0ZGF0YVxuXHRcdCkgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXJcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcblx0dmFyIG5hbWU7XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIHRvVHlwZSggb2JqICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXG5cdFx0YWRkKCBwcmVmaXgsIG9iaiApO1xuXHR9XG59XG5cbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcbmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcblx0dmFyIHByZWZpeCxcblx0XHRzID0gW10sXG5cdFx0YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWVPckZ1bmN0aW9uICkge1xuXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0dXJuIHZhbHVlXG5cdFx0XHR2YXIgdmFsdWUgPSBpc0Z1bmN0aW9uKCB2YWx1ZU9yRnVuY3Rpb24gKSA/XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbigpIDpcblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uO1xuXG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICtcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0fTtcblxuXHRpZiAoIGEgPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9ICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApLm1hcCggZnVuY3Rpb24oIF9pLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5vcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgIzk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdID1cblx0XHRcdFx0XHRcdFx0XHRcdCggcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdIHx8IFtdIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNvbmNhdCggbWF0Y2hbIDIgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaC5qb2luKCBcIiwgXCIgKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApO1xuXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHQvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNvIHdlIGNhbiBwdXQgaXQgYmFja1xuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlLmd1aWQrKyApICtcblx0XHRcdFx0XHR1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXNlIGEgbm9vcCBjb252ZXJ0ZXIgZm9yIG1pc3Npbmcgc2NyaXB0IGJ1dCBub3QgaWYganNvbnBcblx0XHRcdGlmICggIWlzU3VjY2VzcyAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJzY3JpcHRcIiwgcy5kYXRhVHlwZXMgKSA+IC0xICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcImpzb25cIiwgcy5kYXRhVHlwZXMgKSA8IDAgKSB7XG5cdFx0XHRcdHMuY29udmVydGVyc1sgXCJ0ZXh0IHNjcmlwdFwiIF0gPSBmdW5jdGlvbigpIHt9O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBfaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdHZhciBpO1xuXHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRpZiAoIGkudG9Mb3dlckNhc2UoKSA9PT0gXCJjb250ZW50LXR5cGVcIiApIHtcblx0XHRcdHMuY29udGVudFR5cGUgPSBzLmhlYWRlcnNbIGkgXSB8fCBcIlwiO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMsIGRvYyApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGNhY2hlOiB0cnVlLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXG5cdFx0Ly8gT25seSBldmFsdWF0ZSB0aGUgcmVzcG9uc2UgaWYgaXQgaXMgc3VjY2Vzc2Z1bCAoZ2gtNDEyNilcblx0XHQvLyBkYXRhRmlsdGVyIGlzIG5vdCBpbnZva2VkIGZvciBmYWlsdXJlIHJlc3BvbnNlcywgc28gdXNpbmcgaXQgaW5zdGVhZFxuXHRcdC8vIG9mIHRoZSBkZWZhdWx0IGNvbnZlcnRlciBpcyBrbHVkZ3kgYnV0IGl0IHdvcmtzLlxuXHRcdGNvbnZlcnRlcnM6IHtcblx0XHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oKSB7fVxuXHRcdH0sXG5cdFx0ZGF0YUZpbHRlcjogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHJlc3BvbnNlLCBvcHRpb25zLCBkb2MgKTtcblx0XHR9XG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRcdGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGh0bWxJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoIFwiYm9keVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTtcbn07XG5cblxuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0Ly8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcbnN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkO1xuXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaztcblxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuXHRcdFx0XHR2YXIgaSxcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpO1xuXG5cdFx0XHRcdHhoci5vcGVuKFxuXHRcdFx0XHRcdG9wdGlvbnMudHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcblx0XHRcdFx0XHRvcHRpb25zLmFzeW5jLFxuXHRcdFx0XHRcdG9wdGlvbnMudXNlcm5hbWUsXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXG5cdFx0XHRcdC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cblx0XHRcdFx0aWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSApIHtcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XG5cdFx0XHRcdFx0XHRcdFx0eGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnRpbWVvdXQgPVxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0ZVxuXHRcdFx0XHRcdFx0XHRcdGlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggMCwgXCJlcnJvclwiICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSAjODYwNSwgIzE0MjA3XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KVxuXHRcdFx0XHRcdFx0XHRcdFx0KCB4aHIucmVzcG9uc2VUeXBlIHx8IFwidGV4dFwiICkgIT09IFwidGV4dFwiICB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFByZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBlIHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLmNvbnRlbnRzLnNjcmlwdCA9IGZhbHNlO1xuXHR9XG59ICk7XG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gb3IgZm9yY2VkLWJ5LWF0dHJzIHJlcXVlc3RzXG5cdGlmICggcy5jcm9zc0RvbWFpbiB8fCBzLnNjcmlwdEF0dHJzICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiIClcblx0XHRcdFx0XHQuYXR0ciggcy5zY3JpcHRBdHRycyB8fCB7fSApXG5cdFx0XHRcdFx0LnByb3AoIHsgY2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LCBzcmM6IHMudXJsIH0gKVxuXHRcdFx0XHRcdC5vbiggXCJsb2FkIGVycm9yXCIsIGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGNhbGxiYWNrID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XG5cdFx0XHR9LFxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBvbGRDYWxsYmFja3MgPSBbXSxcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcblxuLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5nc1xualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZS5ndWlkKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XG4vLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50XG4vLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzdcbnN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHtcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xuXHRib2R5LmlubmVySFRNTCA9IFwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIjtcblx0cmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7XG59ICkoKTtcblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cblx0dmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0cztcblxuXHRpZiAoICFjb250ZXh0ICkge1xuXG5cdFx0Ly8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5XG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cblx0XHRpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ICkge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApO1xuXG5cdFx0XHQvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxuXHRcdFx0YmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJiYXNlXCIgKTtcblx0XHRcdGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xuXHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBfaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCgge1xuXHRcdHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsXG5cdFx0Y29udGVudDogdHlwZSxcblx0XHRcIlwiOiBcIm91dGVyXCIgKyBuYW1lXG5cdH0sIGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KVxuXHRcdFx0XHRcdHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCBcIm91dGVyXCIgKSA9PT0gMCA/XG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxuXHRcdFx0XHRcdFx0ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIF9pLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fSxcblxuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goXG5cdCggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cblx0XHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRcdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cdH1cbik7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG52YXIgcnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2c7XG5cbi8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxuLy8gYXJndW1lbnRzLlxuLy8galF1ZXJ5LnByb3h5IGlzIGRlcHJlY2F0ZWQgdG8gcHJvbW90ZSBzdGFuZGFyZHMgKHNwZWNpZmljYWxseSBGdW5jdGlvbiNiaW5kKVxuLy8gSG93ZXZlciwgaXQgaXMgbm90IHNsYXRlZCBmb3IgcmVtb3ZhbCBhbnkgdGltZSBzb29uXG5qUXVlcnkucHJveHkgPSBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XG5cdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0dG1wID0gZm5bIGNvbnRleHQgXTtcblx0XHRjb250ZXh0ID0gZm47XG5cdFx0Zm4gPSB0bXA7XG5cdH1cblxuXHQvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlY1xuXHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRpZiAoICFpc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBTaW11bGF0ZWQgYmluZFxuXHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7XG5cdHByb3h5ID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdH07XG5cblx0Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkXG5cdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdHJldHVybiBwcm94eTtcbn07XG5cbmpRdWVyeS5ob2xkUmVhZHkgPSBmdW5jdGlvbiggaG9sZCApIHtcblx0aWYgKCBob2xkICkge1xuXHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcblx0fSBlbHNlIHtcblx0XHRqUXVlcnkucmVhZHkoIHRydWUgKTtcblx0fVxufTtcbmpRdWVyeS5pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmpRdWVyeS5wYXJzZUpTT04gPSBKU09OLnBhcnNlO1xualF1ZXJ5Lm5vZGVOYW1lID0gbm9kZU5hbWU7XG5qUXVlcnkuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5qUXVlcnkuaXNXaW5kb3cgPSBpc1dpbmRvdztcbmpRdWVyeS5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG5qUXVlcnkudHlwZSA9IHRvVHlwZTtcblxualF1ZXJ5Lm5vdyA9IERhdGUubm93O1xuXG5qUXVlcnkuaXNOdW1lcmljID0gZnVuY3Rpb24oIG9iaiApIHtcblxuXHQvLyBBcyBvZiBqUXVlcnkgMy4wLCBpc051bWVyaWMgaXMgbGltaXRlZCB0b1xuXHQvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChwcmltaXRpdmVzIG9yIG9iamVjdHMpXG5cdC8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpXG5cdHZhciB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXHRyZXR1cm4gKCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgKSAmJlxuXG5cdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKFwiXCIpXG5cdFx0Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoXCIweC4uLlwiKVxuXHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxuXHRcdCFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTtcbn07XG5cbmpRdWVyeS50cmltID0gZnVuY3Rpb24oIHRleHQgKSB7XG5cdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFwiXCIgOlxuXHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xufTtcblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXG4vLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICgjMTM1NjYpXG5pZiAoIHR5cGVvZiBub0dsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xufVxuXG5cblxuXG5yZXR1cm4galF1ZXJ5O1xufSApO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgQ2xpZW50UmVjdE9iamVjdCwgVmlydHVhbEVsZW1lbnQgfSBmcm9tICcuLi90eXBlcyc7XG4vLyBpbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSAnLi9pbnN0YW5jZU9mJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KFxuICBlbGVtZW50OiBFbGVtZW50IHwgVmlydHVhbEVsZW1lbnQsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtdmFyc1xuICBpbmNsdWRlU2NhbGU6IGJvb2xlYW4gPSBmYWxzZVxuKTogQ2xpZW50UmVjdE9iamVjdCB7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgc2NhbGVYID0gMTtcbiAgbGV0IHNjYWxlWSA9IDE7XG5cbiAgLy8gRklYTUU6XG4gIC8vIGBvZmZzZXRXaWR0aGAgcmV0dXJucyBhbiBpbnRlZ2VyIHdoaWxlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgXG4gIC8vIHJldHVybnMgYSBmbG9hdC4gVGhpcyByZXN1bHRzIGluIGBzY2FsZVhgIG9yIGBzY2FsZVlgIGJlaW5nXG4gIC8vIG5vbi0xIHdoZW4gaXQgc2hvdWxkIGJlIGZvciBlbGVtZW50cyB0aGF0IGFyZW4ndCBhIGZ1bGwgcGl4ZWwgaW5cbiAgLy8gd2lkdGggb3IgaGVpZ2h0LlxuICAvLyBpZiAoaXNIVE1MRWxlbWVudChlbGVtZW50KSAmJiBpbmNsdWRlU2NhbGUpIHtcbiAgLy8gICBjb25zdCBvZmZzZXRIZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgLy8gICBjb25zdCBvZmZzZXRXaWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cbiAgLy8gICAvLyBEbyBub3QgYXR0ZW1wdCB0byBkaXZpZGUgYnkgMCwgb3RoZXJ3aXNlIHdlIGdldCBgSW5maW5pdHlgIGFzIHNjYWxlXG4gIC8vICAgLy8gRmFsbGJhY2sgdG8gMSBpbiBjYXNlIGJvdGggdmFsdWVzIGFyZSBgMGBcbiAgLy8gICBpZiAob2Zmc2V0V2lkdGggPiAwKSB7XG4gIC8vICAgICBzY2FsZVggPSByZWN0LndpZHRoIC8gb2Zmc2V0V2lkdGggfHwgMTtcbiAgLy8gICB9XG4gIC8vICAgaWYgKG9mZnNldEhlaWdodCA+IDApIHtcbiAgLy8gICAgIHNjYWxlWSA9IHJlY3QuaGVpZ2h0IC8gb2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogcmVjdC53aWR0aCAvIHNjYWxlWCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0IC8gc2NhbGVZLFxuICAgIHRvcDogcmVjdC50b3AgLyBzY2FsZVksXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQgLyBzY2FsZVgsXG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSAvIHNjYWxlWSxcbiAgICBsZWZ0OiByZWN0LmxlZnQgLyBzY2FsZVgsXG4gICAgeDogcmVjdC5sZWZ0IC8gc2NhbGVYLFxuICAgIHk6IHJlY3QudG9wIC8gc2NhbGVZLFxuICB9O1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgV2luZG93IH0gZnJvbSAnLi4vdHlwZXMnO1xuZGVjbGFyZSBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZTogTm9kZSB8IFdpbmRvdyk6IFdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIGNvbnN0IG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSAnLi9nZXRXaW5kb3cnO1xuaW1wb3J0IHR5cGUgeyBXaW5kb3cgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbChub2RlOiBOb2RlIHwgV2luZG93KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgY29uc3Qgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgY29uc3Qgc2Nyb2xsVG9wID0gd2luLnBhZ2VZT2Zmc2V0O1xuXG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3AsXG4gIH07XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tICcuL2dldFdpbmRvdyc7XG5cbmRlY2xhcmUgZnVuY3Rpb24gaXNFbGVtZW50KG5vZGU6IG1peGVkKTogYm9vbGVhbiAlY2hlY2tzKG5vZGUgaW5zdGFuY2VvZlxuICBFbGVtZW50KTtcbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIGNvbnN0IE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5kZWNsYXJlIGZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZTogbWl4ZWQpOiBib29sZWFuICVjaGVja3Mobm9kZSBpbnN0YW5jZW9mXG4gIEhUTUxFbGVtZW50KTtcbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICBjb25zdCBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5kZWNsYXJlIGZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlOiBtaXhlZCk6IGJvb2xlYW4gJWNoZWNrcyhub2RlIGluc3RhbmNlb2ZcbiAgU2hhZG93Um9vdCk7XG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9O1xuIiwiLy8gQGZsb3dcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRTY3JvbGwoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcCxcbiAgfTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gJy4vZ2V0V2luZG93U2Nyb2xsJztcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSAnLi9nZXRXaW5kb3cnO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gJy4vaW5zdGFuY2VPZic7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSAnLi9nZXRIVE1MRWxlbWVudFNjcm9sbCc7XG5pbXBvcnQgdHlwZSB7IFdpbmRvdyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlOiBOb2RlIHwgV2luZG93KSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgV2luZG93IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlTmFtZShlbGVtZW50OiA/Tm9kZSB8IFdpbmRvdyk6ID9zdHJpbmcge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICcuL2luc3RhbmNlT2YnO1xuaW1wb3J0IHR5cGUgeyBXaW5kb3cgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChcbiAgZWxlbWVudDogRWxlbWVudCB8IFdpbmRvd1xuKTogSFRNTEVsZW1lbnQge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoXG4gICAgKGlzRWxlbWVudChlbGVtZW50KVxuICAgICAgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnRcbiAgICAgIDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICAgIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudFxuICApLmRvY3VtZW50RWxlbWVudDtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gJy4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0JztcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSAnLi9nZXREb2N1bWVudEVsZW1lbnQnO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tICcuL2dldFdpbmRvd1Njcm9sbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudDogRWxlbWVudCk6IG51bWJlciB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIC8vIFBvcHBlciAxIGlzIGJyb2tlbiBpbiB0aGlzIGNhc2UgYW5kIG5ldmVyIGhhZCBhIGJ1ZyByZXBvcnQgc28gbGV0J3MgYXNzdW1lXG4gIC8vIGl0J3Mgbm90IGFuIGlzc3VlLiBJIGRvbid0IHRoaW5rIGFueW9uZSBldmVyIHNwZWNpZmllcyB3aWR0aCBvbiA8aHRtbD5cbiAgLy8gYW55d2F5LlxuICAvLyBCcm93c2VycyB3aGVyZSB0aGUgbGVmdCBzY3JvbGxiYXIgZG9lc24ndCBjYXVzZSBhbiBpc3N1ZSByZXBvcnQgYDBgIGZvclxuICAvLyB0aGlzIChlLmcuIEVkZ2UgMjAxOSwgSUUxMSwgU2FmYXJpKVxuICByZXR1cm4gKFxuICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgK1xuICAgIGdldFdpbmRvd1Njcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0XG4gICk7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tICcuL2dldFdpbmRvdyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoXG4gIGVsZW1lbnQ6IEVsZW1lbnRcbik6IENTU1N0eWxlRGVjbGFyYXRpb24ge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSAnLi9nZXRDb21wdXRlZFN0eWxlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgLy8gRmlyZWZveCB3YW50cyB1cyB0byBjaGVjayBgLXhgIGFuZCBgLXlgIHZhcmlhdGlvbnMgYXMgd2VsbFxuICBjb25zdCB7IG92ZXJmbG93LCBvdmVyZmxvd1gsIG92ZXJmbG93WSB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBSZWN0LCBWaXJ0dWFsRWxlbWVudCwgV2luZG93IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tICcuL2dldEJvdW5kaW5nQ2xpZW50UmVjdCc7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tICcuL2dldE5vZGVTY3JvbGwnO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gJy4vZ2V0Tm9kZU5hbWUnO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gJy4vaW5zdGFuY2VPZic7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tICcuL2dldFdpbmRvd1Njcm9sbEJhclgnO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tICcuL2dldERvY3VtZW50RWxlbWVudCc7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSAnLi9pc1Njcm9sbFBhcmVudCc7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3Qgc2NhbGVYID0gcmVjdC53aWR0aCAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgY29uc3Qgc2NhbGVZID0gcmVjdC5oZWlnaHQgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxO1xuXG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufVxuXG4vLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KFxuICBlbGVtZW50T3JWaXJ0dWFsRWxlbWVudDogRWxlbWVudCB8IFZpcnR1YWxFbGVtZW50LFxuICBvZmZzZXRQYXJlbnQ6IEVsZW1lbnQgfCBXaW5kb3csXG4gIGlzRml4ZWQ6IGJvb2xlYW4gPSBmYWxzZVxuKTogUmVjdCB7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9XG4gICAgaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChcbiAgICBlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCxcbiAgICBvZmZzZXRQYXJlbnRJc1NjYWxlZFxuICApO1xuXG4gIGxldCBzY3JvbGwgPSB7IHNjcm9sbExlZnQ6IDAsIHNjcm9sbFRvcDogMCB9O1xuICBsZXQgb2Zmc2V0cyA9IHsgeDogMCwgeTogMCB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAoIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSkge1xuICAgIGlmIChcbiAgICAgIGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgICBpc1Njcm9sbFBhcmVudChkb2N1bWVudEVsZW1lbnQpXG4gICAgKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgb2Zmc2V0cyA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUpO1xuICAgICAgb2Zmc2V0cy54ICs9IG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ICs9IG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICB9O1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgUmVjdCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSAnLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QnO1xuXG4vLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50OiBIVE1MRWxlbWVudCk6IFJlY3Qge1xuICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpO1xuXG4gIC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcbiAgbGV0IHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgbGV0IGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgfTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSAnLi9nZXROb2RlTmFtZSc7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gJy4vZ2V0RG9jdW1lbnRFbGVtZW50JztcbmltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gJy4vaW5zdGFuY2VPZic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhcmVudE5vZGUoZWxlbWVudDogTm9kZSB8IFNoYWRvd1Jvb3QpOiBOb2RlIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICAoaXNTaGFkb3dSb290KGVsZW1lbnQpID8gZWxlbWVudC5ob3N0IDogbnVsbCkgfHwgLy8gU2hhZG93Um9vdCBkZXRlY3RlZFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBIVE1MRWxlbWVudCBpcyBhIE5vZGVcbiAgICBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgLy8gZmFsbGJhY2tcbiAgKTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tICcuL2dldFBhcmVudE5vZGUnO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gJy4vaXNTY3JvbGxQYXJlbnQnO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gJy4vZ2V0Tm9kZU5hbWUnO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gJy4vaW5zdGFuY2VPZic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlOiBOb2RlKTogSFRNTEVsZW1lbnQge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gJy4vZ2V0U2Nyb2xsUGFyZW50JztcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gJy4vZ2V0UGFyZW50Tm9kZSc7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gJy4vZ2V0V2luZG93JztcbmltcG9ydCB0eXBlIHsgV2luZG93LCBWaXN1YWxWaWV3cG9ydCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tICcuL2lzU2Nyb2xsUGFyZW50JztcblxuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0U2Nyb2xsUGFyZW50cyhcbiAgZWxlbWVudDogTm9kZSxcbiAgbGlzdDogQXJyYXk8RWxlbWVudCB8IFdpbmRvdz4gPSBbXVxuKTogQXJyYXk8RWxlbWVudCB8IFdpbmRvdyB8IFZpc3VhbFZpZXdwb3J0PiB7XG4gIGNvbnN0IHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgY29uc3QgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ/LmJvZHk7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICBjb25zdCB0YXJnZXQgPSBpc0JvZHlcbiAgICA/IFt3aW5dLmNvbmNhdChcbiAgICAgICAgd2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLFxuICAgICAgICBpc1Njcm9sbFBhcmVudChzY3JvbGxQYXJlbnQpID8gc2Nyb2xsUGFyZW50IDogW11cbiAgICAgIClcbiAgICA6IHNjcm9sbFBhcmVudDtcbiAgY29uc3QgdXBkYXRlZExpc3QgPSBsaXN0LmNvbmNhdCh0YXJnZXQpO1xuXG4gIHJldHVybiBpc0JvZHlcbiAgICA/IHVwZGF0ZWRMaXN0XG4gICAgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogaXNCb2R5IHRlbGxzIHVzIHRhcmdldCB3aWxsIGJlIGFuIEhUTUxFbGVtZW50IGhlcmVcbiAgICAgIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSAnLi9nZXROb2RlTmFtZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSAnLi9nZXRXaW5kb3cnO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gJy4vZ2V0Tm9kZU5hbWUnO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSAnLi9nZXRDb21wdXRlZFN0eWxlJztcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tICcuL2luc3RhbmNlT2YnO1xuaW1wb3J0IGlzVGFibGVFbGVtZW50IGZyb20gJy4vaXNUYWJsZUVsZW1lbnQnO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSAnLi9nZXRQYXJlbnROb2RlJztcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50OiBFbGVtZW50KTogP0VsZW1lbnQge1xuICBpZiAoXG4gICAgIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHxcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICAgIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCdcbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59XG5cbi8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50OiBFbGVtZW50KSB7XG4gIGNvbnN0IGlzRmlyZWZveCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgIT09IC0xO1xuICBjb25zdCBpc0lFID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50JykgIT09IC0xO1xuXG4gIGlmIChpc0lFICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAvLyBJbiBJRSA5LCAxMCBhbmQgMTEgZml4ZWQgZWxlbWVudHMgY29udGFpbmluZyBibG9jayBpcyBhbHdheXMgZXN0YWJsaXNoZWQgYnkgdGhlIHZpZXdwb3J0XG4gICAgY29uc3QgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgaWYgKGVsZW1lbnRDc3MucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG5cbiAgd2hpbGUgKFxuICAgIGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmXG4gICAgWydodG1sJywgJ2JvZHknXS5pbmRleE9mKGdldE5vZGVOYW1lKGN1cnJlbnROb2RlKSkgPCAwXG4gICkge1xuICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpO1xuXG4gICAgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuICAgIGlmIChcbiAgICAgIGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fFxuICAgICAgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHxcbiAgICAgIGNzcy5jb250YWluID09PSAncGFpbnQnIHx8XG4gICAgICBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fFxuICAgICAgKGlzRmlyZWZveCAmJiBjc3Mud2lsbENoYW5nZSA9PT0gJ2ZpbHRlcicpIHx8XG4gICAgICAoaXNGaXJlZm94ICYmIGNzcy5maWx0ZXIgJiYgY3NzLmZpbHRlciAhPT0gJ25vbmUnKVxuICAgICkge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudDogRWxlbWVudCkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG5cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKFxuICAgIG9mZnNldFBhcmVudCAmJlxuICAgIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiZcbiAgICBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnXG4gICkge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50KTtcbiAgfVxuXG4gIGlmIChcbiAgICBvZmZzZXRQYXJlbnQgJiZcbiAgICAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8XG4gICAgICAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKVxuICApIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luZG93O1xufVxuIiwiLy8gQGZsb3dcbmV4cG9ydCBjb25zdCB0b3A6ICd0b3AnID0gJ3RvcCc7XG5leHBvcnQgY29uc3QgYm90dG9tOiAnYm90dG9tJyA9ICdib3R0b20nO1xuZXhwb3J0IGNvbnN0IHJpZ2h0OiAncmlnaHQnID0gJ3JpZ2h0JztcbmV4cG9ydCBjb25zdCBsZWZ0OiAnbGVmdCcgPSAnbGVmdCc7XG5leHBvcnQgY29uc3QgYXV0bzogJ2F1dG8nID0gJ2F1dG8nO1xuZXhwb3J0IHR5cGUgQmFzZVBsYWNlbWVudCA9XG4gIHwgdHlwZW9mIHRvcFxuICB8IHR5cGVvZiBib3R0b21cbiAgfCB0eXBlb2YgcmlnaHRcbiAgfCB0eXBlb2YgbGVmdDtcbmV4cG9ydCBjb25zdCBiYXNlUGxhY2VtZW50czogQXJyYXk8QmFzZVBsYWNlbWVudD4gPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcblxuZXhwb3J0IGNvbnN0IHN0YXJ0OiAnc3RhcnQnID0gJ3N0YXJ0JztcbmV4cG9ydCBjb25zdCBlbmQ6ICdlbmQnID0gJ2VuZCc7XG5leHBvcnQgdHlwZSBWYXJpYXRpb24gPSB0eXBlb2Ygc3RhcnQgfCB0eXBlb2YgZW5kO1xuXG5leHBvcnQgY29uc3QgY2xpcHBpbmdQYXJlbnRzOiAnY2xpcHBpbmdQYXJlbnRzJyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IGNvbnN0IHZpZXdwb3J0OiAndmlld3BvcnQnID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB0eXBlIEJvdW5kYXJ5ID1cbiAgfCBIVE1MRWxlbWVudFxuICB8IEFycmF5PEhUTUxFbGVtZW50PlxuICB8IHR5cGVvZiBjbGlwcGluZ1BhcmVudHM7XG5leHBvcnQgdHlwZSBSb290Qm91bmRhcnkgPSB0eXBlb2Ygdmlld3BvcnQgfCAnZG9jdW1lbnQnO1xuXG5leHBvcnQgY29uc3QgcG9wcGVyOiAncG9wcGVyJyA9ICdwb3BwZXInO1xuZXhwb3J0IGNvbnN0IHJlZmVyZW5jZTogJ3JlZmVyZW5jZScgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB0eXBlIENvbnRleHQgPSB0eXBlb2YgcG9wcGVyIHwgdHlwZW9mIHJlZmVyZW5jZTtcblxuZXhwb3J0IHR5cGUgVmFyaWF0aW9uUGxhY2VtZW50ID1cbiAgfCAndG9wLXN0YXJ0J1xuICB8ICd0b3AtZW5kJ1xuICB8ICdib3R0b20tc3RhcnQnXG4gIHwgJ2JvdHRvbS1lbmQnXG4gIHwgJ3JpZ2h0LXN0YXJ0J1xuICB8ICdyaWdodC1lbmQnXG4gIHwgJ2xlZnQtc3RhcnQnXG4gIHwgJ2xlZnQtZW5kJztcbmV4cG9ydCB0eXBlIEF1dG9QbGFjZW1lbnQgPSAnYXV0bycgfCAnYXV0by1zdGFydCcgfCAnYXV0by1lbmQnO1xuZXhwb3J0IHR5cGUgQ29tcHV0ZWRQbGFjZW1lbnQgPSBWYXJpYXRpb25QbGFjZW1lbnQgfCBCYXNlUGxhY2VtZW50O1xuZXhwb3J0IHR5cGUgUGxhY2VtZW50ID0gQXV0b1BsYWNlbWVudCB8IEJhc2VQbGFjZW1lbnQgfCBWYXJpYXRpb25QbGFjZW1lbnQ7XG5cbmV4cG9ydCBjb25zdCB2YXJpYXRpb25QbGFjZW1lbnRzOiBBcnJheTxWYXJpYXRpb25QbGFjZW1lbnQ+ID0gYmFzZVBsYWNlbWVudHMucmVkdWNlKFxuICAoYWNjOiBBcnJheTxWYXJpYXRpb25QbGFjZW1lbnQ+LCBwbGFjZW1lbnQ6IEJhc2VQbGFjZW1lbnQpID0+XG4gICAgYWNjLmNvbmNhdChbKGAke3BsYWNlbWVudH0tJHtzdGFydH1gOiBhbnkpLCAoYCR7cGxhY2VtZW50fS0ke2VuZH1gOiBhbnkpXSksXG4gIFtdXG4pO1xuZXhwb3J0IGNvbnN0IHBsYWNlbWVudHM6IEFycmF5PFBsYWNlbWVudD4gPSBbLi4uYmFzZVBsYWNlbWVudHMsIGF1dG9dLnJlZHVjZShcbiAgKFxuICAgIGFjYzogQXJyYXk8UGxhY2VtZW50PixcbiAgICBwbGFjZW1lbnQ6IEJhc2VQbGFjZW1lbnQgfCB0eXBlb2YgYXV0b1xuICApOiBBcnJheTxQbGFjZW1lbnQ+ID0+XG4gICAgYWNjLmNvbmNhdChbXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICAoYCR7cGxhY2VtZW50fS0ke3N0YXJ0fWA6IGFueSksXG4gICAgICAoYCR7cGxhY2VtZW50fS0ke2VuZH1gOiBhbnkpLFxuICAgIF0pLFxuICBbXVxuKTtcblxuLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cbmV4cG9ydCBjb25zdCBiZWZvcmVSZWFkOiAnYmVmb3JlUmVhZCcgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgY29uc3QgcmVhZDogJ3JlYWQnID0gJ3JlYWQnO1xuZXhwb3J0IGNvbnN0IGFmdGVyUmVhZDogJ2FmdGVyUmVhZCcgPSAnYWZ0ZXJSZWFkJztcbi8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5leHBvcnQgY29uc3QgYmVmb3JlTWFpbjogJ2JlZm9yZU1haW4nID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IGNvbnN0IG1haW46ICdtYWluJyA9ICdtYWluJztcbmV4cG9ydCBjb25zdCBhZnRlck1haW46ICdhZnRlck1haW4nID0gJ2FmdGVyTWFpbic7XG4vLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5leHBvcnQgY29uc3QgYmVmb3JlV3JpdGU6ICdiZWZvcmVXcml0ZScgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IGNvbnN0IHdyaXRlOiAnd3JpdGUnID0gJ3dyaXRlJztcbmV4cG9ydCBjb25zdCBhZnRlcldyaXRlOiAnYWZ0ZXJXcml0ZScgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgY29uc3QgbW9kaWZpZXJQaGFzZXM6IEFycmF5PE1vZGlmaWVyUGhhc2VzPiA9IFtcbiAgYmVmb3JlUmVhZCxcbiAgcmVhZCxcbiAgYWZ0ZXJSZWFkLFxuICBiZWZvcmVNYWluLFxuICBtYWluLFxuICBhZnRlck1haW4sXG4gIGJlZm9yZVdyaXRlLFxuICB3cml0ZSxcbiAgYWZ0ZXJXcml0ZSxcbl07XG5cbmV4cG9ydCB0eXBlIE1vZGlmaWVyUGhhc2VzID1cbiAgfCB0eXBlb2YgYmVmb3JlUmVhZFxuICB8IHR5cGVvZiByZWFkXG4gIHwgdHlwZW9mIGFmdGVyUmVhZFxuICB8IHR5cGVvZiBiZWZvcmVNYWluXG4gIHwgdHlwZW9mIG1haW5cbiAgfCB0eXBlb2YgYWZ0ZXJNYWluXG4gIHwgdHlwZW9mIGJlZm9yZVdyaXRlXG4gIHwgdHlwZW9mIHdyaXRlXG4gIHwgdHlwZW9mIGFmdGVyV3JpdGU7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBNb2RpZmllciB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSAnLi4vZW51bXMnO1xuXG4vLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5mdW5jdGlvbiBvcmRlcihtb2RpZmllcnMpIHtcbiAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuICBjb25zdCB2aXNpdGVkID0gbmV3IFNldCgpO1xuICBjb25zdCByZXN1bHQgPSBbXTtcblxuICBtb2RpZmllcnMuZm9yRWFjaChtb2RpZmllciA9PiB7XG4gICAgbWFwLnNldChtb2RpZmllci5uYW1lLCBtb2RpZmllcik7XG4gIH0pO1xuXG4gIC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcbiAgZnVuY3Rpb24gc29ydChtb2RpZmllcjogTW9kaWZpZXI8YW55LCBhbnk+KSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG5cbiAgICBjb25zdCByZXF1aXJlcyA9IFtcbiAgICAgIC4uLihtb2RpZmllci5yZXF1aXJlcyB8fCBbXSksXG4gICAgICAuLi4obW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cyB8fCBbXSksXG4gICAgXTtcblxuICAgIHJlcXVpcmVzLmZvckVhY2goZGVwID0+IHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICBjb25zdCBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmVzdWx0LnB1c2gobW9kaWZpZXIpO1xuICB9XG5cbiAgbW9kaWZpZXJzLmZvckVhY2gobW9kaWZpZXIgPT4ge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRlck1vZGlmaWVycyhcbiAgbW9kaWZpZXJzOiBBcnJheTxNb2RpZmllcjxhbnksIGFueT4+XG4pOiBBcnJheTxNb2RpZmllcjxhbnksIGFueT4+IHtcbiAgLy8gb3JkZXIgYmFzZWQgb24gZGVwZW5kZW5jaWVzXG4gIGNvbnN0IG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpO1xuXG4gIC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoKGFjYywgcGhhc2UpID0+IHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChcbiAgICAgIG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKG1vZGlmaWVyID0+IG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZSlcbiAgICApO1xuICB9LCBbXSk7XG59XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZTxUPihmbjogRnVuY3Rpb24pOiAoKSA9PiBQcm9taXNlPFQ+IHtcbiAgbGV0IHBlbmRpbmc7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2U8VD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdChzdHI6IHN0cmluZywgLi4uYXJnczogQXJyYXk8c3RyaW5nPikge1xuICByZXR1cm4gWy4uLmFyZ3NdLnJlZHVjZSgocCwgYykgPT4gcC5yZXBsYWNlKC8lcy8sIGMpLCBzdHIpO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCBmb3JtYXQgZnJvbSAnLi9mb3JtYXQnO1xuaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tICcuLi9lbnVtcyc7XG5cbmNvbnN0IElOVkFMSURfTU9ESUZJRVJfRVJST1IgPVxuICAnUG9wcGVyOiBtb2RpZmllciBcIiVzXCIgcHJvdmlkZWQgYW4gaW52YWxpZCAlcyBwcm9wZXJ0eSwgZXhwZWN0ZWQgJXMgYnV0IGdvdCAlcyc7XG5jb25zdCBNSVNTSU5HX0RFUEVOREVOQ1lfRVJST1IgPVxuICAnUG9wcGVyOiBtb2RpZmllciBcIiVzXCIgcmVxdWlyZXMgXCIlc1wiLCBidXQgXCIlc1wiIG1vZGlmaWVyIGlzIG5vdCBhdmFpbGFibGUnO1xuY29uc3QgVkFMSURfUFJPUEVSVElFUyA9IFtcbiAgJ25hbWUnLFxuICAnZW5hYmxlZCcsXG4gICdwaGFzZScsXG4gICdmbicsXG4gICdlZmZlY3QnLFxuICAncmVxdWlyZXMnLFxuICAnb3B0aW9ucycsXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZU1vZGlmaWVycyhtb2RpZmllcnM6IEFycmF5PGFueT4pOiB2b2lkIHtcbiAgbW9kaWZpZXJzLmZvckVhY2goKG1vZGlmaWVyKSA9PiB7XG4gICAgWy4uLk9iamVjdC5rZXlzKG1vZGlmaWVyKSwgLi4uVkFMSURfUFJPUEVSVElFU11cbiAgICAgIC8vIElFMTEtY29tcGF0aWJsZSByZXBsYWNlbWVudCBmb3IgYG5ldyBTZXQoaXRlcmFibGUpYFxuICAgICAgLmZpbHRlcigodmFsdWUsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleClcbiAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICBjYXNlICduYW1lJzpcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kaWZpZXIubmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgICAgICAgICBJTlZBTElEX01PRElGSUVSX0VSUk9SLFxuICAgICAgICAgICAgICAgICAgU3RyaW5nKG1vZGlmaWVyLm5hbWUpLFxuICAgICAgICAgICAgICAgICAgJ1wibmFtZVwiJyxcbiAgICAgICAgICAgICAgICAgICdcInN0cmluZ1wiJyxcbiAgICAgICAgICAgICAgICAgIGBcIiR7U3RyaW5nKG1vZGlmaWVyLm5hbWUpfVwiYFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2VuYWJsZWQnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5lbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgICAgICAgICBJTlZBTElEX01PRElGSUVSX0VSUk9SLFxuICAgICAgICAgICAgICAgICAgbW9kaWZpZXIubmFtZSxcbiAgICAgICAgICAgICAgICAgICdcImVuYWJsZWRcIicsXG4gICAgICAgICAgICAgICAgICAnXCJib29sZWFuXCInLFxuICAgICAgICAgICAgICAgICAgYFwiJHtTdHJpbmcobW9kaWZpZXIuZW5hYmxlZCl9XCJgXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncGhhc2UnOlxuICAgICAgICAgICAgaWYgKG1vZGlmaWVyUGhhc2VzLmluZGV4T2YobW9kaWZpZXIucGhhc2UpIDwgMCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGZvcm1hdChcbiAgICAgICAgICAgICAgICAgIElOVkFMSURfTU9ESUZJRVJfRVJST1IsXG4gICAgICAgICAgICAgICAgICBtb2RpZmllci5uYW1lLFxuICAgICAgICAgICAgICAgICAgJ1wicGhhc2VcIicsXG4gICAgICAgICAgICAgICAgICBgZWl0aGVyICR7bW9kaWZpZXJQaGFzZXMuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgICAgICAgYFwiJHtTdHJpbmcobW9kaWZpZXIucGhhc2UpfVwiYFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2ZuJzpcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kaWZpZXIuZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgICAgICAgICBJTlZBTElEX01PRElGSUVSX0VSUk9SLFxuICAgICAgICAgICAgICAgICAgbW9kaWZpZXIubmFtZSxcbiAgICAgICAgICAgICAgICAgICdcImZuXCInLFxuICAgICAgICAgICAgICAgICAgJ1wiZnVuY3Rpb25cIicsXG4gICAgICAgICAgICAgICAgICBgXCIke1N0cmluZyhtb2RpZmllci5mbil9XCJgXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZWZmZWN0JzpcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbW9kaWZpZXIuZWZmZWN0ICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgdHlwZW9mIG1vZGlmaWVyLmVmZmVjdCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgSU5WQUxJRF9NT0RJRklFUl9FUlJPUixcbiAgICAgICAgICAgICAgICAgIG1vZGlmaWVyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAnXCJlZmZlY3RcIicsXG4gICAgICAgICAgICAgICAgICAnXCJmdW5jdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgIGBcIiR7U3RyaW5nKG1vZGlmaWVyLmZuKX1cImBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXF1aXJlcyc6XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1vZGlmaWVyLnJlcXVpcmVzICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkobW9kaWZpZXIucmVxdWlyZXMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgICAgICAgICBJTlZBTElEX01PRElGSUVSX0VSUk9SLFxuICAgICAgICAgICAgICAgICAgbW9kaWZpZXIubmFtZSxcbiAgICAgICAgICAgICAgICAgICdcInJlcXVpcmVzXCInLFxuICAgICAgICAgICAgICAgICAgJ1wiYXJyYXlcIicsXG4gICAgICAgICAgICAgICAgICBgXCIke1N0cmluZyhtb2RpZmllci5yZXF1aXJlcyl9XCJgXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVxdWlyZXNJZkV4aXN0cyc6XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgICAgICAgICBJTlZBTElEX01PRElGSUVSX0VSUk9SLFxuICAgICAgICAgICAgICAgICAgbW9kaWZpZXIubmFtZSxcbiAgICAgICAgICAgICAgICAgICdcInJlcXVpcmVzSWZFeGlzdHNcIicsXG4gICAgICAgICAgICAgICAgICAnXCJhcnJheVwiJyxcbiAgICAgICAgICAgICAgICAgIGBcIiR7U3RyaW5nKG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMpfVwiYFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ29wdGlvbnMnOlxuICAgICAgICAgIGNhc2UgJ2RhdGEnOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBQb3BwZXJKUzogYW4gaW52YWxpZCBwcm9wZXJ0eSBoYXMgYmVlbiBwcm92aWRlZCB0byB0aGUgXCIke1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyLm5hbWVcbiAgICAgICAgICAgICAgfVwiIG1vZGlmaWVyLCB2YWxpZCBwcm9wZXJ0aWVzIGFyZSAke1ZBTElEX1BST1BFUlRJRVMubWFwKFxuICAgICAgICAgICAgICAgIChzKSA9PiBgXCIke3N9XCJgXG4gICAgICAgICAgICAgICkuam9pbignLCAnKX07IGJ1dCBcIiR7a2V5fVwiIHdhcyBwcm92aWRlZC5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbW9kaWZpZXIucmVxdWlyZXMgJiZcbiAgICAgICAgICBtb2RpZmllci5yZXF1aXJlcy5mb3JFYWNoKChyZXF1aXJlbWVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKG1vZGlmaWVycy5maW5kKChtb2QpID0+IG1vZC5uYW1lID09PSByZXF1aXJlbWVudCkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGZvcm1hdChcbiAgICAgICAgICAgICAgICAgIE1JU1NJTkdfREVQRU5ERU5DWV9FUlJPUixcbiAgICAgICAgICAgICAgICAgIFN0cmluZyhtb2RpZmllci5uYW1lKSxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVtZW50LFxuICAgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfSk7XG59XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxdWVCeTxUPihhcnI6IEFycmF5PFQ+LCBmbjogVCA9PiBhbnkpOiBBcnJheTxUPiB7XG4gIGNvbnN0IGlkZW50aWZpZXJzID0gbmV3IFNldCgpO1xuXG4gIHJldHVybiBhcnIuZmlsdGVyKGl0ZW0gPT4ge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSBmbihpdGVtKTtcblxuICAgIGlmICghaWRlbnRpZmllcnMuaGFzKGlkZW50aWZpZXIpKSB7XG4gICAgICBpZGVudGlmaWVycy5hZGQoaWRlbnRpZmllcik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB7IHR5cGUgQmFzZVBsYWNlbWVudCwgdHlwZSBQbGFjZW1lbnQsIGF1dG8gfSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQoXG4gIHBsYWNlbWVudDogUGxhY2VtZW50IHwgdHlwZW9mIGF1dG9cbik6IEJhc2VQbGFjZW1lbnQge1xuICByZXR1cm4gKHBsYWNlbWVudC5zcGxpdCgnLScpWzBdOiBhbnkpO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgTW9kaWZpZXIgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKFxuICBtb2RpZmllcnM6IEFycmF5PCRTaGFwZTxNb2RpZmllcjxhbnksIGFueT4+PlxuKTogQXJyYXk8JFNoYXBlPE1vZGlmaWVyPGFueSwgYW55Pj4+IHtcbiAgY29uc3QgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZSgobWVyZ2VkLCBjdXJyZW50KSA9PiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5leGlzdGluZyxcbiAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgIG9wdGlvbnM6IHsgLi4uZXhpc3Rpbmcub3B0aW9ucywgLi4uY3VycmVudC5vcHRpb25zIH0sXG4gICAgICAgICAgZGF0YTogeyAuLi5leGlzdGluZy5kYXRhLCAuLi5jdXJyZW50LmRhdGEgfSxcbiAgICAgICAgfVxuICAgICAgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTtcblxuICAvLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgT2JqZWN0LnZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoa2V5ID0+IG1lcmdlZFtrZXldKTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gJy4vZ2V0V2luZG93JztcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSAnLi9nZXREb2N1bWVudEVsZW1lbnQnO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSAnLi9nZXRXaW5kb3dTY3JvbGxCYXJYJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcblxuICBsZXQgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICBsZXQgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuXG4gIC8vIE5COiBUaGlzIGlzbid0IHN1cHBvcnRlZCBvbiBpT1MgPD0gMTIuIElmIHRoZSBrZXlib2FyZCBpcyBvcGVuLCB0aGUgcG9wcGVyXG4gIC8vIGNhbiBiZSBvYnNjdXJlZCB1bmRlcm5lYXRoIGl0LlxuICAvLyBBbHNvLCBgaHRtbC5jbGllbnRIZWlnaHRgIGFkZHMgdGhlIGJvdHRvbSBiYXIgaGVpZ2h0IGluIFNhZmFyaSBpT1MsIGV2ZW5cbiAgLy8gaWYgaXQgaXNuJ3Qgb3Blbiwgc28gaWYgdGhpcyBpc24ndCBhdmFpbGFibGUsIHRoZSBwb3BwZXIgd2lsbCBiZSBkZXRlY3RlZFxuICAvLyB0byBvdmVyZmxvdyB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4gdG9vIGVhcmx5LlxuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcblxuICAgIC8vIFVzZXMgTGF5b3V0IFZpZXdwb3J0IChsaWtlIENocm9tZTsgU2FmYXJpIGRvZXMgbm90IGN1cnJlbnRseSlcbiAgICAvLyBJbiBDaHJvbWUsIGl0IHJldHVybnMgYSB2YWx1ZSB2ZXJ5IGNsb3NlIHRvIDAgKCsvLSkgYnV0IGNvbnRhaW5zIHJvdW5kaW5nXG4gICAgLy8gZXJyb3JzIGR1ZSB0byBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIHByZWNpc2lvbi5cbiAgICAvLyBTYWZhcmkgcmV0dXJucyBhIG51bWJlciA8PSAwLCB1c3VhbGx5IDwgLTEgd2hlbiBwaW5jaC16b29tZWRcblxuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZhaWxzIGluIG1vYmlsZSBlbXVsYXRpb24gbW9kZSBpbiBDaHJvbWUuXG4gICAgLy8gTWF0aC5hYnMod2luLmlubmVyV2lkdGggLyB2aXN1YWxWaWV3cG9ydC5zY2FsZSAtIHZpc3VhbFZpZXdwb3J0LndpZHRoKSA8XG4gICAgLy8gMC4wMDFcbiAgICAvLyBGYWxsYmFjayBoZXJlOiBcIk5vdCBTYWZhcmlcIiB1c2VyQWdlbnRcbiAgICBpZiAoIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiB4ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSxcbiAgICB5LFxuICB9O1xufVxuIiwiLy8gQGZsb3dcbmV4cG9ydCBjb25zdCBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCBjb25zdCBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCBjb25zdCByb3VuZCA9IE1hdGgucm91bmQ7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBSZWN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tICcuL2dldERvY3VtZW50RWxlbWVudCc7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tICcuL2dldENvbXB1dGVkU3R5bGUnO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSAnLi9nZXRXaW5kb3dTY3JvbGxCYXJYJztcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSAnLi9nZXRXaW5kb3dTY3JvbGwnO1xuaW1wb3J0IHsgbWF4IH0gZnJvbSAnLi4vdXRpbHMvbWF0aCc7XG5cbi8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50OiBIVE1MRWxlbWVudCk6IFJlY3Qge1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ/LmJvZHk7XG5cbiAgY29uc3Qgd2lkdGggPSBtYXgoXG4gICAgaHRtbC5zY3JvbGxXaWR0aCxcbiAgICBodG1sLmNsaWVudFdpZHRoLFxuICAgIGJvZHkgPyBib2R5LnNjcm9sbFdpZHRoIDogMCxcbiAgICBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDBcbiAgKTtcbiAgY29uc3QgaGVpZ2h0ID0gbWF4KFxuICAgIGh0bWwuc2Nyb2xsSGVpZ2h0LFxuICAgIGh0bWwuY2xpZW50SGVpZ2h0LFxuICAgIGJvZHkgPyBib2R5LnNjcm9sbEhlaWdodCA6IDAsXG4gICAgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMFxuICApO1xuXG4gIGxldCB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIHgsIHkgfTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tICcuL2luc3RhbmNlT2YnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQ6IEVsZW1lbnQsIGNoaWxkOiBFbGVtZW50KSB7XG4gIGNvbnN0IHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTtcblxuICAvLyBGaXJzdCwgYXR0ZW1wdCB3aXRoIGZhc3RlciBuYXRpdmUgbWV0aG9kXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgIGxldCBuZXh0ID0gY2hpbGQ7XG4gICAgZG8ge1xuICAgICAgaWYgKG5leHQgJiYgcGFyZW50LmlzU2FtZU5vZGUobmV4dCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ106IG5lZWQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlzLi4uXG4gICAgICBuZXh0ID0gbmV4dC5wYXJlbnROb2RlIHx8IG5leHQuaG9zdDtcbiAgICB9IHdoaWxlIChuZXh0KTtcbiAgfVxuXG4gIC8vIEdpdmUgdXAsIHRoZSByZXN1bHQgaXMgZmFsc2VcbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgUmVjdCwgQ2xpZW50UmVjdE9iamVjdCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0OiBSZWN0KTogQ2xpZW50UmVjdE9iamVjdCB7XG4gIHJldHVybiB7XG4gICAgLi4ucmVjdCxcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgdG9wOiByZWN0LnksXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodCxcbiAgfTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IENsaWVudFJlY3RPYmplY3QgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEJvdW5kYXJ5LCBSb290Qm91bmRhcnkgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSAnLi9nZXRWaWV3cG9ydFJlY3QnO1xuaW1wb3J0IGdldERvY3VtZW50UmVjdCBmcm9tICcuL2dldERvY3VtZW50UmVjdCc7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSAnLi9saXN0U2Nyb2xsUGFyZW50cyc7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gJy4vZ2V0T2Zmc2V0UGFyZW50JztcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSAnLi9nZXREb2N1bWVudEVsZW1lbnQnO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSAnLi9nZXRDb21wdXRlZFN0eWxlJztcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gJy4vaW5zdGFuY2VPZic7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gJy4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0JztcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gJy4vZ2V0UGFyZW50Tm9kZSc7XG5pbXBvcnQgY29udGFpbnMgZnJvbSAnLi9jb250YWlucyc7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSAnLi9nZXROb2RlTmFtZSc7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tICcuLi91dGlscy9yZWN0VG9DbGllbnRSZWN0JztcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSAnLi4vdXRpbHMvbWF0aCc7XG5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgY29uc3QgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTtcblxuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG5cbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKFxuICBlbGVtZW50OiBFbGVtZW50LFxuICBjbGlwcGluZ1BhcmVudDogRWxlbWVudCB8IFJvb3RCb3VuZGFyeVxuKTogQ2xpZW50UmVjdE9iamVjdCB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnRcbiAgICA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQpKVxuICAgIDogaXNIVE1MRWxlbWVudChjbGlwcGluZ1BhcmVudClcbiAgICA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50KVxuICAgIDogcmVjdFRvQ2xpZW50UmVjdChnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBwYXJlbnRcIiBpcyBhbiBvdmVyZmxvd2FibGUgY29udGFpbmVyIHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aXRoIGEgcG9zaXRpb24gZGlmZmVyZW50IGZyb21cbi8vIGBpbml0aWFsYFxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQ6IEVsZW1lbnQpOiBBcnJheTxFbGVtZW50PiB7XG4gIGNvbnN0IGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICBjb25zdCBjYW5Fc2NhcGVDbGlwcGluZyA9XG4gICAgWydhYnNvbHV0ZScsICdmaXhlZCddLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikgPj0gMDtcbiAgY29uc3QgY2xpcHBlckVsZW1lbnQgPVxuICAgIGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudClcbiAgICAgID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpXG4gICAgICA6IGVsZW1lbnQ7XG5cbiAgaWYgKCFpc0VsZW1lbnQoY2xpcHBlckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoXG4gICAgKGNsaXBwaW5nUGFyZW50KSA9PlxuICAgICAgaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSAmJlxuICAgICAgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJlxuICAgICAgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSdcbiAgKTtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgcGFyZW50c1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KFxuICBlbGVtZW50OiBFbGVtZW50LFxuICBib3VuZGFyeTogQm91bmRhcnksXG4gIHJvb3RCb3VuZGFyeTogUm9vdEJvdW5kYXJ5XG4pOiBDbGllbnRSZWN0T2JqZWN0IHtcbiAgY29uc3QgbWFpbkNsaXBwaW5nUGFyZW50cyA9XG4gICAgYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnXG4gICAgICA/IGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KVxuICAgICAgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ1BhcmVudHMgPSBbLi4ubWFpbkNsaXBwaW5nUGFyZW50cywgcm9vdEJvdW5kYXJ5XTtcbiAgY29uc3QgZmlyc3RDbGlwcGluZ1BhcmVudCA9IGNsaXBwaW5nUGFyZW50c1swXTtcblxuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCk7XG5cbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuXG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdQYXJlbnQpKTtcblxuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG5cbiAgcmV0dXJuIGNsaXBwaW5nUmVjdDtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgeyB0eXBlIFZhcmlhdGlvbiwgdHlwZSBQbGFjZW1lbnQgfSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZhcmlhdGlvbihwbGFjZW1lbnQ6IFBsYWNlbWVudCk6ID9WYXJpYXRpb24ge1xuICByZXR1cm4gKHBsYWNlbWVudC5zcGxpdCgnLScpWzFdOiBhbnkpO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgUGxhY2VtZW50IH0gZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoXG4gIHBsYWNlbWVudDogUGxhY2VtZW50XG4pOiAneCcgfCAneScge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSAnLi9nZXRCYXNlUGxhY2VtZW50JztcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSAnLi9nZXRWYXJpYXRpb24nO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tICcuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudCc7XG5pbXBvcnQgdHlwZSB7XG4gIFJlY3QsXG4gIFBvc2l0aW9uaW5nU3RyYXRlZ3ksXG4gIE9mZnNldHMsXG4gIENsaWVudFJlY3RPYmplY3QsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgc3RhcnQsIGVuZCwgdHlwZSBQbGFjZW1lbnQgfSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKHtcbiAgcmVmZXJlbmNlLFxuICBlbGVtZW50LFxuICBwbGFjZW1lbnQsXG59OiB7XG4gIHJlZmVyZW5jZTogUmVjdCB8IENsaWVudFJlY3RPYmplY3QsXG4gIGVsZW1lbnQ6IFJlY3QgfCBDbGllbnRSZWN0T2JqZWN0LFxuICBzdHJhdGVneTogUG9zaXRpb25pbmdTdHJhdGVneSxcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50LFxufSk6IE9mZnNldHMge1xuICBjb25zdCBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50ID8gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIDogbnVsbDtcbiAgY29uc3QgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICBjb25zdCBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIGNvbnN0IGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZWxlbWVudC5oZWlnaHQgLyAyO1xuXG4gIGxldCBvZmZzZXRzO1xuICBzd2l0Y2ggKGJhc2VQbGFjZW1lbnQpIHtcbiAgICBjYXNlIHRvcDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZWxlbWVudC5oZWlnaHQsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgbGVmdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZWxlbWVudC53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWSxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55LFxuICAgICAgfTtcbiAgfVxuXG4gIGNvbnN0IG1haW5BeGlzID0gYmFzZVBsYWNlbWVudFxuICAgID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpXG4gICAgOiBudWxsO1xuXG4gIGlmIChtYWluQXhpcyAhPSBudWxsKSB7XG4gICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9XG4gICAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID1cbiAgICAgICAgICBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgU2lkZU9iamVjdCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCk6IFNpZGVPYmplY3Qge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMCxcbiAgfTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IFNpZGVPYmplY3QgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gJy4vZ2V0RnJlc2hTaWRlT2JqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KFxuICBwYWRkaW5nT2JqZWN0OiAkU2hhcGU8U2lkZU9iamVjdD5cbik6IFNpZGVPYmplY3Qge1xuICByZXR1cm4ge1xuICAgIC4uLmdldEZyZXNoU2lkZU9iamVjdCgpLFxuICAgIC4uLnBhZGRpbmdPYmplY3QsXG4gIH07XG59XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXA8XG4gIFQ6IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW4sXG4gIEs6IHN0cmluZ1xuPih2YWx1ZTogVCwga2V5czogQXJyYXk8Sz4pOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZSgoaGFzaE1hcCwga2V5KSA9PiB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IFN0YXRlLCBTaWRlT2JqZWN0LCBQYWRkaW5nIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBQbGFjZW1lbnQsIEJvdW5kYXJ5LCBSb290Qm91bmRhcnksIENvbnRleHQgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgZ2V0Q2xpcHBpbmdSZWN0IGZyb20gJy4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QnO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tICcuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50JztcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSAnLi4vZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdCc7XG5pbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSAnLi9jb21wdXRlT2Zmc2V0cyc7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tICcuL3JlY3RUb0NsaWVudFJlY3QnO1xuaW1wb3J0IHtcbiAgY2xpcHBpbmdQYXJlbnRzLFxuICByZWZlcmVuY2UsXG4gIHBvcHBlcixcbiAgYm90dG9tLFxuICB0b3AsXG4gIHJpZ2h0LFxuICBiYXNlUGxhY2VtZW50cyxcbiAgdmlld3BvcnQsXG59IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gJy4uL2RvbS11dGlscy9pbnN0YW5jZU9mJztcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSAnLi9tZXJnZVBhZGRpbmdPYmplY3QnO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tICcuL2V4cGFuZFRvSGFzaE1hcCc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB0eXBlIE9wdGlvbnMgPSB7XG4gIHBsYWNlbWVudDogUGxhY2VtZW50LFxuICBib3VuZGFyeTogQm91bmRhcnksXG4gIHJvb3RCb3VuZGFyeTogUm9vdEJvdW5kYXJ5LFxuICBlbGVtZW50Q29udGV4dDogQ29udGV4dCxcbiAgYWx0Qm91bmRhcnk6IGJvb2xlYW4sXG4gIHBhZGRpbmc6IFBhZGRpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhcbiAgc3RhdGU6IFN0YXRlLFxuICBvcHRpb25zOiAkU2hhcGU8T3B0aW9ucz4gPSB7fVxuKTogU2lkZU9iamVjdCB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQgPSBzdGF0ZS5wbGFjZW1lbnQsXG4gICAgYm91bmRhcnkgPSBjbGlwcGluZ1BhcmVudHMsXG4gICAgcm9vdEJvdW5kYXJ5ID0gdmlld3BvcnQsXG4gICAgZWxlbWVudENvbnRleHQgPSBwb3BwZXIsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMCxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgcGFkZGluZ09iamVjdCA9IG1lcmdlUGFkZGluZ09iamVjdChcbiAgICB0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcidcbiAgICAgID8gcGFkZGluZ1xuICAgICAgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpXG4gICk7XG5cbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyByZWZlcmVuY2UgOiBwb3BwZXI7XG5cbiAgY29uc3QgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgY29uc3QgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcblxuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoXG4gICAgaXNFbGVtZW50KGVsZW1lbnQpXG4gICAgICA/IGVsZW1lbnRcbiAgICAgIDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCBnZXREb2N1bWVudEVsZW1lbnQoc3RhdGUuZWxlbWVudHMucG9wcGVyKSxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnlcbiAgKTtcblxuICBjb25zdCByZWZlcmVuY2VDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHN0YXRlLmVsZW1lbnRzLnJlZmVyZW5jZSk7XG5cbiAgY29uc3QgcG9wcGVyT2Zmc2V0cyA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZUNsaWVudFJlY3QsXG4gICAgZWxlbWVudDogcG9wcGVyUmVjdCxcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQsXG4gIH0pO1xuXG4gIGNvbnN0IHBvcHBlckNsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHtcbiAgICAuLi5wb3BwZXJSZWN0LFxuICAgIC4uLnBvcHBlck9mZnNldHMsXG4gIH0pO1xuXG4gIGNvbnN0IGVsZW1lbnRDbGllbnRSZWN0ID1cbiAgICBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcG9wcGVyQ2xpZW50UmVjdCA6IHJlZmVyZW5jZUNsaWVudFJlY3Q7XG5cbiAgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG4gIGNvbnN0IG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206XG4gICAgICBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLVxuICAgICAgY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArXG4gICAgICBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6XG4gICAgICBlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQsXG4gIH07XG5cbiAgY29uc3Qgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0O1xuXG4gIC8vIE9mZnNldHMgY2FuIGJlIGFwcGxpZWQgb25seSB0byB0aGUgcG9wcGVyIGVsZW1lbnRcbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIGNvbnN0IG9mZnNldCA9IG9mZnNldERhdGFbcGxhY2VtZW50XTtcblxuICAgIE9iamVjdC5rZXlzKG92ZXJmbG93T2Zmc2V0cykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIGNvbnN0IGF4aXMgPSBbdG9wLCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gJ3knIDogJ3gnO1xuICAgICAgb3ZlcmZsb3dPZmZzZXRzW2tleV0gKz0gb2Zmc2V0W2F4aXNdICogbXVsdGlwbHk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb3ZlcmZsb3dPZmZzZXRzO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHtcbiAgU3RhdGUsXG4gIE9wdGlvbnNHZW5lcmljLFxuICBNb2RpZmllcixcbiAgSW5zdGFuY2UsXG4gIFZpcnR1YWxFbGVtZW50LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gJy4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QnO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSAnLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdCc7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSAnLi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMnO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tICcuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQnO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSAnLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZSc7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSAnLi91dGlscy9vcmRlck1vZGlmaWVycyc7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSAnLi91dGlscy9kZWJvdW5jZSc7XG5pbXBvcnQgdmFsaWRhdGVNb2RpZmllcnMgZnJvbSAnLi91dGlscy92YWxpZGF0ZU1vZGlmaWVycyc7XG5pbXBvcnQgdW5pcXVlQnkgZnJvbSAnLi91dGlscy91bmlxdWVCeSc7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tICcuL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQnO1xuaW1wb3J0IG1lcmdlQnlOYW1lIGZyb20gJy4vdXRpbHMvbWVyZ2VCeU5hbWUnO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gJy4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cnO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSAnLi9kb20tdXRpbHMvaW5zdGFuY2VPZic7XG5pbXBvcnQgeyBhdXRvIH0gZnJvbSAnLi9lbnVtcyc7XG5cbmNvbnN0IElOVkFMSURfRUxFTUVOVF9FUlJPUiA9XG4gICdQb3BwZXI6IEludmFsaWQgcmVmZXJlbmNlIG9yIHBvcHBlciBhcmd1bWVudCBwcm92aWRlZC4gVGhleSBtdXN0IGJlIGVpdGhlciBhIERPTSBlbGVtZW50IG9yIHZpcnR1YWwgZWxlbWVudC4nO1xuY29uc3QgSU5GSU5JVEVfTE9PUF9FUlJPUiA9XG4gICdQb3BwZXI6IEFuIGluZmluaXRlIGxvb3AgaW4gdGhlIG1vZGlmaWVycyBjeWNsZSBoYXMgYmVlbiBkZXRlY3RlZCEgVGhlIGN5Y2xlIGhhcyBiZWVuIGludGVycnVwdGVkIHRvIHByZXZlbnQgYSBicm93c2VyIGNyYXNoLic7XG5cbmNvbnN0IERFRkFVTFRfT1BUSU9OUzogT3B0aW9uc0dlbmVyaWM8YW55PiA9IHtcbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbW9kaWZpZXJzOiBbXSxcbiAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG59O1xuXG50eXBlIFBvcHBlckdlbmVyYXRvckFyZ3MgPSB7XG4gIGRlZmF1bHRNb2RpZmllcnM/OiBBcnJheTxNb2RpZmllcjxhbnksIGFueT4+LFxuICBkZWZhdWx0T3B0aW9ucz86ICRTaGFwZTxPcHRpb25zR2VuZXJpYzxhbnk+Pixcbn07XG5cbmZ1bmN0aW9uIGFyZVZhbGlkRWxlbWVudHMoLi4uYXJnczogQXJyYXk8YW55Pik6IGJvb2xlYW4ge1xuICByZXR1cm4gIWFyZ3Muc29tZShcbiAgICAoZWxlbWVudCkgPT5cbiAgICAgICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BwZXJHZW5lcmF0b3IoZ2VuZXJhdG9yT3B0aW9uczogUG9wcGVyR2VuZXJhdG9yQXJncyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBkZWZhdWx0TW9kaWZpZXJzID0gW10sXG4gICAgZGVmYXVsdE9wdGlvbnMgPSBERUZBVUxUX09QVElPTlMsXG4gIH0gPSBnZW5lcmF0b3JPcHRpb25zO1xuXG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXI8VE1vZGlmaWVyOiAkU2hhcGU8TW9kaWZpZXI8YW55LCBhbnk+Pj4oXG4gICAgcmVmZXJlbmNlOiBFbGVtZW50IHwgVmlydHVhbEVsZW1lbnQsXG4gICAgcG9wcGVyOiBIVE1MRWxlbWVudCxcbiAgICBvcHRpb25zOiAkU2hhcGU8T3B0aW9uc0dlbmVyaWM8VE1vZGlmaWVyPj4gPSBkZWZhdWx0T3B0aW9uc1xuICApOiBJbnN0YW5jZSB7XG4gICAgbGV0IHN0YXRlOiAkU2hhcGU8U3RhdGU+ID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogeyAuLi5ERUZBVUxUX09QVElPTlMsIC4uLmRlZmF1bHRPcHRpb25zIH0sXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyLFxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fSxcbiAgICB9O1xuXG4gICAgbGV0IGVmZmVjdENsZWFudXBGbnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG4gICAgbGV0IGlzRGVzdHJveWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBpbnN0YW5jZSA9IHtcbiAgICAgIHN0YXRlLFxuICAgICAgc2V0T3B0aW9ucyhzZXRPcHRpb25zQWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPVxuICAgICAgICAgIHR5cGVvZiBzZXRPcHRpb25zQWN0aW9uID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucylcbiAgICAgICAgICAgIDogc2V0T3B0aW9uc0FjdGlvbjtcblxuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG5cbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2V4cG9uZW50aWFsLXNwcmVhZF1cbiAgICAgICAgICAuLi5kZWZhdWx0T3B0aW9ucyxcbiAgICAgICAgICAuLi5zdGF0ZS5vcHRpb25zLFxuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH07XG5cbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpXG4gICAgICAgICAgICA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSlcbiAgICAgICAgICAgIDogcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50XG4gICAgICAgICAgICA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudClcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhcbiAgICAgICAgICBtZXJnZUJ5TmFtZShbLi4uZGVmYXVsdE1vZGlmaWVycywgLi4uc3RhdGUub3B0aW9ucy5tb2RpZmllcnNdKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKChtKSA9PiBtLmVuYWJsZWQpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHRoZSBwcm92aWRlZCBtb2RpZmllcnMgc28gdGhhdCB0aGUgY29uc3VtZXIgd2lsbCBnZXQgd2FybmVkXG4gICAgICAgIC8vIGlmIG9uZSBvZiB0aGUgbW9kaWZpZXJzIGlzIGludmFsaWQgZm9yIGFueSByZWFzb25cbiAgICAgICAgaWYgKF9fREVWX18pIHtcbiAgICAgICAgICBjb25zdCBtb2RpZmllcnMgPSB1bmlxdWVCeShcbiAgICAgICAgICAgIFsuLi5vcmRlcmVkTW9kaWZpZXJzLCAuLi5zdGF0ZS5vcHRpb25zLm1vZGlmaWVyc10sXG4gICAgICAgICAgICAoeyBuYW1lIH0pID0+IG5hbWVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdmFsaWRhdGVNb2RpZmllcnMobW9kaWZpZXJzKTtcblxuICAgICAgICAgIGlmIChnZXRCYXNlUGxhY2VtZW50KHN0YXRlLm9wdGlvbnMucGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgICAgICAgICAgY29uc3QgZmxpcE1vZGlmaWVyID0gc3RhdGUub3JkZXJlZE1vZGlmaWVycy5maW5kKFxuICAgICAgICAgICAgICAoeyBuYW1lIH0pID0+IG5hbWUgPT09ICdmbGlwJ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFmbGlwTW9kaWZpZXIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAnUG9wcGVyOiBcImF1dG9cIiBwbGFjZW1lbnRzIHJlcXVpcmUgdGhlIFwiZmxpcFwiIG1vZGlmaWVyIGJlJyxcbiAgICAgICAgICAgICAgICAgICdwcmVzZW50IGFuZCBlbmFibGVkIHRvIHdvcmsuJyxcbiAgICAgICAgICAgICAgICBdLmpvaW4oJyAnKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG1hcmdpblRvcCxcbiAgICAgICAgICAgIG1hcmdpblJpZ2h0LFxuICAgICAgICAgICAgbWFyZ2luQm90dG9tLFxuICAgICAgICAgICAgbWFyZ2luTGVmdCxcbiAgICAgICAgICB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShwb3BwZXIpO1xuXG4gICAgICAgICAgLy8gV2Ugbm8gbG9uZ2VyIHRha2UgaW50byBhY2NvdW50IGBtYXJnaW5zYCBvbiB0aGUgcG9wcGVyLCBhbmQgaXQgY2FuXG4gICAgICAgICAgLy8gY2F1c2UgYnVncyB3aXRoIHBvc2l0aW9uaW5nLCBzbyB3ZSdsbCB3YXJuIHRoZSBjb25zdW1lclxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFttYXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0b20sIG1hcmdpbkxlZnRdLnNvbWUoKG1hcmdpbikgPT5cbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChtYXJnaW4pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAnUG9wcGVyOiBDU1MgXCJtYXJnaW5cIiBzdHlsZXMgY2Fubm90IGJlIHVzZWQgdG8gYXBwbHkgcGFkZGluZycsXG4gICAgICAgICAgICAgICAgJ2JldHdlZW4gdGhlIHBvcHBlciBhbmQgaXRzIHJlZmVyZW5jZSBlbGVtZW50IG9yIGJvdW5kYXJ5LicsXG4gICAgICAgICAgICAgICAgJ1RvIHJlcGxpY2F0ZSBtYXJnaW4sIHVzZSB0aGUgYG9mZnNldGAgbW9kaWZpZXIsIGFzIHdlbGwgYXMnLFxuICAgICAgICAgICAgICAgICd0aGUgYHBhZGRpbmdgIG9wdGlvbiBpbiB0aGUgYHByZXZlbnRPdmVyZmxvd2AgYW5kIGBmbGlwYCcsXG4gICAgICAgICAgICAgICAgJ21vZGlmaWVycy4nLFxuICAgICAgICAgICAgICBdLmpvaW4oJyAnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBydW5Nb2RpZmllckVmZmVjdHMoKTtcblxuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKGlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyByZWZlcmVuY2UsIHBvcHBlciB9ID0gc3RhdGUuZWxlbWVudHM7XG5cbiAgICAgICAgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcbiAgICAgICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKElOVkFMSURfRUxFTUVOVF9FUlJPUik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlciByZWN0cyB0byBiZSByZWFkIGJ5IG1vZGlmaWVyc1xuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QoXG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSxcbiAgICAgICAgICAgIHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCdcbiAgICAgICAgICApLFxuICAgICAgICAgIHBvcHBlcjogZ2V0TGF5b3V0UmVjdChwb3BwZXIpLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZS4gVGhlXG4gICAgICAgIC8vIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRoZSBgZmxpcGAgbW9kaWZpZXIgY2hhbmdpbmcgdGhlXG4gICAgICAgIC8vIHBsYWNlbWVudCwgd2hpY2ggdGhlbiBuZWVkcyB0byByZS1ydW4gYWxsIHRoZSBtb2RpZmllcnMsIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGxvZ2ljIHdhcyBwcmV2aW91c2x5IHJhbiBmb3IgdGhlIHByZXZpb3VzIHBsYWNlbWVudCBhbmQgaXMgdGhlcmVmb3JlXG4gICAgICAgIC8vIHN0YWxlL2luY29ycmVjdFxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuXG4gICAgICAgIHN0YXRlLnBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuXG4gICAgICAgIC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKFxuICAgICAgICAgIChtb2RpZmllcikgPT5cbiAgICAgICAgICAgIChzdGF0ZS5tb2RpZmllcnNEYXRhW21vZGlmaWVyLm5hbWVdID0ge1xuICAgICAgICAgICAgICAuLi5tb2RpZmllci5kYXRhLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgX19kZWJ1Z19sb29wc19fID0gMDtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKF9fREVWX18pIHtcbiAgICAgICAgICAgIF9fZGVidWdfbG9vcHNfXyArPSAxO1xuICAgICAgICAgICAgaWYgKF9fZGVidWdfbG9vcHNfXyA+IDEwMCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKElORklOSVRFX0xPT1BfRVJST1IpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBmbiwgb3B0aW9ucyA9IHt9LCBuYW1lIH0gPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oeyBzdGF0ZSwgb3B0aW9ucywgbmFtZSwgaW5zdGFuY2UgfSkgfHwgc3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBBc3luYyBhbmQgb3B0aW1pc3RpY2FsbHkgb3B0aW1pemVkIHVwZGF0ZSDigJMgaXQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgaWZcbiAgICAgIC8vIG5vdCBuZWNlc3NhcnkgKGRlYm91bmNlZCB0byBydW4gYXQgbW9zdCBvbmNlLXBlci10aWNrKVxuICAgICAgdXBkYXRlOiBkZWJvdW5jZTwkU2hhcGU8U3RhdGU+PihcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBuZXcgUHJvbWlzZTwkU2hhcGU8U3RhdGU+PigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgIHJlc29sdmUoc3RhdGUpO1xuICAgICAgICAgIH0pXG4gICAgICApLFxuXG4gICAgICBkZXN0cm95KCkge1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSU5WQUxJRF9FTEVNRU5UX0VSUk9SKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zZXRPcHRpb25zKG9wdGlvbnMpLnRoZW4oKHN0YXRlKSA9PiB7XG4gICAgICBpZiAoIWlzRGVzdHJveWVkICYmIG9wdGlvbnMub25GaXJzdFVwZGF0ZSkge1xuICAgICAgICBvcHRpb25zLm9uRmlyc3RVcGRhdGUoc3RhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKCh7IG5hbWUsIG9wdGlvbnMgPSB7fSwgZWZmZWN0IH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zdCBjbGVhbnVwRm4gPSBlZmZlY3QoeyBzdGF0ZSwgbmFtZSwgaW5zdGFuY2UsIG9wdGlvbnMgfSk7XG4gICAgICAgICAgY29uc3Qgbm9vcEZuID0gKCkgPT4ge307XG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKChmbikgPT4gZm4oKSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlUG9wcGVyID0gcG9wcGVyR2VuZXJhdG9yKCk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBNb2RpZmllckFyZ3VtZW50cywgTW9kaWZpZXIgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gJy4uL2RvbS11dGlscy9nZXRXaW5kb3cnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBPcHRpb25zID0ge1xuICBzY3JvbGw6IGJvb2xlYW4sXG4gIHJlc2l6ZTogYm9vbGVhbixcbn07XG5cbmNvbnN0IHBhc3NpdmUgPSB7IHBhc3NpdmU6IHRydWUgfTtcblxuZnVuY3Rpb24gZWZmZWN0KHsgc3RhdGUsIGluc3RhbmNlLCBvcHRpb25zIH06IE1vZGlmaWVyQXJndW1lbnRzPE9wdGlvbnM+KSB7XG4gIGNvbnN0IHsgc2Nyb2xsID0gdHJ1ZSwgcmVzaXplID0gdHJ1ZSB9ID0gb3B0aW9ucztcblxuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgY29uc3Qgc2Nyb2xsUGFyZW50cyA9IFtcbiAgICAuLi5zdGF0ZS5zY3JvbGxQYXJlbnRzLnJlZmVyZW5jZSxcbiAgICAuLi5zdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcixcbiAgXTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKHNjcm9sbFBhcmVudCA9PiB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKHNjcm9sbFBhcmVudCA9PiB7XG4gICAgICAgIHNjcm9sbFBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc2l6ZSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfVxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBFdmVudExpc3RlbmVyc01vZGlmaWVyID0gTW9kaWZpZXI8J2V2ZW50TGlzdGVuZXJzJywgT3B0aW9ucz47XG5leHBvcnQgZGVmYXVsdCAoe1xuICBuYW1lOiAnZXZlbnRMaXN0ZW5lcnMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46ICgpID0+IHt9LFxuICBlZmZlY3QsXG4gIGRhdGE6IHt9LFxufTogRXZlbnRMaXN0ZW5lcnNNb2RpZmllcik7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBNb2RpZmllckFyZ3VtZW50cywgTW9kaWZpZXIgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSAnLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMnO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKHsgc3RhdGUsIG5hbWUgfTogTW9kaWZpZXJBcmd1bWVudHM8e3x8fT4pIHtcbiAgLy8gT2Zmc2V0cyBhcmUgdGhlIGFjdHVhbCBwb3NpdGlvbiB0aGUgcG9wcGVyIG5lZWRzIHRvIGhhdmUgdG8gYmVcbiAgLy8gcHJvcGVybHkgcG9zaXRpb25lZCBuZWFyIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIHBsYWNlbWVudCwgYW5kIHdpbGwgYmUgYWRqdXN0ZWQgYnlcbiAgLy8gdGhlIG1vZGlmaWVycyBpbiB0aGUgbmV4dCBzdGVwXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiBzdGF0ZS5yZWN0cy5yZWZlcmVuY2UsXG4gICAgZWxlbWVudDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50LFxuICB9KTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHR5cGUgUG9wcGVyT2Zmc2V0c01vZGlmaWVyID0gTW9kaWZpZXI8J3BvcHBlck9mZnNldHMnLCB7fHx9PjtcbmV4cG9ydCBkZWZhdWx0ICh7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9LFxufTogUG9wcGVyT2Zmc2V0c01vZGlmaWVyKTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7XG4gIFBvc2l0aW9uaW5nU3RyYXRlZ3ksXG4gIE9mZnNldHMsXG4gIE1vZGlmaWVyLFxuICBNb2RpZmllckFyZ3VtZW50cyxcbiAgUmVjdCxcbiAgV2luZG93LFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1xuICB0eXBlIEJhc2VQbGFjZW1lbnQsXG4gIHR5cGUgVmFyaWF0aW9uLFxuICB0b3AsXG4gIGxlZnQsXG4gIHJpZ2h0LFxuICBib3R0b20sXG4gIGVuZCxcbn0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tICcuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50JztcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSAnLi4vZG9tLXV0aWxzL2dldFdpbmRvdyc7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gJy4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQnO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSAnLi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUnO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSAnLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudCc7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gJy4uL3V0aWxzL2dldFZhcmlhdGlvbic7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gJy4uL3V0aWxzL21hdGgnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBSb3VuZE9mZnNldHMgPSAoXG4gIG9mZnNldHM6ICRTaGFwZTx7IHg6IG51bWJlciwgeTogbnVtYmVyLCBjZW50ZXJPZmZzZXQ6IG51bWJlciB9PlxuKSA9PiBPZmZzZXRzO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBPcHRpb25zID0ge1xuICBncHVBY2NlbGVyYXRpb246IGJvb2xlYW4sXG4gIGFkYXB0aXZlOiBib29sZWFuLFxuICByb3VuZE9mZnNldHM/OiBib29sZWFuIHwgUm91bmRPZmZzZXRzLFxufTtcblxuY29uc3QgdW5zZXRTaWRlcyA9IHtcbiAgdG9wOiAnYXV0bycsXG4gIHJpZ2h0OiAnYXV0bycsXG4gIGJvdHRvbTogJ2F1dG8nLFxuICBsZWZ0OiAnYXV0bycsXG59O1xuXG4vLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoeyB4LCB5IH0pOiBPZmZzZXRzIHtcbiAgY29uc3Qgd2luOiBXaW5kb3cgPSB3aW5kb3c7XG4gIGNvbnN0IGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZChyb3VuZCh4ICogZHByKSAvIGRwcikgfHwgMCxcbiAgICB5OiByb3VuZChyb3VuZCh5ICogZHByKSAvIGRwcikgfHwgMCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKHtcbiAgcG9wcGVyLFxuICBwb3BwZXJSZWN0LFxuICBwbGFjZW1lbnQsXG4gIHZhcmlhdGlvbixcbiAgb2Zmc2V0cyxcbiAgcG9zaXRpb24sXG4gIGdwdUFjY2VsZXJhdGlvbixcbiAgYWRhcHRpdmUsXG4gIHJvdW5kT2Zmc2V0cyxcbn06IHtcbiAgcG9wcGVyOiBIVE1MRWxlbWVudCxcbiAgcG9wcGVyUmVjdDogUmVjdCxcbiAgcGxhY2VtZW50OiBCYXNlUGxhY2VtZW50LFxuICB2YXJpYXRpb246ID9WYXJpYXRpb24sXG4gIG9mZnNldHM6ICRTaGFwZTx7IHg6IG51bWJlciwgeTogbnVtYmVyLCBjZW50ZXJPZmZzZXQ6IG51bWJlciB9PixcbiAgcG9zaXRpb246IFBvc2l0aW9uaW5nU3RyYXRlZ3ksXG4gIGdwdUFjY2VsZXJhdGlvbjogYm9vbGVhbixcbiAgYWRhcHRpdmU6IGJvb2xlYW4sXG4gIHJvdW5kT2Zmc2V0czogYm9vbGVhbiB8IFJvdW5kT2Zmc2V0cyxcbn0pIHtcbiAgbGV0IHsgeCA9IDAsIHkgPSAwIH0gPVxuICAgIHJvdW5kT2Zmc2V0cyA9PT0gdHJ1ZVxuICAgICAgPyByb3VuZE9mZnNldHNCeURQUihvZmZzZXRzKVxuICAgICAgOiB0eXBlb2Ygcm91bmRPZmZzZXRzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IHJvdW5kT2Zmc2V0cyhvZmZzZXRzKVxuICAgICAgOiBvZmZzZXRzO1xuXG4gIGNvbnN0IGhhc1ggPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd4Jyk7XG4gIGNvbnN0IGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG5cbiAgbGV0IHNpZGVYOiBzdHJpbmcgPSBsZWZ0O1xuICBsZXQgc2lkZVk6IHN0cmluZyA9IHRvcDtcblxuICBjb25zdCB3aW46IFdpbmRvdyA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICBsZXQgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgbGV0IGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICBsZXQgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKFxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gIT09ICdzdGF0aWMnICYmXG4gICAgICAgIHBvc2l0aW9uID09PSAnYWJzb2x1dGUnXG4gICAgICApIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhc3RdOiBmb3JjZSB0eXBlIHJlZmluZW1lbnQsIHdlIGNvbXBhcmUgb2Zmc2V0UGFyZW50IHdpdGggd2luZG93IGFib3ZlLCBidXQgRmxvdyBkb2Vzbid0IGRldGVjdCBpdFxuICAgIG9mZnNldFBhcmVudCA9IChvZmZzZXRQYXJlbnQ6IEVsZW1lbnQpO1xuXG4gICAgaWYgKFxuICAgICAgcGxhY2VtZW50ID09PSB0b3AgfHxcbiAgICAgICgocGxhY2VtZW50ID09PSBsZWZ0IHx8IHBsYWNlbWVudCA9PT0gcmlnaHQpICYmIHZhcmlhdGlvbiA9PT0gZW5kKVxuICAgICkge1xuICAgICAgc2lkZVkgPSBib3R0b207XG4gICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIHkgLT0gb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwbGFjZW1lbnQgPT09IGxlZnQgfHxcbiAgICAgICgocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKVxuICAgICkge1xuICAgICAgc2lkZVggPSByaWdodDtcbiAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgeCAtPSBvZmZzZXRQYXJlbnRbd2lkdGhQcm9wXSAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICB4ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb21tb25TdHlsZXMgPSB7XG4gICAgcG9zaXRpb24sXG4gICAgLi4uKGFkYXB0aXZlICYmIHVuc2V0U2lkZXMpLFxuICB9O1xuXG4gIGlmIChncHVBY2NlbGVyYXRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29tbW9uU3R5bGVzLFxuICAgICAgW3NpZGVZXTogaGFzWSA/ICcwJyA6ICcnLFxuICAgICAgW3NpZGVYXTogaGFzWCA/ICcwJyA6ICcnLFxuICAgICAgLy8gTGF5ZXIgYWNjZWxlcmF0aW9uIGNhbiBkaXNhYmxlIHN1YnBpeGVsIHJlbmRlcmluZyB3aGljaCBjYXVzZXMgc2xpZ2h0bHlcbiAgICAgIC8vIGJsdXJyeSB0ZXh0IG9uIGxvdyBQUEkgZGlzcGxheXMsIHNvIHdlIHdhbnQgdG8gdXNlIDJEIHRyYW5zZm9ybXNcbiAgICAgIC8vIGluc3RlYWRcbiAgICAgIHRyYW5zZm9ybTpcbiAgICAgICAgKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDFcbiAgICAgICAgICA/IGB0cmFuc2xhdGUoJHt4fXB4LCAke3l9cHgpYFxuICAgICAgICAgIDogYHRyYW5zbGF0ZTNkKCR7eH1weCwgJHt5fXB4LCAwKWAsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uY29tbW9uU3R5bGVzLFxuICAgIFtzaWRlWV06IGhhc1kgPyBgJHt5fXB4YCA6ICcnLFxuICAgIFtzaWRlWF06IGhhc1ggPyBgJHt4fXB4YCA6ICcnLFxuICAgIHRyYW5zZm9ybTogJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoeyBzdGF0ZSwgb3B0aW9ucyB9OiBNb2RpZmllckFyZ3VtZW50czxPcHRpb25zPikge1xuICBjb25zdCB7XG4gICAgZ3B1QWNjZWxlcmF0aW9uID0gdHJ1ZSxcbiAgICBhZGFwdGl2ZSA9IHRydWUsXG4gICAgLy8gZGVmYXVsdHMgdG8gdXNlIGJ1aWx0aW4gYHJvdW5kT2Zmc2V0c0J5RFBSYFxuICAgIHJvdW5kT2Zmc2V0cyA9IHRydWUsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BlcnR5ID1cbiAgICAgIGdldENvbXB1dGVkU3R5bGUoc3RhdGUuZWxlbWVudHMucG9wcGVyKS50cmFuc2l0aW9uUHJvcGVydHkgfHwgJyc7XG5cbiAgICBpZiAoXG4gICAgICBhZGFwdGl2ZSAmJlxuICAgICAgWyd0cmFuc2Zvcm0nLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10uc29tZShcbiAgICAgICAgKHByb3BlcnR5KSA9PiB0cmFuc2l0aW9uUHJvcGVydHkuaW5kZXhPZihwcm9wZXJ0eSkgPj0gMFxuICAgICAgKVxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBbXG4gICAgICAgICAgJ1BvcHBlcjogRGV0ZWN0ZWQgQ1NTIHRyYW5zaXRpb25zIG9uIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nJyxcbiAgICAgICAgICAnQ1NTIHByb3BlcnRpZXM6IFwidHJhbnNmb3JtXCIsIFwidG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIuJyxcbiAgICAgICAgICAnXFxuXFxuJyxcbiAgICAgICAgICAnRGlzYWJsZSB0aGUgXCJjb21wdXRlU3R5bGVzXCIgbW9kaWZpZXJcXCdzIGBhZGFwdGl2ZWAgb3B0aW9uIHRvIGFsbG93JyxcbiAgICAgICAgICAnZm9yIHNtb290aCB0cmFuc2l0aW9ucywgb3IgcmVtb3ZlIHRoZXNlIHByb3BlcnRpZXMgZnJvbSB0aGUgQ1NTJyxcbiAgICAgICAgICAndHJhbnNpdGlvbiBkZWNsYXJhdGlvbiBvbiB0aGUgcG9wcGVyIGVsZW1lbnQgaWYgb25seSB0cmFuc2l0aW9uaW5nJyxcbiAgICAgICAgICAnb3BhY2l0eSBvciBiYWNrZ3JvdW5kLWNvbG9yIGZvciBleGFtcGxlLicsXG4gICAgICAgICAgJ1xcblxcbicsXG4gICAgICAgICAgJ1dlIHJlY29tbWVuZCB1c2luZyB0aGUgcG9wcGVyIGVsZW1lbnQgYXMgYSB3cmFwcGVyIGFyb3VuZCBhbiBpbm5lcicsXG4gICAgICAgICAgJ2VsZW1lbnQgdGhhdCBjYW4gaGF2ZSBhbnkgQ1NTIHByb3BlcnR5IHRyYW5zaXRpb25lZCBmb3IgYW5pbWF0aW9ucy4nLFxuICAgICAgICBdLmpvaW4oJyAnKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uLFxuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSB7XG4gICAgICAuLi5zdGF0ZS5zdHlsZXMucG9wcGVyLFxuICAgICAgLi4ubWFwVG9TdHlsZXMoe1xuICAgICAgICAuLi5jb21tb25TdHlsZXMsXG4gICAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICAgIGFkYXB0aXZlLFxuICAgICAgICByb3VuZE9mZnNldHMsXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IHtcbiAgICAgIC4uLnN0YXRlLnN0eWxlcy5hcnJvdyxcbiAgICAgIC4uLm1hcFRvU3R5bGVzKHtcbiAgICAgICAgLi4uY29tbW9uU3R5bGVzLFxuICAgICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgYWRhcHRpdmU6IGZhbHNlLFxuICAgICAgICByb3VuZE9mZnNldHMsXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSB7XG4gICAgLi4uc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsXG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudCxcbiAgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHR5cGUgQ29tcHV0ZVN0eWxlc01vZGlmaWVyID0gTW9kaWZpZXI8J2NvbXB1dGVTdHlsZXMnLCBPcHRpb25zPjtcbmV4cG9ydCBkZWZhdWx0ICh7XG4gIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIGZuOiBjb21wdXRlU3R5bGVzLFxuICBkYXRhOiB7fSxcbn06IENvbXB1dGVTdHlsZXNNb2RpZmllcik7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBNb2RpZmllciwgTW9kaWZpZXJBcmd1bWVudHMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSAnLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lJztcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tICcuLi9kb20tdXRpbHMvaW5zdGFuY2VPZic7XG5cbi8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKHsgc3RhdGUgfTogTW9kaWZpZXJBcmd1bWVudHM8e3x8fT4pIHtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcblxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIGNvbnN0IGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcblxuICAgIC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuXG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoeyBzdGF0ZSB9OiBNb2RpZmllckFyZ3VtZW50czx7fHx9Pikge1xuICBjb25zdCBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnLFxuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fSxcbiAgfTtcblxuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG5cbiAgICAgIGNvbnN0IHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKFxuICAgICAgICBzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSlcbiAgICAgICAgICA/IHN0YXRlLnN0eWxlc1tuYW1lXVxuICAgICAgICAgIDogaW5pdGlhbFN0eWxlc1tuYW1lXVxuICAgICAgKTtcblxuICAgICAgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cbiAgICAgIGNvbnN0IHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZSgoc3R5bGUsIHByb3BlcnR5KSA9PiB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuXG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBBcHBseVN0eWxlc01vZGlmaWVyID0gTW9kaWZpZXI8J2FwcGx5U3R5bGVzJywge3x8fT47XG5leHBvcnQgZGVmYXVsdCAoe1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXSxcbn06IEFwcGx5U3R5bGVzTW9kaWZpZXIpO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgUGxhY2VtZW50IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBNb2RpZmllckFyZ3VtZW50cywgTW9kaWZpZXIsIFJlY3QsIE9mZnNldHMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tICcuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50JztcbmltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIHBsYWNlbWVudHMgfSBmcm9tICcuLi9lbnVtcyc7XG5cbnR5cGUgT2Zmc2V0c0Z1bmN0aW9uID0gKHtcbiAgcG9wcGVyOiBSZWN0LFxuICByZWZlcmVuY2U6IFJlY3QsXG4gIHBsYWNlbWVudDogUGxhY2VtZW50LFxufSkgPT4gWz9udW1iZXIsID9udW1iZXJdO1xuXG50eXBlIE9mZnNldCA9IE9mZnNldHNGdW5jdGlvbiB8IFs/bnVtYmVyLCA/bnVtYmVyXTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHR5cGUgT3B0aW9ucyA9IHtcbiAgb2Zmc2V0OiBPZmZzZXQsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkoXG4gIHBsYWNlbWVudDogUGxhY2VtZW50LFxuICByZWN0czogeyBwb3BwZXI6IFJlY3QsIHJlZmVyZW5jZTogUmVjdCB9LFxuICBvZmZzZXQ6IE9mZnNldFxuKTogT2Zmc2V0cyB7XG4gIGNvbnN0IGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIGxldCBbc2tpZGRpbmcsIGRpc3RhbmNlXSA9XG4gICAgdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBvZmZzZXQoe1xuICAgICAgICAgIC4uLnJlY3RzLFxuICAgICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgfSlcbiAgICAgIDogb2Zmc2V0O1xuXG4gIHNraWRkaW5nID0gc2tpZGRpbmcgfHwgMDtcbiAgZGlzdGFuY2UgPSAoZGlzdGFuY2UgfHwgMCkgKiBpbnZlcnREaXN0YW5jZTtcblxuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDBcbiAgICA/IHsgeDogZGlzdGFuY2UsIHk6IHNraWRkaW5nIH1cbiAgICA6IHsgeDogc2tpZGRpbmcsIHk6IGRpc3RhbmNlIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldCh7IHN0YXRlLCBvcHRpb25zLCBuYW1lIH06IE1vZGlmaWVyQXJndW1lbnRzPE9wdGlvbnM+KSB7XG4gIGNvbnN0IHsgb2Zmc2V0ID0gWzAsIDBdIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZSgoYWNjLCBwbGFjZW1lbnQpID0+IHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIGNvbnN0IHsgeCwgeSB9ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBPZmZzZXRNb2RpZmllciA9IE1vZGlmaWVyPCdvZmZzZXQnLCBPcHRpb25zPjtcbmV4cG9ydCBkZWZhdWx0ICh7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXQsXG59OiBPZmZzZXRNb2RpZmllcik7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBQbGFjZW1lbnQgfSBmcm9tICcuLi9lbnVtcyc7XG5cbmNvbnN0IGhhc2ggPSB7IGxlZnQ6ICdyaWdodCcsIHJpZ2h0OiAnbGVmdCcsIGJvdHRvbTogJ3RvcCcsIHRvcDogJ2JvdHRvbScgfTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50OiBQbGFjZW1lbnQpOiBQbGFjZW1lbnQge1xuICByZXR1cm4gKHBsYWNlbWVudC5yZXBsYWNlKFxuICAgIC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZyxcbiAgICBtYXRjaGVkID0+IGhhc2hbbWF0Y2hlZF1cbiAgKTogYW55KTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IFBsYWNlbWVudCB9IGZyb20gJy4uL2VudW1zJztcblxuY29uc3QgaGFzaCA9IHsgc3RhcnQ6ICdlbmQnLCBlbmQ6ICdzdGFydCcgfTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQoXG4gIHBsYWNlbWVudDogUGxhY2VtZW50XG4pOiBQbGFjZW1lbnQge1xuICByZXR1cm4gKHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgbWF0Y2hlZCA9PiBoYXNoW21hdGNoZWRdKTogYW55KTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IFN0YXRlLCBQYWRkaW5nIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1xuICBQbGFjZW1lbnQsXG4gIENvbXB1dGVkUGxhY2VtZW50LFxuICBCb3VuZGFyeSxcbiAgUm9vdEJvdW5kYXJ5LFxufSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gJy4vZ2V0VmFyaWF0aW9uJztcbmltcG9ydCB7XG4gIHZhcmlhdGlvblBsYWNlbWVudHMsXG4gIGJhc2VQbGFjZW1lbnRzLFxuICBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMsXG59IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tICcuL2RldGVjdE92ZXJmbG93JztcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gJy4vZ2V0QmFzZVBsYWNlbWVudCc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgcGxhY2VtZW50OiBQbGFjZW1lbnQsXG4gIHBhZGRpbmc6IFBhZGRpbmcsXG4gIGJvdW5kYXJ5OiBCb3VuZGFyeSxcbiAgcm9vdEJvdW5kYXJ5OiBSb290Qm91bmRhcnksXG4gIGZsaXBWYXJpYXRpb25zOiBib29sZWFuLFxuICBhbGxvd2VkQXV0b1BsYWNlbWVudHM/OiBBcnJheTxQbGFjZW1lbnQ+LFxufTtcblxudHlwZSBPdmVyZmxvd3NNYXAgPSB7IFtDb21wdXRlZFBsYWNlbWVudF06IG51bWJlciB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChcbiAgc3RhdGU6ICRTaGFwZTxTdGF0ZT4sXG4gIG9wdGlvbnM6IE9wdGlvbnMgPSB7fVxuKTogQXJyYXk8Q29tcHV0ZWRQbGFjZW1lbnQ+IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgcGFkZGluZyxcbiAgICBmbGlwVmFyaWF0aW9ucyxcbiAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBhbGxQbGFjZW1lbnRzLFxuICB9ID0gb3B0aW9ucztcblxuICBjb25zdCB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcblxuICBjb25zdCBwbGFjZW1lbnRzID0gdmFyaWF0aW9uXG4gICAgPyBmbGlwVmFyaWF0aW9uc1xuICAgICAgPyB2YXJpYXRpb25QbGFjZW1lbnRzXG4gICAgICA6IHZhcmlhdGlvblBsYWNlbWVudHMuZmlsdGVyKFxuICAgICAgICAgIChwbGFjZW1lbnQpID0+IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb25cbiAgICAgICAgKVxuICAgIDogYmFzZVBsYWNlbWVudHM7XG5cbiAgbGV0IGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5maWx0ZXIoXG4gICAgKHBsYWNlbWVudCkgPT4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwXG4gICk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcblxuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBbXG4gICAgICAgICAgJ1BvcHBlcjogVGhlIGBhbGxvd2VkQXV0b1BsYWNlbWVudHNgIG9wdGlvbiBkaWQgbm90IGFsbG93IGFueScsXG4gICAgICAgICAgJ3BsYWNlbWVudHMuIEVuc3VyZSB0aGUgYHBsYWNlbWVudGAgb3B0aW9uIG1hdGNoZXMgdGhlIHZhcmlhdGlvbicsXG4gICAgICAgICAgJ29mIHRoZSBhbGxvd2VkIHBsYWNlbWVudHMuJyxcbiAgICAgICAgICAnRm9yIGV4YW1wbGUsIFwiYXV0b1wiIGNhbm5vdCBiZSB1c2VkIHRvIGFsbG93IFwiYm90dG9tLXN0YXJ0XCIuJyxcbiAgICAgICAgICAnVXNlIFwiYXV0by1zdGFydFwiIGluc3RlYWQuJyxcbiAgICAgICAgXS5qb2luKCcgJylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIHR3byBhcnJheSB1bmlvbnMuLi5cbiAgY29uc3Qgb3ZlcmZsb3dzOiBPdmVyZmxvd3NNYXAgPSBhbGxvd2VkUGxhY2VtZW50cy5yZWR1Y2UoKGFjYywgcGxhY2VtZW50KSA9PiB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nLFxuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG92ZXJmbG93cykuc29ydCgoYSwgYikgPT4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdKTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IFBsYWNlbWVudCwgQm91bmRhcnksIFJvb3RCb3VuZGFyeSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTW9kaWZpZXJBcmd1bWVudHMsIE1vZGlmaWVyLCBQYWRkaW5nIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGdldE9wcG9zaXRlUGxhY2VtZW50IGZyb20gJy4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50JztcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gJy4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQnO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gJy4uL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50JztcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tICcuLi91dGlscy9kZXRlY3RPdmVyZmxvdyc7XG5pbXBvcnQgY29tcHV0ZUF1dG9QbGFjZW1lbnQgZnJvbSAnLi4vdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQnO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSAnLi4vdXRpbHMvZ2V0VmFyaWF0aW9uJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHR5cGUgT3B0aW9ucyA9IHtcbiAgbWFpbkF4aXM6IGJvb2xlYW4sXG4gIGFsdEF4aXM6IGJvb2xlYW4sXG4gIGZhbGxiYWNrUGxhY2VtZW50czogQXJyYXk8UGxhY2VtZW50PixcbiAgcGFkZGluZzogUGFkZGluZyxcbiAgYm91bmRhcnk6IEJvdW5kYXJ5LFxuICByb290Qm91bmRhcnk6IFJvb3RCb3VuZGFyeSxcbiAgYWx0Qm91bmRhcnk6IGJvb2xlYW4sXG4gIGZsaXBWYXJpYXRpb25zOiBib29sZWFuLFxuICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IEFycmF5PFBsYWNlbWVudD4sXG59O1xuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwbGFjZW1lbnQ6IFBsYWNlbWVudCk6IEFycmF5PFBsYWNlbWVudD4ge1xuICBpZiAoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gIHJldHVybiBbXG4gICAgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSxcbiAgICBvcHBvc2l0ZVBsYWNlbWVudCxcbiAgICBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCksXG4gIF07XG59XG5cbmZ1bmN0aW9uIGZsaXAoeyBzdGF0ZSwgb3B0aW9ucywgbmFtZSB9OiBNb2RpZmllckFyZ3VtZW50czxPcHRpb25zPikge1xuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgYWx0QXhpczogY2hlY2tBbHRBeGlzID0gdHJ1ZSxcbiAgICBmYWxsYmFja1BsYWNlbWVudHM6IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICBwYWRkaW5nLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBhbHRCb3VuZGFyeSxcbiAgICBmbGlwVmFyaWF0aW9ucyA9IHRydWUsXG4gICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICB9ID0gb3B0aW9ucztcblxuICBjb25zdCBwcmVmZXJyZWRQbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDtcbiAgY29uc3QgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgY29uc3QgaXNCYXNlUGxhY2VtZW50ID0gYmFzZVBsYWNlbWVudCA9PT0gcHJlZmVycmVkUGxhY2VtZW50O1xuXG4gIGNvbnN0IGZhbGxiYWNrUGxhY2VtZW50cyA9XG4gICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8XG4gICAgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcFZhcmlhdGlvbnNcbiAgICAgID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCldXG4gICAgICA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuXG4gIGNvbnN0IHBsYWNlbWVudHMgPSBbcHJlZmVycmVkUGxhY2VtZW50LCAuLi5mYWxsYmFja1BsYWNlbWVudHNdLnJlZHVjZShcbiAgICAoYWNjLCBwbGFjZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBhY2MuY29uY2F0KFxuICAgICAgICBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG9cbiAgICAgICAgICA/IGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCB7XG4gICAgICAgICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgICAgICAgYm91bmRhcnksXG4gICAgICAgICAgICAgIHJvb3RCb3VuZGFyeSxcbiAgICAgICAgICAgICAgcGFkZGluZyxcbiAgICAgICAgICAgICAgZmxpcFZhcmlhdGlvbnMsXG4gICAgICAgICAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBwbGFjZW1lbnRcbiAgICAgICk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG5cbiAgY29uc3QgY2hlY2tzTWFwID0gbmV3IE1hcCgpO1xuICBsZXQgbWFrZUZhbGxiYWNrQ2hlY2tzID0gdHJ1ZTtcbiAgbGV0IGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHNbMF07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcbiAgICBjb25zdCBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICAgIGNvbnN0IGlzU3RhcnRWYXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gc3RhcnQ7XG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIGNvbnN0IGxlbiA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICBjb25zdCBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyxcbiAgICB9KTtcblxuICAgIGxldCBtYWluVmFyaWF0aW9uU2lkZTogYW55ID0gaXNWZXJ0aWNhbFxuICAgICAgPyBpc1N0YXJ0VmFyaWF0aW9uXG4gICAgICAgID8gcmlnaHRcbiAgICAgICAgOiBsZWZ0XG4gICAgICA6IGlzU3RhcnRWYXJpYXRpb25cbiAgICAgID8gYm90dG9tXG4gICAgICA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsdFZhcmlhdGlvblNpZGU6IGFueSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcblxuICAgIGNvbnN0IGNoZWNrcyA9IFtdO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W2Jhc2VQbGFjZW1lbnRdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKFxuICAgICAgICBvdmVyZmxvd1ttYWluVmFyaWF0aW9uU2lkZV0gPD0gMCxcbiAgICAgICAgb3ZlcmZsb3dbYWx0VmFyaWF0aW9uU2lkZV0gPD0gMFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tzLmV2ZXJ5KChjaGVjaykgPT4gY2hlY2spKSB7XG4gICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICBtYWtlRmFsbGJhY2tDaGVja3MgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNoZWNrc01hcC5zZXQocGxhY2VtZW50LCBjaGVja3MpO1xuICB9XG5cbiAgaWYgKG1ha2VGYWxsYmFja0NoZWNrcykge1xuICAgIC8vIGAyYCBtYXkgYmUgZGVzaXJlZCBpbiBzb21lIGNhc2VzIOKAkyByZXNlYXJjaCBsYXRlclxuICAgIGNvbnN0IG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIGZvciAobGV0IGkgPSBudW1iZXJPZkNoZWNrczsgaSA+IDA7IGktLSkge1xuICAgICAgY29uc3QgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZCgocGxhY2VtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrcyA9IGNoZWNrc01hcC5nZXQocGxhY2VtZW50KTtcbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgaSkuZXZlcnkoKGNoZWNrKSA9PiBjaGVjayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZml0dGluZ1BsYWNlbWVudCkge1xuICAgICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBmaXR0aW5nUGxhY2VtZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUucGxhY2VtZW50ICE9PSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwID0gdHJ1ZTtcbiAgICBzdGF0ZS5wbGFjZW1lbnQgPSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgc3RhdGUucmVzZXQgPSB0cnVlO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB0eXBlIEZsaXBNb2RpZmllciA9IE1vZGlmaWVyPCdmbGlwJywgT3B0aW9ucz47XG5leHBvcnQgZGVmYXVsdCAoe1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7IF9za2lwOiBmYWxzZSB9LFxufTogRmxpcE1vZGlmaWVyKTtcbiIsIi8vIEBmbG93XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpczogJ3gnIHwgJ3knKTogJ3gnIHwgJ3knIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tICcuL21hdGgnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3aXRoaW4oXG4gIG1pbjogbnVtYmVyLFxuICB2YWx1ZTogbnVtYmVyLFxuICBtYXg6IG51bWJlclxuKTogbnVtYmVyIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHN0YXJ0IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBQbGFjZW1lbnQsIEJvdW5kYXJ5LCBSb290Qm91bmRhcnkgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFJlY3QsIE1vZGlmaWVyQXJndW1lbnRzLCBNb2RpZmllciwgUGFkZGluZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gJy4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQnO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tICcuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQnO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSAnLi4vdXRpbHMvZ2V0QWx0QXhpcyc7XG5pbXBvcnQgd2l0aGluIGZyb20gJy4uL3V0aWxzL3dpdGhpbic7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tICcuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdCc7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gJy4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQnO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gJy4uL3V0aWxzL2RldGVjdE92ZXJmbG93JztcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSAnLi4vdXRpbHMvZ2V0VmFyaWF0aW9uJztcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSAnLi4vdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0JztcbmltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gJy4uL3V0aWxzL21hdGgnO1xuXG50eXBlIFRldGhlck9mZnNldCA9XG4gIHwgKCh7XG4gICAgICBwb3BwZXI6IFJlY3QsXG4gICAgICByZWZlcmVuY2U6IFJlY3QsXG4gICAgICBwbGFjZW1lbnQ6IFBsYWNlbWVudCxcbiAgICB9KSA9PiBudW1iZXIpXG4gIHwgbnVtYmVyO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBPcHRpb25zID0ge1xuICAvKiBQcmV2ZW50cyBib3VuZGFyaWVzIG92ZXJmbG93IG9uIHRoZSBtYWluIGF4aXMgKi9cbiAgbWFpbkF4aXM6IGJvb2xlYW4sXG4gIC8qIFByZXZlbnRzIGJvdW5kYXJpZXMgb3ZlcmZsb3cgb24gdGhlIGFsdGVybmF0ZSBheGlzICovXG4gIGFsdEF4aXM6IGJvb2xlYW4sXG4gIC8qIFRoZSBhcmVhIHRvIGNoZWNrIHRoZSBwb3BwZXIgaXMgb3ZlcmZsb3dpbmcgaW4gKi9cbiAgYm91bmRhcnk6IEJvdW5kYXJ5LFxuICAvKiBJZiB0aGUgcG9wcGVyIGlzIG5vdCBvdmVyZmxvd2luZyB0aGUgbWFpbiBhcmVhLCBmYWxsYmFjayB0byB0aGlzIG9uZSAqL1xuICByb290Qm91bmRhcnk6IFJvb3RCb3VuZGFyeSxcbiAgLyogVXNlIHRoZSByZWZlcmVuY2UncyBcImNsaXBwaW5nUGFyZW50c1wiIGJvdW5kYXJ5IGNvbnRleHQgKi9cbiAgYWx0Qm91bmRhcnk6IGJvb2xlYW4sXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIHBvcHBlciB0byBvdmVyZmxvdyBmcm9tIGl0cyBib3VuZGFyaWVzIHRvIGtlZXAgaXQgbmVhciBpdHNcbiAgICogcmVmZXJlbmNlIGVsZW1lbnRcbiAgICovXG4gIHRldGhlcjogYm9vbGVhbixcbiAgLyogT2Zmc2V0cyB3aGVuIHRoZSBgdGV0aGVyYCBvcHRpb24gc2hvdWxkIGFjdGl2YXRlICovXG4gIHRldGhlck9mZnNldDogVGV0aGVyT2Zmc2V0LFxuICAvKiBTZXRzIGEgcGFkZGluZyB0byB0aGUgcHJvdmlkZWQgYm91bmRhcnkgKi9cbiAgcGFkZGluZzogUGFkZGluZyxcbn07XG5cbmZ1bmN0aW9uIHByZXZlbnRPdmVyZmxvdyh7IHN0YXRlLCBvcHRpb25zLCBuYW1lIH06IE1vZGlmaWVyQXJndW1lbnRzPE9wdGlvbnM+KSB7XG4gIGNvbnN0IHtcbiAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgYWx0QXhpczogY2hlY2tBbHRBeGlzID0gZmFsc2UsXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIGFsdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmcsXG4gICAgdGV0aGVyID0gdHJ1ZSxcbiAgICB0ZXRoZXJPZmZzZXQgPSAwLFxuICB9ID0gb3B0aW9ucztcblxuICBjb25zdCBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmcsXG4gICAgYWx0Qm91bmRhcnksXG4gIH0pO1xuICBjb25zdCBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICBjb25zdCB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KTtcbiAgY29uc3QgaXNCYXNlUGxhY2VtZW50ID0gIXZhcmlhdGlvbjtcbiAgY29uc3QgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIGNvbnN0IGFsdEF4aXMgPSBnZXRBbHRBeGlzKG1haW5BeGlzKTtcbiAgY29uc3QgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgY29uc3QgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgY29uc3QgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgY29uc3QgdGV0aGVyT2Zmc2V0VmFsdWUgPVxuICAgIHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbidcbiAgICAgID8gdGV0aGVyT2Zmc2V0KHtcbiAgICAgICAgICAuLi5zdGF0ZS5yZWN0cyxcbiAgICAgICAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudCxcbiAgICAgICAgfSlcbiAgICAgIDogdGV0aGVyT2Zmc2V0O1xuXG4gIGNvbnN0IGRhdGEgPSB7IHg6IDAsIHk6IDAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcyB8fCBjaGVja0FsdEF4aXMpIHtcbiAgICBjb25zdCBtYWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICAgIGNvbnN0IGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICBjb25zdCBvZmZzZXQgPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXTtcblxuICAgIGNvbnN0IG1pbiA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgIGNvbnN0IG1heCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdIC0gb3ZlcmZsb3dbYWx0U2lkZV07XG5cbiAgICBjb25zdCBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcblxuICAgIGNvbnN0IG1pbkxlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gOiBwb3BwZXJSZWN0W2xlbl07XG4gICAgY29uc3QgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dO1xuXG4gICAgLy8gV2UgbmVlZCB0byBpbmNsdWRlIHRoZSBhcnJvdyBpbiB0aGUgY2FsY3VsYXRpb24gc28gdGhlIGFycm93IGRvZXNuJ3QgZ29cbiAgICAvLyBvdXRzaWRlIHRoZSByZWZlcmVuY2UgYm91bmRzXG4gICAgY29uc3QgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gICAgY29uc3QgYXJyb3dSZWN0ID1cbiAgICAgIHRldGhlciAmJiBhcnJvd0VsZW1lbnRcbiAgICAgICAgPyBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudClcbiAgICAgICAgOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICBjb25zdCBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J11cbiAgICAgID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmdcbiAgICAgIDogZ2V0RnJlc2hTaWRlT2JqZWN0KCk7XG4gICAgY29uc3QgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICBjb25zdCBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07XG5cbiAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG4gICAgY29uc3QgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG5cbiAgICBjb25zdCBtaW5PZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnRcbiAgICAgID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtXG4gICAgICAgIGFkZGl0aXZlIC1cbiAgICAgICAgYXJyb3dMZW4gLVxuICAgICAgICBhcnJvd1BhZGRpbmdNaW4gLVxuICAgICAgICB0ZXRoZXJPZmZzZXRWYWx1ZVxuICAgICAgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIHRldGhlck9mZnNldFZhbHVlO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudFxuICAgICAgPyAtcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiArXG4gICAgICAgIGFkZGl0aXZlICtcbiAgICAgICAgYXJyb3dMZW4gK1xuICAgICAgICBhcnJvd1BhZGRpbmdNYXggK1xuICAgICAgICB0ZXRoZXJPZmZzZXRWYWx1ZVxuICAgICAgOiBtYXhMZW4gKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIHRldGhlck9mZnNldFZhbHVlO1xuXG4gICAgY29uc3QgYXJyb3dPZmZzZXRQYXJlbnQgPVxuICAgICAgc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICBjb25zdCBjbGllbnRPZmZzZXQgPSBhcnJvd09mZnNldFBhcmVudFxuICAgICAgPyBtYWluQXhpcyA9PT0gJ3knXG4gICAgICAgID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDBcbiAgICAgICAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDBcbiAgICAgIDogMDtcblxuICAgIGNvbnN0IG9mZnNldE1vZGlmaWVyVmFsdWUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFxuICAgICAgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdW21haW5BeGlzXVxuICAgICAgOiAwO1xuXG4gICAgY29uc3QgdGV0aGVyTWluID1cbiAgICAgIHBvcHBlck9mZnNldHNbbWFpbkF4aXNdICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICBjb25zdCB0ZXRoZXJNYXggPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgY29uc3QgcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKFxuICAgICAgICB0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbixcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heFxuICAgICAgKTtcblxuICAgICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICBjb25zdCBtYWluU2lkZSA9IG1haW5BeGlzID09PSAneCcgPyB0b3AgOiBsZWZ0O1xuICAgICAgY29uc3QgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcbiAgICAgIGNvbnN0IG9mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICAgIGNvbnN0IG1pbiA9IG9mZnNldCArIG92ZXJmbG93W21haW5TaWRlXTtcbiAgICAgIGNvbnN0IG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuXG4gICAgICBjb25zdCBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4oXG4gICAgICAgIHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLFxuICAgICAgICBvZmZzZXQsXG4gICAgICAgIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4XG4gICAgICApO1xuXG4gICAgICBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdID0gcHJldmVudGVkT2Zmc2V0O1xuICAgICAgZGF0YVthbHRBeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgICB9XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHR5cGUgUHJldmVudE92ZXJmbG93TW9kaWZpZXIgPSBNb2RpZmllcjwncHJldmVudE92ZXJmbG93JywgT3B0aW9ucz47XG5leHBvcnQgZGVmYXVsdCAoe1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXSxcbn06IFByZXZlbnRPdmVyZmxvd01vZGlmaWVyKTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IE1vZGlmaWVyLCBNb2RpZmllckFyZ3VtZW50cywgUGFkZGluZywgUmVjdCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgUGxhY2VtZW50IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSAnLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudCc7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tICcuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdCc7XG5pbXBvcnQgY29udGFpbnMgZnJvbSAnLi4vZG9tLXV0aWxzL2NvbnRhaW5zJztcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSAnLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudCc7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gJy4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudCc7XG5pbXBvcnQgd2l0aGluIGZyb20gJy4uL3V0aWxzL3dpdGhpbic7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gJy4uL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdCc7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gJy4uL3V0aWxzL2V4cGFuZFRvSGFzaE1hcCc7XG5pbXBvcnQgeyBsZWZ0LCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHRvcCwgYm90dG9tIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gJy4uL2RvbS11dGlscy9pbnN0YW5jZU9mJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHR5cGUgT3B0aW9ucyA9IHtcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBzdHJpbmcgfCBudWxsLFxuICBwYWRkaW5nOlxuICAgIHwgUGFkZGluZ1xuICAgIHwgKCh7fFxuICAgICAgICBwb3BwZXI6IFJlY3QsXG4gICAgICAgIHJlZmVyZW5jZTogUmVjdCxcbiAgICAgICAgcGxhY2VtZW50OiBQbGFjZW1lbnQsXG4gICAgICB8fSkgPT4gUGFkZGluZyksXG59O1xuXG5jb25zdCB0b1BhZGRpbmdPYmplY3QgPSAocGFkZGluZywgc3RhdGUpID0+IHtcbiAgcGFkZGluZyA9XG4gICAgdHlwZW9mIHBhZGRpbmcgPT09ICdmdW5jdGlvbidcbiAgICAgID8gcGFkZGluZyh7IC4uLnN0YXRlLnJlY3RzLCBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudCB9KVxuICAgICAgOiBwYWRkaW5nO1xuXG4gIHJldHVybiBtZXJnZVBhZGRpbmdPYmplY3QoXG4gICAgdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInXG4gICAgICA/IHBhZGRpbmdcbiAgICAgIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKVxuICApO1xufTtcblxuZnVuY3Rpb24gYXJyb3coeyBzdGF0ZSwgbmFtZSwgb3B0aW9ucyB9OiBNb2RpZmllckFyZ3VtZW50czxPcHRpb25zPikge1xuICBjb25zdCBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgY29uc3QgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgY29uc3QgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgY29uc3QgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwO1xuICBjb25zdCBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIGlmICghYXJyb3dFbGVtZW50IHx8ICFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgY29uc3QgYXJyb3dSZWN0ID0gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpO1xuICBjb25zdCBtaW5Qcm9wID0gYXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgY29uc3QgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuXG4gIGNvbnN0IGVuZERpZmYgPVxuICAgIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICtcbiAgICBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc10gLVxuICAgIHBvcHBlck9mZnNldHNbYXhpc10gLVxuICAgIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICBjb25zdCBzdGFydERpZmYgPSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuXG4gIGNvbnN0IGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIGNvbnN0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudFxuICAgID8gYXhpcyA9PT0gJ3knXG4gICAgICA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudEhlaWdodCB8fCAwXG4gICAgICA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDBcbiAgICA6IDA7XG5cbiAgY29uc3QgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7XG5cbiAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBwb3BwZXIgaWYgdGhlIGNlbnRlciBwb2ludCBpc1xuICAvLyBvdXRzaWRlIG9mIHRoZSBwb3BwZXIgYm91bmRzXG4gIGNvbnN0IG1pbiA9IHBhZGRpbmdPYmplY3RbbWluUHJvcF07XG4gIGNvbnN0IG1heCA9IGNsaWVudFNpemUgLSBhcnJvd1JlY3RbbGVuXSAtIHBhZGRpbmdPYmplY3RbbWF4UHJvcF07XG4gIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldCA9IHdpdGhpbihtaW4sIGNlbnRlciwgbWF4KTtcblxuICAvLyBQcmV2ZW50cyBicmVha2luZyBzeW50YXggaGlnaGxpZ2h0aW5nLi4uXG4gIGNvbnN0IGF4aXNQcm9wOiBzdHJpbmcgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIFtheGlzUHJvcF06IG9mZnNldCxcbiAgICBjZW50ZXJPZmZzZXQ6IG9mZnNldCAtIGNlbnRlcixcbiAgfTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KHsgc3RhdGUsIG9wdGlvbnMgfTogTW9kaWZpZXJBcmd1bWVudHM8T3B0aW9ucz4pIHtcbiAgbGV0IHsgZWxlbWVudDogYXJyb3dFbGVtZW50ID0gJ1tkYXRhLXBvcHBlci1hcnJvd10nIH0gPSBvcHRpb25zO1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENTUyBzZWxlY3RvclxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoX19ERVZfXykge1xuICAgIGlmICghaXNIVE1MRWxlbWVudChhcnJvd0VsZW1lbnQpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBbXG4gICAgICAgICAgJ1BvcHBlcjogXCJhcnJvd1wiIGVsZW1lbnQgbXVzdCBiZSBhbiBIVE1MRWxlbWVudCAobm90IGFuIFNWR0VsZW1lbnQpLicsXG4gICAgICAgICAgJ1RvIHVzZSBhbiBTVkcgYXJyb3csIHdyYXAgaXQgaW4gYW4gSFRNTEVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgYXMnLFxuICAgICAgICAgICd0aGUgYXJyb3cuJyxcbiAgICAgICAgXS5qb2luKCcgJylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb250YWlucyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIsIGFycm93RWxlbWVudCkpIHtcbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgW1xuICAgICAgICAgICdQb3BwZXI6IFwiYXJyb3dcIiBtb2RpZmllclxcJ3MgYGVsZW1lbnRgIG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgcG9wcGVyJyxcbiAgICAgICAgICAnZWxlbWVudC4nLFxuICAgICAgICBdLmpvaW4oJyAnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5lbGVtZW50cy5hcnJvdyA9IGFycm93RWxlbWVudDtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHR5cGUgQXJyb3dNb2RpZmllciA9IE1vZGlmaWVyPCdhcnJvdycsIE9wdGlvbnM+O1xuZXhwb3J0IGRlZmF1bHQgKHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGFycm93LFxuICBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXSxcbn06IEFycm93TW9kaWZpZXIpO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHtcbiAgTW9kaWZpZXJBcmd1bWVudHMsXG4gIE1vZGlmaWVyLFxuICBSZWN0LFxuICBTaWRlT2JqZWN0LFxuICBPZmZzZXRzLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSAnLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cnO1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhcbiAgb3ZlcmZsb3c6IFNpZGVPYmplY3QsXG4gIHJlY3Q6IFJlY3QsXG4gIHByZXZlbnRlZE9mZnNldHM6IE9mZnNldHMgPSB7IHg6IDAsIHk6IDAgfVxuKTogU2lkZU9iamVjdCB7XG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCAtIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoICsgcHJldmVudGVkT2Zmc2V0cy54LFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQgKyBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGggLSBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdzogU2lkZU9iamVjdCk6IGJvb2xlYW4ge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZSgoc2lkZSkgPT4gb3ZlcmZsb3dbc2lkZV0gPj0gMCk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoeyBzdGF0ZSwgbmFtZSB9OiBNb2RpZmllckFyZ3VtZW50czx7fHx9Pikge1xuICBjb25zdCByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICBjb25zdCBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICBjb25zdCBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG5cbiAgY29uc3QgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJyxcbiAgfSk7XG4gIGNvbnN0IHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZSxcbiAgfSk7XG5cbiAgY29uc3QgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMoXG4gICAgcmVmZXJlbmNlT3ZlcmZsb3csXG4gICAgcmVmZXJlbmNlUmVjdFxuICApO1xuICBjb25zdCBwb3BwZXJFc2NhcGVPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMoXG4gICAgcG9wcGVyQWx0T3ZlcmZsb3csXG4gICAgcG9wcGVyUmVjdCxcbiAgICBwcmV2ZW50ZWRPZmZzZXRzXG4gICk7XG5cbiAgY29uc3QgaXNSZWZlcmVuY2VIaWRkZW4gPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzKTtcbiAgY29uc3QgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQsXG4gIH07XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSB7XG4gICAgLi4uc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsXG4gICAgJ2RhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4nOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICAnZGF0YS1wb3BwZXItZXNjYXBlZCc6IGhhc1BvcHBlckVzY2FwZWQsXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB0eXBlIEhpZGVNb2RpZmllciA9IE1vZGlmaWVyPCdoaWRlJywge3x8fT47XG5leHBvcnQgZGVmYXVsdCAoe1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlLFxufTogSGlkZU1vZGlmaWVyKTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSAnLi9jcmVhdGVQb3BwZXInO1xuXG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSAnLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMnO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSAnLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cyc7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tICcuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzJztcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tICcuL21vZGlmaWVycy9hcHBseVN0eWxlcyc7XG5cbmV4cG9ydCB0eXBlICogZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGRlZmF1bHRNb2RpZmllcnMgPSBbXG4gIGV2ZW50TGlzdGVuZXJzLFxuICBwb3BwZXJPZmZzZXRzLFxuICBjb21wdXRlU3R5bGVzLFxuICBhcHBseVN0eWxlcyxcbl07XG5cbmNvbnN0IGNyZWF0ZVBvcHBlciA9IHBvcHBlckdlbmVyYXRvcih7IGRlZmF1bHRNb2RpZmllcnMgfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9O1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tICcuL2NyZWF0ZVBvcHBlcic7XG5cbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tICcuL21vZGlmaWVycy9ldmVudExpc3RlbmVycyc7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tICcuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzJztcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gJy4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMnO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gJy4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzJztcbmltcG9ydCBvZmZzZXQgZnJvbSAnLi9tb2RpZmllcnMvb2Zmc2V0JztcbmltcG9ydCBmbGlwIGZyb20gJy4vbW9kaWZpZXJzL2ZsaXAnO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tICcuL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cnO1xuaW1wb3J0IGFycm93IGZyb20gJy4vbW9kaWZpZXJzL2Fycm93JztcbmltcG9ydCBoaWRlIGZyb20gJy4vbW9kaWZpZXJzL2hpZGUnO1xuXG5leHBvcnQgdHlwZSAqIGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBkZWZhdWx0TW9kaWZpZXJzID0gW1xuICBldmVudExpc3RlbmVycyxcbiAgcG9wcGVyT2Zmc2V0cyxcbiAgY29tcHV0ZVN0eWxlcyxcbiAgYXBwbHlTdHlsZXMsXG4gIG9mZnNldCxcbiAgZmxpcCxcbiAgcHJldmVudE92ZXJmbG93LFxuICBhcnJvdyxcbiAgaGlkZSxcbl07XG5cbmNvbnN0IGNyZWF0ZVBvcHBlciA9IHBvcHBlckdlbmVyYXRvcih7IGRlZmF1bHRNb2RpZmllcnMgfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tICcuL3BvcHBlci1saXRlJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCAqIGZyb20gJy4vbW9kaWZpZXJzJztcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogdXRpbC9pbmRleC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE1BWF9VSUQgPSAxMDAwMDAwXG5jb25zdCBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDBcbmNvbnN0IFRSQU5TSVRJT05fRU5EID0gJ3RyYW5zaXRpb25lbmQnXG5cbi8vIFNob3V0b3V0IEFuZ3VzQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbmNvbnN0IHRvVHlwZSA9IG9iaiA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7b2JqfWBcbiAgfVxuXG4gIHJldHVybiB7fS50b1N0cmluZy5jYWxsKG9iaikubWF0Y2goL1xccyhbYS16XSspL2kpWzFdLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogUHVibGljIFV0aWwgQXBpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IGdldFVJRCA9IHByZWZpeCA9PiB7XG4gIGRvIHtcbiAgICBwcmVmaXggKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTUFYX1VJRClcbiAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSlcblxuICByZXR1cm4gcHJlZml4XG59XG5cbmNvbnN0IGdldFNlbGVjdG9yID0gZWxlbWVudCA9PiB7XG4gIGxldCBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcpXG5cbiAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gJyMnKSB7XG4gICAgbGV0IGhyZWZBdHRyID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKVxuXG4gICAgLy8gVGhlIG9ubHkgdmFsaWQgY29udGVudCB0aGF0IGNvdWxkIGRvdWJsZSBhcyBhIHNlbGVjdG9yIGFyZSBJRHMgb3IgY2xhc3NlcyxcbiAgICAvLyBzbyBldmVyeXRoaW5nIHN0YXJ0aW5nIHdpdGggYCNgIG9yIGAuYC4gSWYgYSBcInJlYWxcIiBVUkwgaXMgdXNlZCBhcyB0aGUgc2VsZWN0b3IsXG4gICAgLy8gYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JgIHdpbGwgcmlnaHRmdWxseSBjb21wbGFpbiBpdCBpcyBpbnZhbGlkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzMyMjczXG4gICAgaWYgKCFocmVmQXR0ciB8fCAoIWhyZWZBdHRyLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyLnN0YXJ0c1dpdGgoJy4nKSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgLy8gSnVzdCBpbiBjYXNlIHNvbWUgQ01TIHB1dHMgb3V0IGEgZnVsbCBVUkwgd2l0aCB0aGUgYW5jaG9yIGFwcGVuZGVkXG4gICAgaWYgKGhyZWZBdHRyLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgaHJlZkF0dHIgPSBgIyR7aHJlZkF0dHIuc3BsaXQoJyMnKVsxXX1gXG4gICAgfVxuXG4gICAgc2VsZWN0b3IgPSBocmVmQXR0ciAmJiBocmVmQXR0ciAhPT0gJyMnID8gaHJlZkF0dHIudHJpbSgpIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIHNlbGVjdG9yXG59XG5cbmNvbnN0IGdldFNlbGVjdG9yRnJvbUVsZW1lbnQgPSBlbGVtZW50ID0+IHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KVxuXG4gIGlmIChzZWxlY3Rvcikge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSA/IHNlbGVjdG9yIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgZ2V0RWxlbWVudEZyb21TZWxlY3RvciA9IGVsZW1lbnQgPT4ge1xuICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKGVsZW1lbnQpXG5cbiAgcmV0dXJuIHNlbGVjdG9yID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgOiBudWxsXG59XG5cbmNvbnN0IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICBsZXQgeyB0cmFuc2l0aW9uRHVyYXRpb24sIHRyYW5zaXRpb25EZWxheSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcblxuICBjb25zdCBmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbilcbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRGVsYXkgPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpXG5cbiAgLy8gUmV0dXJuIDAgaWYgZWxlbWVudCBvciB0cmFuc2l0aW9uIGR1cmF0aW9uIGlzIG5vdCBmb3VuZFxuICBpZiAoIWZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uICYmICFmbG9hdFRyYW5zaXRpb25EZWxheSkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG4gIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdXG4gIHRyYW5zaXRpb25EZWxheSA9IHRyYW5zaXRpb25EZWxheS5zcGxpdCgnLCcpWzBdXG5cbiAgcmV0dXJuIChOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KSkgKiBNSUxMSVNFQ09ORFNfTVVMVElQTElFUlxufVxuXG5jb25zdCB0cmlnZ2VyVHJhbnNpdGlvbkVuZCA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFRSQU5TSVRJT05fRU5EKSlcbn1cblxuY29uc3QgaXNFbGVtZW50ID0gb2JqID0+IHtcbiAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqLmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvYmogPSBvYmpbMF1cbiAgfVxuXG4gIHJldHVybiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSAndW5kZWZpbmVkJ1xufVxuXG5jb25zdCBnZXRFbGVtZW50ID0gb2JqID0+IHtcbiAgaWYgKGlzRWxlbWVudChvYmopKSB7IC8vIGl0J3MgYSBqUXVlcnkgb2JqZWN0IG9yIGEgbm9kZSBlbGVtZW50XG4gICAgcmV0dXJuIG9iai5qcXVlcnkgPyBvYmpbMF0gOiBvYmpcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyAmJiBvYmoubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKG9iailcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IHR5cGVDaGVja0NvbmZpZyA9IChjb21wb25lbnROYW1lLCBjb25maWcsIGNvbmZpZ1R5cGVzKSA9PiB7XG4gIE9iamVjdC5rZXlzKGNvbmZpZ1R5cGVzKS5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICBjb25zdCBleHBlY3RlZFR5cGVzID0gY29uZmlnVHlwZXNbcHJvcGVydHldXG4gICAgY29uc3QgdmFsdWUgPSBjb25maWdbcHJvcGVydHldXG4gICAgY29uc3QgdmFsdWVUeXBlID0gdmFsdWUgJiYgaXNFbGVtZW50KHZhbHVlKSA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSlcblxuICAgIGlmICghbmV3IFJlZ0V4cChleHBlY3RlZFR5cGVzKS50ZXN0KHZhbHVlVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGAke2NvbXBvbmVudE5hbWUudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcIiR7cHJvcGVydHl9XCIgcHJvdmlkZWQgdHlwZSBcIiR7dmFsdWVUeXBlfVwiIGJ1dCBleHBlY3RlZCB0eXBlIFwiJHtleHBlY3RlZFR5cGVzfVwiLmBcbiAgICAgIClcbiAgICB9XG4gIH0pXG59XG5cbmNvbnN0IGlzVmlzaWJsZSA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWlzRWxlbWVudChlbGVtZW50KSB8fCBlbGVtZW50LmdldENsaWVudFJlY3RzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5JykgPT09ICd2aXNpYmxlJ1xufVxuXG5jb25zdCBpc0Rpc2FibGVkID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCB8fCBlbGVtZW50Lm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBlbGVtZW50LmRpc2FibGVkXG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgIT09ICdmYWxzZSdcbn1cblxuY29uc3QgZmluZFNoYWRvd1Jvb3QgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0Um9vdE5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCByb290ID0gZWxlbWVudC5nZXRSb290Tm9kZSgpXG4gICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGxcbiAgfVxuXG4gIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgIHJldHVybiBlbGVtZW50XG4gIH1cblxuICAvLyB3aGVuIHdlIGRvbid0IGZpbmQgYSBzaGFkb3cgcm9vdFxuICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKVxufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuLyoqXG4gKiBUcmljayB0byByZXN0YXJ0IGFuIGVsZW1lbnQncyBhbmltYXRpb25cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHZvaWRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmNoYXJpc3RoZW8uaW8vYmxvZy8yMDIxLzAyL3Jlc3RhcnQtYS1jc3MtYW5pbWF0aW9uLXdpdGgtamF2YXNjcmlwdC8jcmVzdGFydGluZy1hLWNzcy1hbmltYXRpb25cbiAqL1xuY29uc3QgcmVmbG93ID0gZWxlbWVudCA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgZWxlbWVudC5vZmZzZXRIZWlnaHRcbn1cblxuY29uc3QgZ2V0alF1ZXJ5ID0gKCkgPT4ge1xuICBjb25zdCB7IGpRdWVyeSB9ID0gd2luZG93XG5cbiAgaWYgKGpRdWVyeSAmJiAhZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoJ2RhdGEtYnMtbm8tanF1ZXJ5JykpIHtcbiAgICByZXR1cm4galF1ZXJ5XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzID0gW11cblxuY29uc3Qgb25ET01Db250ZW50TG9hZGVkID0gY2FsbGJhY2sgPT4ge1xuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgLy8gYWRkIGxpc3RlbmVyIG9uIHRoZSBmaXJzdCBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGlzIGluIGxvYWRpbmcgc3RhdGVcbiAgICBpZiAoIURPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgICAgICBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLmZvckVhY2goY2FsbGJhY2sgPT4gY2FsbGJhY2soKSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuXG5jb25zdCBpc1JUTCA9ICgpID0+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09ICdydGwnXG5cbmNvbnN0IGRlZmluZUpRdWVyeVBsdWdpbiA9IHBsdWdpbiA9PiB7XG4gIG9uRE9NQ29udGVudExvYWRlZCgoKSA9PiB7XG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwbHVnaW4uTkFNRVxuICAgICAgY29uc3QgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltuYW1lXVxuICAgICAgJC5mbltuYW1lXSA9IHBsdWdpbi5qUXVlcnlJbnRlcmZhY2VcbiAgICAgICQuZm5bbmFtZV0uQ29uc3RydWN0b3IgPSBwbHVnaW5cbiAgICAgICQuZm5bbmFtZV0ubm9Db25mbGljdCA9ICgpID0+IHtcbiAgICAgICAgJC5mbltuYW1lXSA9IEpRVUVSWV9OT19DT05GTElDVFxuICAgICAgICByZXR1cm4gcGx1Z2luLmpRdWVyeUludGVyZmFjZVxuICAgICAgfVxuICAgIH1cbiAgfSlcbn1cblxuY29uc3QgZXhlY3V0ZSA9IGNhbGxiYWNrID0+IHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuXG5jb25zdCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uID0gKGNhbGxiYWNrLCB0cmFuc2l0aW9uRWxlbWVudCwgd2FpdEZvclRyYW5zaXRpb24gPSB0cnVlKSA9PiB7XG4gIGlmICghd2FpdEZvclRyYW5zaXRpb24pIHtcbiAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgZHVyYXRpb25QYWRkaW5nID0gNVxuICBjb25zdCBlbXVsYXRlZER1cmF0aW9uID0gZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodHJhbnNpdGlvbkVsZW1lbnQpICsgZHVyYXRpb25QYWRkaW5nXG5cbiAgbGV0IGNhbGxlZCA9IGZhbHNlXG5cbiAgY29uc3QgaGFuZGxlciA9ICh7IHRhcmdldCB9KSA9PiB7XG4gICAgaWYgKHRhcmdldCAhPT0gdHJhbnNpdGlvbkVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNhbGxlZCA9IHRydWVcbiAgICB0cmFuc2l0aW9uRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKVxuICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gIH1cblxuICB0cmFuc2l0aW9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKVxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkVsZW1lbnQpXG4gICAgfVxuICB9LCBlbXVsYXRlZER1cmF0aW9uKVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcHJldmlvdXMvbmV4dCBlbGVtZW50IG9mIGEgbGlzdC5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBsaXN0ICAgIFRoZSBsaXN0IG9mIGVsZW1lbnRzXG4gKiBAcGFyYW0gYWN0aXZlRWxlbWVudCAgIFRoZSBhY3RpdmUgZWxlbWVudFxuICogQHBhcmFtIHNob3VsZEdldE5leHQgICBDaG9vc2UgdG8gZ2V0IG5leHQgb3IgcHJldmlvdXMgZWxlbWVudFxuICogQHBhcmFtIGlzQ3ljbGVBbGxvd2VkXG4gKiBAcmV0dXJuIHtFbGVtZW50fGVsZW19IFRoZSBwcm9wZXIgZWxlbWVudFxuICovXG5jb25zdCBnZXROZXh0QWN0aXZlRWxlbWVudCA9IChsaXN0LCBhY3RpdmVFbGVtZW50LCBzaG91bGRHZXROZXh0LCBpc0N5Y2xlQWxsb3dlZCkgPT4ge1xuICBsZXQgaW5kZXggPSBsaXN0LmluZGV4T2YoYWN0aXZlRWxlbWVudClcblxuICAvLyBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCByZXR1cm4gYW4gZWxlbWVudCBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBhbmQgaWYgY3ljbGUgaXMgYWxsb3dlZFxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIGxpc3RbIXNob3VsZEdldE5leHQgJiYgaXNDeWNsZUFsbG93ZWQgPyBsaXN0Lmxlbmd0aCAtIDEgOiAwXVxuICB9XG5cbiAgY29uc3QgbGlzdExlbmd0aCA9IGxpc3QubGVuZ3RoXG5cbiAgaW5kZXggKz0gc2hvdWxkR2V0TmV4dCA/IDEgOiAtMVxuXG4gIGlmIChpc0N5Y2xlQWxsb3dlZCkge1xuICAgIGluZGV4ID0gKGluZGV4ICsgbGlzdExlbmd0aCkgJSBsaXN0TGVuZ3RoXG4gIH1cblxuICByZXR1cm4gbGlzdFtNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgbGlzdExlbmd0aCAtIDEpKV1cbn1cblxuZXhwb3J0IHtcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0VUlELFxuICBnZXRTZWxlY3RvckZyb21FbGVtZW50LFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCxcbiAgdHJpZ2dlclRyYW5zaXRpb25FbmQsXG4gIGlzRWxlbWVudCxcbiAgdHlwZUNoZWNrQ29uZmlnLFxuICBpc1Zpc2libGUsXG4gIGlzRGlzYWJsZWQsXG4gIGZpbmRTaGFkb3dSb290LFxuICBub29wLFxuICBnZXROZXh0QWN0aXZlRWxlbWVudCxcbiAgcmVmbG93LFxuICBnZXRqUXVlcnksXG4gIG9uRE9NQ29udGVudExvYWRlZCxcbiAgaXNSVEwsXG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZXhlY3V0ZSxcbiAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvblxufVxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiBkb20vZXZlbnQtaGFuZGxlci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGdldGpRdWVyeSB9IGZyb20gJy4uL3V0aWwvaW5kZXgnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IG5hbWVzcGFjZVJlZ2V4ID0gL1teLl0qKD89XFwuLiopXFwufC4qL1xuY29uc3Qgc3RyaXBOYW1lUmVnZXggPSAvXFwuLiovXG5jb25zdCBzdHJpcFVpZFJlZ2V4ID0gLzo6XFxkKyQvXG5jb25zdCBldmVudFJlZ2lzdHJ5ID0ge30gLy8gRXZlbnRzIHN0b3JhZ2VcbmxldCB1aWRFdmVudCA9IDFcbmNvbnN0IGN1c3RvbUV2ZW50cyA9IHtcbiAgbW91c2VlbnRlcjogJ21vdXNlb3ZlcicsXG4gIG1vdXNlbGVhdmU6ICdtb3VzZW91dCdcbn1cbmNvbnN0IGN1c3RvbUV2ZW50c1JlZ2V4ID0gL14obW91c2VlbnRlcnxtb3VzZWxlYXZlKS9pXG5jb25zdCBuYXRpdmVFdmVudHMgPSBuZXcgU2V0KFtcbiAgJ2NsaWNrJyxcbiAgJ2RibGNsaWNrJyxcbiAgJ21vdXNldXAnLFxuICAnbW91c2Vkb3duJyxcbiAgJ2NvbnRleHRtZW51JyxcbiAgJ21vdXNld2hlZWwnLFxuICAnRE9NTW91c2VTY3JvbGwnLFxuICAnbW91c2VvdmVyJyxcbiAgJ21vdXNlb3V0JyxcbiAgJ21vdXNlbW92ZScsXG4gICdzZWxlY3RzdGFydCcsXG4gICdzZWxlY3RlbmQnLFxuICAna2V5ZG93bicsXG4gICdrZXlwcmVzcycsXG4gICdrZXl1cCcsXG4gICdvcmllbnRhdGlvbmNoYW5nZScsXG4gICd0b3VjaHN0YXJ0JyxcbiAgJ3RvdWNobW92ZScsXG4gICd0b3VjaGVuZCcsXG4gICd0b3VjaGNhbmNlbCcsXG4gICdwb2ludGVyZG93bicsXG4gICdwb2ludGVybW92ZScsXG4gICdwb2ludGVydXAnLFxuICAncG9pbnRlcmxlYXZlJyxcbiAgJ3BvaW50ZXJjYW5jZWwnLFxuICAnZ2VzdHVyZXN0YXJ0JyxcbiAgJ2dlc3R1cmVjaGFuZ2UnLFxuICAnZ2VzdHVyZWVuZCcsXG4gICdmb2N1cycsXG4gICdibHVyJyxcbiAgJ2NoYW5nZScsXG4gICdyZXNldCcsXG4gICdzZWxlY3QnLFxuICAnc3VibWl0JyxcbiAgJ2ZvY3VzaW4nLFxuICAnZm9jdXNvdXQnLFxuICAnbG9hZCcsXG4gICd1bmxvYWQnLFxuICAnYmVmb3JldW5sb2FkJyxcbiAgJ3Jlc2l6ZScsXG4gICdtb3ZlJyxcbiAgJ0RPTUNvbnRlbnRMb2FkZWQnLFxuICAncmVhZHlzdGF0ZWNoYW5nZScsXG4gICdlcnJvcicsXG4gICdhYm9ydCcsXG4gICdzY3JvbGwnXG5dKVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogUHJpdmF0ZSBtZXRob2RzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5mdW5jdGlvbiBnZXRVaWRFdmVudChlbGVtZW50LCB1aWQpIHtcbiAgcmV0dXJuICh1aWQgJiYgYCR7dWlkfTo6JHt1aWRFdmVudCsrfWApIHx8IGVsZW1lbnQudWlkRXZlbnQgfHwgdWlkRXZlbnQrK1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudChlbGVtZW50KSB7XG4gIGNvbnN0IHVpZCA9IGdldFVpZEV2ZW50KGVsZW1lbnQpXG5cbiAgZWxlbWVudC51aWRFdmVudCA9IHVpZFxuICBldmVudFJlZ2lzdHJ5W3VpZF0gPSBldmVudFJlZ2lzdHJ5W3VpZF0gfHwge31cblxuICByZXR1cm4gZXZlbnRSZWdpc3RyeVt1aWRdXG59XG5cbmZ1bmN0aW9uIGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBldmVudC5kZWxlZ2F0ZVRhcmdldCA9IGVsZW1lbnRcblxuICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBmbilcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uYXBwbHkoZWxlbWVudCwgW2V2ZW50XSlcbiAgfVxufVxuXG5mdW5jdGlvbiBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBzZWxlY3RvciwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcblxuICAgIGZvciAobGV0IHsgdGFyZ2V0IH0gPSBldmVudDsgdGFyZ2V0ICYmIHRhcmdldCAhPT0gdGhpczsgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgIGZvciAobGV0IGkgPSBkb21FbGVtZW50cy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnRzW2ldID09PSB0YXJnZXQpIHtcbiAgICAgICAgICBldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRhcmdldFxuXG4gICAgICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsIGV2ZW50LnR5cGUsIHNlbGVjdG9yLCBmbilcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGFyZ2V0LCBbZXZlbnRdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVG8gcGxlYXNlIEVTTGludFxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhhbmRsZXIoZXZlbnRzLCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IgPSBudWxsKSB7XG4gIGNvbnN0IHVpZEV2ZW50TGlzdCA9IE9iamVjdC5rZXlzKGV2ZW50cylcblxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gdWlkRXZlbnRMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgZXZlbnQgPSBldmVudHNbdWlkRXZlbnRMaXN0W2ldXVxuXG4gICAgaWYgKGV2ZW50Lm9yaWdpbmFsSGFuZGxlciA9PT0gaGFuZGxlciAmJiBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IgPT09IGRlbGVnYXRpb25TZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIGV2ZW50XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1zKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4pIHtcbiAgY29uc3QgZGVsZWdhdGlvbiA9IHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJ1xuICBjb25zdCBvcmlnaW5hbEhhbmRsZXIgPSBkZWxlZ2F0aW9uID8gZGVsZWdhdGlvbkZuIDogaGFuZGxlclxuXG4gIGxldCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQob3JpZ2luYWxUeXBlRXZlbnQpXG4gIGNvbnN0IGlzTmF0aXZlID0gbmF0aXZlRXZlbnRzLmhhcyh0eXBlRXZlbnQpXG5cbiAgaWYgKCFpc05hdGl2ZSkge1xuICAgIHR5cGVFdmVudCA9IG9yaWdpbmFsVHlwZUV2ZW50XG4gIH1cblxuICByZXR1cm4gW2RlbGVnYXRpb24sIG9yaWdpbmFsSGFuZGxlciwgdHlwZUV2ZW50XVxufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4sIG9uZU9mZikge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFoYW5kbGVyKSB7XG4gICAgaGFuZGxlciA9IGRlbGVnYXRpb25GblxuICAgIGRlbGVnYXRpb25GbiA9IG51bGxcbiAgfVxuXG4gIC8vIGluIGNhc2Ugb2YgbW91c2VlbnRlciBvciBtb3VzZWxlYXZlIHdyYXAgdGhlIGhhbmRsZXIgd2l0aGluIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yIGl0cyBET00gcG9zaXRpb25cbiAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgaGFuZGxlciBmcm9tIGJlaW5nIGRpc3BhdGNoZWQgdGhlIHNhbWUgd2F5IGFzIG1vdXNlb3ZlciBvciBtb3VzZW91dCBkb2VzXG4gIGlmIChjdXN0b21FdmVudHNSZWdleC50ZXN0KG9yaWdpbmFsVHlwZUV2ZW50KSkge1xuICAgIGNvbnN0IHdyYXBGbiA9IGZuID0+IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFldmVudC5yZWxhdGVkVGFyZ2V0IHx8IChldmVudC5yZWxhdGVkVGFyZ2V0ICE9PSBldmVudC5kZWxlZ2F0ZVRhcmdldCAmJiAhZXZlbnQuZGVsZWdhdGVUYXJnZXQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVsZWdhdGlvbkZuKSB7XG4gICAgICBkZWxlZ2F0aW9uRm4gPSB3cmFwRm4oZGVsZWdhdGlvbkZuKVxuICAgIH0gZWxzZSB7XG4gICAgICBoYW5kbGVyID0gd3JhcEZuKGhhbmRsZXIpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgW2RlbGVnYXRpb24sIG9yaWdpbmFsSGFuZGxlciwgdHlwZUV2ZW50XSA9IG5vcm1hbGl6ZVBhcmFtcyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZuKVxuICBjb25zdCBldmVudHMgPSBnZXRFdmVudChlbGVtZW50KVxuICBjb25zdCBoYW5kbGVycyA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IChldmVudHNbdHlwZUV2ZW50XSA9IHt9KVxuICBjb25zdCBwcmV2aW91c0ZuID0gZmluZEhhbmRsZXIoaGFuZGxlcnMsIG9yaWdpbmFsSGFuZGxlciwgZGVsZWdhdGlvbiA/IGhhbmRsZXIgOiBudWxsKVxuXG4gIGlmIChwcmV2aW91c0ZuKSB7XG4gICAgcHJldmlvdXNGbi5vbmVPZmYgPSBwcmV2aW91c0ZuLm9uZU9mZiAmJiBvbmVPZmZcblxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgdWlkID0gZ2V0VWlkRXZlbnQob3JpZ2luYWxIYW5kbGVyLCBvcmlnaW5hbFR5cGVFdmVudC5yZXBsYWNlKG5hbWVzcGFjZVJlZ2V4LCAnJykpXG4gIGNvbnN0IGZuID0gZGVsZWdhdGlvbiA/XG4gICAgYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZuKSA6XG4gICAgYm9vdHN0cmFwSGFuZGxlcihlbGVtZW50LCBoYW5kbGVyKVxuXG4gIGZuLmRlbGVnYXRpb25TZWxlY3RvciA9IGRlbGVnYXRpb24gPyBoYW5kbGVyIDogbnVsbFxuICBmbi5vcmlnaW5hbEhhbmRsZXIgPSBvcmlnaW5hbEhhbmRsZXJcbiAgZm4ub25lT2ZmID0gb25lT2ZmXG4gIGZuLnVpZEV2ZW50ID0gdWlkXG4gIGhhbmRsZXJzW3VpZF0gPSBmblxuXG4gIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBkZWxlZ2F0aW9uKVxufVxuXG5mdW5jdGlvbiByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpIHtcbiAgY29uc3QgZm4gPSBmaW5kSGFuZGxlcihldmVudHNbdHlwZUV2ZW50XSwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKVxuXG4gIGlmICghZm4pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBCb29sZWFuKGRlbGVnYXRpb25TZWxlY3RvcikpXG4gIGRlbGV0ZSBldmVudHNbdHlwZUV2ZW50XVtmbi51aWRFdmVudF1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fVxuXG4gIE9iamVjdC5rZXlzKHN0b3JlRWxlbWVudEV2ZW50KS5mb3JFYWNoKGhhbmRsZXJLZXkgPT4ge1xuICAgIGlmIChoYW5kbGVyS2V5LmluY2x1ZGVzKG5hbWVzcGFjZSkpIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gc3RvcmVFbGVtZW50RXZlbnRbaGFuZGxlcktleV1cblxuICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQub3JpZ2luYWxIYW5kbGVyLCBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlRXZlbnQoZXZlbnQpIHtcbiAgLy8gYWxsb3cgdG8gZ2V0IHRoZSBuYXRpdmUgZXZlbnRzIGZyb20gbmFtZXNwYWNlZCBldmVudHMgKCdjbGljay5icy5idXR0b24nIC0tPiAnY2xpY2snKVxuICBldmVudCA9IGV2ZW50LnJlcGxhY2Uoc3RyaXBOYW1lUmVnZXgsICcnKVxuICByZXR1cm4gY3VzdG9tRXZlbnRzW2V2ZW50XSB8fCBldmVudFxufVxuXG5jb25zdCBFdmVudEhhbmRsZXIgPSB7XG4gIG9uKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4sIGZhbHNlKVxuICB9LFxuXG4gIG9uZShlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZuKSB7XG4gICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZuLCB0cnVlKVxuICB9LFxuXG4gIG9mZihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZuKSB7XG4gICAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IFtkZWxlZ2F0aW9uLCBvcmlnaW5hbEhhbmRsZXIsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbXMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GbilcbiAgICBjb25zdCBpbk5hbWVzcGFjZSA9IHR5cGVFdmVudCAhPT0gb3JpZ2luYWxUeXBlRXZlbnRcbiAgICBjb25zdCBldmVudHMgPSBnZXRFdmVudChlbGVtZW50KVxuICAgIGNvbnN0IGlzTmFtZXNwYWNlID0gb3JpZ2luYWxUeXBlRXZlbnQuc3RhcnRzV2l0aCgnLicpXG5cbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsSGFuZGxlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFNpbXBsZXN0IGNhc2U6IGhhbmRsZXIgaXMgcGFzc2VkLCByZW1vdmUgdGhhdCBsaXN0ZW5lciBPTkxZLlxuICAgICAgaWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlRXZlbnRdKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBvcmlnaW5hbEhhbmRsZXIsIGRlbGVnYXRpb24gPyBoYW5kbGVyIDogbnVsbClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc05hbWVzcGFjZSkge1xuICAgICAgT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKGVsZW1lbnRFdmVudCA9PiB7XG4gICAgICAgIHJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyhlbGVtZW50LCBldmVudHMsIGVsZW1lbnRFdmVudCwgb3JpZ2luYWxUeXBlRXZlbnQuc2xpY2UoMSkpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge31cbiAgICBPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkuZm9yRWFjaChrZXlIYW5kbGVycyA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyS2V5ID0ga2V5SGFuZGxlcnMucmVwbGFjZShzdHJpcFVpZFJlZ2V4LCAnJylcblxuICAgICAgaWYgKCFpbk5hbWVzcGFjZSB8fCBvcmlnaW5hbFR5cGVFdmVudC5pbmNsdWRlcyhoYW5kbGVyS2V5KSkge1xuICAgICAgICBjb25zdCBldmVudCA9IHN0b3JlRWxlbWVudEV2ZW50W2tleUhhbmRsZXJzXVxuXG4gICAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGV2ZW50Lm9yaWdpbmFsSGFuZGxlciwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgdHJpZ2dlcihlbGVtZW50LCBldmVudCwgYXJncykge1xuICAgIGlmICh0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKVxuICAgIGNvbnN0IHR5cGVFdmVudCA9IGdldFR5cGVFdmVudChldmVudClcbiAgICBjb25zdCBpbk5hbWVzcGFjZSA9IGV2ZW50ICE9PSB0eXBlRXZlbnRcbiAgICBjb25zdCBpc05hdGl2ZSA9IG5hdGl2ZUV2ZW50cy5oYXModHlwZUV2ZW50KVxuXG4gICAgbGV0IGpRdWVyeUV2ZW50XG4gICAgbGV0IGJ1YmJsZXMgPSB0cnVlXG4gICAgbGV0IG5hdGl2ZURpc3BhdGNoID0gdHJ1ZVxuICAgIGxldCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2VcbiAgICBsZXQgZXZ0ID0gbnVsbFxuXG4gICAgaWYgKGluTmFtZXNwYWNlICYmICQpIHtcbiAgICAgIGpRdWVyeUV2ZW50ID0gJC5FdmVudChldmVudCwgYXJncylcblxuICAgICAgJChlbGVtZW50KS50cmlnZ2VyKGpRdWVyeUV2ZW50KVxuICAgICAgYnViYmxlcyA9ICFqUXVlcnlFdmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpXG4gICAgICBuYXRpdmVEaXNwYXRjaCA9ICFqUXVlcnlFdmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpXG4gICAgICBkZWZhdWx0UHJldmVudGVkID0galF1ZXJ5RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKClcbiAgICB9XG5cbiAgICBpZiAoaXNOYXRpdmUpIHtcbiAgICAgIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJylcbiAgICAgIGV2dC5pbml0RXZlbnQodHlwZUV2ZW50LCBidWJibGVzLCB0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgYnViYmxlcyxcbiAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBtZXJnZSBjdXN0b20gaW5mb3JtYXRpb24gaW4gb3VyIGV2ZW50XG4gICAgaWYgKHR5cGVvZiBhcmdzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgT2JqZWN0LmtleXMoYXJncykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZ0LCBrZXksIHtcbiAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnc1trZXldXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG5cbiAgICBpZiAobmF0aXZlRGlzcGF0Y2gpIHtcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpXG4gICAgfVxuXG4gICAgaWYgKGV2dC5kZWZhdWx0UHJldmVudGVkICYmIHR5cGVvZiBqUXVlcnlFdmVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGpRdWVyeUV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG5cbiAgICByZXR1cm4gZXZ0XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRIYW5kbGVyXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IGRvbS9kYXRhLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgZWxlbWVudE1hcCA9IG5ldyBNYXAoKVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNldChlbGVtZW50LCBrZXksIGluc3RhbmNlKSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgZWxlbWVudE1hcC5zZXQoZWxlbWVudCwgbmV3IE1hcCgpKVxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudClcblxuICAgIC8vIG1ha2UgaXQgY2xlYXIgd2Ugb25seSB3YW50IG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudFxuICAgIC8vIGNhbiBiZSByZW1vdmVkIGxhdGVyIHdoZW4gbXVsdGlwbGUga2V5L2luc3RhbmNlcyBhcmUgZmluZSB0byBiZSB1c2VkXG4gICAgaWYgKCFpbnN0YW5jZU1hcC5oYXMoa2V5KSAmJiBpbnN0YW5jZU1hcC5zaXplICE9PSAwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgQm9vdHN0cmFwIGRvZXNuJ3QgYWxsb3cgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudC4gQm91bmQgaW5zdGFuY2U6ICR7QXJyYXkuZnJvbShpbnN0YW5jZU1hcC5rZXlzKCkpWzBdfS5gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaW5zdGFuY2VNYXAuc2V0KGtleSwgaW5zdGFuY2UpXG4gIH0sXG5cbiAgZ2V0KGVsZW1lbnQsIGtleSkge1xuICAgIGlmIChlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpLmdldChrZXkpIHx8IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXG4gIHJlbW92ZShlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpXG5cbiAgICBpbnN0YW5jZU1hcC5kZWxldGUoa2V5KVxuXG4gICAgLy8gZnJlZSB1cCBlbGVtZW50IHJlZmVyZW5jZXMgaWYgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBsZWZ0IGZvciBhbiBlbGVtZW50XG4gICAgaWYgKGluc3RhbmNlTWFwLnNpemUgPT09IDApIHtcbiAgICAgIGVsZW1lbnRNYXAuZGVsZXRlKGVsZW1lbnQpXG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IGJhc2UtY29tcG9uZW50LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IERhdGEgZnJvbSAnLi9kb20vZGF0YSdcbmltcG9ydCB7XG4gIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24sXG4gIGdldEVsZW1lbnRcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBWRVJTSU9OID0gJzUuMS4zJ1xuXG5jbGFzcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgIGVsZW1lbnQgPSBnZXRFbGVtZW50KGVsZW1lbnQpXG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50XG4gICAgRGF0YS5zZXQodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSwgdGhpcylcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgRGF0YS5yZW1vdmUodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSlcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRVZFTlRfS0VZKVxuXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykuZm9yRWFjaChwcm9wZXJ0eU5hbWUgPT4ge1xuICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gbnVsbFxuICAgIH0pXG4gIH1cblxuICBfcXVldWVDYWxsYmFjayhjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCA9IHRydWUpIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgLyoqIFN0YXRpYyAqL1xuXG4gIHN0YXRpYyBnZXRJbnN0YW5jZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIERhdGEuZ2V0KGdldEVsZW1lbnQoZWxlbWVudCksIHRoaXMuREFUQV9LRVkpXG4gIH1cblxuICBzdGF0aWMgZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCBjb25maWcgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmdldEluc3RhbmNlKGVsZW1lbnQpIHx8IG5ldyB0aGlzKGVsZW1lbnQsIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDogbnVsbClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgVkVSU0lPTigpIHtcbiAgICByZXR1cm4gVkVSU0lPTlxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignWW91IGhhdmUgdG8gaW1wbGVtZW50IHRoZSBzdGF0aWMgbWV0aG9kIFwiTkFNRVwiLCBmb3IgZWFjaCBjb21wb25lbnQhJylcbiAgfVxuXG4gIHN0YXRpYyBnZXQgREFUQV9LRVkoKSB7XG4gICAgcmV0dXJuIGBicy4ke3RoaXMuTkFNRX1gXG4gIH1cblxuICBzdGF0aWMgZ2V0IEVWRU5UX0tFWSgpIHtcbiAgICByZXR1cm4gYC4ke3RoaXMuREFUQV9LRVl9YFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2VDb21wb25lbnRcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCB7IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsIGlzRGlzYWJsZWQgfSBmcm9tICcuL2luZGV4J1xuXG5jb25zdCBlbmFibGVEaXNtaXNzVHJpZ2dlciA9IChjb21wb25lbnQsIG1ldGhvZCA9ICdoaWRlJykgPT4ge1xuICBjb25zdCBjbGlja0V2ZW50ID0gYGNsaWNrLmRpc21pc3Mke2NvbXBvbmVudC5FVkVOVF9LRVl9YFxuICBjb25zdCBuYW1lID0gY29tcG9uZW50Lk5BTUVcblxuICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIGNsaWNrRXZlbnQsIGBbZGF0YS1icy1kaXNtaXNzPVwiJHtuYW1lfVwiXWAsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG5cbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKSB8fCB0aGlzLmNsb3Nlc3QoYC4ke25hbWV9YClcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldClcblxuICAgIC8vIE1ldGhvZCBhcmd1bWVudCBpcyBsZWZ0LCBmb3IgQWxlcnQgYW5kIG9ubHksIGFzIGl0IGRvZXNuJ3QgaW1wbGVtZW50IHRoZSAnaGlkZScgbWV0aG9kXG4gICAgaW5zdGFuY2VbbWV0aG9kXSgpXG4gIH0pXG59XG5cbmV4cG9ydCB7XG4gIGVuYWJsZURpc21pc3NUcmlnZ2VyXG59XG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IGFsZXJ0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHsgZGVmaW5lSlF1ZXJ5UGx1Z2luIH0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcbmltcG9ydCB7IGVuYWJsZURpc21pc3NUcmlnZ2VyIH0gZnJvbSAnLi91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAnYWxlcnQnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5hbGVydCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX0NMT1NFID0gYGNsb3NlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xPU0VEID0gYGNsb3NlZCR7RVZFTlRfS0VZfWBcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBBbGVydCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcblxuICBjbG9zZSgpIHtcbiAgICBjb25zdCBjbG9zZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xPU0UpXG5cbiAgICBpZiAoY2xvc2VFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgY29uc3QgaXNBbmltYXRlZCA9IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSlcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHRoaXMuX2Rlc3Ryb3lFbGVtZW50KCksIHRoaXMuX2VsZW1lbnQsIGlzQW5pbWF0ZWQpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9kZXN0cm95RWxlbWVudCgpIHtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpXG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xPU0VEKVxuICAgIHRoaXMuZGlzcG9zZSgpXG4gIH1cblxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IEFsZXJ0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgfVxuXG4gICAgICBkYXRhW2NvbmZpZ10odGhpcylcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoQWxlcnQsICdjbG9zZScpXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5BbGVydCB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihBbGVydClcblxuZXhwb3J0IGRlZmF1bHQgQWxlcnRcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogYnV0dG9uLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHsgZGVmaW5lSlF1ZXJ5UGx1Z2luIH0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdidXR0b24nXG5jb25zdCBEQVRBX0tFWSA9ICdicy5idXR0b24nXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJidXR0b25cIl0nXG5cbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHRvZ2dsZSgpIHtcbiAgICAvLyBUb2dnbGUgY2xhc3MgYW5kIHN5bmMgdGhlIGBhcmlhLXByZXNzZWRgIGF0dHJpYnV0ZSB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGAudG9nZ2xlKClgIG1ldGhvZFxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAoY29uZmlnID09PSAndG9nZ2xlJykge1xuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZXZlbnQgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgY29uc3QgYnV0dG9uID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoU0VMRUNUT1JfREFUQV9UT0dHTEUpXG4gIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZShidXR0b24pXG5cbiAgZGF0YS50b2dnbGUoKVxufSlcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBhZGQgLkJ1dHRvbiB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihCdXR0b24pXG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvblxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiBkb20vbWFuaXB1bGF0b3IuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhKHZhbCkge1xuICBpZiAodmFsID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHZhbCA9PT0gJ2ZhbHNlJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKHZhbCA9PT0gTnVtYmVyKHZhbCkudG9TdHJpbmcoKSkge1xuICAgIHJldHVybiBOdW1iZXIodmFsKVxuICB9XG5cbiAgaWYgKHZhbCA9PT0gJycgfHwgdmFsID09PSAnbnVsbCcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhS2V5KGtleSkge1xuICByZXR1cm4ga2V5LnJlcGxhY2UoL1tBLVpdL2csIGNociA9PiBgLSR7Y2hyLnRvTG93ZXJDYXNlKCl9YClcbn1cblxuY29uc3QgTWFuaXB1bGF0b3IgPSB7XG4gIHNldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWx1ZSkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWAsIHZhbHVlKVxuICB9LFxuXG4gIHJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YClcbiAgfSxcblxuICBnZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge31cblxuICAgIE9iamVjdC5rZXlzKGVsZW1lbnQuZGF0YXNldClcbiAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdicycpKVxuICAgICAgLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgbGV0IHB1cmVLZXkgPSBrZXkucmVwbGFjZSgvXmJzLywgJycpXG4gICAgICAgIHB1cmVLZXkgPSBwdXJlS2V5LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcHVyZUtleS5zbGljZSgxLCBwdXJlS2V5Lmxlbmd0aClcbiAgICAgICAgYXR0cmlidXRlc1twdXJlS2V5XSA9IG5vcm1hbGl6ZURhdGEoZWxlbWVudC5kYXRhc2V0W2tleV0pXG4gICAgICB9KVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgfSxcblxuICBnZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgIHJldHVybiBub3JtYWxpemVEYXRhKGVsZW1lbnQuZ2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApKVxuICB9LFxuXG4gIG9mZnNldChlbGVtZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcblxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IHJlY3QudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0LFxuICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgd2luZG93LnBhZ2VYT2Zmc2V0XG4gICAgfVxuICB9LFxuXG4gIHBvc2l0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBlbGVtZW50Lm9mZnNldFRvcCxcbiAgICAgIGxlZnQ6IGVsZW1lbnQub2Zmc2V0TGVmdFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pcHVsYXRvclxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiBkb20vc2VsZWN0b3ItZW5naW5lLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHsgaXNEaXNhYmxlZCwgaXNWaXNpYmxlIH0gZnJvbSAnLi4vdXRpbC9pbmRleCdcblxuY29uc3QgTk9ERV9URVhUID0gM1xuXG5jb25zdCBTZWxlY3RvckVuZ2luZSA9IHtcbiAgZmluZChzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiBbXS5jb25jYXQoLi4uRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbC5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKSlcbiAgfSxcblxuICBmaW5kT25lKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIEVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3IuY2FsbChlbGVtZW50LCBzZWxlY3RvcilcbiAgfSxcblxuICBjaGlsZHJlbihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBbXS5jb25jYXQoLi4uZWxlbWVudC5jaGlsZHJlbilcbiAgICAgIC5maWx0ZXIoY2hpbGQgPT4gY2hpbGQubWF0Y2hlcyhzZWxlY3RvcikpXG4gIH0sXG5cbiAgcGFyZW50cyhlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHBhcmVudHMgPSBbXVxuXG4gICAgbGV0IGFuY2VzdG9yID0gZWxlbWVudC5wYXJlbnROb2RlXG5cbiAgICB3aGlsZSAoYW5jZXN0b3IgJiYgYW5jZXN0b3Iubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIGFuY2VzdG9yLm5vZGVUeXBlICE9PSBOT0RFX1RFWFQpIHtcbiAgICAgIGlmIChhbmNlc3Rvci5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgICBwYXJlbnRzLnB1c2goYW5jZXN0b3IpXG4gICAgICB9XG5cbiAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZVxuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRzXG4gIH0sXG5cbiAgcHJldihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZ1xuXG4gICAgd2hpbGUgKHByZXZpb3VzKSB7XG4gICAgICBpZiAocHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtwcmV2aW91c11cbiAgICAgIH1cblxuICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH0sXG5cbiAgbmV4dChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBuZXh0ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmdcblxuICAgIHdoaWxlIChuZXh0KSB7XG4gICAgICBpZiAobmV4dC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gW25leHRdXG4gICAgICB9XG5cbiAgICAgIG5leHQgPSBuZXh0Lm5leHRFbGVtZW50U2libGluZ1xuICAgIH1cblxuICAgIHJldHVybiBbXVxuICB9LFxuXG4gIGZvY3VzYWJsZUNoaWxkcmVuKGVsZW1lbnQpIHtcbiAgICBjb25zdCBmb2N1c2FibGVzID0gW1xuICAgICAgJ2EnLFxuICAgICAgJ2J1dHRvbicsXG4gICAgICAnaW5wdXQnLFxuICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICdzZWxlY3QnLFxuICAgICAgJ2RldGFpbHMnLFxuICAgICAgJ1t0YWJpbmRleF0nLFxuICAgICAgJ1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJ1xuICAgIF0ubWFwKHNlbGVjdG9yID0+IGAke3NlbGVjdG9yfTpub3QoW3RhYmluZGV4Xj1cIi1cIl0pYCkuam9pbignLCAnKVxuXG4gICAgcmV0dXJuIHRoaXMuZmluZChmb2N1c2FibGVzLCBlbGVtZW50KS5maWx0ZXIoZWwgPT4gIWlzRGlzYWJsZWQoZWwpICYmIGlzVmlzaWJsZShlbCkpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0b3JFbmdpbmVcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogY2Fyb3VzZWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsXG4gIGlzUlRMLFxuICBpc1Zpc2libGUsXG4gIGdldE5leHRBY3RpdmVFbGVtZW50LFxuICByZWZsb3csXG4gIHRyaWdnZXJUcmFuc2l0aW9uRW5kLFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAnY2Fyb3VzZWwnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5jYXJvdXNlbCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBBUlJPV19MRUZUX0tFWSA9ICdBcnJvd0xlZnQnXG5jb25zdCBBUlJPV19SSUdIVF9LRVkgPSAnQXJyb3dSaWdodCdcbmNvbnN0IFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgPSA1MDAgLy8gVGltZSBmb3IgbW91c2UgY29tcGF0IGV2ZW50cyB0byBmaXJlIGFmdGVyIHRvdWNoXG5jb25zdCBTV0lQRV9USFJFU0hPTEQgPSA0MFxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBpbnRlcnZhbDogNTAwMCxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHNsaWRlOiBmYWxzZSxcbiAgcGF1c2U6ICdob3ZlcicsXG4gIHdyYXA6IHRydWUsXG4gIHRvdWNoOiB0cnVlXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBpbnRlcnZhbDogJyhudW1iZXJ8Ym9vbGVhbiknLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBzbGlkZTogJyhib29sZWFufHN0cmluZyknLFxuICBwYXVzZTogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICB3cmFwOiAnYm9vbGVhbicsXG4gIHRvdWNoOiAnYm9vbGVhbidcbn1cblxuY29uc3QgT1JERVJfTkVYVCA9ICduZXh0J1xuY29uc3QgT1JERVJfUFJFViA9ICdwcmV2J1xuY29uc3QgRElSRUNUSU9OX0xFRlQgPSAnbGVmdCdcbmNvbnN0IERJUkVDVElPTl9SSUdIVCA9ICdyaWdodCdcblxuY29uc3QgS0VZX1RPX0RJUkVDVElPTiA9IHtcbiAgW0FSUk9XX0xFRlRfS0VZXTogRElSRUNUSU9OX1JJR0hULFxuICBbQVJST1dfUklHSFRfS0VZXTogRElSRUNUSU9OX0xFRlRcbn1cblxuY29uc3QgRVZFTlRfU0xJREUgPSBgc2xpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TTElEID0gYHNsaWQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9LRVlET1dOID0gYGtleWRvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRUVOVEVSID0gYG1vdXNlZW50ZXIke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRUxFQVZFID0gYG1vdXNlbGVhdmUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9UT1VDSFNUQVJUID0gYHRvdWNoc3RhcnQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9UT1VDSE1PVkUgPSBgdG91Y2htb3ZlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfVE9VQ0hFTkQgPSBgdG91Y2hlbmQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9QT0lOVEVSRE9XTiA9IGBwb2ludGVyZG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1BPSU5URVJVUCA9IGBwb2ludGVydXAke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9EUkFHX1NUQVJUID0gYGRyYWdzdGFydCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkgPSBgbG9hZCR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX0NBUk9VU0VMID0gJ2Nhcm91c2VsJ1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TTElERSA9ICdzbGlkZSdcbmNvbnN0IENMQVNTX05BTUVfRU5EID0gJ2Nhcm91c2VsLWl0ZW0tZW5kJ1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFSVCA9ICdjYXJvdXNlbC1pdGVtLXN0YXJ0J1xuY29uc3QgQ0xBU1NfTkFNRV9ORVhUID0gJ2Nhcm91c2VsLWl0ZW0tbmV4dCdcbmNvbnN0IENMQVNTX05BTUVfUFJFViA9ICdjYXJvdXNlbC1pdGVtLXByZXYnXG5jb25zdCBDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQgPSAncG9pbnRlci1ldmVudCdcblxuY29uc3QgU0VMRUNUT1JfQUNUSVZFID0gJy5hY3RpdmUnXG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkVfSVRFTSA9ICcuYWN0aXZlLmNhcm91c2VsLWl0ZW0nXG5jb25zdCBTRUxFQ1RPUl9JVEVNID0gJy5jYXJvdXNlbC1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfSVRFTV9JTUcgPSAnLmNhcm91c2VsLWl0ZW0gaW1nJ1xuY29uc3QgU0VMRUNUT1JfTkVYVF9QUkVWID0gJy5jYXJvdXNlbC1pdGVtLW5leHQsIC5jYXJvdXNlbC1pdGVtLXByZXYnXG5jb25zdCBTRUxFQ1RPUl9JTkRJQ0FUT1JTID0gJy5jYXJvdXNlbC1pbmRpY2F0b3JzJ1xuY29uc3QgU0VMRUNUT1JfSU5ESUNBVE9SID0gJ1tkYXRhLWJzLXRhcmdldF0nXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NMSURFID0gJ1tkYXRhLWJzLXNsaWRlXSwgW2RhdGEtYnMtc2xpZGUtdG9dJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9SSURFID0gJ1tkYXRhLWJzLXJpZGU9XCJjYXJvdXNlbFwiXSdcblxuY29uc3QgUE9JTlRFUl9UWVBFX1RPVUNIID0gJ3RvdWNoJ1xuY29uc3QgUE9JTlRFUl9UWVBFX1BFTiA9ICdwZW4nXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuY2xhc3MgQ2Fyb3VzZWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudClcblxuICAgIHRoaXMuX2l0ZW1zID0gbnVsbFxuICAgIHRoaXMuX2ludGVydmFsID0gbnVsbFxuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsXG4gICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlXG4gICAgdGhpcy50b3VjaFRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50b3VjaFN0YXJ0WCA9IDBcbiAgICB0aGlzLnRvdWNoRGVsdGFYID0gMFxuXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfSU5ESUNBVE9SUywgdGhpcy5fZWxlbWVudClcbiAgICB0aGlzLl90b3VjaFN1cHBvcnRlZCA9ICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwXG4gICAgdGhpcy5fcG9pbnRlckV2ZW50ID0gQm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50KVxuXG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcblxuICBuZXh0KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX05FWFQpXG4gIH1cblxuICBuZXh0V2hlblZpc2libGUoKSB7XG4gICAgLy8gRG9uJ3QgY2FsbCBuZXh0IHdoZW4gdGhlIHBhZ2UgaXNuJ3QgdmlzaWJsZVxuICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICBpZiAoIWRvY3VtZW50LmhpZGRlbiAmJiBpc1Zpc2libGUodGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIHRoaXMubmV4dCgpXG4gICAgfVxuICB9XG5cbiAgcHJldigpIHtcbiAgICB0aGlzLl9zbGlkZShPUkRFUl9QUkVWKVxuICB9XG5cbiAgcGF1c2UoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICB0aGlzLl9pc1BhdXNlZCA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAoU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9ORVhUX1BSRVYsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KVxuICAgICAgdGhpcy5jeWNsZSh0cnVlKVxuICAgIH1cblxuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpXG4gICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsXG4gIH1cblxuICBjeWNsZShldmVudCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpXG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnICYmIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCAmJiAhdGhpcy5faXNQYXVzZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsKClcblxuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChcbiAgICAgICAgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA/IHRoaXMubmV4dFdoZW5WaXNpYmxlIDogdGhpcy5uZXh0KS5iaW5kKHRoaXMpLFxuICAgICAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICB0byhpbmRleCkge1xuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRV9JVEVNLCB0aGlzLl9lbGVtZW50KVxuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpXG5cbiAgICBpZiAoaW5kZXggPiB0aGlzLl9pdGVtcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLnRvKGluZGV4KSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgdGhpcy5jeWNsZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBvcmRlciA9IGluZGV4ID4gYWN0aXZlSW5kZXggP1xuICAgICAgT1JERVJfTkVYVCA6XG4gICAgICBPUkRFUl9QUkVWXG5cbiAgICB0aGlzLl9zbGlkZShvcmRlciwgdGhpcy5faXRlbXNbaW5kZXhdKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLk1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDoge30pXG4gICAgfVxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9oYW5kbGVTd2lwZSgpIHtcbiAgICBjb25zdCBhYnNEZWx0YXggPSBNYXRoLmFicyh0aGlzLnRvdWNoRGVsdGFYKVxuXG4gICAgaWYgKGFic0RlbHRheCA8PSBTV0lQRV9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGFic0RlbHRheCAvIHRoaXMudG91Y2hEZWx0YVhcblxuICAgIHRoaXMudG91Y2hEZWx0YVggPSAwXG5cbiAgICBpZiAoIWRpcmVjdGlvbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fc2xpZGUoZGlyZWN0aW9uID4gMCA/IERJUkVDVElPTl9SSUdIVCA6IERJUkVDVElPTl9MRUZUKVxuICB9XG5cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VFTlRFUiwgZXZlbnQgPT4gdGhpcy5wYXVzZShldmVudCkpXG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VMRUFWRSwgZXZlbnQgPT4gdGhpcy5jeWNsZShldmVudCkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy50b3VjaCAmJiB0aGlzLl90b3VjaFN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5fYWRkVG91Y2hFdmVudExpc3RlbmVycygpXG4gICAgfVxuICB9XG5cbiAgX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgY29uc3QgaGFzUG9pbnRlclBlblRvdWNoID0gZXZlbnQgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX3BvaW50ZXJFdmVudCAmJlxuICAgICAgICAoZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9QRU4gfHwgZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9UT1VDSClcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IGV2ZW50ID0+IHtcbiAgICAgIGlmIChoYXNQb2ludGVyUGVuVG91Y2goZXZlbnQpKSB7XG4gICAgICAgIHRoaXMudG91Y2hTdGFydFggPSBldmVudC5jbGllbnRYXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLl9wb2ludGVyRXZlbnQpIHtcbiAgICAgICAgdGhpcy50b3VjaFN0YXJ0WCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1vdmUgPSBldmVudCA9PiB7XG4gICAgICAvLyBlbnN1cmUgc3dpcGluZyB3aXRoIG9uZSB0b3VjaCBhbmQgbm90IHBpbmNoaW5nXG4gICAgICB0aGlzLnRvdWNoRGVsdGFYID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDEgP1xuICAgICAgICAwIDpcbiAgICAgICAgZXZlbnQudG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy50b3VjaFN0YXJ0WFxuICAgIH1cblxuICAgIGNvbnN0IGVuZCA9IGV2ZW50ID0+IHtcbiAgICAgIGlmIChoYXNQb2ludGVyUGVuVG91Y2goZXZlbnQpKSB7XG4gICAgICAgIHRoaXMudG91Y2hEZWx0YVggPSBldmVudC5jbGllbnRYIC0gdGhpcy50b3VjaFN0YXJ0WFxuICAgICAgfVxuXG4gICAgICB0aGlzLl9oYW5kbGVTd2lwZSgpXG4gICAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICAgIC8vIElmIGl0J3MgYSB0b3VjaC1lbmFibGVkIGRldmljZSwgbW91c2VlbnRlci9sZWF2ZSBhcmUgZmlyZWQgYXNcbiAgICAgICAgLy8gcGFydCBvZiB0aGUgbW91c2UgY29tcGF0aWJpbGl0eSBldmVudHMgb24gZmlyc3QgdGFwIC0gdGhlIGNhcm91c2VsXG4gICAgICAgIC8vIHdvdWxkIHN0b3AgY3ljbGluZyB1bnRpbCB1c2VyIHRhcHBlZCBvdXQgb2YgaXQ7XG4gICAgICAgIC8vIGhlcmUsIHdlIGxpc3RlbiBmb3IgdG91Y2hlbmQsIGV4cGxpY2l0bHkgcGF1c2UgdGhlIGNhcm91c2VsXG4gICAgICAgIC8vIChhcyBpZiBpdCdzIHRoZSBzZWNvbmQgdGltZSB3ZSB0YXAgb24gaXQsIG1vdXNlZW50ZXIgY29tcGF0IGV2ZW50XG4gICAgICAgIC8vIGlzIE5PVCBmaXJlZCkgYW5kIGFmdGVyIGEgdGltZW91dCAodG8gYWxsb3cgZm9yIG1vdXNlIGNvbXBhdGliaWxpdHlcbiAgICAgICAgLy8gZXZlbnRzIHRvIGZpcmUpIHdlIGV4cGxpY2l0bHkgcmVzdGFydCBjeWNsaW5nXG5cbiAgICAgICAgdGhpcy5wYXVzZSgpXG4gICAgICAgIGlmICh0aGlzLnRvdWNoVGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dClcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gc2V0VGltZW91dChldmVudCA9PiB0aGlzLmN5Y2xlKGV2ZW50KSwgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCArIHRoaXMuX2NvbmZpZy5pbnRlcnZhbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lURU1fSU1HLCB0aGlzLl9lbGVtZW50KS5mb3JFYWNoKGl0ZW1JbWcgPT4ge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKGl0ZW1JbWcsIEVWRU5UX0RSQUdfU1RBUlQsIGV2ZW50ID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpXG4gICAgfSlcblxuICAgIGlmICh0aGlzLl9wb2ludGVyRXZlbnQpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSRE9XTiwgZXZlbnQgPT4gc3RhcnQoZXZlbnQpKVxuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1BPSU5URVJVUCwgZXZlbnQgPT4gZW5kKGV2ZW50KSlcblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfUE9JTlRFUl9FVkVOVClcbiAgICB9IGVsc2Uge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNIU1RBUlQsIGV2ZW50ID0+IHN0YXJ0KGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSE1PVkUsIGV2ZW50ID0+IG1vdmUoZXZlbnQpKVxuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNIRU5ELCBldmVudCA9PiBlbmQoZXZlbnQpKVxuICAgIH1cbiAgfVxuXG4gIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBLRVlfVE9fRElSRUNUSU9OW2V2ZW50LmtleV1cbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB0aGlzLl9zbGlkZShkaXJlY3Rpb24pXG4gICAgfVxuICB9XG5cbiAgX2dldEl0ZW1JbmRleChlbGVtZW50KSB7XG4gICAgdGhpcy5faXRlbXMgPSBlbGVtZW50ICYmIGVsZW1lbnQucGFyZW50Tm9kZSA/XG4gICAgICBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lURU0sIGVsZW1lbnQucGFyZW50Tm9kZSkgOlxuICAgICAgW11cblxuICAgIHJldHVybiB0aGlzLl9pdGVtcy5pbmRleE9mKGVsZW1lbnQpXG4gIH1cblxuICBfZ2V0SXRlbUJ5T3JkZXIob3JkZXIsIGFjdGl2ZUVsZW1lbnQpIHtcbiAgICBjb25zdCBpc05leHQgPSBvcmRlciA9PT0gT1JERVJfTkVYVFxuICAgIHJldHVybiBnZXROZXh0QWN0aXZlRWxlbWVudCh0aGlzLl9pdGVtcywgYWN0aXZlRWxlbWVudCwgaXNOZXh0LCB0aGlzLl9jb25maWcud3JhcClcbiAgfVxuXG4gIF90cmlnZ2VyU2xpZGVFdmVudChyZWxhdGVkVGFyZ2V0LCBldmVudERpcmVjdGlvbk5hbWUpIHtcbiAgICBjb25zdCB0YXJnZXRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChyZWxhdGVkVGFyZ2V0KVxuICAgIGNvbnN0IGZyb21JbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRV9JVEVNLCB0aGlzLl9lbGVtZW50KSlcblxuICAgIHJldHVybiBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElERSwge1xuICAgICAgcmVsYXRlZFRhcmdldCxcbiAgICAgIGRpcmVjdGlvbjogZXZlbnREaXJlY3Rpb25OYW1lLFxuICAgICAgZnJvbTogZnJvbUluZGV4LFxuICAgICAgdG86IHRhcmdldEluZGV4XG4gICAgfSlcbiAgfVxuXG4gIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudClcblxuICAgICAgYWN0aXZlSW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgICBhY3RpdmVJbmRpY2F0b3IucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnKVxuXG4gICAgICBjb25zdCBpbmRpY2F0b3JzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JTkRJQ0FUT1IsIHRoaXMuX2luZGljYXRvcnNFbGVtZW50KVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKE51bWJlci5wYXJzZUludChpbmRpY2F0b3JzW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1icy1zbGlkZS10bycpLCAxMCkgPT09IHRoaXMuX2dldEl0ZW1JbmRleChlbGVtZW50KSkge1xuICAgICAgICAgIGluZGljYXRvcnNbaV0uY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcbiAgICAgICAgICBpbmRpY2F0b3JzW2ldLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfdXBkYXRlSW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2FjdGl2ZUVsZW1lbnQgfHwgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkVfSVRFTSwgdGhpcy5fZWxlbWVudClcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudEludGVydmFsID0gTnVtYmVyLnBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLWludGVydmFsJyksIDEwKVxuXG4gICAgaWYgKGVsZW1lbnRJbnRlcnZhbCkge1xuICAgICAgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCA9IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmludGVydmFsXG4gICAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWwgPSBlbGVtZW50SW50ZXJ2YWxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY29uZmlnLmludGVydmFsID0gdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCB8fCB0aGlzLl9jb25maWcuaW50ZXJ2YWxcbiAgICB9XG4gIH1cblxuICBfc2xpZGUoZGlyZWN0aW9uT3JPcmRlciwgZWxlbWVudCkge1xuICAgIGNvbnN0IG9yZGVyID0gdGhpcy5fZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb25Pck9yZGVyKVxuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRV9JVEVNLCB0aGlzLl9lbGVtZW50KVxuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChhY3RpdmVFbGVtZW50KVxuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZWxlbWVudCB8fCB0aGlzLl9nZXRJdGVtQnlPcmRlcihvcmRlciwgYWN0aXZlRWxlbWVudClcblxuICAgIGNvbnN0IG5leHRFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgobmV4dEVsZW1lbnQpXG4gICAgY29uc3QgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZhbClcblxuICAgIGNvbnN0IGlzTmV4dCA9IG9yZGVyID09PSBPUkRFUl9ORVhUXG4gICAgY29uc3QgZGlyZWN0aW9uYWxDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX1NUQVJUIDogQ0xBU1NfTkFNRV9FTkRcbiAgICBjb25zdCBvcmRlckNsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfTkVYVCA6IENMQVNTX05BTUVfUFJFVlxuICAgIGNvbnN0IGV2ZW50RGlyZWN0aW9uTmFtZSA9IHRoaXMuX29yZGVyVG9EaXJlY3Rpb24ob3JkZXIpXG5cbiAgICBpZiAobmV4dEVsZW1lbnQgJiYgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQUNUSVZFKSkge1xuICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNsaWRlRXZlbnQgPSB0aGlzLl90cmlnZ2VyU2xpZGVFdmVudChuZXh0RWxlbWVudCwgZXZlbnREaXJlY3Rpb25OYW1lKVxuICAgIGlmIChzbGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCAhbmV4dEVsZW1lbnQpIHtcbiAgICAgIC8vIFNvbWUgd2VpcmRuZXNzIGlzIGhhcHBlbmluZywgc28gd2UgYmFpbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTbGlkaW5nID0gdHJ1ZVxuXG4gICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgdGhpcy5wYXVzZSgpXG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChuZXh0RWxlbWVudClcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbmV4dEVsZW1lbnRcblxuICAgIGNvbnN0IHRyaWdnZXJTbGlkRXZlbnQgPSAoKSA9PiB7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IG5leHRFbGVtZW50LFxuICAgICAgICBkaXJlY3Rpb246IGV2ZW50RGlyZWN0aW9uTmFtZSxcbiAgICAgICAgZnJvbTogYWN0aXZlRWxlbWVudEluZGV4LFxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TTElERSkpIHtcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQob3JkZXJDbGFzc05hbWUpXG5cbiAgICAgIHJlZmxvdyhuZXh0RWxlbWVudClcblxuICAgICAgYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKVxuICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSlcblxuICAgICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShkaXJlY3Rpb25hbENsYXNzTmFtZSwgb3JkZXJDbGFzc05hbWUpXG4gICAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG5cbiAgICAgICAgYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFLCBvcmRlckNsYXNzTmFtZSwgZGlyZWN0aW9uYWxDbGFzc05hbWUpXG5cbiAgICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2VcblxuICAgICAgICBzZXRUaW1lb3V0KHRyaWdnZXJTbGlkRXZlbnQsIDApXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsQmFjaywgYWN0aXZlRWxlbWVudCwgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcblxuICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2VcbiAgICAgIHRyaWdnZXJTbGlkRXZlbnQoKVxuICAgIH1cblxuICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgIHRoaXMuY3ljbGUoKVxuICAgIH1cbiAgfVxuXG4gIF9kaXJlY3Rpb25Ub09yZGVyKGRpcmVjdGlvbikge1xuICAgIGlmICghW0RJUkVDVElPTl9SSUdIVCwgRElSRUNUSU9OX0xFRlRdLmluY2x1ZGVzKGRpcmVjdGlvbikpIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb25cbiAgICB9XG5cbiAgICBpZiAoaXNSVEwoKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9QUkVWIDogT1JERVJfTkVYVFxuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfTkVYVCA6IE9SREVSX1BSRVZcbiAgfVxuXG4gIF9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSB7XG4gICAgaWYgKCFbT1JERVJfTkVYVCwgT1JERVJfUFJFVl0uaW5jbHVkZXMob3JkZXIpKSB7XG4gICAgICByZXR1cm4gb3JkZXJcbiAgICB9XG5cbiAgICBpZiAoaXNSVEwoKSkge1xuICAgICAgcmV0dXJuIG9yZGVyID09PSBPUkRFUl9QUkVWID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFRcbiAgICB9XG5cbiAgICByZXR1cm4gb3JkZXIgPT09IE9SREVSX1BSRVYgPyBESVJFQ1RJT05fUklHSFQgOiBESVJFQ1RJT05fTEVGVFxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGNhcm91c2VsSW50ZXJmYWNlKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIGNvbnN0IGRhdGEgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZylcblxuICAgIGxldCB7IF9jb25maWcgfSA9IGRhdGFcbiAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIF9jb25maWcgPSB7XG4gICAgICAgIC4uLl9jb25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFjdGlvbiA9IHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnID8gY29uZmlnIDogX2NvbmZpZy5zbGlkZVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInKSB7XG4gICAgICBkYXRhLnRvKGNvbmZpZylcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGFbYWN0aW9uXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHthY3Rpb259XCJgKVxuICAgICAgfVxuXG4gICAgICBkYXRhW2FjdGlvbl0oKVxuICAgIH0gZWxzZSBpZiAoX2NvbmZpZy5pbnRlcnZhbCAmJiBfY29uZmlnLnJpZGUpIHtcbiAgICAgIGRhdGEucGF1c2UoKVxuICAgICAgZGF0YS5jeWNsZSgpXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIENhcm91c2VsLmNhcm91c2VsSW50ZXJmYWNlKHRoaXMsIGNvbmZpZylcbiAgICB9KVxuICB9XG5cbiAgc3RhdGljIGRhdGFBcGlDbGlja0hhbmRsZXIoZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpXG5cbiAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0NBUk9VU0VMKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGFyZ2V0KSxcbiAgICAgIC4uLk1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMpXG4gICAgfVxuICAgIGNvbnN0IHNsaWRlSW5kZXggPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1icy1zbGlkZS10bycpXG5cbiAgICBpZiAoc2xpZGVJbmRleCkge1xuICAgICAgY29uZmlnLmludGVydmFsID0gZmFsc2VcbiAgICB9XG5cbiAgICBDYXJvdXNlbC5jYXJvdXNlbEludGVyZmFjZSh0YXJnZXQsIGNvbmZpZylcblxuICAgIGlmIChzbGlkZUluZGV4KSB7XG4gICAgICBDYXJvdXNlbC5nZXRJbnN0YW5jZSh0YXJnZXQpLnRvKHNsaWRlSW5kZXgpXG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9TTElERSwgQ2Fyb3VzZWwuZGF0YUFwaUNsaWNrSGFuZGxlcilcblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBjb25zdCBjYXJvdXNlbHMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfUklERSlcblxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2Fyb3VzZWxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgQ2Fyb3VzZWwuY2Fyb3VzZWxJbnRlcmZhY2UoY2Fyb3VzZWxzW2ldLCBDYXJvdXNlbC5nZXRJbnN0YW5jZShjYXJvdXNlbHNbaV0pKVxuICB9XG59KVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuQ2Fyb3VzZWwgdG8galF1ZXJ5IG9ubHkgaWYgalF1ZXJ5IGlzIHByZXNlbnRcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ2Fyb3VzZWwpXG5cbmV4cG9ydCBkZWZhdWx0IENhcm91c2VsXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IGNvbGxhcHNlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50LFxuICBnZXRTZWxlY3RvckZyb21FbGVtZW50LFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICByZWZsb3csXG4gIHR5cGVDaGVja0NvbmZpZ1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRGF0YSBmcm9tICcuL2RvbS9kYXRhJ1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAnY29sbGFwc2UnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5jb2xsYXBzZSdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICB0b2dnbGU6IHRydWUsXG4gIHBhcmVudDogbnVsbFxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgdG9nZ2xlOiAnYm9vbGVhbicsXG4gIHBhcmVudDogJyhudWxsfGVsZW1lbnQpJ1xufVxuXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNFID0gJ2NvbGxhcHNlJ1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTSU5HID0gJ2NvbGxhcHNpbmcnXG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNFRCA9ICdjb2xsYXBzZWQnXG5jb25zdCBDTEFTU19OQU1FX0RFRVBFUl9DSElMRFJFTiA9IGA6c2NvcGUgLiR7Q0xBU1NfTkFNRV9DT0xMQVBTRX0gLiR7Q0xBU1NfTkFNRV9DT0xMQVBTRX1gXG5jb25zdCBDTEFTU19OQU1FX0hPUklaT05UQUwgPSAnY29sbGFwc2UtaG9yaXpvbnRhbCdcblxuY29uc3QgV0lEVEggPSAnd2lkdGgnXG5jb25zdCBIRUlHSFQgPSAnaGVpZ2h0J1xuXG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkVTID0gJy5jb2xsYXBzZS5zaG93LCAuY29sbGFwc2UuY29sbGFwc2luZydcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCJdJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgQ29sbGFwc2UgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudClcblxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl90cmlnZ2VyQXJyYXkgPSBbXVxuXG4gICAgY29uc3QgdG9nZ2xlTGlzdCA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEUpXG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdG9nZ2xlTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgZWxlbSA9IHRvZ2dsZUxpc3RbaV1cbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtKVxuICAgICAgY29uc3QgZmlsdGVyRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpXG4gICAgICAgIC5maWx0ZXIoZm91bmRFbGVtID0+IGZvdW5kRWxlbSA9PT0gdGhpcy5fZWxlbWVudClcblxuICAgICAgaWYgKHNlbGVjdG9yICE9PSBudWxsICYmIGZpbHRlckVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdG9yID0gc2VsZWN0b3JcbiAgICAgICAgdGhpcy5fdHJpZ2dlckFycmF5LnB1c2goZWxlbSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pbml0aWFsaXplQ2hpbGRyZW4oKVxuXG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0aGlzLl9pc1Nob3duKCkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy50b2dnbGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlKClcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3coKVxuICAgIH1cbiAgfVxuXG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCB0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBhY3RpdmVzID0gW11cbiAgICBsZXQgYWN0aXZlc0RhdGFcblxuICAgIGlmICh0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmQoQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4sIHRoaXMuX2NvbmZpZy5wYXJlbnQpXG4gICAgICBhY3RpdmVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9BQ1RJVkVTLCB0aGlzLl9jb25maWcucGFyZW50KS5maWx0ZXIoZWxlbSA9PiAhY2hpbGRyZW4uaW5jbHVkZXMoZWxlbSkpIC8vIHJlbW92ZSBjaGlsZHJlbiBpZiBncmVhdGVyIGRlcHRoXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZSh0aGlzLl9zZWxlY3RvcilcbiAgICBpZiAoYWN0aXZlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRlbXBBY3RpdmVEYXRhID0gYWN0aXZlcy5maW5kKGVsZW0gPT4gY29udGFpbmVyICE9PSBlbGVtKVxuICAgICAgYWN0aXZlc0RhdGEgPSB0ZW1wQWN0aXZlRGF0YSA/IENvbGxhcHNlLmdldEluc3RhbmNlKHRlbXBBY3RpdmVEYXRhKSA6IG51bGxcblxuICAgICAgaWYgKGFjdGl2ZXNEYXRhICYmIGFjdGl2ZXNEYXRhLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1cpXG4gICAgaWYgKHN0YXJ0RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYWN0aXZlcy5mb3JFYWNoKGVsZW1BY3RpdmUgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5lciAhPT0gZWxlbUFjdGl2ZSkge1xuICAgICAgICBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1BY3RpdmUsIHsgdG9nZ2xlOiBmYWxzZSB9KS5oaWRlKClcbiAgICAgIH1cblxuICAgICAgaWYgKCFhY3RpdmVzRGF0YSkge1xuICAgICAgICBEYXRhLnNldChlbGVtQWN0aXZlLCBEQVRBX0tFWSwgbnVsbClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5fZ2V0RGltZW5zaW9uKClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpXG5cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAwXG5cbiAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0cnVlKVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWVcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0lORylcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1cpXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnXG5cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOKVxuICAgIH1cblxuICAgIGNvbnN0IGNhcGl0YWxpemVkRGltZW5zaW9uID0gZGltZW5zaW9uWzBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoMSlcbiAgICBjb25zdCBzY3JvbGxTaXplID0gYHNjcm9sbCR7Y2FwaXRhbGl6ZWREaW1lbnNpb259YFxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSlcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50W3Njcm9sbFNpemVdfXB4YFxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICF0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFKVxuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpXG5cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RpbWVuc2lvbl19cHhgXG5cbiAgICByZWZsb3codGhpcy5fZWxlbWVudClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0UsIENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IHRyaWdnZXJBcnJheUxlbmd0aCA9IHRoaXMuX3RyaWdnZXJBcnJheS5sZW5ndGhcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyaWdnZXJBcnJheUxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy5fdHJpZ2dlckFycmF5W2ldXG4gICAgICBjb25zdCBlbGVtID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0cmlnZ2VyKVxuXG4gICAgICBpZiAoZWxlbSAmJiAhdGhpcy5faXNTaG93bihlbGVtKSkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW3RyaWdnZXJdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0UpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJydcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gIH1cblxuICBfaXNTaG93bihlbGVtZW50ID0gdGhpcy5fZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi5jb25maWdcbiAgICB9XG4gICAgY29uZmlnLnRvZ2dsZSA9IEJvb2xlYW4oY29uZmlnLnRvZ2dsZSkgLy8gQ29lcmNlIHN0cmluZyB2YWx1ZXNcbiAgICBjb25maWcucGFyZW50ID0gZ2V0RWxlbWVudChjb25maWcucGFyZW50KVxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9nZXREaW1lbnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfSE9SSVpPTlRBTCkgPyBXSURUSCA6IEhFSUdIVFxuICB9XG5cbiAgX2luaXRpYWxpemVDaGlsZHJlbigpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuID0gU2VsZWN0b3JFbmdpbmUuZmluZChDTEFTU19OQU1FX0RFRVBFUl9DSElMRFJFTiwgdGhpcy5fY29uZmlnLnBhcmVudClcbiAgICBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFLCB0aGlzLl9jb25maWcucGFyZW50KS5maWx0ZXIoZWxlbSA9PiAhY2hpbGRyZW4uaW5jbHVkZXMoZWxlbSkpXG4gICAgICAuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpXG5cbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKFtlbGVtZW50XSwgdGhpcy5faXNTaG93bihzZWxlY3RlZCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRyaWdnZXJBcnJheSwgaXNPcGVuKSB7XG4gICAgaWYgKCF0cmlnZ2VyQXJyYXkubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cmlnZ2VyQXJyYXkuZm9yRWFjaChlbGVtID0+IHtcbiAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0VEKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0VEKVxuICAgICAgfVxuXG4gICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIGlzT3BlbilcbiAgICB9KVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IF9jb25maWcgPSB7fVxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnICYmIC9zaG93fGhpZGUvLnRlc3QoY29uZmlnKSkge1xuICAgICAgICBfY29uZmlnLnRvZ2dsZSA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIF9jb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICAgIH1cblxuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIC8vIHByZXZlbnREZWZhdWx0IG9ubHkgZm9yIDxhPiBlbGVtZW50cyAod2hpY2ggY2hhbmdlIHRoZSBVUkwpIG5vdCBpbnNpZGUgdGhlIGNvbGxhcHNpYmxlIGVsZW1lbnRcbiAgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lID09PSAnQScgfHwgKGV2ZW50LmRlbGVnYXRlVGFyZ2V0ICYmIGV2ZW50LmRlbGVnYXRlVGFyZ2V0LnRhZ05hbWUgPT09ICdBJykpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcylcbiAgY29uc3Qgc2VsZWN0b3JFbGVtZW50cyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpXG5cbiAgc2VsZWN0b3JFbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwgeyB0b2dnbGU6IGZhbHNlIH0pLnRvZ2dsZSgpXG4gIH0pXG59KVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuQ29sbGFwc2UgdG8galF1ZXJ5IG9ubHkgaWYgalF1ZXJ5IGlzIHByZXNlbnRcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ29sbGFwc2UpXG5cbmV4cG9ydCBkZWZhdWx0IENvbGxhcHNlXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IGRyb3Bkb3duLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0ICogYXMgUG9wcGVyIGZyb20gJ0Bwb3BwZXJqcy9jb3JlJ1xuXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGdldEVsZW1lbnQsXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsXG4gIGdldE5leHRBY3RpdmVFbGVtZW50LFxuICBpc0Rpc2FibGVkLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMLFxuICBpc1Zpc2libGUsXG4gIG5vb3AsXG4gIHR5cGVDaGVja0NvbmZpZ1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdkcm9wZG93bidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmRyb3Bkb3duJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IEVTQ0FQRV9LRVkgPSAnRXNjYXBlJ1xuY29uc3QgU1BBQ0VfS0VZID0gJ1NwYWNlJ1xuY29uc3QgVEFCX0tFWSA9ICdUYWInXG5jb25zdCBBUlJPV19VUF9LRVkgPSAnQXJyb3dVcCdcbmNvbnN0IEFSUk9XX0RPV05fS0VZID0gJ0Fycm93RG93bidcbmNvbnN0IFJJR0hUX01PVVNFX0JVVFRPTiA9IDIgLy8gTW91c2VFdmVudC5idXR0b24gdmFsdWUgZm9yIHRoZSBzZWNvbmRhcnkgYnV0dG9uLCB1c3VhbGx5IHRoZSByaWdodCBidXR0b25cblxuY29uc3QgUkVHRVhQX0tFWURPV04gPSBuZXcgUmVnRXhwKGAke0FSUk9XX1VQX0tFWX18JHtBUlJPV19ET1dOX0tFWX18JHtFU0NBUEVfS0VZfWApXG5cbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSA9IGBrZXlkb3duJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVZFTlRfS0VZVVBfREFUQV9BUEkgPSBga2V5dXAke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QVVAgPSAnZHJvcHVwJ1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRU5EID0gJ2Ryb3BlbmQnXG5jb25zdCBDTEFTU19OQU1FX0RST1BTVEFSVCA9ICdkcm9wc3RhcnQnXG5jb25zdCBDTEFTU19OQU1FX05BVkJBUiA9ICduYXZiYXInXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJdJ1xuY29uc3QgU0VMRUNUT1JfTUVOVSA9ICcuZHJvcGRvd24tbWVudSdcbmNvbnN0IFNFTEVDVE9SX05BVkJBUl9OQVYgPSAnLm5hdmJhci1uYXYnXG5jb25zdCBTRUxFQ1RPUl9WSVNJQkxFX0lURU1TID0gJy5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJ1xuXG5jb25zdCBQTEFDRU1FTlRfVE9QID0gaXNSVEwoKSA/ICd0b3AtZW5kJyA6ICd0b3Atc3RhcnQnXG5jb25zdCBQTEFDRU1FTlRfVE9QRU5EID0gaXNSVEwoKSA/ICd0b3Atc3RhcnQnIDogJ3RvcC1lbmQnXG5jb25zdCBQTEFDRU1FTlRfQk9UVE9NID0gaXNSVEwoKSA/ICdib3R0b20tZW5kJyA6ICdib3R0b20tc3RhcnQnXG5jb25zdCBQTEFDRU1FTlRfQk9UVE9NRU5EID0gaXNSVEwoKSA/ICdib3R0b20tc3RhcnQnIDogJ2JvdHRvbS1lbmQnXG5jb25zdCBQTEFDRU1FTlRfUklHSFQgPSBpc1JUTCgpID8gJ2xlZnQtc3RhcnQnIDogJ3JpZ2h0LXN0YXJ0J1xuY29uc3QgUExBQ0VNRU5UX0xFRlQgPSBpc1JUTCgpID8gJ3JpZ2h0LXN0YXJ0JyA6ICdsZWZ0LXN0YXJ0J1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBvZmZzZXQ6IFswLCAyXSxcbiAgYm91bmRhcnk6ICdjbGlwcGluZ1BhcmVudHMnLFxuICByZWZlcmVuY2U6ICd0b2dnbGUnLFxuICBkaXNwbGF5OiAnZHluYW1pYycsXG4gIHBvcHBlckNvbmZpZzogbnVsbCxcbiAgYXV0b0Nsb3NlOiB0cnVlXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBvZmZzZXQ6ICcoYXJyYXl8c3RyaW5nfGZ1bmN0aW9uKScsXG4gIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudHxvYmplY3QpJyxcbiAgZGlzcGxheTogJ3N0cmluZycsXG4gIHBvcHBlckNvbmZpZzogJyhudWxsfG9iamVjdHxmdW5jdGlvbiknLFxuICBhdXRvQ2xvc2U6ICcoYm9vbGVhbnxzdHJpbmcpJ1xufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgRHJvcGRvd24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudClcblxuICAgIHRoaXMuX3BvcHBlciA9IG51bGxcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX21lbnUgPSB0aGlzLl9nZXRNZW51RWxlbWVudCgpXG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgdG9nZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duKCkgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdygpXG4gIH1cblxuICBzaG93KCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8IHRoaXMuX2lzU2hvd24odGhpcy5fbWVudSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVywgcmVsYXRlZFRhcmdldClcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gRHJvcGRvd24uZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudClcbiAgICAvLyBUb3RhbGx5IGRpc2FibGUgUG9wcGVyIGZvciBEcm9wZG93bnMgaW4gTmF2YmFyXG4gICAgaWYgKHRoaXMuX2luTmF2YmFyKSB7XG4gICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKHRoaXMuX21lbnUsICdwb3BwZXInLCAnbm9uZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHBlcihwYXJlbnQpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmXG4gICAgICAhcGFyZW50LmNsb3Nlc3QoU0VMRUNUT1JfTkFWQkFSX05BVikpIHtcbiAgICAgIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKVxuICAgICAgICAuZm9yRWFjaChlbGVtID0+IEV2ZW50SGFuZGxlci5vbihlbGVtLCAnbW91c2VvdmVyJywgbm9vcCkpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKVxuXG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCByZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzLl9lbGVtZW50KSB8fCAhdGhpcy5faXNTaG93bih0aGlzLl9tZW51KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9XG5cbiAgICB0aGlzLl9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgdXBkYXRlKCkge1xuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKClcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKClcbiAgICB9XG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSwgcmVsYXRlZFRhcmdldClcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbilcbiAgICAgICAgLmZvckVhY2goZWxlbSA9PiBFdmVudEhhbmRsZXIub2ZmKGVsZW0sICdtb3VzZW92ZXInLCBub29wKSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJylcbiAgICBNYW5pcHVsYXRvci5yZW1vdmVEYXRhQXR0cmlidXRlKHRoaXMuX21lbnUsICdwb3BwZXInKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiwgcmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi5jb25maWdcbiAgICB9XG5cbiAgICB0eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0JyAmJiAhaXNFbGVtZW50KGNvbmZpZy5yZWZlcmVuY2UpICYmXG4gICAgICB0eXBlb2YgY29uZmlnLnJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIC8vIFBvcHBlciB2aXJ0dWFsIGVsZW1lbnRzIHJlcXVpcmUgYSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgbWV0aG9kXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke05BTUUudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcInJlZmVyZW5jZVwiIHByb3ZpZGVkIHR5cGUgXCJvYmplY3RcIiB3aXRob3V0IGEgcmVxdWlyZWQgXCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIiBtZXRob2QuYClcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY3JlYXRlUG9wcGVyKHBhcmVudCkge1xuICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyBkcm9wZG93bnMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKVxuICAgIH1cblxuICAgIGxldCByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdwYXJlbnQnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gcGFyZW50XG4gICAgfSBlbHNlIGlmIChpc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSBnZXRFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9jb25maWcucmVmZXJlbmNlXG4gICAgfVxuXG4gICAgY29uc3QgcG9wcGVyQ29uZmlnID0gdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKClcbiAgICBjb25zdCBpc0Rpc3BsYXlTdGF0aWMgPSBwb3BwZXJDb25maWcubW9kaWZpZXJzLmZpbmQobW9kaWZpZXIgPT4gbW9kaWZpZXIubmFtZSA9PT0gJ2FwcGx5U3R5bGVzJyAmJiBtb2RpZmllci5lbmFibGVkID09PSBmYWxzZSlcblxuICAgIHRoaXMuX3BvcHBlciA9IFBvcHBlci5jcmVhdGVQb3BwZXIocmVmZXJlbmNlRWxlbWVudCwgdGhpcy5fbWVudSwgcG9wcGVyQ29uZmlnKVxuXG4gICAgaWYgKGlzRGlzcGxheVN0YXRpYykge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJywgJ3N0YXRpYycpXG4gICAgfVxuICB9XG5cbiAgX2lzU2hvd24oZWxlbWVudCA9IHRoaXMuX2VsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XKVxuICB9XG5cbiAgX2dldE1lbnVFbGVtZW50KCkge1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5uZXh0KHRoaXMuX2VsZW1lbnQsIFNFTEVDVE9SX01FTlUpWzBdXG4gIH1cblxuICBfZ2V0UGxhY2VtZW50KCkge1xuICAgIGNvbnN0IHBhcmVudERyb3Bkb3duID0gdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlXG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUEVORCkpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfUklHSFRcbiAgICB9XG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFNUQVJUKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9MRUZUXG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byB0cmltIHRoZSB2YWx1ZSBiZWNhdXNlIGN1c3RvbSBwcm9wZXJ0aWVzIGNhbiBhbHNvIGluY2x1ZGUgc3BhY2VzXG4gICAgY29uc3QgaXNFbmQgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lbnUpLmdldFByb3BlcnR5VmFsdWUoJy0tYnMtcG9zaXRpb24nKS50cmltKCkgPT09ICdlbmQnXG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFVQKSkge1xuICAgICAgcmV0dXJuIGlzRW5kID8gUExBQ0VNRU5UX1RPUEVORCA6IFBMQUNFTUVOVF9UT1BcbiAgICB9XG5cbiAgICByZXR1cm4gaXNFbmQgPyBQTEFDRU1FTlRfQk9UVE9NRU5EIDogUExBQ0VNRU5UX0JPVFRPTVxuICB9XG5cbiAgX2RldGVjdE5hdmJhcigpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbG9zZXN0KGAuJHtDTEFTU19OQU1FX05BVkJBUn1gKSAhPT0gbnVsbFxuICB9XG5cbiAgX2dldE9mZnNldCgpIHtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gdGhpcy5fY29uZmlnXG5cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBvZmZzZXQuc3BsaXQoJywnKS5tYXAodmFsID0+IE51bWJlci5wYXJzZUludCh2YWwsIDEwKSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9mZnNldFxuICB9XG5cbiAgX2dldFBvcHBlckNvbmZpZygpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgbW9kaWZpZXJzOiBbe1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpXG4gICAgICAgIH1cbiAgICAgIH1dXG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSBQb3BwZXIgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5kaXNwbGF5ID09PSAnc3RhdGljJykge1xuICAgICAgZGVmYXVsdEJzUG9wcGVyQ29uZmlnLm1vZGlmaWVycyA9IFt7XG4gICAgICAgIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICB9XVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi4odHlwZW9mIHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcgPT09ICdmdW5jdGlvbicgPyB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnKGRlZmF1bHRCc1BvcHBlckNvbmZpZykgOiB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnKVxuICAgIH1cbiAgfVxuXG4gIF9zZWxlY3RNZW51SXRlbSh7IGtleSwgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBpdGVtcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfVklTSUJMRV9JVEVNUywgdGhpcy5fbWVudSkuZmlsdGVyKGlzVmlzaWJsZSlcblxuICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBpZiB0YXJnZXQgaXNuJ3QgaW5jbHVkZWQgaW4gaXRlbXMgKGUuZy4gd2hlbiBleHBhbmRpbmcgdGhlIGRyb3Bkb3duKVxuICAgIC8vIGFsbG93IGN5Y2xpbmcgdG8gZ2V0IHRoZSBsYXN0IGl0ZW0gaW4gY2FzZSBrZXkgZXF1YWxzIEFSUk9XX1VQX0tFWVxuICAgIGdldE5leHRBY3RpdmVFbGVtZW50KGl0ZW1zLCB0YXJnZXQsIGtleSA9PT0gQVJST1dfRE9XTl9LRVksICFpdGVtcy5pbmNsdWRlcyh0YXJnZXQpKS5mb2N1cygpXG4gIH1cblxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBjbGVhck1lbnVzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50ICYmIChldmVudC5idXR0b24gPT09IFJJR0hUX01PVVNFX0JVVFRPTiB8fCAoZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgIT09IFRBQl9LRVkpKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdG9nZ2xlcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEUpXG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdG9nZ2xlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgY29udGV4dCA9IERyb3Bkb3duLmdldEluc3RhbmNlKHRvZ2dsZXNbaV0pXG4gICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKCFjb250ZXh0Ll9pc1Nob3duKCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogY29udGV4dC5fZWxlbWVudFxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgY29tcG9zZWRQYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKClcbiAgICAgICAgY29uc3QgaXNNZW51VGFyZ2V0ID0gY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX21lbnUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb21wb3NlZFBhdGguaW5jbHVkZXMoY29udGV4dC5fZWxlbWVudCkgfHxcbiAgICAgICAgICAoY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ2luc2lkZScgJiYgIWlzTWVudVRhcmdldCkgfHxcbiAgICAgICAgICAoY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ291dHNpZGUnICYmIGlzTWVudVRhcmdldClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRhYiBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIGRyb3Bkb3duIG1lbnUgb3IgZXZlbnRzIGZyb20gY29udGFpbmVkIGlucHV0cyBzaG91bGRuJ3QgY2xvc2UgdGhlIG1lbnVcbiAgICAgICAgaWYgKGNvbnRleHQuX21lbnUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAoKGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQua2V5ID09PSBUQUJfS0VZKSB8fCAvaW5wdXR8c2VsZWN0fG9wdGlvbnx0ZXh0YXJlYXxmb3JtL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldC5jbGlja0V2ZW50ID0gZXZlbnRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldClcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0UGFyZW50RnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgIHJldHVybiBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpIHx8IGVsZW1lbnQucGFyZW50Tm9kZVxuICB9XG5cbiAgc3RhdGljIGRhdGFBcGlLZXlkb3duSGFuZGxlcihldmVudCkge1xuICAgIC8vIElmIG5vdCBpbnB1dC90ZXh0YXJlYTpcbiAgICAvLyAgLSBBbmQgbm90IGEga2V5IGluIFJFR0VYUF9LRVlET1dOID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAvLyBJZiBpbnB1dC90ZXh0YXJlYTpcbiAgICAvLyAgLSBJZiBzcGFjZSBrZXkgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIC8vICAtIElmIGtleSBpcyBvdGhlciB0aGFuIGVzY2FwZVxuICAgIC8vICAgIC0gSWYga2V5IGlzIG5vdCB1cCBvciBkb3duID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAvLyAgICAtIElmIHRyaWdnZXIgaW5zaWRlIHRoZSBtZW51ID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkgP1xuICAgICAgZXZlbnQua2V5ID09PSBTUEFDRV9LRVkgfHwgKGV2ZW50LmtleSAhPT0gRVNDQVBFX0tFWSAmJlxuICAgICAgKChldmVudC5rZXkgIT09IEFSUk9XX0RPV05fS0VZICYmIGV2ZW50LmtleSAhPT0gQVJST1dfVVBfS0VZKSB8fFxuICAgICAgICBldmVudC50YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9NRU5VKSkpIDpcbiAgICAgICFSRUdFWFBfS0VZRE9XTi50ZXN0KGV2ZW50LmtleSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgaWYgKCFpc0FjdGl2ZSAmJiBldmVudC5rZXkgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGdldFRvZ2dsZUJ1dHRvbiA9IHRoaXMubWF0Y2hlcyhTRUxFQ1RPUl9EQVRBX1RPR0dMRSkgPyB0aGlzIDogU2VsZWN0b3JFbmdpbmUucHJldih0aGlzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSlbMF1cbiAgICBjb25zdCBpbnN0YW5jZSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UoZ2V0VG9nZ2xlQnV0dG9uKVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gRVNDQVBFX0tFWSkge1xuICAgICAgaW5zdGFuY2UuaGlkZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBBUlJPV19VUF9LRVkgfHwgZXZlbnQua2V5ID09PSBBUlJPV19ET1dOX0tFWSkge1xuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICBpbnN0YW5jZS5zaG93KClcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UuX3NlbGVjdE1lbnVJdGVtKGV2ZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFpc0FjdGl2ZSB8fCBldmVudC5rZXkgPT09IFNQQUNFX0tFWSkge1xuICAgICAgRHJvcGRvd24uY2xlYXJNZW51cygpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgRHJvcGRvd24uZGF0YUFwaUtleWRvd25IYW5kbGVyKVxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJLCBTRUxFQ1RPUl9NRU5VLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBEcm9wZG93bi5jbGVhck1lbnVzKVxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlVUF9EQVRBX0FQSSwgRHJvcGRvd24uY2xlYXJNZW51cylcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpLnRvZ2dsZSgpXG59KVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuRHJvcGRvd24gdG8galF1ZXJ5IG9ubHkgaWYgalF1ZXJ5IGlzIHByZXNlbnRcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oRHJvcGRvd24pXG5cbmV4cG9ydCBkZWZhdWx0IERyb3Bkb3duXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IHV0aWwvc2Nyb2xsQmFyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi4vZG9tL21hbmlwdWxhdG9yJ1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSAnLi9pbmRleCdcblxuY29uc3QgU0VMRUNUT1JfRklYRURfQ09OVEVOVCA9ICcuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wJ1xuY29uc3QgU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQgPSAnLnN0aWNreS10b3AnXG5cbmNsYXNzIFNjcm9sbEJhckhlbHBlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2VsZW1lbnQgPSBkb2N1bWVudC5ib2R5XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2lubmVyV2lkdGgjdXNhZ2Vfbm90ZXNcbiAgICBjb25zdCBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgcmV0dXJuIE1hdGguYWJzKHdpbmRvdy5pbm5lcldpZHRoIC0gZG9jdW1lbnRXaWR0aClcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKClcbiAgICB0aGlzLl9kaXNhYmxlT3ZlckZsb3coKVxuICAgIC8vIGdpdmUgcGFkZGluZyB0byBlbGVtZW50IHRvIGJhbGFuY2UgdGhlIGhpZGRlbiBzY3JvbGxiYXIgd2lkdGhcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCAncGFkZGluZ1JpZ2h0JywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKVxuICAgIC8vIHRyaWNrOiBXZSBhZGp1c3QgcG9zaXRpdmUgcGFkZGluZ1JpZ2h0IGFuZCBuZWdhdGl2ZSBtYXJnaW5SaWdodCB0byBzdGlja3ktdG9wIGVsZW1lbnRzIHRvIGtlZXAgc2hvd2luZyBmdWxsd2lkdGhcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9GSVhFRF9DT05URU5ULCAncGFkZGluZ1JpZ2h0JywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKVxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCAnbWFyZ2luUmlnaHQnLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlIC0gd2lkdGgpXG4gIH1cblxuICBfZGlzYWJsZU92ZXJGbG93KCkge1xuICAgIHRoaXMuX3NhdmVJbml0aWFsQXR0cmlidXRlKHRoaXMuX2VsZW1lbnQsICdvdmVyZmxvdycpXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nXG4gIH1cblxuICBfc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcCwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuZ2V0V2lkdGgoKVxuICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICBpZiAoZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGggKyBzY3JvbGxiYXJXaWR0aCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wKVxuICAgICAgY29uc3QgY2FsY3VsYXRlZFZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudClbc3R5bGVQcm9wXVxuICAgICAgZWxlbWVudC5zdHlsZVtzdHlsZVByb3BdID0gYCR7Y2FsbGJhY2soTnVtYmVyLnBhcnNlRmxvYXQoY2FsY3VsYXRlZFZhbHVlKSl9cHhgXG4gICAgfVxuXG4gICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spXG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsICdvdmVyZmxvdycpXG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCAncGFkZGluZ1JpZ2h0JylcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsICdwYWRkaW5nUmlnaHQnKVxuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsICdtYXJnaW5SaWdodCcpXG4gIH1cblxuICBfc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wKSB7XG4gICAgY29uc3QgYWN0dWFsVmFsdWUgPSBlbGVtZW50LnN0eWxlW3N0eWxlUHJvcF1cbiAgICBpZiAoYWN0dWFsVmFsdWUpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wLCBhY3R1YWxWYWx1ZSlcbiAgICB9XG4gIH1cblxuICBfcmVzZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wKSB7XG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3ApXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHN0eWxlUHJvcClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE1hbmlwdWxhdG9yLnJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wKVxuICAgICAgICBlbGVtZW50LnN0eWxlW3N0eWxlUHJvcF0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKVxuICB9XG5cbiAgX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIGNhbGxCYWNrKSB7XG4gICAgaWYgKGlzRWxlbWVudChzZWxlY3RvcikpIHtcbiAgICAgIGNhbGxCYWNrKHNlbGVjdG9yKVxuICAgIH0gZWxzZSB7XG4gICAgICBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yLCB0aGlzLl9lbGVtZW50KS5mb3JFYWNoKGNhbGxCYWNrKVxuICAgIH1cbiAgfVxuXG4gIGlzT3ZlcmZsb3dpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V2lkdGgoKSA+IDBcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTY3JvbGxCYXJIZWxwZXJcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogdXRpbC9iYWNrZHJvcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgeyBleGVjdXRlLCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uLCBnZXRFbGVtZW50LCByZWZsb3csIHR5cGVDaGVja0NvbmZpZyB9IGZyb20gJy4vaW5kZXgnXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGNsYXNzTmFtZTogJ21vZGFsLWJhY2tkcm9wJyxcbiAgaXNWaXNpYmxlOiB0cnVlLCAvLyBpZiBmYWxzZSwgd2UgdXNlIHRoZSBiYWNrZHJvcCBoZWxwZXIgd2l0aG91dCBhZGRpbmcgYW55IGVsZW1lbnQgdG8gdGhlIGRvbVxuICBpc0FuaW1hdGVkOiBmYWxzZSxcbiAgcm9vdEVsZW1lbnQ6ICdib2R5JywgLy8gZ2l2ZSB0aGUgY2hvaWNlIHRvIHBsYWNlIGJhY2tkcm9wIHVuZGVyIGRpZmZlcmVudCBlbGVtZW50c1xuICBjbGlja0NhbGxiYWNrOiBudWxsXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICBpc1Zpc2libGU6ICdib29sZWFuJyxcbiAgaXNBbmltYXRlZDogJ2Jvb2xlYW4nLFxuICByb290RWxlbWVudDogJyhlbGVtZW50fHN0cmluZyknLFxuICBjbGlja0NhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJ1xufVxuY29uc3QgTkFNRSA9ICdiYWNrZHJvcCdcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5cbmNvbnN0IEVWRU5UX01PVVNFRE9XTiA9IGBtb3VzZWRvd24uYnMuJHtOQU1FfWBcblxuY2xhc3MgQmFja2Ryb3Age1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZVxuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsXG4gIH1cblxuICBzaG93KGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fYXBwZW5kKClcblxuICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgcmVmbG93KHRoaXMuX2dldEVsZW1lbnQoKSlcbiAgICB9XG5cbiAgICB0aGlzLl9nZXRFbGVtZW50KCkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG5cbiAgICB0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgpID0+IHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgfSlcbiAgfVxuXG4gIGhpZGUoY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5pc1Zpc2libGUpIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9nZXRFbGVtZW50KCkuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICB0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgpID0+IHtcbiAgICAgIHRoaXMuZGlzcG9zZSgpXG4gICAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgIH0pXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldEVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50KSB7XG4gICAgICBjb25zdCBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgICBiYWNrZHJvcC5jbGFzc05hbWUgPSB0aGlzLl9jb25maWcuY2xhc3NOYW1lXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgICAgYmFja2Ryb3AuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBiYWNrZHJvcFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50XG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLkRlZmF1bHQsXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG5cbiAgICAvLyB1c2UgZ2V0RWxlbWVudCgpIHdpdGggdGhlIGRlZmF1bHQgXCJib2R5XCIgdG8gZ2V0IGEgZnJlc2ggRWxlbWVudCBvbiBlYWNoIGluc3RhbnRpYXRpb25cbiAgICBjb25maWcucm9vdEVsZW1lbnQgPSBnZXRFbGVtZW50KGNvbmZpZy5yb290RWxlbWVudClcbiAgICB0eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCBEZWZhdWx0VHlwZSlcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfYXBwZW5kKCkge1xuICAgIGlmICh0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jb25maWcucm9vdEVsZW1lbnQuYXBwZW5kKHRoaXMuX2dldEVsZW1lbnQoKSlcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9nZXRFbGVtZW50KCksIEVWRU5UX01PVVNFRE9XTiwgKCkgPT4ge1xuICAgICAgZXhlY3V0ZSh0aGlzLl9jb25maWcuY2xpY2tDYWxsYmFjaylcbiAgICB9KVxuXG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IHRydWVcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTilcblxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKClcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2VcbiAgfVxuXG4gIF9lbXVsYXRlQW5pbWF0aW9uKGNhbGxiYWNrKSB7XG4gICAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgdGhpcy5fZ2V0RWxlbWVudCgpLCB0aGlzLl9jb25maWcuaXNBbmltYXRlZClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCYWNrZHJvcFxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiB1dGlsL2ZvY3VzdHJhcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCB7IHR5cGVDaGVja0NvbmZpZyB9IGZyb20gJy4vaW5kZXgnXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIHRyYXBFbGVtZW50OiBudWxsLCAvLyBUaGUgZWxlbWVudCB0byB0cmFwIGZvY3VzIGluc2lkZSBvZlxuICBhdXRvZm9jdXM6IHRydWVcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIHRyYXBFbGVtZW50OiAnZWxlbWVudCcsXG4gIGF1dG9mb2N1czogJ2Jvb2xlYW4nXG59XG5cbmNvbnN0IE5BTUUgPSAnZm9jdXN0cmFwJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuZm9jdXN0cmFwJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4gPSBgZm9jdXNpbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fVEFCID0gYGtleWRvd24udGFiJHtFVkVOVF9LRVl9YFxuXG5jb25zdCBUQUJfS0VZID0gJ1RhYidcbmNvbnN0IFRBQl9OQVZfRk9SV0FSRCA9ICdmb3J3YXJkJ1xuY29uc3QgVEFCX05BVl9CQUNLV0FSRCA9ICdiYWNrd2FyZCdcblxuY2xhc3MgRm9jdXNUcmFwIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IG51bGxcbiAgfVxuXG4gIGFjdGl2YXRlKCkge1xuICAgIGNvbnN0IHsgdHJhcEVsZW1lbnQsIGF1dG9mb2N1cyB9ID0gdGhpcy5fY29uZmlnXG5cbiAgICBpZiAodGhpcy5faXNBY3RpdmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhdXRvZm9jdXMpIHtcbiAgICAgIHRyYXBFbGVtZW50LmZvY3VzKClcbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkpIC8vIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlRm9jdXNpbihldmVudCkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX1RBQiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihldmVudCkpXG5cbiAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWVcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZVxuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSlcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfaGFuZGxlRm9jdXNpbihldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBldmVudFxuICAgIGNvbnN0IHsgdHJhcEVsZW1lbnQgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKHRhcmdldCA9PT0gZG9jdW1lbnQgfHwgdGFyZ2V0ID09PSB0cmFwRWxlbWVudCB8fCB0cmFwRWxlbWVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50cyA9IFNlbGVjdG9yRW5naW5lLmZvY3VzYWJsZUNoaWxkcmVuKHRyYXBFbGVtZW50KVxuXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdHJhcEVsZW1lbnQuZm9jdXMoKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9PT0gVEFCX05BVl9CQUNLV0FSRCkge1xuICAgICAgZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV0uZm9jdXMoKVxuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50c1swXS5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBUQUJfS0VZKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gZXZlbnQuc2hpZnRLZXkgPyBUQUJfTkFWX0JBQ0tXQVJEIDogVEFCX05BVl9GT1JXQVJEXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLkRlZmF1bHQsXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvY3VzVHJhcFxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiBtb2RhbC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcixcbiAgaXNSVEwsXG4gIGlzVmlzaWJsZSxcbiAgcmVmbG93LFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBTY3JvbGxCYXJIZWxwZXIgZnJvbSAnLi91dGlsL3Njcm9sbGJhcidcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAnLi91dGlsL2JhY2tkcm9wJ1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuL3V0aWwvZm9jdXN0cmFwJ1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucydcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdtb2RhbCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLm1vZGFsJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5jb25zdCBFU0NBUEVfS0VZID0gJ0VzY2FwZSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYmFja2Ryb3A6IHRydWUsXG4gIGtleWJvYXJkOiB0cnVlLFxuICBmb2N1czogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYmFja2Ryb3A6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgZm9jdXM6ICdib29sZWFuJ1xufVxuXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFX1BSRVZFTlRFRCA9IGBoaWRlUHJldmVudGVkJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUkVTSVpFID0gYHJlc2l6ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RJU01JU1MgPSBgY2xpY2suZGlzbWlzcyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRVVQX0RJU01JU1MgPSBgbW91c2V1cC5kaXNtaXNzJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MgPSBgbW91c2Vkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9PUEVOID0gJ21vZGFsLW9wZW4nXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFUSUMgPSAnbW9kYWwtc3RhdGljJ1xuXG5jb25zdCBPUEVOX1NFTEVDVE9SID0gJy5tb2RhbC5zaG93J1xuY29uc3QgU0VMRUNUT1JfRElBTE9HID0gJy5tb2RhbC1kaWFsb2cnXG5jb25zdCBTRUxFQ1RPUl9NT0RBTF9CT0RZID0gJy5tb2RhbC1ib2R5J1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIl0nXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBNb2RhbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50KVxuXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9kaWFsb2cgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RJQUxPRywgdGhpcy5fZWxlbWVudClcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpXG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpXG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlXG4gICAgdGhpcy5faWdub3JlQmFja2Ryb3BDbGljayA9IGZhbHNlXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICB0aGlzLl9zY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFySGVscGVyKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBpZiAodGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1csIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICB9KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZVxuXG4gICAgaWYgKHRoaXMuX2lzQW5pbWF0ZWQoKSkge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZVxuICAgIH1cblxuICAgIHRoaXMuX3Njcm9sbEJhci5oaWRlKClcblxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX09QRU4pXG5cbiAgICB0aGlzLl9hZGp1c3REaWFsb2coKVxuXG4gICAgdGhpcy5fc2V0RXNjYXBlRXZlbnQoKVxuICAgIHRoaXMuX3NldFJlc2l6ZUV2ZW50KClcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9kaWFsb2csIEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTLCAoKSA9PiB7XG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFVVBfRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLl9lbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5faWdub3JlQmFja2Ryb3BDbGljayA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgdGhpcy5fc2hvd0JhY2tkcm9wKCgpID0+IHRoaXMuX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFKVxuXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICBjb25zdCBpc0FuaW1hdGVkID0gdGhpcy5faXNBbmltYXRlZCgpXG5cbiAgICBpZiAoaXNBbmltYXRlZCkge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZVxuICAgIH1cblxuICAgIHRoaXMuX3NldEVzY2FwZUV2ZW50KClcbiAgICB0aGlzLl9zZXRSZXNpemVFdmVudCgpXG5cbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTElDS19ESVNNSVNTKVxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZGlhbG9nLCBFVkVOVF9NT1VTRURPV05fRElTTUlTUylcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4gdGhpcy5faGlkZU1vZGFsKCksIHRoaXMuX2VsZW1lbnQsIGlzQW5pbWF0ZWQpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIFt3aW5kb3csIHRoaXMuX2RpYWxvZ11cbiAgICAgIC5mb3JFYWNoKGh0bWxFbGVtZW50ID0+IEV2ZW50SGFuZGxlci5vZmYoaHRtbEVsZW1lbnQsIEVWRU5UX0tFWSkpXG5cbiAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKClcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICBoYW5kbGVVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfaW5pdGlhbGl6ZUJhY2tEcm9wKCkge1xuICAgIHJldHVybiBuZXcgQmFja2Ryb3Aoe1xuICAgICAgaXNWaXNpYmxlOiBCb29sZWFuKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCksIC8vICdzdGF0aWMnIG9wdGlvbiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSwgYW5kIGJvb2xlYW5zIHdpbGwga2VlcCB0aGVpciB2YWx1ZVxuICAgICAgaXNBbmltYXRlZDogdGhpcy5faXNBbmltYXRlZCgpXG4gICAgfSlcbiAgfVxuXG4gIF9pbml0aWFsaXplRm9jdXNUcmFwKCkge1xuICAgIHJldHVybiBuZXcgRm9jdXNUcmFwKHtcbiAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgfSlcbiAgfVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLk1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDoge30pXG4gICAgfVxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9zaG93RWxlbWVudChyZWxhdGVkVGFyZ2V0KSB7XG4gICAgY29uc3QgaXNBbmltYXRlZCA9IHRoaXMuX2lzQW5pbWF0ZWQoKVxuICAgIGNvbnN0IG1vZGFsQm9keSA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfTU9EQUxfQk9EWSwgdGhpcy5fZGlhbG9nKVxuXG4gICAgaWYgKCF0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUgfHwgdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgLy8gRG9uJ3QgbW92ZSBtb2RhbCdzIERPTSBwb3NpdGlvblxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy5fZWxlbWVudClcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJylcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJylcbiAgICB0aGlzLl9lbGVtZW50LnNjcm9sbFRvcCA9IDBcblxuICAgIGlmIChtb2RhbEJvZHkpIHtcbiAgICAgIG1vZGFsQm9keS5zY3JvbGxUb3AgPSAwXG4gICAgfVxuXG4gICAgaWYgKGlzQW5pbWF0ZWQpIHtcbiAgICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBjb25zdCB0cmFuc2l0aW9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmZvY3VzKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzdHJhcC5hY3RpdmF0ZSgpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2sodHJhbnNpdGlvbkNvbXBsZXRlLCB0aGlzLl9kaWFsb2csIGlzQW5pbWF0ZWQpXG4gIH1cblxuICBfc2V0RXNjYXBlRXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24pIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCAmJiBldmVudC5rZXkgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fY29uZmlnLmtleWJvYXJkICYmIGV2ZW50LmtleSA9PT0gRVNDQVBFX0tFWSkge1xuICAgICAgICAgIHRoaXMuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUylcbiAgICB9XG4gIH1cblxuICBfc2V0UmVzaXplRXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24pIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX1JFU0laRSwgKCkgPT4gdGhpcy5fYWRqdXN0RGlhbG9nKCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYod2luZG93LCBFVkVOVF9SRVNJWkUpXG4gICAgfVxuICB9XG5cbiAgX2hpZGVNb2RhbCgpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKVxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJylcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICB0aGlzLl9iYWNrZHJvcC5oaWRlKCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX09QRU4pXG4gICAgICB0aGlzLl9yZXNldEFkanVzdG1lbnRzKClcbiAgICAgIHRoaXMuX3Njcm9sbEJhci5yZXNldCgpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pXG4gICAgfSlcbiAgfVxuXG4gIF9zaG93QmFja2Ryb3AoY2FsbGJhY2spIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xJQ0tfRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lnbm9yZUJhY2tkcm9wQ2xpY2spIHtcbiAgICAgICAgdGhpcy5faWdub3JlQmFja2Ryb3BDbGljayA9IGZhbHNlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuX2JhY2tkcm9wLnNob3coY2FsbGJhY2spXG4gIH1cblxuICBfaXNBbmltYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKVxuICB9XG5cbiAgX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQpXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB7IGNsYXNzTGlzdCwgc2Nyb2xsSGVpZ2h0LCBzdHlsZSB9ID0gdGhpcy5fZWxlbWVudFxuICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRcblxuICAgIC8vIHJldHVybiBpZiB0aGUgZm9sbG93aW5nIGJhY2tncm91bmQgdHJhbnNpdGlvbiBoYXNuJ3QgeWV0IGNvbXBsZXRlZFxuICAgIGlmICgoIWlzTW9kYWxPdmVyZmxvd2luZyAmJiBzdHlsZS5vdmVyZmxvd1kgPT09ICdoaWRkZW4nKSB8fCBjbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TVEFUSUMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgc3R5bGUub3ZlcmZsb3dZID0gJ2hpZGRlbidcbiAgICB9XG5cbiAgICBjbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU1RBVElDKVxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NUQVRJQylcbiAgICAgIGlmICghaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgIHN0eWxlLm92ZXJmbG93WSA9ICcnXG4gICAgICAgIH0sIHRoaXMuX2RpYWxvZylcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9kaWFsb2cpXG5cbiAgICB0aGlzLl9lbGVtZW50LmZvY3VzKClcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gdGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIF9hZGp1c3REaWFsb2coKSB7XG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gdGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLl9zY3JvbGxCYXIuZ2V0V2lkdGgoKVxuICAgIGNvbnN0IGlzQm9keU92ZXJmbG93aW5nID0gc2Nyb2xsYmFyV2lkdGggPiAwXG5cbiAgICBpZiAoKCFpc0JvZHlPdmVyZmxvd2luZyAmJiBpc01vZGFsT3ZlcmZsb3dpbmcgJiYgIWlzUlRMKCkpIHx8IChpc0JvZHlPdmVyZmxvd2luZyAmJiAhaXNNb2RhbE92ZXJmbG93aW5nICYmIGlzUlRMKCkpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgXG4gICAgfVxuXG4gICAgaWYgKChpc0JvZHlPdmVyZmxvd2luZyAmJiAhaXNNb2RhbE92ZXJmbG93aW5nICYmICFpc1JUTCgpKSB8fCAoIWlzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZyAmJiBpc1JUTCgpKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtzY3JvbGxiYXJXaWR0aH1weGBcbiAgICB9XG4gIH1cblxuICBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJydcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9ICcnXG4gIH1cblxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZywgcmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXShyZWxhdGVkVGFyZ2V0KVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcylcblxuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX1NIT1csIHNob3dFdmVudCA9PiB7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAvLyBvbmx5IHJlZ2lzdGVyIGZvY3VzIHJlc3RvcmVyIGlmIG1vZGFsIHdpbGwgYWN0dWFsbHkgZ2V0IHNob3duXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOLCAoKSA9PiB7XG4gICAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBtb2RkYWwgdG9nZ2xlciB3aGlsZSBhbm90aGVyIG9uZSBpcyBvcGVuXG4gIGNvbnN0IGFsbFJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUilcbiAgaWYgKGFsbFJlYWR5T3Blbikge1xuICAgIE1vZGFsLmdldEluc3RhbmNlKGFsbFJlYWR5T3BlbikuaGlkZSgpXG4gIH1cblxuICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG5cbiAgZGF0YS50b2dnbGUodGhpcylcbn0pXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKE1vZGFsKVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuTW9kYWwgdG8galF1ZXJ5IG9ubHkgaWYgalF1ZXJ5IGlzIHByZXNlbnRcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oTW9kYWwpXG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IG9mZmNhbnZhcy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcixcbiAgaXNEaXNhYmxlZCxcbiAgaXNWaXNpYmxlLFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IFNjcm9sbEJhckhlbHBlciBmcm9tICcuL3V0aWwvc2Nyb2xsYmFyJ1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAnLi91dGlsL2JhY2tkcm9wJ1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuL3V0aWwvZm9jdXN0cmFwJ1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucydcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdvZmZjYW52YXMnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5vZmZjYW52YXMnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkgPSBgbG9hZCR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVTQ0FQRV9LRVkgPSAnRXNjYXBlJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHNjcm9sbDogZmFsc2Vcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGJhY2tkcm9wOiAnYm9vbGVhbicsXG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHNjcm9sbDogJ2Jvb2xlYW4nXG59XG5cbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9CQUNLRFJPUCA9ICdvZmZjYW52YXMtYmFja2Ryb3AnXG5jb25zdCBPUEVOX1NFTEVDVE9SID0gJy5vZmZjYW52YXMuc2hvdydcblxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5jb25zdCBFVkVOVF9LRVlET1dOX0RJU01JU1MgPSBga2V5ZG93bi5kaXNtaXNzJHtFVkVOVF9LRVl9YFxuXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJvZmZjYW52YXNcIl0nXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBPZmZjYW52YXMgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudClcblxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlXG4gICAgdGhpcy5fYmFja2Ryb3AgPSB0aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKVxuICAgIHRoaXMuX2ZvY3VzdHJhcCA9IHRoaXMuX2luaXRpYWxpemVGb2N1c1RyYXAoKVxuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVywgeyByZWxhdGVkVGFyZ2V0IH0pXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnXG5cbiAgICB0aGlzLl9iYWNrZHJvcC5zaG93KClcblxuICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLmhpZGUoKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKClcbiAgICAgIH1cblxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04sIHsgcmVsYXRlZFRhcmdldCB9KVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsQmFjaywgdGhpcy5fZWxlbWVudCwgdHJ1ZSlcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFKVxuXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpXG4gICAgdGhpcy5fZWxlbWVudC5ibHVyKClcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKVxuXG4gICAgY29uc3QgY29tcGxldGVDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpXG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpXG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJ1xuXG4gICAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLnJlc2V0KClcbiAgICAgIH1cblxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsYmFjaywgdGhpcy5fZWxlbWVudCwgdHJ1ZSlcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpXG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKVxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLk1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDoge30pXG4gICAgfVxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBjbGFzc05hbWU6IENMQVNTX05BTUVfQkFDS0RST1AsXG4gICAgICBpc1Zpc2libGU6IHRoaXMuX2NvbmZpZy5iYWNrZHJvcCxcbiAgICAgIGlzQW5pbWF0ZWQ6IHRydWUsXG4gICAgICByb290RWxlbWVudDogdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgY2xpY2tDYWxsYmFjazogKCkgPT4gdGhpcy5oaWRlKClcbiAgICB9KVxuICB9XG5cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KVxuICB9XG5cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQgJiYgZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcylcblxuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4sICgpID0+IHtcbiAgICAvLyBmb2N1cyBvbiB0cmlnZ2VyIHdoZW4gaXQgaXMgY2xvc2VkXG4gICAgaWYgKGlzVmlzaWJsZSh0aGlzKSkge1xuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9KVxuXG4gIC8vIGF2b2lkIGNvbmZsaWN0IHdoZW4gY2xpY2tpbmcgYSB0b2dnbGVyIG9mIGFuIG9mZmNhbnZhcywgd2hpbGUgYW5vdGhlciBpcyBvcGVuXG4gIGNvbnN0IGFsbFJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUilcbiAgaWYgKGFsbFJlYWR5T3BlbiAmJiBhbGxSZWFkeU9wZW4gIT09IHRhcmdldCkge1xuICAgIE9mZmNhbnZhcy5nZXRJbnN0YW5jZShhbGxSZWFkeU9wZW4pLmhpZGUoKVxuICB9XG5cbiAgY29uc3QgZGF0YSA9IE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldClcbiAgZGF0YS50b2dnbGUodGhpcylcbn0pXG5cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+XG4gIFNlbGVjdG9yRW5naW5lLmZpbmQoT1BFTl9TRUxFQ1RPUikuZm9yRWFjaChlbCA9PiBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbCkuc2hvdygpKVxuKVxuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihPZmZjYW52YXMpXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oT2ZmY2FudmFzKVxuXG5leHBvcnQgZGVmYXVsdCBPZmZjYW52YXNcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogdXRpbC9zYW5pdGl6ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCB1cmlBdHRyaWJ1dGVzID0gbmV3IFNldChbXG4gICdiYWNrZ3JvdW5kJyxcbiAgJ2NpdGUnLFxuICAnaHJlZicsXG4gICdpdGVtdHlwZScsXG4gICdsb25nZGVzYycsXG4gICdwb3N0ZXInLFxuICAnc3JjJyxcbiAgJ3hsaW5rOmhyZWYnXG5dKVxuXG5jb25zdCBBUklBX0FUVFJJQlVURV9QQVRURVJOID0gL15hcmlhLVtcXHctXSokL2lcblxuLyoqXG4gKiBBIHBhdHRlcm4gdGhhdCByZWNvZ25pemVzIGEgY29tbW9ubHkgdXNlZnVsIHN1YnNldCBvZiBVUkxzIHRoYXQgYXJlIHNhZmUuXG4gKlxuICogU2hvdXRvdXQgdG8gQW5ndWxhciBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvMTIuMi54L3BhY2thZ2VzL2NvcmUvc3JjL3Nhbml0aXphdGlvbi91cmxfc2FuaXRpemVyLnRzXG4gKi9cbmNvbnN0IFNBRkVfVVJMX1BBVFRFUk4gPSAvXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlfHNtcyk6fFteIyYvOj9dKig/OlsjLz9dfCQpKS9pXG5cbi8qKlxuICogQSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBzYWZlIGRhdGEgVVJMcy4gT25seSBtYXRjaGVzIGltYWdlLCB2aWRlbyBhbmQgYXVkaW8gdHlwZXMuXG4gKlxuICogU2hvdXRvdXQgdG8gQW5ndWxhciBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvMTIuMi54L3BhY2thZ2VzL2NvcmUvc3JjL3Nhbml0aXphdGlvbi91cmxfc2FuaXRpemVyLnRzXG4gKi9cbmNvbnN0IERBVEFfVVJMX1BBVFRFUk4gPSAvXmRhdGE6KD86aW1hZ2VcXC8oPzpibXB8Z2lmfGpwZWd8anBnfHBuZ3x0aWZmfHdlYnApfHZpZGVvXFwvKD86bXBlZ3xtcDR8b2dnfHdlYm0pfGF1ZGlvXFwvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbXFxkKy9hLXpdKz0qJC9pXG5cbmNvbnN0IGFsbG93ZWRBdHRyaWJ1dGUgPSAoYXR0cmlidXRlLCBhbGxvd2VkQXR0cmlidXRlTGlzdCkgPT4ge1xuICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICBpZiAoYWxsb3dlZEF0dHJpYnV0ZUxpc3QuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSkpIHtcbiAgICBpZiAodXJpQXR0cmlidXRlcy5oYXMoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKFNBRkVfVVJMX1BBVFRFUk4udGVzdChhdHRyaWJ1dGUubm9kZVZhbHVlKSB8fCBEQVRBX1VSTF9QQVRURVJOLnRlc3QoYXR0cmlidXRlLm5vZGVWYWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGNvbnN0IHJlZ0V4cCA9IGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmZpbHRlcihhdHRyaWJ1dGVSZWdleCA9PiBhdHRyaWJ1dGVSZWdleCBpbnN0YW5jZW9mIFJlZ0V4cClcblxuICAvLyBDaGVjayBpZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB2YWxpZGF0ZXMgdGhlIGF0dHJpYnV0ZS5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJlZ0V4cC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChyZWdFeHBbaV0udGVzdChhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IERlZmF1bHRBbGxvd2xpc3QgPSB7XG4gIC8vIEdsb2JhbCBhdHRyaWJ1dGVzIGFsbG93ZWQgb24gYW55IHN1cHBsaWVkIGVsZW1lbnQgYmVsb3cuXG4gICcqJzogWydjbGFzcycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0sXG4gIGE6IFsndGFyZ2V0JywgJ2hyZWYnLCAndGl0bGUnLCAncmVsJ10sXG4gIGFyZWE6IFtdLFxuICBiOiBbXSxcbiAgYnI6IFtdLFxuICBjb2w6IFtdLFxuICBjb2RlOiBbXSxcbiAgZGl2OiBbXSxcbiAgZW06IFtdLFxuICBocjogW10sXG4gIGgxOiBbXSxcbiAgaDI6IFtdLFxuICBoMzogW10sXG4gIGg0OiBbXSxcbiAgaDU6IFtdLFxuICBoNjogW10sXG4gIGk6IFtdLFxuICBpbWc6IFsnc3JjJywgJ3NyY3NldCcsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gIGxpOiBbXSxcbiAgb2w6IFtdLFxuICBwOiBbXSxcbiAgcHJlOiBbXSxcbiAgczogW10sXG4gIHNtYWxsOiBbXSxcbiAgc3BhbjogW10sXG4gIHN1YjogW10sXG4gIHN1cDogW10sXG4gIHN0cm9uZzogW10sXG4gIHU6IFtdLFxuICB1bDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplSHRtbCh1bnNhZmVIdG1sLCBhbGxvd0xpc3QsIHNhbml0aXplRm4pIHtcbiAgaWYgKCF1bnNhZmVIdG1sLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnNhZmVIdG1sXG4gIH1cblxuICBpZiAoc2FuaXRpemVGbiAmJiB0eXBlb2Ygc2FuaXRpemVGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzYW5pdGl6ZUZuKHVuc2FmZUh0bWwpXG4gIH1cblxuICBjb25zdCBkb21QYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpXG4gIGNvbnN0IGNyZWF0ZWREb2N1bWVudCA9IGRvbVBhcnNlci5wYXJzZUZyb21TdHJpbmcodW5zYWZlSHRtbCwgJ3RleHQvaHRtbCcpXG4gIGNvbnN0IGVsZW1lbnRzID0gW10uY29uY2F0KC4uLmNyZWF0ZWREb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSlcblxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbaV1cbiAgICBjb25zdCBlbGVtZW50TmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhhbGxvd0xpc3QpLmluY2x1ZGVzKGVsZW1lbnROYW1lKSkge1xuICAgICAgZWxlbWVudC5yZW1vdmUoKVxuXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0ZUxpc3QgPSBbXS5jb25jYXQoLi4uZWxlbWVudC5hdHRyaWJ1dGVzKVxuICAgIGNvbnN0IGFsbG93ZWRBdHRyaWJ1dGVzID0gW10uY29uY2F0KGFsbG93TGlzdFsnKiddIHx8IFtdLCBhbGxvd0xpc3RbZWxlbWVudE5hbWVdIHx8IFtdKVxuXG4gICAgYXR0cmlidXRlTGlzdC5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICBpZiAoIWFsbG93ZWRBdHRyaWJ1dGUoYXR0cmlidXRlLCBhbGxvd2VkQXR0cmlidXRlcykpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlLm5vZGVOYW1lKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3JlYXRlZERvY3VtZW50LmJvZHkuaW5uZXJIVE1MXG59XG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IHRvb2x0aXAuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgKiBhcyBQb3BwZXIgZnJvbSAnQHBvcHBlcmpzL2NvcmUnXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZmluZFNoYWRvd1Jvb3QsXG4gIGdldEVsZW1lbnQsXG4gIGdldFVJRCxcbiAgaXNFbGVtZW50LFxuICBpc1JUTCxcbiAgbm9vcCxcbiAgdHlwZUNoZWNrQ29uZmlnXG59IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCB7IERlZmF1bHRBbGxvd2xpc3QsIHNhbml0aXplSHRtbCB9IGZyb20gJy4vdXRpbC9zYW5pdGl6ZXInXG5pbXBvcnQgRGF0YSBmcm9tICcuL2RvbS9kYXRhJ1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAndG9vbHRpcCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRvb2x0aXAnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgQ0xBU1NfUFJFRklYID0gJ2JzLXRvb2x0aXAnXG5jb25zdCBESVNBTExPV0VEX0FUVFJJQlVURVMgPSBuZXcgU2V0KFsnc2FuaXRpemUnLCAnYWxsb3dMaXN0JywgJ3Nhbml0aXplRm4nXSlcblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICB0ZW1wbGF0ZTogJ3N0cmluZycsXG4gIHRpdGxlOiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKScsXG4gIHRyaWdnZXI6ICdzdHJpbmcnLFxuICBkZWxheTogJyhudW1iZXJ8b2JqZWN0KScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgc2VsZWN0b3I6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgcGxhY2VtZW50OiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBvZmZzZXQ6ICcoYXJyYXl8c3RyaW5nfGZ1bmN0aW9uKScsXG4gIGNvbnRhaW5lcjogJyhzdHJpbmd8ZWxlbWVudHxib29sZWFuKScsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogJ2FycmF5JyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgY3VzdG9tQ2xhc3M6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIHNhbml0aXplOiAnYm9vbGVhbicsXG4gIHNhbml0aXplRm46ICcobnVsbHxmdW5jdGlvbiknLFxuICBhbGxvd0xpc3Q6ICdvYmplY3QnLFxuICBwb3BwZXJDb25maWc6ICcobnVsbHxvYmplY3R8ZnVuY3Rpb24pJ1xufVxuXG5jb25zdCBBdHRhY2htZW50TWFwID0ge1xuICBBVVRPOiAnYXV0bycsXG4gIFRPUDogJ3RvcCcsXG4gIFJJR0hUOiBpc1JUTCgpID8gJ2xlZnQnIDogJ3JpZ2h0JyxcbiAgQk9UVE9NOiAnYm90dG9tJyxcbiAgTEVGVDogaXNSVEwoKSA/ICdyaWdodCcgOiAnbGVmdCdcbn1cblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj4nICtcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+JyArXG4gICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZGl2PicsXG4gIHRyaWdnZXI6ICdob3ZlciBmb2N1cycsXG4gIHRpdGxlOiAnJyxcbiAgZGVsYXk6IDAsXG4gIGh0bWw6IGZhbHNlLFxuICBzZWxlY3RvcjogZmFsc2UsXG4gIHBsYWNlbWVudDogJ3RvcCcsXG4gIG9mZnNldDogWzAsIDBdLFxuICBjb250YWluZXI6IGZhbHNlLFxuICBmYWxsYmFja1BsYWNlbWVudHM6IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10sXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgY3VzdG9tQ2xhc3M6ICcnLFxuICBzYW5pdGl6ZTogdHJ1ZSxcbiAgc2FuaXRpemVGbjogbnVsbCxcbiAgYWxsb3dMaXN0OiBEZWZhdWx0QWxsb3dsaXN0LFxuICBwb3BwZXJDb25maWc6IG51bGxcbn1cblxuY29uc3QgRXZlbnQgPSB7XG4gIEhJREU6IGBoaWRlJHtFVkVOVF9LRVl9YCxcbiAgSElEREVOOiBgaGlkZGVuJHtFVkVOVF9LRVl9YCxcbiAgU0hPVzogYHNob3cke0VWRU5UX0tFWX1gLFxuICBTSE9XTjogYHNob3duJHtFVkVOVF9LRVl9YCxcbiAgSU5TRVJURUQ6IGBpbnNlcnRlZCR7RVZFTlRfS0VZfWAsXG4gIENMSUNLOiBgY2xpY2ske0VWRU5UX0tFWX1gLFxuICBGT0NVU0lOOiBgZm9jdXNpbiR7RVZFTlRfS0VZfWAsXG4gIEZPQ1VTT1VUOiBgZm9jdXNvdXQke0VWRU5UX0tFWX1gLFxuICBNT1VTRUVOVEVSOiBgbW91c2VlbnRlciR7RVZFTlRfS0VZfWAsXG4gIE1PVVNFTEVBVkU6IGBtb3VzZWxlYXZlJHtFVkVOVF9LRVl9YFxufVxuXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfTU9EQUwgPSAnbW9kYWwnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcblxuY29uc3QgSE9WRVJfU1RBVEVfU0hPVyA9ICdzaG93J1xuY29uc3QgSE9WRVJfU1RBVEVfT1VUID0gJ291dCdcblxuY29uc3QgU0VMRUNUT1JfVE9PTFRJUF9JTk5FUiA9ICcudG9vbHRpcC1pbm5lcidcbmNvbnN0IFNFTEVDVE9SX01PREFMID0gYC4ke0NMQVNTX05BTUVfTU9EQUx9YFxuXG5jb25zdCBFVkVOVF9NT0RBTF9ISURFID0gJ2hpZGUuYnMubW9kYWwnXG5cbmNvbnN0IFRSSUdHRVJfSE9WRVIgPSAnaG92ZXInXG5jb25zdCBUUklHR0VSX0ZPQ1VTID0gJ2ZvY3VzJ1xuY29uc3QgVFJJR0dFUl9DTElDSyA9ICdjbGljaydcbmNvbnN0IFRSSUdHRVJfTUFOVUFMID0gJ21hbnVhbCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIFRvb2x0aXAgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIHRvb2x0aXBzIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcpJylcbiAgICB9XG5cbiAgICBzdXBlcihlbGVtZW50KVxuXG4gICAgLy8gcHJpdmF0ZVxuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWVcbiAgICB0aGlzLl90aW1lb3V0ID0gMFxuICAgIHRoaXMuX2hvdmVyU3RhdGUgPSAnJ1xuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXIgPSB7fVxuICAgIHRoaXMuX3BvcHBlciA9IG51bGxcblxuICAgIC8vIFByb3RlY3RlZFxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy50aXAgPSBudWxsXG5cbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICBzdGF0aWMgZ2V0IEV2ZW50KCkge1xuICAgIHJldHVybiBFdmVudFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIGVuYWJsZSgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlXG4gIH1cblxuICBkaXNhYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IGZhbHNlXG4gIH1cblxuICB0b2dnbGVFbmFibGVkKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9ICF0aGlzLl9pc0VuYWJsZWRcbiAgfVxuXG4gIHRvZ2dsZShldmVudCkge1xuICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpXG5cbiAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXIuY2xpY2sgPSAhY29udGV4dC5fYWN0aXZlVHJpZ2dlci5jbGlja1xuXG4gICAgICBpZiAoY29udGV4dC5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICAgIGNvbnRleHQuX2VudGVyKG51bGwsIGNvbnRleHQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0Ll9sZWF2ZShudWxsLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5nZXRUaXBFbGVtZW50KCkuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVykpIHtcbiAgICAgICAgdGhpcy5fbGVhdmUobnVsbCwgdGhpcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VudGVyKG51bGwsIHRoaXMpXG4gICAgfVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dClcblxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX01PREFMKSwgRVZFTlRfTU9EQUxfSElERSwgdGhpcy5faGlkZU1vZGFsSGFuZGxlcilcblxuICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgdGhpcy50aXAucmVtb3ZlKClcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSB1c2Ugc2hvdyBvbiB2aXNpYmxlIGVsZW1lbnRzJylcbiAgICB9XG5cbiAgICBpZiAoISh0aGlzLmlzV2l0aENvbnRlbnQoKSAmJiB0aGlzLl9pc0VuYWJsZWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LlNIT1cpXG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGZpbmRTaGFkb3dSb290KHRoaXMuX2VsZW1lbnQpXG4gICAgY29uc3QgaXNJblRoZURvbSA9IHNoYWRvd1Jvb3QgPT09IG51bGwgP1xuICAgICAgdGhpcy5fZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyh0aGlzLl9lbGVtZW50KSA6XG4gICAgICBzaGFkb3dSb290LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEEgdHJpY2sgdG8gcmVjcmVhdGUgYSB0b29sdGlwIGluIGNhc2UgYSBuZXcgdGl0bGUgaXMgZ2l2ZW4gYnkgdXNpbmcgdGhlIE5PVCBkb2N1bWVudGVkIGBkYXRhLWJzLW9yaWdpbmFsLXRpdGxlYFxuICAgIC8vIFRoaXMgd2lsbCBiZSByZW1vdmVkIGxhdGVyIGluIGZhdm9yIG9mIGEgYHNldENvbnRlbnRgIG1ldGhvZFxuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLk5BTUUgPT09ICd0b29sdGlwJyAmJiB0aGlzLnRpcCAmJiB0aGlzLmdldFRpdGxlKCkgIT09IHRoaXMudGlwLnF1ZXJ5U2VsZWN0b3IoU0VMRUNUT1JfVE9PTFRJUF9JTk5FUikuaW5uZXJIVE1MKSB7XG4gICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcbiAgICAgIHRoaXMudGlwLnJlbW92ZSgpXG4gICAgICB0aGlzLnRpcCA9IG51bGxcbiAgICB9XG5cbiAgICBjb25zdCB0aXAgPSB0aGlzLmdldFRpcEVsZW1lbnQoKVxuICAgIGNvbnN0IHRpcElkID0gZ2V0VUlEKHRoaXMuY29uc3RydWN0b3IuTkFNRSlcblxuICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aXBJZClcblxuICAgIGlmICh0aGlzLl9jb25maWcuYW5pbWF0aW9uKSB7XG4gICAgICB0aXAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgfVxuXG4gICAgY29uc3QgcGxhY2VtZW50ID0gdHlwZW9mIHRoaXMuX2NvbmZpZy5wbGFjZW1lbnQgPT09ICdmdW5jdGlvbicgP1xuICAgICAgdGhpcy5fY29uZmlnLnBsYWNlbWVudC5jYWxsKHRoaXMsIHRpcCwgdGhpcy5fZWxlbWVudCkgOlxuICAgICAgdGhpcy5fY29uZmlnLnBsYWNlbWVudFxuXG4gICAgY29uc3QgYXR0YWNobWVudCA9IHRoaXMuX2dldEF0dGFjaG1lbnQocGxhY2VtZW50KVxuICAgIHRoaXMuX2FkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KVxuXG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHRoaXMuX2NvbmZpZ1xuICAgIERhdGEuc2V0KHRpcCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSwgdGhpcylcblxuICAgIGlmICghdGhpcy5fZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyh0aGlzLnRpcCkpIHtcbiAgICAgIGNvbnRhaW5lci5hcHBlbmQodGlwKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5JTlNFUlRFRClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcG9wcGVyID0gUG9wcGVyLmNyZWF0ZVBvcHBlcih0aGlzLl9lbGVtZW50LCB0aXAsIHRoaXMuX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSlcbiAgICB9XG5cbiAgICB0aXAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBjb25zdCBjdXN0b21DbGFzcyA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5jdXN0b21DbGFzcylcbiAgICBpZiAoY3VzdG9tQ2xhc3MpIHtcbiAgICAgIHRpcC5jbGFzc0xpc3QuYWRkKC4uLmN1c3RvbUNsYXNzLnNwbGl0KCcgJykpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHByZXZIb3ZlclN0YXRlID0gdGhpcy5faG92ZXJTdGF0ZVxuXG4gICAgICB0aGlzLl9ob3ZlclN0YXRlID0gbnVsbFxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XTilcblxuICAgICAgaWYgKHByZXZIb3ZlclN0YXRlID09PSBIT1ZFUl9TVEFURV9PVVQpIHtcbiAgICAgICAgdGhpcy5fbGVhdmUobnVsbCwgdGhpcylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc0FuaW1hdGVkID0gdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSlcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLnRpcCwgaXNBbmltYXRlZClcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faG92ZXJTdGF0ZSAhPT0gSE9WRVJfU1RBVEVfU0hPVykge1xuICAgICAgICB0aXAucmVtb3ZlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2xlYW5UaXBDbGFzcygpXG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkhJRERFTilcblxuICAgICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5ISURFKVxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKVxuICAgICAgICAuZm9yRWFjaChlbGVtZW50ID0+IEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApKVxuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9DTElDS10gPSBmYWxzZVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9GT0NVU10gPSBmYWxzZVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9IT1ZFUl0gPSBmYWxzZVxuXG4gICAgY29uc3QgaXNBbmltYXRlZCA9IHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy50aXAsIGlzQW5pbWF0ZWQpXG4gICAgdGhpcy5faG92ZXJTdGF0ZSA9ICcnXG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJvdGVjdGVkXG5cbiAgaXNXaXRoQ29udGVudCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmdldFRpdGxlKCkpXG4gIH1cblxuICBnZXRUaXBFbGVtZW50KCkge1xuICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgcmV0dXJuIHRoaXMudGlwXG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLl9jb25maWcudGVtcGxhdGVcblxuICAgIGNvbnN0IHRpcCA9IGVsZW1lbnQuY2hpbGRyZW5bMF1cbiAgICB0aGlzLnNldENvbnRlbnQodGlwKVxuICAgIHRpcC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfRkFERSwgQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgdGhpcy50aXAgPSB0aXBcbiAgICByZXR1cm4gdGhpcy50aXBcbiAgfVxuXG4gIHNldENvbnRlbnQodGlwKSB7XG4gICAgdGhpcy5fc2FuaXRpemVBbmRTZXRDb250ZW50KHRpcCwgdGhpcy5nZXRUaXRsZSgpLCBTRUxFQ1RPUl9UT09MVElQX0lOTkVSKVxuICB9XG5cbiAgX3Nhbml0aXplQW5kU2V0Q29udGVudCh0ZW1wbGF0ZSwgY29udGVudCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZUVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yLCB0ZW1wbGF0ZSlcblxuICAgIGlmICghY29udGVudCAmJiB0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5yZW1vdmUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gd2UgdXNlIGFwcGVuZCBmb3IgaHRtbCBvYmplY3RzIHRvIG1haW50YWluIGpzIGV2ZW50c1xuICAgIHRoaXMuc2V0RWxlbWVudENvbnRlbnQodGVtcGxhdGVFbGVtZW50LCBjb250ZW50KVxuICB9XG5cbiAgc2V0RWxlbWVudENvbnRlbnQoZWxlbWVudCwgY29udGVudCkge1xuICAgIGlmIChlbGVtZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNFbGVtZW50KGNvbnRlbnQpKSB7XG4gICAgICBjb250ZW50ID0gZ2V0RWxlbWVudChjb250ZW50KVxuXG4gICAgICAvLyBjb250ZW50IGlzIGEgRE9NIG5vZGUgb3IgYSBqUXVlcnlcbiAgICAgIGlmICh0aGlzLl9jb25maWcuaHRtbCkge1xuICAgICAgICBpZiAoY29udGVudC5wYXJlbnROb2RlICE9PSBlbGVtZW50KSB7XG4gICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnJ1xuICAgICAgICAgIGVsZW1lbnQuYXBwZW5kKGNvbnRlbnQpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSBjb250ZW50LnRleHRDb250ZW50XG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcuaHRtbCkge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5zYW5pdGl6ZSkge1xuICAgICAgICBjb250ZW50ID0gc2FuaXRpemVIdG1sKGNvbnRlbnQsIHRoaXMuX2NvbmZpZy5hbGxvd0xpc3QsIHRoaXMuX2NvbmZpZy5zYW5pdGl6ZUZuKVxuICAgICAgfVxuXG4gICAgICBlbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnRcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IGNvbnRlbnRcbiAgICB9XG4gIH1cblxuICBnZXRUaXRsZSgpIHtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJykgfHwgdGhpcy5fY29uZmlnLnRpdGxlXG5cbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGl0bGUpXG4gIH1cblxuICB1cGRhdGVBdHRhY2htZW50KGF0dGFjaG1lbnQpIHtcbiAgICBpZiAoYXR0YWNobWVudCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgcmV0dXJuICdlbmQnXG4gICAgfVxuXG4gICAgaWYgKGF0dGFjaG1lbnQgPT09ICdsZWZ0Jykge1xuICAgICAgcmV0dXJuICdzdGFydCdcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0YWNobWVudFxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCB8fCB0aGlzLmNvbnN0cnVjdG9yLmdldE9yQ3JlYXRlSW5zdGFuY2UoZXZlbnQuZGVsZWdhdGVUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpXG4gIH1cblxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWwgPT4gTnVtYmVyLnBhcnNlSW50KHZhbCwgMTApKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0XG4gIH1cblxuICBfcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oY29udGVudCkge1xuICAgIHJldHVybiB0eXBlb2YgY29udGVudCA9PT0gJ2Z1bmN0aW9uJyA/IGNvbnRlbnQuY2FsbCh0aGlzLl9lbGVtZW50KSA6IGNvbnRlbnRcbiAgfVxuXG4gIF9nZXRQb3BwZXJDb25maWcoYXR0YWNobWVudCkge1xuICAgIGNvbnN0IGRlZmF1bHRCc1BvcHBlckNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogYXR0YWNobWVudCxcbiAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2ZsaXAnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogdGhpcy5fY29uZmlnLmZhbGxiYWNrUGxhY2VtZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBib3VuZGFyeTogdGhpcy5fY29uZmlnLmJvdW5kYXJ5XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2Fycm93JyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBlbGVtZW50OiBgLiR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfS1hcnJvd2BcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnb25DaGFuZ2UnLFxuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgcGhhc2U6ICdhZnRlcldyaXRlJyxcbiAgICAgICAgICBmbjogZGF0YSA9PiB0aGlzLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UoZGF0YSlcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIG9uRmlyc3RVcGRhdGU6IGRhdGEgPT4ge1xuICAgICAgICBpZiAoZGF0YS5vcHRpb25zLnBsYWNlbWVudCAhPT0gZGF0YS5wbGFjZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UoZGF0YSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi4odHlwZW9mIHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcgPT09ICdmdW5jdGlvbicgPyB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnKGRlZmF1bHRCc1BvcHBlckNvbmZpZykgOiB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnKVxuICAgIH1cbiAgfVxuXG4gIF9hZGRBdHRhY2htZW50Q2xhc3MoYXR0YWNobWVudCkge1xuICAgIHRoaXMuZ2V0VGlwRWxlbWVudCgpLmNsYXNzTGlzdC5hZGQoYCR7dGhpcy5fZ2V0QmFzaWNDbGFzc1ByZWZpeCgpfS0ke3RoaXMudXBkYXRlQXR0YWNobWVudChhdHRhY2htZW50KX1gKVxuICB9XG5cbiAgX2dldEF0dGFjaG1lbnQocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIEF0dGFjaG1lbnRNYXBbcGxhY2VtZW50LnRvVXBwZXJDYXNlKCldXG4gIH1cblxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpcy5fY29uZmlnLnRyaWdnZXIuc3BsaXQoJyAnKVxuXG4gICAgdHJpZ2dlcnMuZm9yRWFjaCh0cmlnZ2VyID0+IHtcbiAgICAgIGlmICh0cmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkNMSUNLLCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHRoaXMudG9nZ2xlKGV2ZW50KSlcbiAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPT0gVFJJR0dFUl9NQU5VQUwpIHtcbiAgICAgICAgY29uc3QgZXZlbnRJbiA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgP1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VFTlRFUiA6XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU0lOXG4gICAgICAgIGNvbnN0IGV2ZW50T3V0ID0gdHJpZ2dlciA9PT0gVFJJR0dFUl9IT1ZFUiA/XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5NT1VTRUxFQVZFIDpcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkZPQ1VTT1VUXG5cbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIGV2ZW50SW4sIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4gdGhpcy5fZW50ZXIoZXZlbnQpKVxuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRPdXQsIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4gdGhpcy5fbGVhdmUoZXZlbnQpKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX01PREFMKSwgRVZFTlRfTU9EQUxfSElERSwgdGhpcy5faGlkZU1vZGFsSGFuZGxlcilcblxuICAgIGlmICh0aGlzLl9jb25maWcuc2VsZWN0b3IpIHtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5fY29uZmlnLFxuICAgICAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICAgICAgc2VsZWN0b3I6ICcnXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2ZpeFRpdGxlKClcbiAgICB9XG4gIH1cblxuICBfZml4VGl0bGUoKSB7XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKVxuICAgIGNvbnN0IG9yaWdpbmFsVGl0bGVUeXBlID0gdHlwZW9mIHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJylcblxuICAgIGlmICh0aXRsZSB8fCBvcmlnaW5hbFRpdGxlVHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJywgdGl0bGUgfHwgJycpXG4gICAgICBpZiAodGl0bGUgJiYgIXRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgJiYgIXRoaXMuX2VsZW1lbnQudGV4dENvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0aXRsZSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgJycpXG4gICAgfVxuICB9XG5cbiAgX2VudGVyKGV2ZW50LCBjb250ZXh0KSB7XG4gICAgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCwgY29udGV4dClcblxuICAgIGlmIChldmVudCkge1xuICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlcltcbiAgICAgICAgZXZlbnQudHlwZSA9PT0gJ2ZvY3VzaW4nID8gVFJJR0dFUl9GT0NVUyA6IFRSSUdHRVJfSE9WRVJcbiAgICAgIF0gPSB0cnVlXG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuZ2V0VGlwRWxlbWVudCgpLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpIHx8IGNvbnRleHQuX2hvdmVyU3RhdGUgPT09IEhPVkVSX1NUQVRFX1NIT1cpIHtcbiAgICAgIGNvbnRleHQuX2hvdmVyU3RhdGUgPSBIT1ZFUl9TVEFURV9TSE9XXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQoY29udGV4dC5fdGltZW91dClcblxuICAgIGNvbnRleHQuX2hvdmVyU3RhdGUgPSBIT1ZFUl9TVEFURV9TSE9XXG5cbiAgICBpZiAoIWNvbnRleHQuX2NvbmZpZy5kZWxheSB8fCAhY29udGV4dC5fY29uZmlnLmRlbGF5LnNob3cpIHtcbiAgICAgIGNvbnRleHQuc2hvdygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb250ZXh0Ll90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoY29udGV4dC5faG92ZXJTdGF0ZSA9PT0gSE9WRVJfU1RBVEVfU0hPVykge1xuICAgICAgICBjb250ZXh0LnNob3coKVxuICAgICAgfVxuICAgIH0sIGNvbnRleHQuX2NvbmZpZy5kZWxheS5zaG93KVxuICB9XG5cbiAgX2xlYXZlKGV2ZW50LCBjb250ZXh0KSB7XG4gICAgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCwgY29udGV4dClcblxuICAgIGlmIChldmVudCkge1xuICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlcltcbiAgICAgICAgZXZlbnQudHlwZSA9PT0gJ2ZvY3Vzb3V0JyA/IFRSSUdHRVJfRk9DVVMgOiBUUklHR0VSX0hPVkVSXG4gICAgICBdID0gY29udGV4dC5fZWxlbWVudC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KVxuICAgIH1cblxuICAgIGlmIChjb250ZXh0Ll9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNsZWFyVGltZW91dChjb250ZXh0Ll90aW1lb3V0KVxuXG4gICAgY29udGV4dC5faG92ZXJTdGF0ZSA9IEhPVkVSX1NUQVRFX09VVFxuXG4gICAgaWYgKCFjb250ZXh0Ll9jb25maWcuZGVsYXkgfHwgIWNvbnRleHQuX2NvbmZpZy5kZWxheS5oaWRlKSB7XG4gICAgICBjb250ZXh0LmhpZGUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29udGV4dC5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKGNvbnRleHQuX2hvdmVyU3RhdGUgPT09IEhPVkVSX1NUQVRFX09VVCkge1xuICAgICAgICBjb250ZXh0LmhpZGUoKVxuICAgICAgfVxuICAgIH0sIGNvbnRleHQuX2NvbmZpZy5kZWxheS5oaWRlKVxuICB9XG5cbiAgX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSB7XG4gICAgZm9yIChjb25zdCB0cmlnZ2VyIGluIHRoaXMuX2FjdGl2ZVRyaWdnZXIpIHtcbiAgICAgIGlmICh0aGlzLl9hY3RpdmVUcmlnZ2VyW3RyaWdnZXJdKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbnN0IGRhdGFBdHRyaWJ1dGVzID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudClcblxuICAgIE9iamVjdC5rZXlzKGRhdGFBdHRyaWJ1dGVzKS5mb3JFYWNoKGRhdGFBdHRyID0+IHtcbiAgICAgIGlmIChESVNBTExPV0VEX0FUVFJJQlVURVMuaGFzKGRhdGFBdHRyKSkge1xuICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJdXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCxcbiAgICAgIC4uLmRhdGFBdHRyaWJ1dGVzLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KVxuICAgIH1cblxuICAgIGNvbmZpZy5jb250YWluZXIgPSBjb25maWcuY29udGFpbmVyID09PSBmYWxzZSA/IGRvY3VtZW50LmJvZHkgOiBnZXRFbGVtZW50KGNvbmZpZy5jb250YWluZXIpXG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5kZWxheSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbmZpZy5kZWxheSA9IHtcbiAgICAgICAgc2hvdzogY29uZmlnLmRlbGF5LFxuICAgICAgICBoaWRlOiBjb25maWcuZGVsYXlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy50aXRsZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbmZpZy50aXRsZSA9IGNvbmZpZy50aXRsZS50b1N0cmluZygpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcuY29udGVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbmZpZy5jb250ZW50ID0gY29uZmlnLmNvbnRlbnQudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpXG5cbiAgICBpZiAoY29uZmlnLnNhbml0aXplKSB7XG4gICAgICBjb25maWcudGVtcGxhdGUgPSBzYW5pdGl6ZUh0bWwoY29uZmlnLnRlbXBsYXRlLCBjb25maWcuYWxsb3dMaXN0LCBjb25maWcuc2FuaXRpemVGbilcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfZ2V0RGVsZWdhdGVDb25maWcoKSB7XG4gICAgY29uc3QgY29uZmlnID0ge31cblxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX2NvbmZpZykge1xuICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtrZXldICE9PSB0aGlzLl9jb25maWdba2V5XSkge1xuICAgICAgICBjb25maWdba2V5XSA9IHRoaXMuX2NvbmZpZ1trZXldXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW4gdGhlIGZ1dHVyZSBjYW4gYmUgcmVwbGFjZWQgd2l0aDpcbiAgICAvLyBjb25zdCBrZXlzV2l0aERpZmZlcmVudFZhbHVlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZykuZmlsdGVyKGVudHJ5ID0+IHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtlbnRyeVswXV0gIT09IHRoaXMuX2NvbmZpZ1tlbnRyeVswXV0pXG4gICAgLy8gYE9iamVjdC5mcm9tRW50cmllcyhrZXlzV2l0aERpZmZlcmVudFZhbHVlcylgXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2NsZWFuVGlwQ2xhc3MoKSB7XG4gICAgY29uc3QgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KClcbiAgICBjb25zdCBiYXNpY0NsYXNzUHJlZml4UmVnZXggPSBuZXcgUmVnRXhwKGAoXnxcXFxccykke3RoaXMuX2dldEJhc2ljQ2xhc3NQcmVmaXgoKX1cXFxcUytgLCAnZycpXG4gICAgY29uc3QgdGFiQ2xhc3MgPSB0aXAuZ2V0QXR0cmlidXRlKCdjbGFzcycpLm1hdGNoKGJhc2ljQ2xhc3NQcmVmaXhSZWdleClcbiAgICBpZiAodGFiQ2xhc3MgIT09IG51bGwgJiYgdGFiQ2xhc3MubGVuZ3RoID4gMCkge1xuICAgICAgdGFiQ2xhc3MubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSlcbiAgICAgICAgLmZvckVhY2godENsYXNzID0+IHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRDbGFzcykpXG4gICAgfVxuICB9XG5cbiAgX2dldEJhc2ljQ2xhc3NQcmVmaXgoKSB7XG4gICAgcmV0dXJuIENMQVNTX1BSRUZJWFxuICB9XG5cbiAgX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZShwb3BwZXJEYXRhKSB7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gcG9wcGVyRGF0YVxuXG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy50aXAgPSBzdGF0ZS5lbGVtZW50cy5wb3BwZXJcbiAgICB0aGlzLl9jbGVhblRpcENsYXNzKClcbiAgICB0aGlzLl9hZGRBdHRhY2htZW50Q2xhc3ModGhpcy5fZ2V0QXR0YWNobWVudChzdGF0ZS5wbGFjZW1lbnQpKVxuICB9XG5cbiAgX2Rpc3Bvc2VQb3BwZXIoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKVxuICAgICAgdGhpcy5fcG9wcGVyID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVG9vbHRpcC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuVG9vbHRpcCB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb29sdGlwKVxuXG5leHBvcnQgZGVmYXVsdCBUb29sdGlwXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IHBvcG92ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4gfSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgVG9vbHRpcCBmcm9tICcuL3Rvb2x0aXAnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAncG9wb3ZlcidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnBvcG92ZXInXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgQ0xBU1NfUFJFRklYID0gJ2JzLXBvcG92ZXInXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdCxcbiAgcGxhY2VtZW50OiAncmlnaHQnLFxuICBvZmZzZXQ6IFswLCA4XSxcbiAgdHJpZ2dlcjogJ2NsaWNrJyxcbiAgY29udGVudDogJycsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPicgK1xuICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInBvcG92ZXItYXJyb3dcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICAgJzxoMyBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCI+PC9oMz4nICtcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICAuLi5Ub29sdGlwLkRlZmF1bHRUeXBlLFxuICBjb250ZW50OiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSdcbn1cblxuY29uc3QgRXZlbnQgPSB7XG4gIEhJREU6IGBoaWRlJHtFVkVOVF9LRVl9YCxcbiAgSElEREVOOiBgaGlkZGVuJHtFVkVOVF9LRVl9YCxcbiAgU0hPVzogYHNob3cke0VWRU5UX0tFWX1gLFxuICBTSE9XTjogYHNob3duJHtFVkVOVF9LRVl9YCxcbiAgSU5TRVJURUQ6IGBpbnNlcnRlZCR7RVZFTlRfS0VZfWAsXG4gIENMSUNLOiBgY2xpY2ske0VWRU5UX0tFWX1gLFxuICBGT0NVU0lOOiBgZm9jdXNpbiR7RVZFTlRfS0VZfWAsXG4gIEZPQ1VTT1VUOiBgZm9jdXNvdXQke0VWRU5UX0tFWX1gLFxuICBNT1VTRUVOVEVSOiBgbW91c2VlbnRlciR7RVZFTlRfS0VZfWAsXG4gIE1PVVNFTEVBVkU6IGBtb3VzZWxlYXZlJHtFVkVOVF9LRVl9YFxufVxuXG5jb25zdCBTRUxFQ1RPUl9USVRMRSA9ICcucG9wb3Zlci1oZWFkZXInXG5jb25zdCBTRUxFQ1RPUl9DT05URU5UID0gJy5wb3BvdmVyLWJvZHknXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBQb3BvdmVyIGV4dGVuZHMgVG9vbHRpcCB7XG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgc3RhdGljIGdldCBFdmVudCgpIHtcbiAgICByZXR1cm4gRXZlbnRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICAvLyBPdmVycmlkZXNcblxuICBpc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmdldFRpdGxlKCkgfHwgdGhpcy5fZ2V0Q29udGVudCgpXG4gIH1cblxuICBzZXRDb250ZW50KHRpcCkge1xuICAgIHRoaXMuX3Nhbml0aXplQW5kU2V0Q29udGVudCh0aXAsIHRoaXMuZ2V0VGl0bGUoKSwgU0VMRUNUT1JfVElUTEUpXG4gICAgdGhpcy5fc2FuaXRpemVBbmRTZXRDb250ZW50KHRpcCwgdGhpcy5fZ2V0Q29udGVudCgpLCBTRUxFQ1RPUl9DT05URU5UKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9nZXRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY29udGVudClcbiAgfVxuXG4gIF9nZXRCYXNpY0NsYXNzUHJlZml4KCkge1xuICAgIHJldHVybiBDTEFTU19QUkVGSVhcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gUG9wb3Zlci5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuUG9wb3ZlciB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihQb3BvdmVyKVxuXG5leHBvcnQgZGVmYXVsdCBQb3BvdmVyXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IHNjcm9sbHNweS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCxcbiAgdHlwZUNoZWNrQ29uZmlnXG59IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuL2RvbS9tYW5pcHVsYXRvcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ3Njcm9sbHNweSdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnNjcm9sbHNweSdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBvZmZzZXQ6IDEwLFxuICBtZXRob2Q6ICdhdXRvJyxcbiAgdGFyZ2V0OiAnJ1xufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgb2Zmc2V0OiAnbnVtYmVyJyxcbiAgbWV0aG9kOiAnc3RyaW5nJyxcbiAgdGFyZ2V0OiAnKHN0cmluZ3xlbGVtZW50KSdcbn1cblxuY29uc3QgRVZFTlRfQUNUSVZBVEUgPSBgYWN0aXZhdGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TQ1JPTEwgPSBgc2Nyb2xsJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX0RST1BET1dOX0lURU0gPSAnZHJvcGRvd24taXRlbSdcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFID0gJ2FjdGl2ZSdcblxuY29uc3QgU0VMRUNUT1JfREFUQV9TUFkgPSAnW2RhdGEtYnMtc3B5PVwic2Nyb2xsXCJdJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnXG5jb25zdCBTRUxFQ1RPUl9OQVZfTElOS1MgPSAnLm5hdi1saW5rJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0lURU1TID0gJy5uYXYtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0xJU1RfSVRFTVMgPSAnLmxpc3QtZ3JvdXAtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0xJTktfSVRFTVMgPSBgJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX0xJU1RfSVRFTVN9LCAuJHtDTEFTU19OQU1FX0RST1BET1dOX0lURU19YFxuY29uc3QgU0VMRUNUT1JfRFJPUERPV04gPSAnLmRyb3Bkb3duJ1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFID0gJy5kcm9wZG93bi10b2dnbGUnXG5cbmNvbnN0IE1FVEhPRF9PRkZTRVQgPSAnb2Zmc2V0J1xuY29uc3QgTUVUSE9EX1BPU0lUSU9OID0gJ3Bvc2l0aW9uJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgU2Nyb2xsU3B5IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQpXG4gICAgdGhpcy5fc2Nyb2xsRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQudGFnTmFtZSA9PT0gJ0JPRFknID8gd2luZG93IDogdGhpcy5fZWxlbWVudFxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fb2Zmc2V0cyA9IFtdXG4gICAgdGhpcy5fdGFyZ2V0cyA9IFtdXG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbFxuICAgIHRoaXMuX3Njcm9sbEhlaWdodCA9IDBcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9zY3JvbGxFbGVtZW50LCBFVkVOVF9TQ1JPTEwsICgpID0+IHRoaXMuX3Byb2Nlc3MoKSlcblxuICAgIHRoaXMucmVmcmVzaCgpXG4gICAgdGhpcy5fcHJvY2VzcygpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHJlZnJlc2goKSB7XG4gICAgY29uc3QgYXV0b01ldGhvZCA9IHRoaXMuX3Njcm9sbEVsZW1lbnQgPT09IHRoaXMuX3Njcm9sbEVsZW1lbnQud2luZG93ID9cbiAgICAgIE1FVEhPRF9PRkZTRVQgOlxuICAgICAgTUVUSE9EX1BPU0lUSU9OXG5cbiAgICBjb25zdCBvZmZzZXRNZXRob2QgPSB0aGlzLl9jb25maWcubWV0aG9kID09PSAnYXV0bycgP1xuICAgICAgYXV0b01ldGhvZCA6XG4gICAgICB0aGlzLl9jb25maWcubWV0aG9kXG5cbiAgICBjb25zdCBvZmZzZXRCYXNlID0gb2Zmc2V0TWV0aG9kID09PSBNRVRIT0RfUE9TSVRJT04gP1xuICAgICAgdGhpcy5fZ2V0U2Nyb2xsVG9wKCkgOlxuICAgICAgMFxuXG4gICAgdGhpcy5fb2Zmc2V0cyA9IFtdXG4gICAgdGhpcy5fdGFyZ2V0cyA9IFtdXG4gICAgdGhpcy5fc2Nyb2xsSGVpZ2h0ID0gdGhpcy5fZ2V0U2Nyb2xsSGVpZ2h0KClcblxuICAgIGNvbnN0IHRhcmdldHMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0xJTktfSVRFTVMsIHRoaXMuX2NvbmZpZy50YXJnZXQpXG5cbiAgICB0YXJnZXRzLm1hcChlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldFNlbGVjdG9yID0gZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KVxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0U2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kT25lKHRhcmdldFNlbGVjdG9yKSA6IG51bGxcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBjb25zdCB0YXJnZXRCQ1IgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgaWYgKHRhcmdldEJDUi53aWR0aCB8fCB0YXJnZXRCQ1IuaGVpZ2h0KSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIE1hbmlwdWxhdG9yW29mZnNldE1ldGhvZF0odGFyZ2V0KS50b3AgKyBvZmZzZXRCYXNlLFxuICAgICAgICAgICAgdGFyZ2V0U2VsZWN0b3JcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9KVxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0pXG4gICAgICAuc29ydCgoYSwgYikgPT4gYVswXSAtIGJbMF0pXG4gICAgICAuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgdGhpcy5fb2Zmc2V0cy5wdXNoKGl0ZW1bMF0pXG4gICAgICAgIHRoaXMuX3RhcmdldHMucHVzaChpdGVtWzFdKVxuICAgICAgfSlcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9zY3JvbGxFbGVtZW50LCBFVkVOVF9LRVkpXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pXG4gICAgfVxuXG4gICAgY29uZmlnLnRhcmdldCA9IGdldEVsZW1lbnQoY29uZmlnLnRhcmdldCkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG5cbiAgICB0eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCBEZWZhdWx0VHlwZSlcblxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9nZXRTY3JvbGxUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQgPT09IHdpbmRvdyA/XG4gICAgICB0aGlzLl9zY3JvbGxFbGVtZW50LnBhZ2VZT2Zmc2V0IDpcbiAgICAgIHRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsVG9wXG4gIH1cblxuICBfZ2V0U2Nyb2xsSGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50LnNjcm9sbEhlaWdodCB8fCBNYXRoLm1heChcbiAgICAgIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0LFxuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodFxuICAgIClcbiAgfVxuXG4gIF9nZXRPZmZzZXRIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQgPT09IHdpbmRvdyA/XG4gICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgOlxuICAgICAgdGhpcy5fc2Nyb2xsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcbiAgfVxuXG4gIF9wcm9jZXNzKCkge1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuX2dldFNjcm9sbFRvcCgpICsgdGhpcy5fY29uZmlnLm9mZnNldFxuICAgIGNvbnN0IHNjcm9sbEhlaWdodCA9IHRoaXMuX2dldFNjcm9sbEhlaWdodCgpXG4gICAgY29uc3QgbWF4U2Nyb2xsID0gdGhpcy5fY29uZmlnLm9mZnNldCArIHNjcm9sbEhlaWdodCAtIHRoaXMuX2dldE9mZnNldEhlaWdodCgpXG5cbiAgICBpZiAodGhpcy5fc2Nyb2xsSGVpZ2h0ICE9PSBzY3JvbGxIZWlnaHQpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpXG4gICAgfVxuXG4gICAgaWYgKHNjcm9sbFRvcCA+PSBtYXhTY3JvbGwpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuX3RhcmdldHNbdGhpcy5fdGFyZ2V0cy5sZW5ndGggLSAxXVxuXG4gICAgICBpZiAodGhpcy5fYWN0aXZlVGFyZ2V0ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGUodGFyZ2V0KVxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYWN0aXZlVGFyZ2V0ICYmIHNjcm9sbFRvcCA8IHRoaXMuX29mZnNldHNbMF0gJiYgdGhpcy5fb2Zmc2V0c1swXSA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGxcbiAgICAgIHRoaXMuX2NsZWFyKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSB0aGlzLl9vZmZzZXRzLmxlbmd0aDsgaS0tOykge1xuICAgICAgY29uc3QgaXNBY3RpdmVUYXJnZXQgPSB0aGlzLl9hY3RpdmVUYXJnZXQgIT09IHRoaXMuX3RhcmdldHNbaV0gJiZcbiAgICAgICAgICBzY3JvbGxUb3AgPj0gdGhpcy5fb2Zmc2V0c1tpXSAmJlxuICAgICAgICAgICh0eXBlb2YgdGhpcy5fb2Zmc2V0c1tpICsgMV0gPT09ICd1bmRlZmluZWQnIHx8IHNjcm9sbFRvcCA8IHRoaXMuX29mZnNldHNbaSArIDFdKVxuXG4gICAgICBpZiAoaXNBY3RpdmVUYXJnZXQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGUodGhpcy5fdGFyZ2V0c1tpXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfYWN0aXZhdGUodGFyZ2V0KSB7XG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0XG5cbiAgICB0aGlzLl9jbGVhcigpXG5cbiAgICBjb25zdCBxdWVyaWVzID0gU0VMRUNUT1JfTElOS19JVEVNUy5zcGxpdCgnLCcpXG4gICAgICAubWFwKHNlbGVjdG9yID0+IGAke3NlbGVjdG9yfVtkYXRhLWJzLXRhcmdldD1cIiR7dGFyZ2V0fVwiXSwke3NlbGVjdG9yfVtocmVmPVwiJHt0YXJnZXR9XCJdYClcblxuICAgIGNvbnN0IGxpbmsgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHF1ZXJpZXMuam9pbignLCcpLCB0aGlzLl9jb25maWcudGFyZ2V0KVxuXG4gICAgbGluay5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgIGlmIChsaW5rLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BET1dOX0lURU0pKSB7XG4gICAgICBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSwgbGluay5jbG9zZXN0KFNFTEVDVE9SX0RST1BET1dOKSlcbiAgICAgICAgLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgfSBlbHNlIHtcbiAgICAgIFNlbGVjdG9yRW5naW5lLnBhcmVudHMobGluaywgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVApXG4gICAgICAgIC5mb3JFYWNoKGxpc3RHcm91cCA9PiB7XG4gICAgICAgICAgLy8gU2V0IHRyaWdnZXJlZCBsaW5rcyBwYXJlbnRzIGFzIGFjdGl2ZVxuICAgICAgICAgIC8vIFdpdGggYm90aCA8dWw+IGFuZCA8bmF2PiBtYXJrdXAgYSBwYXJlbnQgaXMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYW55IG5hdiBhbmNlc3RvclxuICAgICAgICAgIFNlbGVjdG9yRW5naW5lLnByZXYobGlzdEdyb3VwLCBgJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX0xJU1RfSVRFTVN9YClcbiAgICAgICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKSlcblxuICAgICAgICAgIC8vIEhhbmRsZSBzcGVjaWFsIGNhc2Ugd2hlbiAubmF2LWxpbmsgaXMgaW5zaWRlIC5uYXYtaXRlbVxuICAgICAgICAgIFNlbGVjdG9yRW5naW5lLnByZXYobGlzdEdyb3VwLCBTRUxFQ1RPUl9OQVZfSVRFTVMpXG4gICAgICAgICAgICAuZm9yRWFjaChuYXZJdGVtID0+IHtcbiAgICAgICAgICAgICAgU2VsZWN0b3JFbmdpbmUuY2hpbGRyZW4obmF2SXRlbSwgU0VMRUNUT1JfTkFWX0xJTktTKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fc2Nyb2xsRWxlbWVudCwgRVZFTlRfQUNUSVZBVEUsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRhcmdldFxuICAgIH0pXG4gIH1cblxuICBfY2xlYXIoKSB7XG4gICAgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9MSU5LX0lURU1TLCB0aGlzLl9jb25maWcudGFyZ2V0KVxuICAgICAgLmZpbHRlcihub2RlID0+IG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQUNUSVZFKSlcbiAgICAgIC5mb3JFYWNoKG5vZGUgPT4gbm9kZS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKSlcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gU2Nyb2xsU3B5LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+IHtcbiAgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1NQWSlcbiAgICAuZm9yRWFjaChzcHkgPT4gbmV3IFNjcm9sbFNweShzcHkpKVxufSlcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBhZGQgLlNjcm9sbFNweSB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihTY3JvbGxTcHkpXG5cbmV4cG9ydCBkZWZhdWx0IFNjcm9sbFNweVxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiB0YWIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsXG4gIGlzRGlzYWJsZWQsXG4gIHJlZmxvd1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICd0YWInXG5jb25zdCBEQVRBX0tFWSA9ICdicy50YWInXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fTUVOVSA9ICdkcm9wZG93bi1tZW51J1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcblxuY29uc3QgU0VMRUNUT1JfRFJPUERPV04gPSAnLmRyb3Bkb3duJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnXG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkUgPSAnLmFjdGl2ZSdcbmNvbnN0IFNFTEVDVE9SX0FDVElWRV9VTCA9ICc6c2NvcGUgPiBsaSA+IC5hY3RpdmUnXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJ0YWJcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cImxpc3RcIl0nXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnLmRyb3Bkb3duLXRvZ2dsZSdcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX0FDVElWRV9DSElMRCA9ICc6c2NvcGUgPiAuZHJvcGRvd24tbWVudSAuYWN0aXZlJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgVGFiIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHNob3coKSB7XG4gICAgaWYgKCh0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICAgIHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQUNUSVZFKSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBwcmV2aW91c1xuICAgIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcy5fZWxlbWVudClcbiAgICBjb25zdCBsaXN0RWxlbWVudCA9IHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUClcblxuICAgIGlmIChsaXN0RWxlbWVudCkge1xuICAgICAgY29uc3QgaXRlbVNlbGVjdG9yID0gbGlzdEVsZW1lbnQubm9kZU5hbWUgPT09ICdVTCcgfHwgbGlzdEVsZW1lbnQubm9kZU5hbWUgPT09ICdPTCcgPyBTRUxFQ1RPUl9BQ1RJVkVfVUwgOiBTRUxFQ1RPUl9BQ1RJVkVcbiAgICAgIHByZXZpb3VzID0gU2VsZWN0b3JFbmdpbmUuZmluZChpdGVtU2VsZWN0b3IsIGxpc3RFbGVtZW50KVxuICAgICAgcHJldmlvdXMgPSBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXVxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IHByZXZpb3VzID9cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHByZXZpb3VzLCBFVkVOVF9ISURFLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH0pIDpcbiAgICAgIG51bGxcblxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1csIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHByZXZpb3VzXG4gICAgfSlcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAoaGlkZUV2ZW50ICE9PSBudWxsICYmIGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZhdGUodGhpcy5fZWxlbWVudCwgbGlzdEVsZW1lbnQpXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHByZXZpb3VzLCBFVkVOVF9ISURERU4sIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgICAgfSlcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHByZXZpb3VzXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIHRoaXMuX2FjdGl2YXRlKHRhcmdldCwgdGFyZ2V0LnBhcmVudE5vZGUsIGNvbXBsZXRlKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wbGV0ZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9hY3RpdmF0ZShlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudHMgPSBjb250YWluZXIgJiYgKGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gJ1VMJyB8fCBjb250YWluZXIubm9kZU5hbWUgPT09ICdPTCcpID9cbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfQUNUSVZFX1VMLCBjb250YWluZXIpIDpcbiAgICAgIFNlbGVjdG9yRW5naW5lLmNoaWxkcmVuKGNvbnRhaW5lciwgU0VMRUNUT1JfQUNUSVZFKVxuXG4gICAgY29uc3QgYWN0aXZlID0gYWN0aXZlRWxlbWVudHNbMF1cbiAgICBjb25zdCBpc1RyYW5zaXRpb25pbmcgPSBjYWxsYmFjayAmJiAoYWN0aXZlICYmIGFjdGl2ZS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKSlcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4gdGhpcy5fdHJhbnNpdGlvbkNvbXBsZXRlKGVsZW1lbnQsIGFjdGl2ZSwgY2FsbGJhY2spXG5cbiAgICBpZiAoYWN0aXZlICYmIGlzVHJhbnNpdGlvbmluZykge1xuICAgICAgYWN0aXZlLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuICAgICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcGxldGUoKVxuICAgIH1cbiAgfVxuXG4gIF90cmFuc2l0aW9uQ29tcGxldGUoZWxlbWVudCwgYWN0aXZlLCBjYWxsYmFjaykge1xuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgIGFjdGl2ZS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuXG4gICAgICBjb25zdCBkcm9wZG93bkNoaWxkID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9EUk9QRE9XTl9BQ1RJVkVfQ0hJTEQsIGFjdGl2ZS5wYXJlbnROb2RlKVxuXG4gICAgICBpZiAoZHJvcGRvd25DaGlsZCkge1xuICAgICAgICBkcm9wZG93bkNoaWxkLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmUuZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICd0YWInKSB7XG4gICAgICAgIGFjdGl2ZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICd0YWInKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHRydWUpXG4gICAgfVxuXG4gICAgcmVmbG93KGVsZW1lbnQpXG5cbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcbiAgICB9XG5cbiAgICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlXG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQubm9kZU5hbWUgPT09ICdMSScpIHtcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlXG4gICAgfVxuXG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUERPV05fTUVOVSkpIHtcbiAgICAgIGNvbnN0IGRyb3Bkb3duRWxlbWVudCA9IGVsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9EUk9QRE9XTilcblxuICAgICAgaWYgKGRyb3Bkb3duRWxlbWVudCkge1xuICAgICAgICBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSwgZHJvcGRvd25FbGVtZW50KVxuICAgICAgICAgIC5mb3JFYWNoKGRyb3Bkb3duID0+IGRyb3Bkb3duLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuICAgICAgfVxuXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIHRydWUpXG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuICBkYXRhLnNob3coKVxufSlcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBhZGQgLlRhYiB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUYWIpXG5cbmV4cG9ydCBkZWZhdWx0IFRhYlxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiB0b2FzdC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgcmVmbG93LFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcbmltcG9ydCB7IGVuYWJsZURpc21pc3NUcmlnZ2VyIH0gZnJvbSAnLi91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAndG9hc3QnXG5jb25zdCBEQVRBX0tFWSA9ICdicy50b2FzdCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX01PVVNFT1ZFUiA9IGBtb3VzZW92ZXIke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRU9VVCA9IGBtb3VzZW91dCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4gPSBgZm9jdXNpbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0ZPQ1VTT1VUID0gYGZvY3Vzb3V0JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfSElERSA9ICdoaWRlJyAvLyBAZGVwcmVjYXRlZCAtIGtlcHQgaGVyZSBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX1NIT1dJTkcgPSAnc2hvd2luZydcblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBhdXRvaGlkZTogJ2Jvb2xlYW4nLFxuICBkZWxheTogJ251bWJlcidcbn1cblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBhdXRvaGlkZTogdHJ1ZSxcbiAgZGVsYXk6IDUwMDBcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIFRvYXN0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQpXG5cbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsXG4gICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGZhbHNlXG4gICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGZhbHNlXG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHNob3coKSB7XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVylcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KClcblxuICAgIGlmICh0aGlzLl9jb25maWcuYW5pbWF0aW9uKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9GQURFKVxuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORylcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOKVxuXG4gICAgICB0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfSElERSkgLy8gQGRlcHJlY2F0ZWRcbiAgICByZWZsb3codGhpcy5fZWxlbWVudClcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpXG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9jb25maWcuYW5pbWF0aW9uKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElERSkgLy8gQGRlcHJlY2F0ZWRcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcpXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbilcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KClcblxuICAgIGlmICh0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIH1cblxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLk1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KVxuICAgIH1cblxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpXG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfbWF5YmVTY2hlZHVsZUhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uIHx8IHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5KVxuICB9XG5cbiAgX29uSW50ZXJhY3Rpb24oZXZlbnQsIGlzSW50ZXJhY3RpbmcpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgICAgIHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gPSBpc0ludGVyYWN0aW5nXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3RpbmdcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgaWYgKGlzSW50ZXJhY3RpbmcpIHtcbiAgICAgIHRoaXMuX2NsZWFyVGltZW91dCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBuZXh0RWxlbWVudCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXRcbiAgICBpZiAodGhpcy5fZWxlbWVudCA9PT0gbmV4dEVsZW1lbnQgfHwgdGhpcy5fZWxlbWVudC5jb250YWlucyhuZXh0RWxlbWVudCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX21heWJlU2NoZWR1bGVIaWRlKClcbiAgfVxuXG4gIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFT1ZFUiwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgdHJ1ZSkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFT1VULCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCBmYWxzZSkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0ZPQ1VTSU4sIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIHRydWUpKVxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9GT0NVU09VVCwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgZmFsc2UpKVxuICB9XG5cbiAgX2NsZWFyVGltZW91dCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dClcbiAgICB0aGlzLl90aW1lb3V0ID0gbnVsbFxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb2FzdC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoVG9hc3QpXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5Ub2FzdCB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb2FzdClcblxuZXhwb3J0IGRlZmF1bHQgVG9hc3RcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogaW5kZXgudW1kLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEFsZXJ0IGZyb20gJy4vc3JjL2FsZXJ0J1xuaW1wb3J0IEJ1dHRvbiBmcm9tICcuL3NyYy9idXR0b24nXG5pbXBvcnQgQ2Fyb3VzZWwgZnJvbSAnLi9zcmMvY2Fyb3VzZWwnXG5pbXBvcnQgQ29sbGFwc2UgZnJvbSAnLi9zcmMvY29sbGFwc2UnXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi9zcmMvZHJvcGRvd24nXG5pbXBvcnQgTW9kYWwgZnJvbSAnLi9zcmMvbW9kYWwnXG5pbXBvcnQgT2ZmY2FudmFzIGZyb20gJy4vc3JjL29mZmNhbnZhcydcbmltcG9ydCBQb3BvdmVyIGZyb20gJy4vc3JjL3BvcG92ZXInXG5pbXBvcnQgU2Nyb2xsU3B5IGZyb20gJy4vc3JjL3Njcm9sbHNweSdcbmltcG9ydCBUYWIgZnJvbSAnLi9zcmMvdGFiJ1xuaW1wb3J0IFRvYXN0IGZyb20gJy4vc3JjL3RvYXN0J1xuaW1wb3J0IFRvb2x0aXAgZnJvbSAnLi9zcmMvdG9vbHRpcCdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBBbGVydCxcbiAgQnV0dG9uLFxuICBDYXJvdXNlbCxcbiAgQ29sbGFwc2UsXG4gIERyb3Bkb3duLFxuICBNb2RhbCxcbiAgT2ZmY2FudmFzLFxuICBQb3BvdmVyLFxuICBTY3JvbGxTcHksXG4gIFRhYixcbiAgVG9hc3QsXG4gIFRvb2x0aXBcbn1cbiIsIiQoZnVuY3Rpb24gKCkge1xyXG4gICAgdG9nZ2xlQ29ubmVjdGlvblN0cmluZ0FuZFByZWZpeCgpO1xyXG5cclxuICAgIC8vIFNob3cgaGlkZSB0aGUgY29ubmVjdGlvbiBzdHJpbmcgd2hlbiBhIHByb3ZpZGVyIGlzIHNlbGVjdGVkXHJcbiAgICAkKFwiI0RhdGFiYXNlUHJvdmlkZXJcIikuY2hhbmdlKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0b2dnbGVDb25uZWN0aW9uU3RyaW5nQW5kUHJlZml4KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSZWZyZXNoIHRoZSByZWNpcGUgZGVzY3JpcHRpb25cclxuICAgICQoXCIjcmVjaXBlcyBkaXYgYVwiKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmVmcmVzaERlc2NyaXB0aW9uKCQodGhpcykpO1xyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuLy8gU2hvdyBvciBoaWRlIHRoZSBjb25uZWN0aW9uIHN0cmluZyBvciB0YWJsZSBwcmVmaXggc2VjdGlvbiB3aGVuIHRoZSBkYXRhYmFzZSBwcm92aWRlciBpcyBzZWxlY3RlZFxyXG5mdW5jdGlvbiB0b2dnbGVDb25uZWN0aW9uU3RyaW5nQW5kUHJlZml4KCkge1xyXG4gICAgJChcIiNEYXRhYmFzZVByb3ZpZGVyIG9wdGlvbjpzZWxlY3RlZFwiKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLmRhdGEoXCJjb25uZWN0aW9uLXN0cmluZ1wiKS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIlxyXG4gICAgICAgICAgICA/ICQoXCIuY29ubmVjdGlvblN0cmluZ1wiKS5zaG93KClcclxuICAgICAgICAgICAgOiAkKFwiLmNvbm5lY3Rpb25TdHJpbmdcIikuaGlkZSgpO1xyXG5cclxuICAgICAgICAkKHRoaXMpLmRhdGEoXCJ0YWJsZS1wcmVmaXhcIikudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCJcclxuICAgICAgICAgICAgPyAkKFwiLnRhYmxlUHJlZml4XCIpLnNob3coKVxyXG4gICAgICAgICAgICA6ICQoXCIudGFibGVQcmVmaXhcIikuaGlkZSgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICQodGhpcykuZGF0YShcImNvbm5lY3Rpb24tc3RyaW5nXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiXHJcbiAgICAgICAgICAgID8gJChcIi5wd2RcIikuYXR0cigncmVxdWlyZWQnLCAncmVxdWlyZWQnKVxyXG4gICAgICAgICAgICA6ICQoXCIucHdkXCIpLnJlbW92ZUF0dHIoJ3JlcXVpcmVkJyk7XHJcblxyXG4gICAgICAgICQoXCIjY29ubmVjdGlvblN0cmluZ0hpbnRcIikudGV4dCgkKHRoaXMpLmRhdGEoXCJjb25uZWN0aW9uLXN0cmluZy1zYW1wbGVcIikpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFNob3cgdGhlIHJlY2lwZSBkZXNjcmlwdGlvblxyXG5mdW5jdGlvbiByZWZyZXNoRGVzY3JpcHRpb24odGFyZ2V0KSB7XHJcbiAgICB2YXIgcmVjaXBlTmFtZSA9ICQodGFyZ2V0KS5kYXRhKFwicmVjaXBlLW5hbWVcIik7XHJcbiAgICB2YXIgcmVjaXBlRGlzcGxheU5hbWUgPSAkKHRhcmdldCkuZGF0YShcInJlY2lwZS1kaXNwbGF5LW5hbWVcIik7XHJcbiAgICB2YXIgcmVjaXBlRGVzY3JpcHRpb24gPSAkKHRhcmdldCkuZGF0YShcInJlY2lwZS1kZXNjcmlwdGlvblwiKTtcclxuICAgICQoXCIjcmVjaXBlQnV0dG9uXCIpLnRleHQocmVjaXBlRGlzcGxheU5hbWUpO1xyXG4gICAgJChcIiNSZWNpcGVOYW1lXCIpLnZhbChyZWNpcGVOYW1lKTtcclxuICAgICQoXCIjcmVjaXBlQnV0dG9uXCIpLmF0dHIoXCJ0aXRsZVwiLCByZWNpcGVEZXNjcmlwdGlvbik7XHJcbiAgICAkKFwiI3JlY2lwZUJ1dHRvblwiKS5mb2N1cygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRMb2NhbGl6YXRpb25VcmwoKSB7XHJcbiAgICB2YXIgY3VsdHVyZXNMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1bHR1cmVzTGlzdCcpO1xyXG4gICAgd2luZG93LmxvY2F0aW9uID0gY3VsdHVyZXNMaXN0Lm9wdGlvbnNbY3VsdHVyZXNMaXN0LnNlbGVjdGVkSW5kZXhdLmRhdGFzZXQudXJsO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b2dnbGVQYXNzd29yZFZpc2liaWxpdHkocGFzc3dvcmRDdGwsIHRvZ2dsZVBhc3N3b3JkQ3RsKVxyXG57XHJcbiAgICAvLyB0b2dnbGUgdGhlIHR5cGUgYXR0cmlidXRlXHJcbiAgICB0eXBlID0gcGFzc3dvcmRDdGwuZ2V0QXR0cmlidXRlKCd0eXBlJykgPT09ICdwYXNzd29yZCcgPyAndGV4dCcgOiAncGFzc3dvcmQnO1xyXG4gICAgcGFzc3dvcmRDdGwuc2V0QXR0cmlidXRlKCd0eXBlJywgdHlwZSk7XHJcblxyXG4gICAgLy8gdG9nZ2xlIHRoZSBleWUgc2xhc2ggaWNvblxyXG4gICAgaWNvbiA9IHRvZ2dsZVBhc3N3b3JkQ3RsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ljb24nKVswXTtcclxuICAgIGlmKGljb24uZ2V0QXR0cmlidXRlKCdkYXRhLWljb24nKSl7IC8vIGlmIHRoZSBpY29uIGlzIHJlbmRlcmVkIGFzIGEgc3ZnXHJcbiAgICAgICAgdHlwZSA9PT0gJ3Bhc3N3b3JkJyA/IGljb24uc2V0QXR0cmlidXRlKCdkYXRhLWljb24nLCAnZXllJykgOiBpY29uLnNldEF0dHJpYnV0ZSgnZGF0YS1pY29uJywgJ2V5ZS1zbGFzaCcpO1xyXG4gICAgfVxyXG4gICAgZWxzZXsgLy8gaWYgdGhlIGljb24gaXMgc3RpbGwgYSA8aT4gZWxlbWVudFxyXG4gICAgICAgIHR5cGUgPT09ICdwYXNzd29yZCcgPyBpY29uLmNsYXNzTGlzdC5yZW1vdmUoJ2ZhLWV5ZS1zbGFzaCcpIDogaWNvbi5jbGFzc0xpc3QucmVtb3ZlKCdmYS1leWUnKTtcclxuICAgICAgICB0eXBlID09PSAncGFzc3dvcmQnID8gaWNvbi5jbGFzc0xpc3QuYWRkKCdmYS1leWUnKSA6IGljb24uY2xhc3NMaXN0LmFkZCgnZmEtZXllLXNsYXNoJyk7XHJcbiAgICB9XHJcbn1cclxuIiwiKGZ1bmN0aW9uICgkKSB7XHJcblxyXG4gICAgJC5mbi5zdHJlbmd0aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG4gICAgICAgIHZhciBzZXR0aW5ncyA9ICQuZXh0ZW5kKHtcclxuICAgICAgICAgICAgbWluTGVuZ3RoOiA4LFxyXG4gICAgICAgICAgICB1cHBlckNhc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICBsb3dlckNhc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICBudW1iZXJzOiBmYWxzZSxcclxuICAgICAgICAgICAgc3BlY2lhbGNoYXJzOiBmYWxzZSxcclxuICAgICAgICAgICAgdGFyZ2V0OiAnJyxcclxuICAgICAgICAgICAgc3R5bGU6ICcnXHJcbiAgICAgICAgfSwgb3B0aW9ucyk7XHJcblxyXG5cclxuICAgICAgICB2YXIgY2FwaXRhbGxldHRlcnMgPSAwO1xyXG4gICAgICAgIHZhciBsb3dlcmxldHRlcnMgPSAwO1xyXG4gICAgICAgIHZhciBudW1iZXJzID0gMDtcclxuICAgICAgICB2YXIgc3BlY2lhbGNoYXJzID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHVwcGVyQ2FzZSA9IG5ldyBSZWdFeHAoJ1tBLVpdJyk7XHJcbiAgICAgICAgdmFyIGxvd2VyQ2FzZSA9IG5ldyBSZWdFeHAoJ1thLXpdJyk7XHJcbiAgICAgICAgdmFyIG51bWJlciA9IG5ldyBSZWdFeHAoJ1swLTldJyk7XHJcbiAgICAgICAgdmFyIHNwZWNpYWxjaGFyID0gbmV3IFJlZ0V4cCgnW15BLVphLXowLTldJyk7XHJcblxyXG4gICAgICAgIHZhciB2YWxpZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjcmVhdGVQcm9ncmVzc0JhcigwLCAnJyk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFBlcmNlbnRhZ2UoYSwgYikge1xyXG4gICAgICAgICAgICByZXR1cm4gKChiIC8gYSkgKiAxMDApLnRvRml4ZWQoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRMZXZlbCh2YWx1ZSkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlID49IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYmctc3VjY2Vzc1wiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUgPj0gNTApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImJnLXdhcm5pbmdcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlID09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnJzsgLy8gZ3JheWVkXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBcImJnLWRhbmdlclwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tTdHJlbmd0aCh2YWx1ZSkge1xyXG5cclxuICAgICAgICAgICAgbWluTGVuZ3RoID0gdmFsdWUubGVuZ3RoID49IHNldHRpbmdzLm1pbkxlbmd0aCA/IDEgOiAwO1xyXG4gICAgICAgICAgICBjYXBpdGFsbGV0dGVycyA9ICFzZXR0aW5ncy51cHBlckNhc2UgfHwgdmFsdWUubWF0Y2godXBwZXJDYXNlKSA/IDEgOiAwO1xyXG4gICAgICAgICAgICBsb3dlcmxldHRlcnMgPSAhc2V0dGluZ3MubG93ZXJDYXNlIHx8IHZhbHVlLm1hdGNoKGxvd2VyQ2FzZSkgPyAxIDogMDtcclxuICAgICAgICAgICAgbnVtYmVycyA9ICFzZXR0aW5ncy5udW1iZXJzIHx8IHZhbHVlLm1hdGNoKG51bWJlcikgPyAxIDogMDtcclxuICAgICAgICAgICAgc3BlY2lhbGNoYXJzID0gIXNldHRpbmdzLnNwZWNpYWxjaGFycyB8fCB2YWx1ZS5tYXRjaChzcGVjaWFsY2hhcikgPyAxIDogMDtcclxuXHJcbiAgICAgICAgICAgIHZhciB0b3RhbCA9IG1pbkxlbmd0aCArIGNhcGl0YWxsZXR0ZXJzICsgbG93ZXJsZXR0ZXJzICsgbnVtYmVycyArIHNwZWNpYWxjaGFycztcclxuICAgICAgICAgICAgdmFyIHBlcmNlbnRhZ2UgPSBnZXRQZXJjZW50YWdlKDUsIHRvdGFsKTtcclxuXHJcbiAgICAgICAgICAgIHZhbGlkID0gcGVyY2VudGFnZSA+PSAxMDA7XHJcblxyXG4gICAgICAgICAgICBjcmVhdGVQcm9ncmVzc0JhcihwZXJjZW50YWdlLCBnZXRMZXZlbChwZXJjZW50YWdlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm9ncmVzc0JhcihwZXJjZW50YWdlLCBsZXZlbCkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSAkKCc8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiB2YWx1ZT1cIicgKyBwZXJjZW50YWdlICsgJ1wiIHN0eWxlPVwiJyArIHNldHRpbmdzLnN0eWxlICsgJ1wiIG1heD1cIjEwMFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJcIj48ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyICcgKyBsZXZlbCArICdcIiByb2xlPVwicHJvZ3Jlc3MtYmFyXCIgc3R5bGU9XCJ3aWR0aDogJyArIHBlcmNlbnRhZ2UgKyAnJTtcIj48L2Rpdj48L2Rpdj4nKTtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9ICQoc2V0dGluZ3MudGFyZ2V0KTtcclxuICAgICAgICAgICAgdGFyZ2V0LmVtcHR5KCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoZWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5iaW5kKCdrZXl1cCBrZXlkb3duJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGNoZWNrU3RyZW5ndGgoJCh0aGlzKS52YWwoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5iaW5kKCdkcm9wJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGNoZWNrU3RyZW5ndGgoZXZlbnQub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShcInRleHRcIikpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudHMoJ2Zvcm0nKS5vbignc3VibWl0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG59KGpRdWVyeSkpO1xyXG4gICAgIl19 +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5qcyIsIi4uLy4uL3NyYy9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcyIsIi4uLy4uL3NyYy9kb20tdXRpbHMvaW5zdGFuY2VPZi5qcyIsIi4uLy4uL3NyYy9kb20tdXRpbHMvZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRTY3JvbGxQYXJlbnQuanMiLCIuLi8uLi9zcmMvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIi4uLy4uL3NyYy9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzIiwiLi4vLi4vc3JjL2VudW1zLmpzIiwiLi4vLi4vc3JjL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwiLi4vLi4vc3JjL3V0aWxzL2RlYm91bmNlLmpzIiwiLi4vLi4vc3JjL3V0aWxzL2Zvcm1hdC5qcyIsIi4uLy4uL3NyYy91dGlscy92YWxpZGF0ZU1vZGlmaWVycy5qcyIsIi4uLy4uL3NyYy91dGlscy91bmlxdWVCeS5qcyIsIi4uLy4uL3NyYy91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzIiwiLi4vLi4vc3JjL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCIuLi8uLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uLy4uL3NyYy9kb20tdXRpbHMvZ2V0RG9jdW1lbnRSZWN0LmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9jb250YWlucy5qcyIsIi4uLy4uL3NyYy91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzIiwiLi4vLi4vc3JjL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCIuLi8uLi9zcmMvdXRpbHMvZ2V0VmFyaWF0aW9uLmpzIiwiLi4vLi4vc3JjL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsIi4uLy4uL3NyYy91dGlscy9jb21wdXRlT2Zmc2V0cy5qcyIsIi4uLy4uL3NyYy91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCIuLi8uLi9zcmMvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwiLi4vLi4vc3JjL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsIi4uLy4uL3NyYy91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsIi4uLy4uL3NyYy9jcmVhdGVQb3BwZXIuanMiLCIuLi8uLi9zcmMvbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzIiwiLi4vLi4vc3JjL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwiLi4vLi4vc3JjL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwiLi4vLi4vc3JjL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIi4uLy4uL3NyYy9tb2RpZmllcnMvb2Zmc2V0LmpzIiwiLi4vLi4vc3JjL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwiLi4vLi4vc3JjL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwiLi4vLi4vc3JjL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwiLi4vLi4vc3JjL21vZGlmaWVycy9mbGlwLmpzIiwiLi4vLi4vc3JjL3V0aWxzL2dldEFsdEF4aXMuanMiLCIuLi8uLi9zcmMvdXRpbHMvd2l0aGluLmpzIiwiLi4vLi4vc3JjL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCIuLi8uLi9zcmMvbW9kaWZpZXJzL2Fycm93LmpzIiwiLi4vLi4vc3JjL21vZGlmaWVycy9oaWRlLmpzIiwiLi4vLi4vc3JjL3BvcHBlci1saXRlLmpzIiwiLi4vLi4vc3JjL3BvcHBlci5qcyIsIi4uLy4uL2pzL3NyYy91dGlsL2luZGV4LmpzIiwiLi4vLi4vanMvc3JjL2RvbS9ldmVudC1oYW5kbGVyLmpzIiwiLi4vLi4vanMvc3JjL2RvbS9kYXRhLmpzIiwiLi4vLi4vanMvc3JjL2Jhc2UtY29tcG9uZW50LmpzIiwiLi4vLi4vanMvc3JjL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcyIsIi4uLy4uL2pzL3NyYy9hbGVydC5qcyIsIi4uLy4uL2pzL3NyYy9idXR0b24uanMiLCIuLi8uLi9qcy9zcmMvZG9tL21hbmlwdWxhdG9yLmpzIiwiLi4vLi4vanMvc3JjL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMiLCIuLi8uLi9qcy9zcmMvY2Fyb3VzZWwuanMiLCIuLi8uLi9qcy9zcmMvY29sbGFwc2UuanMiLCIuLi8uLi9qcy9zcmMvZHJvcGRvd24uanMiLCIuLi8uLi9qcy9zcmMvdXRpbC9zY3JvbGxiYXIuanMiLCIuLi8uLi9qcy9zcmMvdXRpbC9iYWNrZHJvcC5qcyIsIi4uLy4uL2pzL3NyYy91dGlsL2ZvY3VzdHJhcC5qcyIsIi4uLy4uL2pzL3NyYy9tb2RhbC5qcyIsIi4uLy4uL2pzL3NyYy9vZmZjYW52YXMuanMiLCIuLi8uLi9qcy9zcmMvdXRpbC9zYW5pdGl6ZXIuanMiLCIuLi8uLi9qcy9zcmMvdG9vbHRpcC5qcyIsIi4uLy4uL2pzL3NyYy9wb3BvdmVyLmpzIiwiLi4vLi4vanMvc3JjL3Njcm9sbHNweS5qcyIsIi4uLy4uL2pzL3NyYy90YWIuanMiLCIuLi8uLi9qcy9zcmMvdG9hc3QuanMiLCIuLi8uLi9qcy9pbmRleC51bWQuanMiLCJzZXR1cC5qcyIsInN0cmVuZ3RoLmpzIl0sIm5hbWVzIjpbImdsb2JhbCIsImZhY3RvcnkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZG9jdW1lbnQiLCJ3IiwiRXJyb3IiLCJ3aW5kb3ciLCJub0dsb2JhbCIsImFyciIsImdldFByb3RvIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJzbGljZSIsImZsYXQiLCJhcnJheSIsImNhbGwiLCJjb25jYXQiLCJhcHBseSIsInB1c2giLCJpbmRleE9mIiwiY2xhc3MydHlwZSIsInRvU3RyaW5nIiwiaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJmblRvU3RyaW5nIiwiT2JqZWN0RnVuY3Rpb25TdHJpbmciLCJzdXBwb3J0IiwiaXNGdW5jdGlvbiIsIm9iaiIsIm5vZGVUeXBlIiwiaXRlbSIsImlzV2luZG93IiwicHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyIsInR5cGUiLCJzcmMiLCJub25jZSIsIm5vTW9kdWxlIiwiRE9NRXZhbCIsImNvZGUiLCJub2RlIiwiZG9jIiwiaSIsInZhbCIsInNjcmlwdCIsImNyZWF0ZUVsZW1lbnQiLCJ0ZXh0IiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiaGVhZCIsImFwcGVuZENoaWxkIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwidG9UeXBlIiwidmVyc2lvbiIsImpRdWVyeSIsInNlbGVjdG9yIiwiY29udGV4dCIsImZuIiwiaW5pdCIsInByb3RvdHlwZSIsImpxdWVyeSIsImNvbnN0cnVjdG9yIiwibGVuZ3RoIiwidG9BcnJheSIsImdldCIsIm51bSIsInB1c2hTdGFjayIsImVsZW1zIiwicmV0IiwibWVyZ2UiLCJwcmV2T2JqZWN0IiwiZWFjaCIsImNhbGxiYWNrIiwibWFwIiwiZWxlbSIsImFyZ3VtZW50cyIsImZpcnN0IiwiZXEiLCJsYXN0IiwiZXZlbiIsImdyZXAiLCJfZWxlbSIsIm9kZCIsImxlbiIsImoiLCJlbmQiLCJzb3J0Iiwic3BsaWNlIiwiZXh0ZW5kIiwib3B0aW9ucyIsIm5hbWUiLCJjb3B5IiwiY29weUlzQXJyYXkiLCJjbG9uZSIsInRhcmdldCIsImRlZXAiLCJpc1BsYWluT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwidW5kZWZpbmVkIiwiZXhwYW5kbyIsIk1hdGgiLCJyYW5kb20iLCJyZXBsYWNlIiwiaXNSZWFkeSIsImVycm9yIiwibXNnIiwibm9vcCIsInByb3RvIiwiQ3RvciIsImlzRW1wdHlPYmplY3QiLCJnbG9iYWxFdmFsIiwiaXNBcnJheUxpa2UiLCJtYWtlQXJyYXkiLCJyZXN1bHRzIiwiaW5BcnJheSIsInNlY29uZCIsImludmVydCIsImNhbGxiYWNrSW52ZXJzZSIsIm1hdGNoZXMiLCJjYWxsYmFja0V4cGVjdCIsImFyZyIsInZhbHVlIiwiZ3VpZCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwic3BsaXQiLCJfaSIsInRvTG93ZXJDYXNlIiwiU2l6emxlIiwiRXhwciIsImdldFRleHQiLCJpc1hNTCIsInRva2VuaXplIiwiY29tcGlsZSIsInNlbGVjdCIsIm91dGVybW9zdENvbnRleHQiLCJzb3J0SW5wdXQiLCJoYXNEdXBsaWNhdGUiLCJzZXREb2N1bWVudCIsImRvY0VsZW0iLCJkb2N1bWVudElzSFRNTCIsInJidWdneVFTQSIsInJidWdneU1hdGNoZXMiLCJjb250YWlucyIsIkRhdGUiLCJwcmVmZXJyZWREb2MiLCJkaXJydW5zIiwiZG9uZSIsImNsYXNzQ2FjaGUiLCJjcmVhdGVDYWNoZSIsInRva2VuQ2FjaGUiLCJjb21waWxlckNhY2hlIiwibm9ubmF0aXZlU2VsZWN0b3JDYWNoZSIsInNvcnRPcmRlciIsImEiLCJiIiwicG9wIiwicHVzaE5hdGl2ZSIsImxpc3QiLCJib29sZWFucyIsIndoaXRlc3BhY2UiLCJpZGVudGlmaWVyIiwiYXR0cmlidXRlcyIsInBzZXVkb3MiLCJyd2hpdGVzcGFjZSIsIlJlZ0V4cCIsInJ0cmltIiwicmNvbW1hIiwicmNvbWJpbmF0b3JzIiwicmRlc2NlbmQiLCJycHNldWRvIiwicmlkZW50aWZpZXIiLCJtYXRjaEV4cHIiLCJyaHRtbCIsInJpbnB1dHMiLCJyaGVhZGVyIiwicm5hdGl2ZSIsInJxdWlja0V4cHIiLCJyc2libGluZyIsInJ1bmVzY2FwZSIsImZ1bmVzY2FwZSIsImVzY2FwZSIsIm5vbkhleCIsImhpZ2giLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJyY3NzZXNjYXBlIiwiZmNzc2VzY2FwZSIsImNoIiwiYXNDb2RlUG9pbnQiLCJjaGFyQ29kZUF0IiwidW5sb2FkSGFuZGxlciIsImluRGlzYWJsZWRGaWVsZHNldCIsImFkZENvbWJpbmF0b3IiLCJkaXNhYmxlZCIsIm5vZGVOYW1lIiwiZGlyIiwibmV4dCIsImNoaWxkTm9kZXMiLCJlIiwiZWxzIiwic2VlZCIsIm0iLCJuaWQiLCJtYXRjaCIsImdyb3VwcyIsIm5ld1NlbGVjdG9yIiwibmV3Q29udGV4dCIsIm93bmVyRG9jdW1lbnQiLCJleGVjIiwiZ2V0RWxlbWVudEJ5SWQiLCJpZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInFzYSIsInRlc3QiLCJ0ZXN0Q29udGV4dCIsInNjb3BlIiwidG9TZWxlY3RvciIsImpvaW4iLCJxdWVyeVNlbGVjdG9yQWxsIiwicXNhRXJyb3IiLCJyZW1vdmVBdHRyaWJ1dGUiLCJrZXlzIiwiY2FjaGUiLCJrZXkiLCJjYWNoZUxlbmd0aCIsInNoaWZ0IiwibWFya0Z1bmN0aW9uIiwiYXNzZXJ0IiwiZWwiLCJhZGRIYW5kbGUiLCJhdHRycyIsImhhbmRsZXIiLCJhdHRySGFuZGxlIiwic2libGluZ0NoZWNrIiwiY3VyIiwiZGlmZiIsInNvdXJjZUluZGV4IiwibmV4dFNpYmxpbmciLCJjcmVhdGVJbnB1dFBzZXVkbyIsImNyZWF0ZUJ1dHRvblBzZXVkbyIsImNyZWF0ZURpc2FibGVkUHNldWRvIiwiaXNEaXNhYmxlZCIsImNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8iLCJhcmd1bWVudCIsIm1hdGNoSW5kZXhlcyIsIm5hbWVzcGFjZSIsIm5hbWVzcGFjZVVSSSIsImRvY3VtZW50RWxlbWVudCIsImhhc0NvbXBhcmUiLCJzdWJXaW5kb3ciLCJkZWZhdWx0VmlldyIsInRvcCIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImNsYXNzTmFtZSIsImNyZWF0ZUNvbW1lbnQiLCJnZXRCeUlkIiwiZ2V0RWxlbWVudHNCeU5hbWUiLCJmaWx0ZXIiLCJhdHRySWQiLCJmaW5kIiwiZ2V0QXR0cmlidXRlTm9kZSIsInRhZyIsInRtcCIsImlucHV0IiwiaW5uZXJIVE1MIiwibWF0Y2hlc1NlbGVjdG9yIiwid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwib01hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwiZGlzY29ubmVjdGVkTWF0Y2giLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsImFkb3duIiwiYnVwIiwiY29tcGFyZSIsInNvcnREZXRhY2hlZCIsImF1cCIsImFwIiwiYnAiLCJ1bnNoaWZ0IiwiZXhwciIsImVsZW1lbnRzIiwiYXR0ciIsInNwZWNpZmllZCIsInNlbCIsInVuaXF1ZVNvcnQiLCJkdXBsaWNhdGVzIiwiZGV0ZWN0RHVwbGljYXRlcyIsInNvcnRTdGFibGUiLCJ0ZXh0Q29udGVudCIsImZpcnN0Q2hpbGQiLCJub2RlVmFsdWUiLCJzZWxlY3RvcnMiLCJjcmVhdGVQc2V1ZG8iLCJyZWxhdGl2ZSIsInByZUZpbHRlciIsImV4Y2VzcyIsInVucXVvdGVkIiwibm9kZU5hbWVTZWxlY3RvciIsInBhdHRlcm4iLCJvcGVyYXRvciIsImNoZWNrIiwicmVzdWx0Iiwid2hhdCIsIl9hcmd1bWVudCIsInNpbXBsZSIsImZvcndhcmQiLCJvZlR5cGUiLCJfY29udGV4dCIsInhtbCIsInVuaXF1ZUNhY2hlIiwib3V0ZXJDYWNoZSIsIm5vZGVJbmRleCIsInN0YXJ0IiwicGFyZW50IiwidXNlQ2FjaGUiLCJsYXN0Q2hpbGQiLCJ1bmlxdWVJRCIsInBzZXVkbyIsImFyZ3MiLCJzZXRGaWx0ZXJzIiwiaWR4IiwibWF0Y2hlZCIsIm1hdGNoZXIiLCJ1bm1hdGNoZWQiLCJsYW5nIiwiZWxlbUxhbmciLCJoYXNoIiwibG9jYXRpb24iLCJhY3RpdmVFbGVtZW50IiwiaGFzRm9jdXMiLCJocmVmIiwidGFiSW5kZXgiLCJjaGVja2VkIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEluZGV4IiwiX21hdGNoSW5kZXhlcyIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsInN1Ym1pdCIsInJlc2V0IiwiZmlsdGVycyIsInBhcnNlT25seSIsInRva2VucyIsInNvRmFyIiwicHJlRmlsdGVycyIsImNhY2hlZCIsImNvbWJpbmF0b3IiLCJiYXNlIiwic2tpcCIsImNoZWNrTm9uRWxlbWVudHMiLCJkb25lTmFtZSIsIm9sZENhY2hlIiwibmV3Q2FjaGUiLCJlbGVtZW50TWF0Y2hlciIsIm1hdGNoZXJzIiwibXVsdGlwbGVDb250ZXh0cyIsImNvbnRleHRzIiwiY29uZGVuc2UiLCJuZXdVbm1hdGNoZWQiLCJtYXBwZWQiLCJzZXRNYXRjaGVyIiwicG9zdEZpbHRlciIsInBvc3RGaW5kZXIiLCJwb3N0U2VsZWN0b3IiLCJ0ZW1wIiwicHJlTWFwIiwicG9zdE1hcCIsInByZWV4aXN0aW5nIiwibWF0Y2hlckluIiwibWF0Y2hlck91dCIsIm1hdGNoZXJGcm9tVG9rZW5zIiwiY2hlY2tDb250ZXh0IiwibGVhZGluZ1JlbGF0aXZlIiwiaW1wbGljaXRSZWxhdGl2ZSIsIm1hdGNoQ29udGV4dCIsIm1hdGNoQW55Q29udGV4dCIsIm1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyIsImVsZW1lbnRNYXRjaGVycyIsInNldE1hdGNoZXJzIiwiYnlTZXQiLCJieUVsZW1lbnQiLCJzdXBlck1hdGNoZXIiLCJvdXRlcm1vc3QiLCJtYXRjaGVkQ291bnQiLCJzZXRNYXRjaGVkIiwiY29udGV4dEJhY2t1cCIsImRpcnJ1bnNVbmlxdWUiLCJ0b2tlbiIsImNvbXBpbGVkIiwiX25hbWUiLCJkZWZhdWx0VmFsdWUiLCJ1bmlxdWUiLCJpc1hNTERvYyIsImVzY2FwZVNlbGVjdG9yIiwidW50aWwiLCJ0cnVuY2F0ZSIsImlzIiwic2libGluZ3MiLCJuIiwicm5lZWRzQ29udGV4dCIsIm5lZWRzQ29udGV4dCIsInJzaW5nbGVUYWciLCJ3aW5ub3ciLCJxdWFsaWZpZXIiLCJub3QiLCJzZWxmIiwicm9vdGpRdWVyeSIsInJvb3QiLCJwYXJzZUhUTUwiLCJyZWFkeSIsInJwYXJlbnRzcHJldiIsImd1YXJhbnRlZWRVbmlxdWUiLCJjaGlsZHJlbiIsImNvbnRlbnRzIiwicHJldiIsImhhcyIsInRhcmdldHMiLCJsIiwiY2xvc2VzdCIsImluZGV4IiwicHJldkFsbCIsImFkZCIsImFkZEJhY2siLCJzaWJsaW5nIiwicGFyZW50cyIsInBhcmVudHNVbnRpbCIsIm5leHRBbGwiLCJuZXh0VW50aWwiLCJwcmV2VW50aWwiLCJjb250ZW50RG9jdW1lbnQiLCJjb250ZW50IiwicmV2ZXJzZSIsInJub3RodG1sd2hpdGUiLCJjcmVhdGVPcHRpb25zIiwib2JqZWN0IiwiXyIsImZsYWciLCJDYWxsYmFja3MiLCJmaXJpbmciLCJtZW1vcnkiLCJmaXJlZCIsImxvY2tlZCIsInF1ZXVlIiwiZmlyaW5nSW5kZXgiLCJmaXJlIiwib25jZSIsInN0b3BPbkZhbHNlIiwicmVtb3ZlIiwiZW1wdHkiLCJkaXNhYmxlIiwibG9jayIsImZpcmVXaXRoIiwiSWRlbnRpdHkiLCJ2IiwiVGhyb3dlciIsImV4IiwiYWRvcHRWYWx1ZSIsInJlc29sdmUiLCJyZWplY3QiLCJub1ZhbHVlIiwibWV0aG9kIiwicHJvbWlzZSIsImZhaWwiLCJ0aGVuIiwiRGVmZXJyZWQiLCJmdW5jIiwidHVwbGVzIiwic3RhdGUiLCJhbHdheXMiLCJkZWZlcnJlZCIsInBpcGUiLCJmbnMiLCJuZXdEZWZlciIsInR1cGxlIiwicmV0dXJuZWQiLCJwcm9ncmVzcyIsIm5vdGlmeSIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsIm9uUHJvZ3Jlc3MiLCJtYXhEZXB0aCIsImRlcHRoIiwic3BlY2lhbCIsInRoYXQiLCJtaWdodFRocm93IiwiVHlwZUVycm9yIiwibm90aWZ5V2l0aCIsInJlc29sdmVXaXRoIiwicHJvY2VzcyIsImV4Y2VwdGlvbkhvb2siLCJzdGFja1RyYWNlIiwicmVqZWN0V2l0aCIsImdldFN0YWNrSG9vayIsInNldFRpbWVvdXQiLCJzdGF0ZVN0cmluZyIsIndoZW4iLCJzaW5nbGVWYWx1ZSIsInJlbWFpbmluZyIsInJlc29sdmVDb250ZXh0cyIsInJlc29sdmVWYWx1ZXMiLCJwcmltYXJ5IiwidXBkYXRlRnVuYyIsInJlcnJvck5hbWVzIiwic3RhY2siLCJjb25zb2xlIiwid2FybiIsIm1lc3NhZ2UiLCJyZWFkeUV4Y2VwdGlvbiIsInJlYWR5TGlzdCIsInJlYWR5V2FpdCIsIndhaXQiLCJjb21wbGV0ZWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVhZHlTdGF0ZSIsImRvU2Nyb2xsIiwiYWNjZXNzIiwiY2hhaW5hYmxlIiwiZW1wdHlHZXQiLCJyYXciLCJidWxrIiwiX2tleSIsInJtc1ByZWZpeCIsInJkYXNoQWxwaGEiLCJmY2FtZWxDYXNlIiwiX2FsbCIsImxldHRlciIsInRvVXBwZXJDYXNlIiwiY2FtZWxDYXNlIiwic3RyaW5nIiwiYWNjZXB0RGF0YSIsIm93bmVyIiwiRGF0YSIsInVpZCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwic2V0IiwiZGF0YSIsInByb3AiLCJoYXNEYXRhIiwiZGF0YVByaXYiLCJkYXRhVXNlciIsInJicmFjZSIsInJtdWx0aURhc2giLCJnZXREYXRhIiwiSlNPTiIsInBhcnNlIiwiZGF0YUF0dHIiLCJyZW1vdmVEYXRhIiwiX2RhdGEiLCJfcmVtb3ZlRGF0YSIsImRlcXVldWUiLCJzdGFydExlbmd0aCIsImhvb2tzIiwiX3F1ZXVlSG9va3MiLCJzdG9wIiwic2V0dGVyIiwiY2xlYXJRdWV1ZSIsImNvdW50IiwiZGVmZXIiLCJwbnVtIiwic291cmNlIiwicmNzc051bSIsImNzc0V4cGFuZCIsImlzQXR0YWNoZWQiLCJjb21wb3NlZCIsImdldFJvb3ROb2RlIiwiaXNIaWRkZW5XaXRoaW5UcmVlIiwic3R5bGUiLCJkaXNwbGF5IiwiY3NzIiwiYWRqdXN0Q1NTIiwidmFsdWVQYXJ0cyIsInR3ZWVuIiwiYWRqdXN0ZWQiLCJzY2FsZSIsIm1heEl0ZXJhdGlvbnMiLCJjdXJyZW50VmFsdWUiLCJpbml0aWFsIiwidW5pdCIsImNzc051bWJlciIsImluaXRpYWxJblVuaXQiLCJkZWZhdWx0RGlzcGxheU1hcCIsImdldERlZmF1bHREaXNwbGF5IiwiYm9keSIsInNob3dIaWRlIiwic2hvdyIsInZhbHVlcyIsImhpZGUiLCJ0b2dnbGUiLCJyY2hlY2thYmxlVHlwZSIsInJ0YWdOYW1lIiwicnNjcmlwdFR5cGUiLCJmcmFnbWVudCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJkaXYiLCJjaGVja0Nsb25lIiwiY2xvbmVOb2RlIiwibm9DbG9uZUNoZWNrZWQiLCJvcHRpb24iLCJ3cmFwTWFwIiwidGhlYWQiLCJjb2wiLCJ0ciIsInRkIiwiX2RlZmF1bHQiLCJ0Ym9keSIsInRmb290IiwiY29sZ3JvdXAiLCJjYXB0aW9uIiwidGgiLCJvcHRncm91cCIsImdldEFsbCIsInNldEdsb2JhbEV2YWwiLCJyZWZFbGVtZW50cyIsImJ1aWxkRnJhZ21lbnQiLCJzY3JpcHRzIiwic2VsZWN0aW9uIiwiaWdub3JlZCIsIndyYXAiLCJhdHRhY2hlZCIsIm5vZGVzIiwiY3JlYXRlVGV4dE5vZGUiLCJodG1sUHJlZmlsdGVyIiwicnR5cGVuYW1lc3BhY2UiLCJyZXR1cm5UcnVlIiwicmV0dXJuRmFsc2UiLCJleHBlY3RTeW5jIiwic2FmZUFjdGl2ZUVsZW1lbnQiLCJlcnIiLCJvbiIsInR5cGVzIiwib25lIiwib3JpZ0ZuIiwiZXZlbnQiLCJvZmYiLCJoYW5kbGVPYmpJbiIsImV2ZW50SGFuZGxlIiwiZXZlbnRzIiwidCIsImhhbmRsZU9iaiIsImhhbmRsZXJzIiwibmFtZXNwYWNlcyIsIm9yaWdUeXBlIiwiZWxlbURhdGEiLCJjcmVhdGUiLCJoYW5kbGUiLCJ0cmlnZ2VyZWQiLCJkaXNwYXRjaCIsImRlbGVnYXRlVHlwZSIsImJpbmRUeXBlIiwiZGVsZWdhdGVDb3VudCIsInNldHVwIiwibWFwcGVkVHlwZXMiLCJvcmlnQ291bnQiLCJ0ZWFyZG93biIsInJlbW92ZUV2ZW50IiwibmF0aXZlRXZlbnQiLCJoYW5kbGVyUXVldWUiLCJmaXgiLCJkZWxlZ2F0ZVRhcmdldCIsInByZURpc3BhdGNoIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJjdXJyZW50VGFyZ2V0IiwiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLCJybmFtZXNwYWNlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3N0RGlzcGF0Y2giLCJtYXRjaGVkSGFuZGxlcnMiLCJtYXRjaGVkU2VsZWN0b3JzIiwiYnV0dG9uIiwiYWRkUHJvcCIsImhvb2siLCJFdmVudCIsImVudW1lcmFibGUiLCJvcmlnaW5hbEV2ZW50Iiwid3JpdGFibGUiLCJsb2FkIiwibm9CdWJibGUiLCJjbGljayIsImxldmVyYWdlTmF0aXZlIiwidHJpZ2dlciIsImJlZm9yZXVubG9hZCIsInJldHVyblZhbHVlIiwibm90QXN5bmMiLCJzYXZlZCIsImlzVHJpZ2dlciIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInByb3BzIiwiaXNEZWZhdWx0UHJldmVudGVkIiwiZGVmYXVsdFByZXZlbnRlZCIsInJlbGF0ZWRUYXJnZXQiLCJ0aW1lU3RhbXAiLCJub3ciLCJpc1NpbXVsYXRlZCIsImFsdEtleSIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwiY2hhbmdlZFRvdWNoZXMiLCJjdHJsS2V5IiwiZGV0YWlsIiwiZXZlbnRQaGFzZSIsIm1ldGFLZXkiLCJwYWdlWCIsInBhZ2VZIiwic2hpZnRLZXkiLCJ2aWV3IiwiY2hhckNvZGUiLCJrZXlDb2RlIiwiYnV0dG9ucyIsImNsaWVudFgiLCJjbGllbnRZIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJwb2ludGVySWQiLCJwb2ludGVyVHlwZSIsInNjcmVlblgiLCJzY3JlZW5ZIiwidGFyZ2V0VG91Y2hlcyIsInRvRWxlbWVudCIsInRvdWNoZXMiLCJ3aGljaCIsImZvY3VzIiwiYmx1ciIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmxlYXZlIiwib3JpZyIsInJlbGF0ZWQiLCJybm9Jbm5lcmh0bWwiLCJyY2hlY2tlZCIsInJjbGVhblNjcmlwdCIsIm1hbmlwdWxhdGlvblRhcmdldCIsImRpc2FibGVTY3JpcHQiLCJyZXN0b3JlU2NyaXB0IiwiY2xvbmVDb3B5RXZlbnQiLCJkZXN0IiwicGRhdGFPbGQiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwiZml4SW5wdXQiLCJkb21NYW5pcCIsImNvbGxlY3Rpb24iLCJoYXNTY3JpcHRzIiwiaU5vQ2xvbmUiLCJ2YWx1ZUlzRnVuY3Rpb24iLCJodG1sIiwiX2V2YWxVcmwiLCJrZWVwRGF0YSIsImNsZWFuRGF0YSIsImRhdGFBbmRFdmVudHMiLCJkZWVwRGF0YUFuZEV2ZW50cyIsInNyY0VsZW1lbnRzIiwiZGVzdEVsZW1lbnRzIiwiaW5QYWdlIiwiZGV0YWNoIiwiYXBwZW5kIiwicHJlcGVuZCIsImluc2VydEJlZm9yZSIsImJlZm9yZSIsImFmdGVyIiwicmVwbGFjZVdpdGgiLCJyZXBsYWNlQ2hpbGQiLCJhcHBlbmRUbyIsInByZXBlbmRUbyIsImluc2VydEFmdGVyIiwicmVwbGFjZUFsbCIsIm9yaWdpbmFsIiwiaW5zZXJ0Iiwicm51bW5vbnB4IiwicmN1c3RvbVByb3AiLCJnZXRTdHlsZXMiLCJvcGVuZXIiLCJnZXRDb21wdXRlZFN0eWxlIiwic3dhcCIsIm9sZCIsInJib3hTdHlsZSIsInJ0cmltQ1NTIiwiY29tcHV0ZVN0eWxlVGVzdHMiLCJjb250YWluZXIiLCJjc3NUZXh0IiwiZGl2U3R5bGUiLCJwaXhlbFBvc2l0aW9uVmFsIiwicmVsaWFibGVNYXJnaW5MZWZ0VmFsIiwicm91bmRQaXhlbE1lYXN1cmVzIiwibWFyZ2luTGVmdCIsInJpZ2h0IiwicGl4ZWxCb3hTdHlsZXNWYWwiLCJib3hTaXppbmdSZWxpYWJsZVZhbCIsIndpZHRoIiwicG9zaXRpb24iLCJzY3JvbGxib3hTaXplVmFsIiwib2Zmc2V0V2lkdGgiLCJtZWFzdXJlIiwicm91bmQiLCJwYXJzZUZsb2F0IiwicmVsaWFibGVUckRpbWVuc2lvbnNWYWwiLCJiYWNrZ3JvdW5kQ2xpcCIsImNsZWFyQ2xvbmVTdHlsZSIsImJveFNpemluZ1JlbGlhYmxlIiwicGl4ZWxCb3hTdHlsZXMiLCJwaXhlbFBvc2l0aW9uIiwicmVsaWFibGVNYXJnaW5MZWZ0Iiwic2Nyb2xsYm94U2l6ZSIsInJlbGlhYmxlVHJEaW1lbnNpb25zIiwidGFibGUiLCJ0ckNoaWxkIiwidHJTdHlsZSIsImhlaWdodCIsInBhcnNlSW50IiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsIm9mZnNldEhlaWdodCIsImN1ckNTUyIsImNvbXB1dGVkIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImlzQ3VzdG9tUHJvcCIsImdldFByb3BlcnR5VmFsdWUiLCJhZGRHZXRIb29rSWYiLCJjb25kaXRpb25GbiIsImhvb2tGbiIsImNzc1ByZWZpeGVzIiwiZW1wdHlTdHlsZSIsInZlbmRvclByb3BzIiwidmVuZG9yUHJvcE5hbWUiLCJjYXBOYW1lIiwiZmluYWxQcm9wTmFtZSIsImZpbmFsIiwiY3NzUHJvcHMiLCJyZGlzcGxheXN3YXAiLCJjc3NTaG93IiwidmlzaWJpbGl0eSIsImNzc05vcm1hbFRyYW5zZm9ybSIsImxldHRlclNwYWNpbmciLCJmb250V2VpZ2h0Iiwic2V0UG9zaXRpdmVOdW1iZXIiLCJzdWJ0cmFjdCIsIm1heCIsImJveE1vZGVsQWRqdXN0bWVudCIsImRpbWVuc2lvbiIsImJveCIsImlzQm9yZGVyQm94Iiwic3R5bGVzIiwiY29tcHV0ZWRWYWwiLCJleHRyYSIsImRlbHRhIiwiY2VpbCIsImdldFdpZHRoT3JIZWlnaHQiLCJib3hTaXppbmdOZWVkZWQiLCJ2YWx1ZUlzQm9yZGVyQm94Iiwib2Zmc2V0UHJvcCIsImdldENsaWVudFJlY3RzIiwiY3NzSG9va3MiLCJvcGFjaXR5Iiwib3JpZ05hbWUiLCJzZXRQcm9wZXJ0eSIsImlzRmluaXRlIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic2Nyb2xsYm94U2l6ZUJ1Z2d5IiwibGVmdCIsIm1hcmdpbiIsInBhZGRpbmciLCJib3JkZXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJleHBhbmQiLCJleHBhbmRlZCIsInBhcnRzIiwiVHdlZW4iLCJlYXNpbmciLCJwcm9wSG9va3MiLCJydW4iLCJwZXJjZW50IiwiZWFzZWQiLCJkdXJhdGlvbiIsInBvcyIsInN0ZXAiLCJmeCIsInNjcm9sbFRvcCIsInNjcm9sbExlZnQiLCJsaW5lYXIiLCJwIiwic3dpbmciLCJjb3MiLCJQSSIsImZ4Tm93IiwiaW5Qcm9ncmVzcyIsInJmeHR5cGVzIiwicnJ1biIsInNjaGVkdWxlIiwiaGlkZGVuIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaW50ZXJ2YWwiLCJ0aWNrIiwiY3JlYXRlRnhOb3ciLCJnZW5GeCIsImluY2x1ZGVXaWR0aCIsImNyZWF0ZVR3ZWVuIiwiYW5pbWF0aW9uIiwiQW5pbWF0aW9uIiwidHdlZW5lcnMiLCJkZWZhdWx0UHJlZmlsdGVyIiwib3B0cyIsIm9sZGZpcmUiLCJwcm9wVHdlZW4iLCJyZXN0b3JlRGlzcGxheSIsImlzQm94IiwiYW5pbSIsImRhdGFTaG93IiwidW5xdWV1ZWQiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsInByb3BGaWx0ZXIiLCJzcGVjaWFsRWFzaW5nIiwicHJvcGVydGllcyIsInN0b3BwZWQiLCJwcmVmaWx0ZXJzIiwiY3VycmVudFRpbWUiLCJzdGFydFRpbWUiLCJ0d2VlbnMiLCJvcmlnaW5hbFByb3BlcnRpZXMiLCJvcmlnaW5hbE9wdGlvbnMiLCJnb3RvRW5kIiwiYmluZCIsImNvbXBsZXRlIiwidGltZXIiLCJ0d2VlbmVyIiwicHJlZmlsdGVyIiwic3BlZWQiLCJvcHQiLCJzcGVlZHMiLCJmYWRlVG8iLCJ0byIsImFuaW1hdGUiLCJvcHRhbGwiLCJkb0FuaW1hdGlvbiIsImZpbmlzaCIsInN0b3BRdWV1ZSIsInRpbWVycyIsImNzc0ZuIiwic2xpZGVEb3duIiwic2xpZGVVcCIsInNsaWRlVG9nZ2xlIiwiZmFkZUluIiwiZmFkZU91dCIsImZhZGVUb2dnbGUiLCJzbG93IiwiZmFzdCIsImRlbGF5IiwidGltZSIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJjaGVja09uIiwib3B0U2VsZWN0ZWQiLCJyYWRpb1ZhbHVlIiwiYm9vbEhvb2siLCJyZW1vdmVBdHRyIiwiblR5cGUiLCJhdHRySG9va3MiLCJib29sIiwiYXR0ck5hbWVzIiwiZ2V0dGVyIiwibG93ZXJjYXNlTmFtZSIsInJmb2N1c2FibGUiLCJyY2xpY2thYmxlIiwicmVtb3ZlUHJvcCIsInByb3BGaXgiLCJ0YWJpbmRleCIsInN0cmlwQW5kQ29sbGFwc2UiLCJnZXRDbGFzcyIsImNsYXNzZXNUb0FycmF5IiwiYWRkQ2xhc3MiLCJjbGFzc05hbWVzIiwiY3VyVmFsdWUiLCJmaW5hbFZhbHVlIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsInN0YXRlVmFsIiwiaXNWYWxpZFZhbHVlIiwiaGFzQ2xhc3MiLCJycmV0dXJuIiwidmFsSG9va3MiLCJvcHRpb25TZXQiLCJmb2N1c2luIiwicmZvY3VzTW9ycGgiLCJzdG9wUHJvcGFnYXRpb25DYWxsYmFjayIsIm9ubHlIYW5kbGVycyIsImJ1YmJsZVR5cGUiLCJvbnR5cGUiLCJsYXN0RWxlbWVudCIsImV2ZW50UGF0aCIsInBhcmVudFdpbmRvdyIsInNpbXVsYXRlIiwidHJpZ2dlckhhbmRsZXIiLCJhdHRhY2hlcyIsInJxdWVyeSIsInBhcnNlWE1MIiwicGFyc2VyRXJyb3JFbGVtIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwicmJyYWNrZXQiLCJyQ1JMRiIsInJzdWJtaXR0ZXJUeXBlcyIsInJzdWJtaXR0YWJsZSIsImJ1aWxkUGFyYW1zIiwidHJhZGl0aW9uYWwiLCJwYXJhbSIsInMiLCJ2YWx1ZU9yRnVuY3Rpb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVBcnJheSIsInIyMCIsInJoYXNoIiwicmFudGlDYWNoZSIsInJoZWFkZXJzIiwicmxvY2FsUHJvdG9jb2wiLCJybm9Db250ZW50IiwicnByb3RvY29sIiwidHJhbnNwb3J0cyIsImFsbFR5cGVzIiwib3JpZ2luQW5jaG9yIiwiYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwic3RydWN0dXJlIiwiZGF0YVR5cGVFeHByZXNzaW9uIiwiZGF0YVR5cGUiLCJkYXRhVHlwZXMiLCJpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsImpxWEhSIiwiaW5zcGVjdGVkIiwic2Vla2luZ1RyYW5zcG9ydCIsImluc3BlY3QiLCJwcmVmaWx0ZXJPckZhY3RvcnkiLCJkYXRhVHlwZU9yVHJhbnNwb3J0IiwiYWpheEV4dGVuZCIsImZsYXRPcHRpb25zIiwiYWpheFNldHRpbmdzIiwiYWpheEhhbmRsZVJlc3BvbnNlcyIsInJlc3BvbnNlcyIsImN0IiwiZmluYWxEYXRhVHlwZSIsImZpcnN0RGF0YVR5cGUiLCJtaW1lVHlwZSIsImdldFJlc3BvbnNlSGVhZGVyIiwiY29udmVydGVycyIsImFqYXhDb252ZXJ0IiwicmVzcG9uc2UiLCJpc1N1Y2Nlc3MiLCJjb252MiIsImN1cnJlbnQiLCJjb252IiwicmVzcG9uc2VGaWVsZHMiLCJkYXRhRmlsdGVyIiwiYWN0aXZlIiwibGFzdE1vZGlmaWVkIiwiZXRhZyIsInVybCIsImlzTG9jYWwiLCJwcm90b2NvbCIsInByb2Nlc3NEYXRhIiwiYXN5bmMiLCJjb250ZW50VHlwZSIsImFjY2VwdHMiLCJqc29uIiwiYWpheFNldHVwIiwic2V0dGluZ3MiLCJhamF4UHJlZmlsdGVyIiwiYWpheFRyYW5zcG9ydCIsImFqYXgiLCJ0cmFuc3BvcnQiLCJjYWNoZVVSTCIsInJlc3BvbnNlSGVhZGVyc1N0cmluZyIsInJlc3BvbnNlSGVhZGVycyIsInRpbWVvdXRUaW1lciIsInVybEFuY2hvciIsImZpcmVHbG9iYWxzIiwidW5jYWNoZWQiLCJjYWxsYmFja0NvbnRleHQiLCJnbG9iYWxFdmVudENvbnRleHQiLCJjb21wbGV0ZURlZmVycmVkIiwic3RhdHVzQ29kZSIsInJlcXVlc3RIZWFkZXJzIiwicmVxdWVzdEhlYWRlcnNOYW1lcyIsInN0ckFib3J0IiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwic2V0UmVxdWVzdEhlYWRlciIsIm92ZXJyaWRlTWltZVR5cGUiLCJzdGF0dXMiLCJhYm9ydCIsInN0YXR1c1RleHQiLCJmaW5hbFRleHQiLCJjcm9zc0RvbWFpbiIsImhvc3QiLCJoYXNDb250ZW50IiwiaWZNb2RpZmllZCIsImhlYWRlcnMiLCJiZWZvcmVTZW5kIiwic3VjY2VzcyIsInNlbmQiLCJuYXRpdmVTdGF0dXNUZXh0IiwibW9kaWZpZWQiLCJnZXRKU09OIiwiZ2V0U2NyaXB0Iiwid3JhcEFsbCIsImZpcnN0RWxlbWVudENoaWxkIiwid3JhcElubmVyIiwiaHRtbElzRnVuY3Rpb24iLCJ1bndyYXAiLCJ2aXNpYmxlIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJ4aHJTdWNjZXNzU3RhdHVzIiwieGhyU3VwcG9ydGVkIiwiY29ycyIsImVycm9yQ2FsbGJhY2siLCJvcGVuIiwidXNlcm5hbWUiLCJ4aHJGaWVsZHMiLCJvbmxvYWQiLCJvbmVycm9yIiwib25hYm9ydCIsIm9udGltZW91dCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlc3BvbnNlVHlwZSIsInJlc3BvbnNlVGV4dCIsImJpbmFyeSIsInNjcmlwdEF0dHJzIiwiY2hhcnNldCIsInNjcmlwdENoYXJzZXQiLCJldnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwiY3JlYXRlSFRNTERvY3VtZW50IiwiaW1wbGVtZW50YXRpb24iLCJrZWVwU2NyaXB0cyIsInBhcnNlZCIsInBhcmFtcyIsImFuaW1hdGVkIiwib2Zmc2V0Iiwic2V0T2Zmc2V0IiwiY3VyUG9zaXRpb24iLCJjdXJMZWZ0IiwiY3VyQ1NTVG9wIiwiY3VyVG9wIiwiY3VyT2Zmc2V0IiwiY3VyQ1NTTGVmdCIsImNhbGN1bGF0ZVBvc2l0aW9uIiwiY3VyRWxlbSIsInVzaW5nIiwicmVjdCIsIndpbiIsInBhZ2VZT2Zmc2V0IiwicGFnZVhPZmZzZXQiLCJvZmZzZXRQYXJlbnQiLCJwYXJlbnRPZmZzZXQiLCJzY3JvbGxUbyIsIkhlaWdodCIsIldpZHRoIiwiZGVmYXVsdEV4dHJhIiwiZnVuY05hbWUiLCJ1bmJpbmQiLCJkZWxlZ2F0ZSIsInVuZGVsZWdhdGUiLCJob3ZlciIsImZuT3ZlciIsImZuT3V0IiwicHJveHkiLCJob2xkUmVhZHkiLCJob2xkIiwicGFyc2VKU09OIiwiaXNOdW1lcmljIiwiaXNOYU4iLCJ0cmltIiwiZGVmaW5lIiwiYW1kIiwiX2pRdWVyeSIsIl8kIiwiJCIsIm5vQ29uZmxpY3QiLCJlbGVtZW50IiwiaW5jbHVkZVNjYWxlIiwic2NhbGVYIiwic2NhbGVZIiwiYm90dG9tIiwieCIsInkiLCJnZXRXaW5kb3ciLCJnZXRXaW5kb3dTY3JvbGwiLCJpc0VsZW1lbnQiLCJPd25FbGVtZW50IiwiRWxlbWVudCIsImlzSFRNTEVsZW1lbnQiLCJIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsIlNoYWRvd1Jvb3QiLCJnZXRIVE1MRWxlbWVudFNjcm9sbCIsImdldE5vZGVTY3JvbGwiLCJnZXROb2RlTmFtZSIsImdldERvY3VtZW50RWxlbWVudCIsImdldFdpbmRvd1Njcm9sbEJhclgiLCJpc1Njcm9sbFBhcmVudCIsImlzRWxlbWVudFNjYWxlZCIsImdldENvbXBvc2l0ZVJlY3QiLCJlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCIsImlzRml4ZWQiLCJpc09mZnNldFBhcmVudEFuRWxlbWVudCIsInNjcm9sbCIsIm9mZnNldHMiLCJjbGllbnRMZWZ0IiwiY2xpZW50VG9wIiwiZ2V0TGF5b3V0UmVjdCIsImNsaWVudFJlY3QiLCJhYnMiLCJvZmZzZXRMZWZ0Iiwib2Zmc2V0VG9wIiwiZ2V0UGFyZW50Tm9kZSIsImFzc2lnbmVkU2xvdCIsImdldFNjcm9sbFBhcmVudCIsImxpc3RTY3JvbGxQYXJlbnRzIiwic2Nyb2xsUGFyZW50IiwiaXNCb2R5IiwiX2VsZW1lbnQkb3duZXJEb2N1bWVuIiwidmlzdWFsVmlld3BvcnQiLCJ1cGRhdGVkTGlzdCIsImlzVGFibGVFbGVtZW50IiwiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsImdldENvbnRhaW5pbmdCbG9jayIsImlzRmlyZWZveCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImlzSUUiLCJlbGVtZW50Q3NzIiwiY3VycmVudE5vZGUiLCJ0cmFuc2Zvcm0iLCJwZXJzcGVjdGl2ZSIsImNvbnRhaW4iLCJ3aWxsQ2hhbmdlIiwiZ2V0T2Zmc2V0UGFyZW50IiwiYXV0byIsImJhc2VQbGFjZW1lbnRzIiwiY2xpcHBpbmdQYXJlbnRzIiwidmlld3BvcnQiLCJwb3BwZXIiLCJyZWZlcmVuY2UiLCJ2YXJpYXRpb25QbGFjZW1lbnRzIiwicmVkdWNlIiwiYWNjIiwicGxhY2VtZW50IiwicGxhY2VtZW50cyIsImJlZm9yZVJlYWQiLCJyZWFkIiwiYWZ0ZXJSZWFkIiwiYmVmb3JlTWFpbiIsIm1haW4iLCJhZnRlck1haW4iLCJiZWZvcmVXcml0ZSIsIndyaXRlIiwiYWZ0ZXJXcml0ZSIsIm1vZGlmaWVyUGhhc2VzIiwib3JkZXIiLCJtb2RpZmllcnMiLCJNYXAiLCJ2aXNpdGVkIiwiU2V0IiwiZm9yRWFjaCIsIm1vZGlmaWVyIiwicmVxdWlyZXMiLCJyZXF1aXJlc0lmRXhpc3RzIiwiZGVwIiwiZGVwTW9kaWZpZXIiLCJvcmRlck1vZGlmaWVycyIsIm9yZGVyZWRNb2RpZmllcnMiLCJwaGFzZSIsImRlYm91bmNlIiwicGVuZGluZyIsIlByb21pc2UiLCJmb3JtYXQiLCJzdHIiLCJjIiwiSU5WQUxJRF9NT0RJRklFUl9FUlJPUiIsIk1JU1NJTkdfREVQRU5ERU5DWV9FUlJPUiIsIlZBTElEX1BST1BFUlRJRVMiLCJ2YWxpZGF0ZU1vZGlmaWVycyIsImVuYWJsZWQiLCJlZmZlY3QiLCJyZXF1aXJlbWVudCIsIm1vZCIsInVuaXF1ZUJ5IiwiaWRlbnRpZmllcnMiLCJnZXRCYXNlUGxhY2VtZW50IiwibWVyZ2VCeU5hbWUiLCJtZXJnZWQiLCJleGlzdGluZyIsImdldFZpZXdwb3J0UmVjdCIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0IiwibWluIiwiZ2V0RG9jdW1lbnRSZWN0Iiwid2luU2Nyb2xsIiwic2Nyb2xsV2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJkaXJlY3Rpb24iLCJjaGlsZCIsInJvb3ROb2RlIiwiaXNTYW1lTm9kZSIsInJlY3RUb0NsaWVudFJlY3QiLCJnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdCIsImdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlIiwiY2xpcHBpbmdQYXJlbnQiLCJnZXRDbGlwcGluZ1BhcmVudHMiLCJjYW5Fc2NhcGVDbGlwcGluZyIsImNsaXBwZXJFbGVtZW50IiwiZ2V0Q2xpcHBpbmdSZWN0IiwiYm91bmRhcnkiLCJyb290Qm91bmRhcnkiLCJtYWluQ2xpcHBpbmdQYXJlbnRzIiwiZmlyc3RDbGlwcGluZ1BhcmVudCIsImNsaXBwaW5nUmVjdCIsImFjY1JlY3QiLCJnZXRWYXJpYXRpb24iLCJnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQiLCJjb21wdXRlT2Zmc2V0cyIsImJhc2VQbGFjZW1lbnQiLCJ2YXJpYXRpb24iLCJjb21tb25YIiwiY29tbW9uWSIsIm1haW5BeGlzIiwiZ2V0RnJlc2hTaWRlT2JqZWN0IiwibWVyZ2VQYWRkaW5nT2JqZWN0IiwicGFkZGluZ09iamVjdCIsImV4cGFuZFRvSGFzaE1hcCIsImhhc2hNYXAiLCJkZXRlY3RPdmVyZmxvdyIsImVsZW1lbnRDb250ZXh0IiwiYWx0Qm91bmRhcnkiLCJhbHRDb250ZXh0IiwicG9wcGVyUmVjdCIsInJlY3RzIiwiY2xpcHBpbmdDbGllbnRSZWN0IiwiY29udGV4dEVsZW1lbnQiLCJyZWZlcmVuY2VDbGllbnRSZWN0IiwicG9wcGVyT2Zmc2V0cyIsInN0cmF0ZWd5IiwicG9wcGVyQ2xpZW50UmVjdCIsImVsZW1lbnRDbGllbnRSZWN0Iiwib3ZlcmZsb3dPZmZzZXRzIiwib2Zmc2V0RGF0YSIsIm1vZGlmaWVyc0RhdGEiLCJtdWx0aXBseSIsImF4aXMiLCJJTlZBTElEX0VMRU1FTlRfRVJST1IiLCJJTkZJTklURV9MT09QX0VSUk9SIiwiREVGQVVMVF9PUFRJT05TIiwiYXJlVmFsaWRFbGVtZW50cyIsInNvbWUiLCJwb3BwZXJHZW5lcmF0b3IiLCJnZW5lcmF0b3JPcHRpb25zIiwiZGVmYXVsdE1vZGlmaWVycyIsImRlZmF1bHRPcHRpb25zIiwiY3JlYXRlUG9wcGVyIiwiZWZmZWN0Q2xlYW51cEZucyIsImlzRGVzdHJveWVkIiwiaW5zdGFuY2UiLCJzZXRPcHRpb25zIiwic2V0T3B0aW9uc0FjdGlvbiIsImNsZWFudXBNb2RpZmllckVmZmVjdHMiLCJzY3JvbGxQYXJlbnRzIiwiZmxpcE1vZGlmaWVyIiwibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJydW5Nb2RpZmllckVmZmVjdHMiLCJ1cGRhdGUiLCJmb3JjZVVwZGF0ZSIsIl9fZGVidWdfbG9vcHNfXyIsImRlc3Ryb3kiLCJvbkZpcnN0VXBkYXRlIiwiY2xlYW51cEZuIiwibm9vcEZuIiwicGFzc2l2ZSIsInJlc2l6ZSIsInVuc2V0U2lkZXMiLCJyb3VuZE9mZnNldHNCeURQUiIsImRwciIsImRldmljZVBpeGVsUmF0aW8iLCJtYXBUb1N0eWxlcyIsImdwdUFjY2VsZXJhdGlvbiIsImFkYXB0aXZlIiwicm91bmRPZmZzZXRzIiwiaGFzWCIsImhhc1kiLCJzaWRlWCIsInNpZGVZIiwiaGVpZ2h0UHJvcCIsIndpZHRoUHJvcCIsImNvbW1vblN0eWxlcyIsImNvbXB1dGVTdHlsZXMiLCJ0cmFuc2l0aW9uUHJvcGVydHkiLCJwcm9wZXJ0eSIsImFycm93IiwiYXBwbHlTdHlsZXMiLCJhc3NpZ24iLCJpbml0aWFsU3R5bGVzIiwic3R5bGVQcm9wZXJ0aWVzIiwiYXR0cmlidXRlIiwiZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkiLCJpbnZlcnREaXN0YW5jZSIsInNraWRkaW5nIiwiZGlzdGFuY2UiLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsImdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IiwiY29tcHV0ZUF1dG9QbGFjZW1lbnQiLCJmbGlwVmFyaWF0aW9ucyIsImFsbG93ZWRBdXRvUGxhY2VtZW50cyIsImFsbFBsYWNlbWVudHMiLCJhbGxvd2VkUGxhY2VtZW50cyIsIm92ZXJmbG93cyIsImdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzIiwib3Bwb3NpdGVQbGFjZW1lbnQiLCJmbGlwIiwiX3NraXAiLCJjaGVja01haW5BeGlzIiwiYWx0QXhpcyIsImNoZWNrQWx0QXhpcyIsInNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyIsImZhbGxiYWNrUGxhY2VtZW50cyIsInByZWZlcnJlZFBsYWNlbWVudCIsImlzQmFzZVBsYWNlbWVudCIsInJlZmVyZW5jZVJlY3QiLCJjaGVja3NNYXAiLCJtYWtlRmFsbGJhY2tDaGVja3MiLCJmaXJzdEZpdHRpbmdQbGFjZW1lbnQiLCJpc1N0YXJ0VmFyaWF0aW9uIiwiaXNWZXJ0aWNhbCIsIm1haW5WYXJpYXRpb25TaWRlIiwiYWx0VmFyaWF0aW9uU2lkZSIsImNoZWNrcyIsImV2ZXJ5IiwibnVtYmVyT2ZDaGVja3MiLCJmaXR0aW5nUGxhY2VtZW50IiwiZ2V0QWx0QXhpcyIsIndpdGhpbiIsIm1hdGhNYXgiLCJtYXRoTWluIiwicHJldmVudE92ZXJmbG93IiwidGV0aGVyIiwidGV0aGVyT2Zmc2V0IiwidGV0aGVyT2Zmc2V0VmFsdWUiLCJtYWluU2lkZSIsImFsdFNpZGUiLCJhZGRpdGl2ZSIsIm1pbkxlbiIsIm1heExlbiIsImFycm93RWxlbWVudCIsImFycm93UmVjdCIsImFycm93UGFkZGluZ09iamVjdCIsImFycm93UGFkZGluZ01pbiIsImFycm93UGFkZGluZ01heCIsImFycm93TGVuIiwibWluT2Zmc2V0IiwibWF4T2Zmc2V0IiwiYXJyb3dPZmZzZXRQYXJlbnQiLCJjbGllbnRPZmZzZXQiLCJvZmZzZXRNb2RpZmllclZhbHVlIiwidGV0aGVyTWluIiwidGV0aGVyTWF4IiwicHJldmVudGVkT2Zmc2V0IiwidG9QYWRkaW5nT2JqZWN0IiwibWluUHJvcCIsIm1heFByb3AiLCJlbmREaWZmIiwic3RhcnREaWZmIiwiY2xpZW50U2l6ZSIsImNlbnRlclRvUmVmZXJlbmNlIiwiY2VudGVyIiwiYXhpc1Byb3AiLCJjZW50ZXJPZmZzZXQiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0U2lkZU9mZnNldHMiLCJwcmV2ZW50ZWRPZmZzZXRzIiwiaXNBbnlTaWRlRnVsbHlDbGlwcGVkIiwic2lkZSIsInJlZmVyZW5jZU92ZXJmbG93IiwicG9wcGVyQWx0T3ZlcmZsb3ciLCJyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMiLCJwb3BwZXJFc2NhcGVPZmZzZXRzIiwiaXNSZWZlcmVuY2VIaWRkZW4iLCJoYXNQb3BwZXJFc2NhcGVkIiwiZXZlbnRMaXN0ZW5lcnMiLCJNQVhfVUlEIiwiTUlMTElTRUNPTkRTX01VTFRJUExJRVIiLCJUUkFOU0lUSU9OX0VORCIsImdldFVJRCIsImZsb29yIiwiZ2V0U2VsZWN0b3IiLCJocmVmQXR0ciIsImluY2x1ZGVzIiwic3RhcnRzV2l0aCIsImdldFNlbGVjdG9yRnJvbUVsZW1lbnQiLCJnZXRFbGVtZW50RnJvbVNlbGVjdG9yIiwiZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJ0cmFuc2l0aW9uRGVsYXkiLCJmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiIsIk51bWJlciIsImZsb2F0VHJhbnNpdGlvbkRlbGF5IiwidHJpZ2dlclRyYW5zaXRpb25FbmQiLCJkaXNwYXRjaEV2ZW50IiwiZ2V0RWxlbWVudCIsInR5cGVDaGVja0NvbmZpZyIsImNvbXBvbmVudE5hbWUiLCJjb25maWciLCJjb25maWdUeXBlcyIsImV4cGVjdGVkVHlwZXMiLCJ2YWx1ZVR5cGUiLCJpc1Zpc2libGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiY2xhc3NMaXN0IiwiaGFzQXR0cmlidXRlIiwiZmluZFNoYWRvd1Jvb3QiLCJhdHRhY2hTaGFkb3ciLCJyZWZsb3ciLCJnZXRqUXVlcnkiLCJET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzIiwib25ET01Db250ZW50TG9hZGVkIiwiaXNSVEwiLCJkZWZpbmVKUXVlcnlQbHVnaW4iLCJwbHVnaW4iLCJOQU1FIiwiSlFVRVJZX05PX0NPTkZMSUNUIiwialF1ZXJ5SW50ZXJmYWNlIiwiQ29uc3RydWN0b3IiLCJleGVjdXRlIiwiZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiIsInRyYW5zaXRpb25FbGVtZW50Iiwid2FpdEZvclRyYW5zaXRpb24iLCJkdXJhdGlvblBhZGRpbmciLCJlbXVsYXRlZER1cmF0aW9uIiwiY2FsbGVkIiwiZ2V0TmV4dEFjdGl2ZUVsZW1lbnQiLCJzaG91bGRHZXROZXh0IiwiaXNDeWNsZUFsbG93ZWQiLCJsaXN0TGVuZ3RoIiwibmFtZXNwYWNlUmVnZXgiLCJzdHJpcE5hbWVSZWdleCIsInN0cmlwVWlkUmVnZXgiLCJldmVudFJlZ2lzdHJ5IiwidWlkRXZlbnQiLCJjdXN0b21FdmVudHMiLCJjdXN0b21FdmVudHNSZWdleCIsIm5hdGl2ZUV2ZW50cyIsImdldFVpZEV2ZW50IiwiZ2V0RXZlbnQiLCJib290c3RyYXBIYW5kbGVyIiwib25lT2ZmIiwiRXZlbnRIYW5kbGVyIiwiYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIiLCJkb21FbGVtZW50cyIsImZpbmRIYW5kbGVyIiwiZGVsZWdhdGlvblNlbGVjdG9yIiwidWlkRXZlbnRMaXN0Iiwib3JpZ2luYWxIYW5kbGVyIiwibm9ybWFsaXplUGFyYW1zIiwib3JpZ2luYWxUeXBlRXZlbnQiLCJkZWxlZ2F0aW9uRm4iLCJkZWxlZ2F0aW9uIiwidHlwZUV2ZW50IiwiZ2V0VHlwZUV2ZW50IiwiaXNOYXRpdmUiLCJhZGRIYW5kbGVyIiwid3JhcEZuIiwicHJldmlvdXNGbiIsInJlbW92ZUhhbmRsZXIiLCJCb29sZWFuIiwicmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzIiwic3RvcmVFbGVtZW50RXZlbnQiLCJoYW5kbGVyS2V5IiwiaW5OYW1lc3BhY2UiLCJpc05hbWVzcGFjZSIsImVsZW1lbnRFdmVudCIsImtleUhhbmRsZXJzIiwialF1ZXJ5RXZlbnQiLCJuYXRpdmVEaXNwYXRjaCIsImNyZWF0ZUV2ZW50IiwiaW5pdEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJlbGVtZW50TWFwIiwiaW5zdGFuY2VNYXAiLCJzaXplIiwiZnJvbSIsIlZFUlNJT04iLCJCYXNlQ29tcG9uZW50IiwiX2VsZW1lbnQiLCJEQVRBX0tFWSIsImRpc3Bvc2UiLCJFVkVOVF9LRVkiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiX3F1ZXVlQ2FsbGJhY2siLCJpc0FuaW1hdGVkIiwiZ2V0SW5zdGFuY2UiLCJlbmFibGVEaXNtaXNzVHJpZ2dlciIsImNvbXBvbmVudCIsImNsaWNrRXZlbnQiLCJ0YWdOYW1lIiwiZ2V0T3JDcmVhdGVJbnN0YW5jZSIsIkVWRU5UX0NMT1NFIiwiRVZFTlRfQ0xPU0VEIiwiQ0xBU1NfTkFNRV9GQURFIiwiQ0xBU1NfTkFNRV9TSE9XIiwiQWxlcnQiLCJjbG9zZSIsImNsb3NlRXZlbnQiLCJfZGVzdHJveUVsZW1lbnQiLCJEQVRBX0FQSV9LRVkiLCJDTEFTU19OQU1FX0FDVElWRSIsIlNFTEVDVE9SX0RBVEFfVE9HR0xFIiwiRVZFTlRfQ0xJQ0tfREFUQV9BUEkiLCJCdXR0b24iLCJub3JtYWxpemVEYXRhIiwibm9ybWFsaXplRGF0YUtleSIsImNociIsIk1hbmlwdWxhdG9yIiwic2V0RGF0YUF0dHJpYnV0ZSIsInJlbW92ZURhdGFBdHRyaWJ1dGUiLCJnZXREYXRhQXR0cmlidXRlcyIsImRhdGFzZXQiLCJwdXJlS2V5IiwiY2hhckF0IiwiZ2V0RGF0YUF0dHJpYnV0ZSIsIk5PREVfVEVYVCIsIlNlbGVjdG9yRW5naW5lIiwiZmluZE9uZSIsImFuY2VzdG9yIiwicHJldmlvdXMiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiZm9jdXNhYmxlQ2hpbGRyZW4iLCJmb2N1c2FibGVzIiwiQVJST1dfTEVGVF9LRVkiLCJBUlJPV19SSUdIVF9LRVkiLCJUT1VDSEVWRU5UX0NPTVBBVF9XQUlUIiwiU1dJUEVfVEhSRVNIT0xEIiwiRGVmYXVsdCIsImtleWJvYXJkIiwic2xpZGUiLCJwYXVzZSIsInRvdWNoIiwiRGVmYXVsdFR5cGUiLCJPUkRFUl9ORVhUIiwiT1JERVJfUFJFViIsIkRJUkVDVElPTl9MRUZUIiwiRElSRUNUSU9OX1JJR0hUIiwiS0VZX1RPX0RJUkVDVElPTiIsIkVWRU5UX1NMSURFIiwiRVZFTlRfU0xJRCIsIkVWRU5UX0tFWURPV04iLCJFVkVOVF9NT1VTRUVOVEVSIiwiRVZFTlRfTU9VU0VMRUFWRSIsIkVWRU5UX1RPVUNIU1RBUlQiLCJFVkVOVF9UT1VDSE1PVkUiLCJFVkVOVF9UT1VDSEVORCIsIkVWRU5UX1BPSU5URVJET1dOIiwiRVZFTlRfUE9JTlRFUlVQIiwiRVZFTlRfRFJBR19TVEFSVCIsIkVWRU5UX0xPQURfREFUQV9BUEkiLCJDTEFTU19OQU1FX0NBUk9VU0VMIiwiQ0xBU1NfTkFNRV9TTElERSIsIkNMQVNTX05BTUVfRU5EIiwiQ0xBU1NfTkFNRV9TVEFSVCIsIkNMQVNTX05BTUVfTkVYVCIsIkNMQVNTX05BTUVfUFJFViIsIkNMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCIsIlNFTEVDVE9SX0FDVElWRSIsIlNFTEVDVE9SX0FDVElWRV9JVEVNIiwiU0VMRUNUT1JfSVRFTSIsIlNFTEVDVE9SX0lURU1fSU1HIiwiU0VMRUNUT1JfTkVYVF9QUkVWIiwiU0VMRUNUT1JfSU5ESUNBVE9SUyIsIlNFTEVDVE9SX0lORElDQVRPUiIsIlNFTEVDVE9SX0RBVEFfU0xJREUiLCJTRUxFQ1RPUl9EQVRBX1JJREUiLCJQT0lOVEVSX1RZUEVfVE9VQ0giLCJQT0lOVEVSX1RZUEVfUEVOIiwiQ2Fyb3VzZWwiLCJfaXRlbXMiLCJfaW50ZXJ2YWwiLCJfYWN0aXZlRWxlbWVudCIsIl9pc1BhdXNlZCIsIl9pc1NsaWRpbmciLCJ0b3VjaFRpbWVvdXQiLCJ0b3VjaFN0YXJ0WCIsInRvdWNoRGVsdGFYIiwiX2NvbmZpZyIsIl9nZXRDb25maWciLCJfaW5kaWNhdG9yc0VsZW1lbnQiLCJfdG91Y2hTdXBwb3J0ZWQiLCJtYXhUb3VjaFBvaW50cyIsIl9wb2ludGVyRXZlbnQiLCJQb2ludGVyRXZlbnQiLCJfYWRkRXZlbnRMaXN0ZW5lcnMiLCJfc2xpZGUiLCJuZXh0V2hlblZpc2libGUiLCJjeWNsZSIsImNsZWFySW50ZXJ2YWwiLCJfdXBkYXRlSW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsInZpc2liaWxpdHlTdGF0ZSIsImFjdGl2ZUluZGV4IiwiX2dldEl0ZW1JbmRleCIsIl9oYW5kbGVTd2lwZSIsImFic0RlbHRheCIsIl9rZXlkb3duIiwiX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMiLCJoYXNQb2ludGVyUGVuVG91Y2giLCJtb3ZlIiwiaXRlbUltZyIsIl9nZXRJdGVtQnlPcmRlciIsImlzTmV4dCIsIl90cmlnZ2VyU2xpZGVFdmVudCIsImV2ZW50RGlyZWN0aW9uTmFtZSIsInRhcmdldEluZGV4IiwiZnJvbUluZGV4IiwiX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQiLCJhY3RpdmVJbmRpY2F0b3IiLCJpbmRpY2F0b3JzIiwiZWxlbWVudEludGVydmFsIiwiZGVmYXVsdEludGVydmFsIiwiZGlyZWN0aW9uT3JPcmRlciIsIl9kaXJlY3Rpb25Ub09yZGVyIiwiYWN0aXZlRWxlbWVudEluZGV4IiwibmV4dEVsZW1lbnQiLCJuZXh0RWxlbWVudEluZGV4IiwiaXNDeWNsaW5nIiwiZGlyZWN0aW9uYWxDbGFzc05hbWUiLCJvcmRlckNsYXNzTmFtZSIsIl9vcmRlclRvRGlyZWN0aW9uIiwic2xpZGVFdmVudCIsInRyaWdnZXJTbGlkRXZlbnQiLCJjb21wbGV0ZUNhbGxCYWNrIiwiYWN0aW9uIiwicmlkZSIsImNhcm91c2VsSW50ZXJmYWNlIiwic2xpZGVJbmRleCIsImRhdGFBcGlDbGlja0hhbmRsZXIiLCJjYXJvdXNlbHMiLCJFVkVOVF9TSE9XIiwiRVZFTlRfU0hPV04iLCJFVkVOVF9ISURFIiwiRVZFTlRfSElEREVOIiwiQ0xBU1NfTkFNRV9DT0xMQVBTRSIsIkNMQVNTX05BTUVfQ09MTEFQU0lORyIsIkNMQVNTX05BTUVfQ09MTEFQU0VEIiwiQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4iLCJDTEFTU19OQU1FX0hPUklaT05UQUwiLCJXSURUSCIsIkhFSUdIVCIsIlNFTEVDVE9SX0FDVElWRVMiLCJDb2xsYXBzZSIsIl9pc1RyYW5zaXRpb25pbmciLCJfdHJpZ2dlckFycmF5IiwidG9nZ2xlTGlzdCIsImZpbHRlckVsZW1lbnQiLCJmb3VuZEVsZW0iLCJfc2VsZWN0b3IiLCJfaW5pdGlhbGl6ZUNoaWxkcmVuIiwiX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyIsIl9pc1Nob3duIiwiYWN0aXZlcyIsImFjdGl2ZXNEYXRhIiwidGVtcEFjdGl2ZURhdGEiLCJzdGFydEV2ZW50IiwiZWxlbUFjdGl2ZSIsIl9nZXREaW1lbnNpb24iLCJjYXBpdGFsaXplZERpbWVuc2lvbiIsInNjcm9sbFNpemUiLCJ0cmlnZ2VyQXJyYXlMZW5ndGgiLCJ0cmlnZ2VyQXJyYXkiLCJpc09wZW4iLCJzZWxlY3RvckVsZW1lbnRzIiwiRVNDQVBFX0tFWSIsIlNQQUNFX0tFWSIsIlRBQl9LRVkiLCJBUlJPV19VUF9LRVkiLCJBUlJPV19ET1dOX0tFWSIsIlJJR0hUX01PVVNFX0JVVFRPTiIsIlJFR0VYUF9LRVlET1dOIiwiRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSIsIkVWRU5UX0tFWVVQX0RBVEFfQVBJIiwiQ0xBU1NfTkFNRV9EUk9QVVAiLCJDTEFTU19OQU1FX0RST1BFTkQiLCJDTEFTU19OQU1FX0RST1BTVEFSVCIsIkNMQVNTX05BTUVfTkFWQkFSIiwiU0VMRUNUT1JfTUVOVSIsIlNFTEVDVE9SX05BVkJBUl9OQVYiLCJTRUxFQ1RPUl9WSVNJQkxFX0lURU1TIiwiUExBQ0VNRU5UX1RPUCIsIlBMQUNFTUVOVF9UT1BFTkQiLCJQTEFDRU1FTlRfQk9UVE9NIiwiUExBQ0VNRU5UX0JPVFRPTUVORCIsIlBMQUNFTUVOVF9SSUdIVCIsIlBMQUNFTUVOVF9MRUZUIiwicG9wcGVyQ29uZmlnIiwiYXV0b0Nsb3NlIiwiRHJvcGRvd24iLCJfcG9wcGVyIiwiX21lbnUiLCJfZ2V0TWVudUVsZW1lbnQiLCJfaW5OYXZiYXIiLCJfZGV0ZWN0TmF2YmFyIiwic2hvd0V2ZW50IiwiZ2V0UGFyZW50RnJvbUVsZW1lbnQiLCJfY3JlYXRlUG9wcGVyIiwiX2NvbXBsZXRlSGlkZSIsImhpZGVFdmVudCIsIlBvcHBlciIsInJlZmVyZW5jZUVsZW1lbnQiLCJfZ2V0UG9wcGVyQ29uZmlnIiwiaXNEaXNwbGF5U3RhdGljIiwiX2dldFBsYWNlbWVudCIsInBhcmVudERyb3Bkb3duIiwiaXNFbmQiLCJfZ2V0T2Zmc2V0IiwicG9wcGVyRGF0YSIsImRlZmF1bHRCc1BvcHBlckNvbmZpZyIsIl9zZWxlY3RNZW51SXRlbSIsIml0ZW1zIiwidG9nZ2xlcyIsImNvbXBvc2VkUGF0aCIsImlzTWVudVRhcmdldCIsImlzQWN0aXZlIiwiZ2V0VG9nZ2xlQnV0dG9uIiwiY2xlYXJNZW51cyIsImRhdGFBcGlLZXlkb3duSGFuZGxlciIsIlNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQiLCJTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCIsIlNjcm9sbEJhckhlbHBlciIsImdldFdpZHRoIiwiZG9jdW1lbnRXaWR0aCIsImlubmVyV2lkdGgiLCJfZGlzYWJsZU92ZXJGbG93IiwiX3NldEVsZW1lbnRBdHRyaWJ1dGVzIiwiY2FsY3VsYXRlZFZhbHVlIiwiX3NhdmVJbml0aWFsQXR0cmlidXRlIiwic3R5bGVQcm9wIiwic2Nyb2xsYmFyV2lkdGgiLCJtYW5pcHVsYXRpb25DYWxsQmFjayIsIl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrIiwiX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMiLCJhY3R1YWxWYWx1ZSIsInJlbW92ZVByb3BlcnR5IiwiY2FsbEJhY2siLCJpc092ZXJmbG93aW5nIiwicm9vdEVsZW1lbnQiLCJjbGlja0NhbGxiYWNrIiwiRVZFTlRfTU9VU0VET1dOIiwiQmFja2Ryb3AiLCJfaXNBcHBlbmRlZCIsIl9hcHBlbmQiLCJfZ2V0RWxlbWVudCIsIl9lbXVsYXRlQW5pbWF0aW9uIiwiYmFja2Ryb3AiLCJ0cmFwRWxlbWVudCIsImF1dG9mb2N1cyIsIkVWRU5UX0ZPQ1VTSU4iLCJFVkVOVF9LRVlET1dOX1RBQiIsIlRBQl9OQVZfRk9SV0FSRCIsIlRBQl9OQVZfQkFDS1dBUkQiLCJGb2N1c1RyYXAiLCJfaXNBY3RpdmUiLCJfbGFzdFRhYk5hdkRpcmVjdGlvbiIsImFjdGl2YXRlIiwiX2hhbmRsZUZvY3VzaW4iLCJfaGFuZGxlS2V5ZG93biIsImRlYWN0aXZhdGUiLCJFVkVOVF9ISURFX1BSRVZFTlRFRCIsIkVWRU5UX1JFU0laRSIsIkVWRU5UX0NMSUNLX0RJU01JU1MiLCJFVkVOVF9LRVlET1dOX0RJU01JU1MiLCJFVkVOVF9NT1VTRVVQX0RJU01JU1MiLCJFVkVOVF9NT1VTRURPV05fRElTTUlTUyIsIkNMQVNTX05BTUVfT1BFTiIsIkNMQVNTX05BTUVfU1RBVElDIiwiT1BFTl9TRUxFQ1RPUiIsIlNFTEVDVE9SX0RJQUxPRyIsIlNFTEVDVE9SX01PREFMX0JPRFkiLCJNb2RhbCIsIl9kaWFsb2ciLCJfYmFja2Ryb3AiLCJfaW5pdGlhbGl6ZUJhY2tEcm9wIiwiX2ZvY3VzdHJhcCIsIl9pbml0aWFsaXplRm9jdXNUcmFwIiwiX2lnbm9yZUJhY2tkcm9wQ2xpY2siLCJfc2Nyb2xsQmFyIiwiX2lzQW5pbWF0ZWQiLCJfYWRqdXN0RGlhbG9nIiwiX3NldEVzY2FwZUV2ZW50IiwiX3NldFJlc2l6ZUV2ZW50IiwiX3Nob3dCYWNrZHJvcCIsIl9zaG93RWxlbWVudCIsIl9oaWRlTW9kYWwiLCJodG1sRWxlbWVudCIsImhhbmRsZVVwZGF0ZSIsIm1vZGFsQm9keSIsInRyYW5zaXRpb25Db21wbGV0ZSIsIl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uIiwiX3Jlc2V0QWRqdXN0bWVudHMiLCJpc01vZGFsT3ZlcmZsb3dpbmciLCJpc0JvZHlPdmVyZmxvd2luZyIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwiYWxsUmVhZHlPcGVuIiwiQ0xBU1NfTkFNRV9CQUNLRFJPUCIsIk9mZmNhbnZhcyIsImNvbXBsZXRlQ2FsbGJhY2siLCJ1cmlBdHRyaWJ1dGVzIiwiQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiIsIlNBRkVfVVJMX1BBVFRFUk4iLCJEQVRBX1VSTF9QQVRURVJOIiwiYWxsb3dlZEF0dHJpYnV0ZSIsImFsbG93ZWRBdHRyaWJ1dGVMaXN0IiwiYXR0cmlidXRlTmFtZSIsInJlZ0V4cCIsImF0dHJpYnV0ZVJlZ2V4IiwiRGVmYXVsdEFsbG93bGlzdCIsImFyZWEiLCJiciIsImVtIiwiaHIiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJpbWciLCJsaSIsIm9sIiwicHJlIiwic21hbGwiLCJzcGFuIiwic3ViIiwic3VwIiwic3Ryb25nIiwidSIsInVsIiwic2FuaXRpemVIdG1sIiwidW5zYWZlSHRtbCIsImFsbG93TGlzdCIsInNhbml0aXplRm4iLCJkb21QYXJzZXIiLCJjcmVhdGVkRG9jdW1lbnQiLCJlbGVtZW50TmFtZSIsImF0dHJpYnV0ZUxpc3QiLCJhbGxvd2VkQXR0cmlidXRlcyIsIkNMQVNTX1BSRUZJWCIsIkRJU0FMTE9XRURfQVRUUklCVVRFUyIsInRlbXBsYXRlIiwidGl0bGUiLCJjdXN0b21DbGFzcyIsInNhbml0aXplIiwiQXR0YWNobWVudE1hcCIsIkFVVE8iLCJUT1AiLCJSSUdIVCIsIkJPVFRPTSIsIkxFRlQiLCJISURFIiwiSElEREVOIiwiU0hPVyIsIlNIT1dOIiwiSU5TRVJURUQiLCJDTElDSyIsIkZPQ1VTSU4iLCJGT0NVU09VVCIsIk1PVVNFRU5URVIiLCJNT1VTRUxFQVZFIiwiQ0xBU1NfTkFNRV9NT0RBTCIsIkhPVkVSX1NUQVRFX1NIT1ciLCJIT1ZFUl9TVEFURV9PVVQiLCJTRUxFQ1RPUl9UT09MVElQX0lOTkVSIiwiU0VMRUNUT1JfTU9EQUwiLCJFVkVOVF9NT0RBTF9ISURFIiwiVFJJR0dFUl9IT1ZFUiIsIlRSSUdHRVJfRk9DVVMiLCJUUklHR0VSX0NMSUNLIiwiVFJJR0dFUl9NQU5VQUwiLCJUb29sdGlwIiwiX2lzRW5hYmxlZCIsIl90aW1lb3V0IiwiX2hvdmVyU3RhdGUiLCJfYWN0aXZlVHJpZ2dlciIsInRpcCIsIl9zZXRMaXN0ZW5lcnMiLCJlbmFibGUiLCJ0b2dnbGVFbmFibGVkIiwiX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldCIsIl9pc1dpdGhBY3RpdmVUcmlnZ2VyIiwiX2VudGVyIiwiX2xlYXZlIiwiZ2V0VGlwRWxlbWVudCIsIl9oaWRlTW9kYWxIYW5kbGVyIiwiX2Rpc3Bvc2VQb3BwZXIiLCJpc1dpdGhDb250ZW50Iiwic2hhZG93Um9vdCIsImlzSW5UaGVEb20iLCJnZXRUaXRsZSIsInRpcElkIiwiYXR0YWNobWVudCIsIl9nZXRBdHRhY2htZW50IiwiX2FkZEF0dGFjaG1lbnRDbGFzcyIsIl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbiIsInByZXZIb3ZlclN0YXRlIiwiX2NsZWFuVGlwQ2xhc3MiLCJzZXRDb250ZW50IiwiX3Nhbml0aXplQW5kU2V0Q29udGVudCIsInRlbXBsYXRlRWxlbWVudCIsInNldEVsZW1lbnRDb250ZW50IiwidXBkYXRlQXR0YWNobWVudCIsIl9nZXREZWxlZ2F0ZUNvbmZpZyIsIl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UiLCJfZ2V0QmFzaWNDbGFzc1ByZWZpeCIsInRyaWdnZXJzIiwiZXZlbnRJbiIsImV2ZW50T3V0IiwiX2ZpeFRpdGxlIiwib3JpZ2luYWxUaXRsZVR5cGUiLCJkYXRhQXR0cmlidXRlcyIsImJhc2ljQ2xhc3NQcmVmaXhSZWdleCIsInRhYkNsYXNzIiwidENsYXNzIiwiU0VMRUNUT1JfVElUTEUiLCJTRUxFQ1RPUl9DT05URU5UIiwiUG9wb3ZlciIsIl9nZXRDb250ZW50IiwiRVZFTlRfQUNUSVZBVEUiLCJFVkVOVF9TQ1JPTEwiLCJDTEFTU19OQU1FX0RST1BET1dOX0lURU0iLCJTRUxFQ1RPUl9EQVRBX1NQWSIsIlNFTEVDVE9SX05BVl9MSVNUX0dST1VQIiwiU0VMRUNUT1JfTkFWX0xJTktTIiwiU0VMRUNUT1JfTkFWX0lURU1TIiwiU0VMRUNUT1JfTElTVF9JVEVNUyIsIlNFTEVDVE9SX0xJTktfSVRFTVMiLCJTRUxFQ1RPUl9EUk9QRE9XTiIsIlNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSIsIk1FVEhPRF9PRkZTRVQiLCJNRVRIT0RfUE9TSVRJT04iLCJTY3JvbGxTcHkiLCJfc2Nyb2xsRWxlbWVudCIsIl9vZmZzZXRzIiwiX3RhcmdldHMiLCJfYWN0aXZlVGFyZ2V0IiwiX3Njcm9sbEhlaWdodCIsIl9wcm9jZXNzIiwicmVmcmVzaCIsImF1dG9NZXRob2QiLCJvZmZzZXRNZXRob2QiLCJvZmZzZXRCYXNlIiwiX2dldFNjcm9sbFRvcCIsIl9nZXRTY3JvbGxIZWlnaHQiLCJ0YXJnZXRTZWxlY3RvciIsInRhcmdldEJDUiIsIl9nZXRPZmZzZXRIZWlnaHQiLCJpbm5lckhlaWdodCIsIm1heFNjcm9sbCIsIl9hY3RpdmF0ZSIsIl9jbGVhciIsImlzQWN0aXZlVGFyZ2V0IiwicXVlcmllcyIsImxpbmsiLCJsaXN0R3JvdXAiLCJuYXZJdGVtIiwic3B5IiwiQ0xBU1NfTkFNRV9EUk9QRE9XTl9NRU5VIiwiU0VMRUNUT1JfQUNUSVZFX1VMIiwiU0VMRUNUT1JfRFJPUERPV05fQUNUSVZFX0NISUxEIiwiVGFiIiwibGlzdEVsZW1lbnQiLCJpdGVtU2VsZWN0b3IiLCJhY3RpdmVFbGVtZW50cyIsImlzVHJhbnNpdGlvbmluZyIsIl90cmFuc2l0aW9uQ29tcGxldGUiLCJkcm9wZG93bkNoaWxkIiwiZHJvcGRvd25FbGVtZW50IiwiZHJvcGRvd24iLCJFVkVOVF9NT1VTRU9WRVIiLCJFVkVOVF9NT1VTRU9VVCIsIkVWRU5UX0ZPQ1VTT1VUIiwiQ0xBU1NfTkFNRV9ISURFIiwiQ0xBU1NfTkFNRV9TSE9XSU5HIiwiYXV0b2hpZGUiLCJUb2FzdCIsIl9oYXNNb3VzZUludGVyYWN0aW9uIiwiX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24iLCJfY2xlYXJUaW1lb3V0IiwiX21heWJlU2NoZWR1bGVIaWRlIiwiX29uSW50ZXJhY3Rpb24iLCJpc0ludGVyYWN0aW5nIiwidG9nZ2xlQ29ubmVjdGlvblN0cmluZ0FuZFByZWZpeCIsImNoYW5nZSIsInJlZnJlc2hEZXNjcmlwdGlvbiIsInJlY2lwZU5hbWUiLCJyZWNpcGVEaXNwbGF5TmFtZSIsInJlY2lwZURlc2NyaXB0aW9uIiwic2V0TG9jYWxpemF0aW9uVXJsIiwiY3VsdHVyZXNMaXN0IiwidG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5IiwicGFzc3dvcmRDdGwiLCJ0b2dnbGVQYXNzd29yZEN0bCIsImljb24iLCJzdHJlbmd0aCIsIm1pbkxlbmd0aCIsInVwcGVyQ2FzZSIsImxvd2VyQ2FzZSIsIm51bWJlcnMiLCJzcGVjaWFsY2hhcnMiLCJjYXBpdGFsbGV0dGVycyIsImxvd2VybGV0dGVycyIsIm51bWJlciIsInNwZWNpYWxjaGFyIiwidmFsaWQiLCJjcmVhdGVQcm9ncmVzc0JhciIsImdldFBlcmNlbnRhZ2UiLCJ0b0ZpeGVkIiwiZ2V0TGV2ZWwiLCJjaGVja1N0cmVuZ3RoIiwidG90YWwiLCJwZXJjZW50YWdlIiwibGV2ZWwiLCJkYXRhVHJhbnNmZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUUsVUFBVUEsTUFBVixF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QUFMLENBQVUsTUFBVixFQUFrQixVQUFVclMsS0FBVixFQUFpQjtNQUMvQmcrQyxhQUFhLENBQUNoK0MsS0FBSyxDQUFDMEMsYUFBTixDQUFvQjA3QyxZQUFwQixDQUFpQzlqRCxPQUFqQyxDQUF5QyxNQUF6QyxDQUFELENBQWI7SUFDSCxDQUZEO0lBSUEsS0FBS3ZILE9BQUwsQ0FBYSxNQUFiLEVBQXFCNk0sRUFBckIsQ0FBd0IsUUFBeEIsRUFBa0MsWUFBWTtNQUMxQyxJQUFJLENBQUMrOUMsS0FBTCxFQUFZO1FBQ1IzOUMsS0FBSyxDQUFDZ0MsY0FBTjtNQUNIO0lBQ0osQ0FKRDtFQUtILENBbkZEO0FBb0ZILENBdEZBLEVBc0ZDM21CLE1BdEZELENBQUQiLCJmaWxlIjoic2V0dXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNi4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMjItMDgtMjZUMTc6NTJaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0IHRyYWMtMTQ1NDkgZm9yIG1vcmUgaW5mby5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XG5cdFx0XHRmdW5jdGlvbiggdyApIHtcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcblx0XHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XG5cdH1cblxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcbn0gKSggdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xuXG4vLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjFcbi8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZVxuLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb25cbi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLlxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnIgPSBbXTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBmbGF0ID0gYXJyLmZsYXQgPyBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuZmxhdC5jYWxsKCBhcnJheSApO1xufSA6IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5jb25jYXQuYXBwbHkoIFtdLCBhcnJheSApO1xufTtcblxuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuXHRcdC8vIEluIHNvbWUgYnJvd3NlcnMsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50c1xuXHRcdC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG5cdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuXHRcdC8vIFN1cHBvcnQ6IFF0V2ViIDw9My44LjUsIFdlYktpdCA8PTUzNC4zNCwgd2todG1sdG9wZGYgdG9vbCA8PTAuMTIuNVxuXHRcdC8vIFBsdXMgZm9yIG9sZCBXZWJLaXQsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCBjb2xsZWN0aW9uc1xuXHRcdC8vIChlLmcuLCBgdHlwZW9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpID09PSBcImZ1bmN0aW9uXCJgKS4gKGdoLTQ3NTYpXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiICYmXG5cdFx0XHR0eXBlb2Ygb2JqLml0ZW0gIT09IFwiZnVuY3Rpb25cIjtcblx0fTtcblxuXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH07XG5cblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG5cblxuXHR2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcblx0XHR0eXBlOiB0cnVlLFxuXHRcdHNyYzogdHJ1ZSxcblx0XHRub25jZTogdHJ1ZSxcblx0XHRub01vZHVsZTogdHJ1ZVxuXHR9O1xuXG5cdGZ1bmN0aW9uIERPTUV2YWwoIGNvZGUsIG5vZGUsIGRvYyApIHtcblx0XHRkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cblx0XHR2YXIgaSwgdmFsLFxuXHRcdFx0c2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRpZiAoIG5vZGUgKSB7XG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA2NCssIEVkZ2UgMTgrXG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgXCJub25jZVwiIHByb3BlcnR5IG9uIHNjcmlwdHMuXG5cdFx0XHRcdC8vIE9uIHRoZSBvdGhlciBoYW5kLCBqdXN0IHVzaW5nIGBnZXRBdHRyaWJ1dGVgIGlzIG5vdCBlbm91Z2ggYXNcblx0XHRcdFx0Ly8gdGhlIGBub25jZWAgYXR0cmlidXRlIGlzIHJlc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuZXZlciBpdFxuXHRcdFx0XHQvLyBiZWNvbWVzIGJyb3dzaW5nLWNvbnRleHQgY29ubmVjdGVkLlxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8yMzY5XG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNub25jZS1hdHRyaWJ1dGVzXG5cdFx0XHRcdC8vIFRoZSBgbm9kZS5nZXRBdHRyaWJ1dGVgIGNoZWNrIHdhcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2Zcblx0XHRcdFx0Ly8gYGpRdWVyeS5nbG9iYWxFdmFsYCBzbyB0aGF0IGl0IGNhbiBmYWtlIGEgbm9uY2UtY29udGFpbmluZyBub2RlXG5cdFx0XHRcdC8vIHZpYSBhbiBvYmplY3QuXG5cdFx0XHRcdHZhbCA9IG5vZGVbIGkgXSB8fCBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSggaSApO1xuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCBpLCB2YWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdH1cblxuXG5mdW5jdGlvbiB0b1R5cGUoIG9iaiApIHtcblx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0dHlwZW9mIG9iajtcbn1cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZVxuXG5cblxudmFyXG5cdHZlcnNpb24gPSBcIjMuNi4xXCIsXG5cblx0Ly8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnlcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApO1xuXHR9O1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdGlmICggbnVtID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRldmVuOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gKCBpICsgMSApICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRvZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBpICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgT2JqZWN0LnByb3RvdHlwZSBwb2xsdXRpb25cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAoIG5hbWUgPT09IFwiX19wcm90b19fXCIgfHwgdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXHRcdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xuXG5cdFx0XHRcdFx0Ly8gRW5zdXJlIHByb3BlciB0eXBlIGZvciB0aGUgc291cmNlIHZhbHVlXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSAmJiAhQXJyYXkuaXNBcnJheSggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICFjb3B5SXNBcnJheSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSB7fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2Vcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcblxuXHQvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZVxuXHRpc1JlYWR5OiB0cnVlLFxuXG5cdGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cdH0sXG5cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBwcm90bywgQ3RvcjtcblxuXHRcdC8vIERldGVjdCBvYnZpb3VzIG5lZ2F0aXZlc1xuXHRcdC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0c1xuXHRcdGlmICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRwcm90byA9IGdldFByb3RvKCBvYmogKTtcblxuXHRcdC8vIE9iamVjdHMgd2l0aCBubyBwcm90b3R5cGUgKGUuZy4sIGBPYmplY3QuY3JlYXRlKCBudWxsIClgKSBhcmUgcGxhaW5cblx0XHRpZiAoICFwcm90byApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uXG5cdFx0Q3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgXCJjb25zdHJ1Y3RvclwiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7XG5cdFx0cmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgZm5Ub1N0cmluZy5jYWxsKCBDdG9yICkgPT09IE9iamVjdEZ1bmN0aW9uU3RyaW5nO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIG5hbWU7XG5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgcHJvdmlkZWQgY29udGV4dDsgZmFsbHMgYmFjayB0byB0aGUgZ2xvYmFsIG9uZVxuXHQvLyBpZiBub3Qgc3BlY2lmaWVkLlxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSwgb3B0aW9ucywgZG9jICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9LCBkb2MgKTtcblx0fSxcblxuXHRlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHtcblx0XHR2YXIgbGVuZ3RoLCBpID0gMDtcblxuXHRcdGlmICggaXNBcnJheUxpa2UoIG9iaiApICkge1xuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxuXHRcdFx0aiA9IDAsXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcblx0XHR9XG5cblx0XHRmaXJzdC5sZW5ndGggPSBpO1xuXG5cdFx0cmV0dXJuIGZpcnN0O1xuXHR9LFxuXG5cdGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHtcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xuXHRcdFx0XHRtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0Y2hlcztcblx0fSxcblxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG5cdFx0dmFyIGxlbmd0aCwgdmFsdWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdHJldCA9IFtdO1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXNcblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkge1xuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRcdHJldHVybiBmbGF0KCByZXQgKTtcblx0fSxcblxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcblx0Z3VpZDogMSxcblxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcblx0Ly8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC5cblx0c3VwcG9ydDogc3VwcG9ydFxufSApO1xuXG5pZiAoIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiApIHtcblx0alF1ZXJ5LmZuWyBTeW1ib2wuaXRlcmF0b3IgXSA9IGFyclsgU3ltYm9sLml0ZXJhdG9yIF07XG59XG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goIFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHRcdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHR9ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjZcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuICpcbiAqIERhdGU6IDIwMjEtMDItMTZcbiAqL1xuKCBmdW5jdGlvbiggd2luZG93ICkge1xudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEluc3RhbmNlIG1ldGhvZHNcblx0aGFzT3duID0gKCB7fSApLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaE5hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxuXHQvLyBodHRwczovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81XG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRsZW4gPSBsaXN0Lmxlbmd0aDtcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGlmICggbGlzdFsgaSBdID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58XCIgK1xuXHRcdFwiaXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lkZW50LXRva2VuLWRpYWdyYW1cblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXFteXFxcXHJcXFxcblxcXFxmXXxbXFxcXHctXXxbXlxcMC1cXFxceDdmXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV1cblx0XHQvLyBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdFwiSURcIjogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiQ0xBU1NcIjogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0XCJBVFRSXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFwiUFNFVURPXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgcHNldWRvcyApLFxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXG5cblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaHRtbCA9IC9IVE1MJC9pLFxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHRybmF0aXZlID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3xcXFxcXFxcXChbXlxcXFxyXFxcXG5cXFxcZl0pXCIsIFwiZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBlc2NhcGUsIG5vbkhleCApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZS5zbGljZSggMSApIC0gMHgxMDAwMDtcblxuXHRcdHJldHVybiBub25IZXggP1xuXG5cdFx0XHQvLyBTdHJpcCB0aGUgYmFja3NsYXNoIHByZWZpeCBmcm9tIGEgbm9uLWhleCBlc2NhcGUgc2VxdWVuY2Vcblx0XHRcdG5vbkhleCA6XG5cblx0XHRcdC8vIFJlcGxhY2UgYSBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZW5jb2RlZCBVbmljb2RlIGNvZGUgcG9pbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTErXG5cdFx0XHQvLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAoQk1QKSwgbWFudWFsbHkgY29uc3RydWN0IGFcblx0XHRcdC8vIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRoaWdoIDwgMCA/XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvblxuXHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcblx0cmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nLFxuXHRmY3NzZXNjYXBlID0gZnVuY3Rpb24oIGNoLCBhc0NvZGVQb2ludCApIHtcblx0XHRpZiAoIGFzQ29kZVBvaW50ICkge1xuXG5cdFx0XHQvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRcdHJldHVybiBcIlxcdUZGRkRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRcdHJldHVybiBjaC5zbGljZSggMCwgLTEgKSArIFwiXFxcXFwiICtcblx0XHRcdFx0Y2guY2hhckNvZGVBdCggY2gubGVuZ3RoIC0gMSApLnRvU3RyaW5nKCAxNiApICsgXCIgXCI7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRcdHJldHVybiBcIlxcXFxcIiArIGNoO1xuXHR9LFxuXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcblx0Ly8gU2VlIHNldERvY3VtZW50KClcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9LFxuXG5cdGluRGlzYWJsZWRGaWVsZHNldCA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZmllbGRzZXRcIjtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdCggYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSApLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGVscyApICk7XG5cdFx0fSA6XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw5XG5cdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAoIHRhcmdldFsgaisrIF0gPSBlbHNbIGkrKyBdICkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKCBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXG5cdFx0XHRcdGlmICggKCBtID0gbWF0Y2hbIDEgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmICggZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDIgXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKCBtID0gbWF0Y2hbIDMgXSApICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkgKSAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHQoIG5vZGVUeXBlICE9PSAxIHx8IGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIiApICkge1xuXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXG5cdFx0XHRcdC8vIHFTQSBjb25zaWRlcnMgZWxlbWVudHMgb3V0c2lkZSBhIHNjb3Bpbmcgcm9vdCB3aGVuIGV2YWx1YXRpbmcgY2hpbGQgb3Jcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2Ugd29yayBhcm91bmQgdGhlIGJlaGF2aW9yIGJ5IHByZWZpeGluZyBldmVyeSBzZWxlY3RvciBpbiB0aGVcblx0XHRcdFx0Ly8gbGlzdCB3aXRoIGFuIElEIHNlbGVjdG9yIHJlZmVyZW5jaW5nIHRoZSBzY29wZSBjb250ZXh0LlxuXHRcdFx0XHQvLyBUaGUgdGVjaG5pcXVlIGhhcyB0byBiZSB1c2VkIGFzIHdlbGwgd2hlbiBhIGxlYWRpbmcgY29tYmluYXRvciBpcyB1c2VkXG5cdFx0XHRcdC8vIGFzIHN1Y2ggc2VsZWN0b3JzIGFyZSBub3QgcmVjb2duaXplZCBieSBxdWVyeVNlbGVjdG9yQWxsLlxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgfHwgcmNvbWJpbmF0b3JzLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblxuXHRcdFx0XHRcdC8vIFdlIGNhbiB1c2UgOnNjb3BlIGluc3RlYWQgb2YgdGhlIElEIGhhY2sgaWYgdGhlIGJyb3dzZXJcblx0XHRcdFx0XHQvLyBzdXBwb3J0cyBpdCAmIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgY29udGV4dC5cblx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgIT09IGNvbnRleHQgfHwgIXN1cHBvcnQuc2NvcGUgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRpZiAoICggbmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApICkgKSB7XG5cdFx0XHRcdFx0XHRcdG5pZCA9IG5pZC5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAoIG5pZCA9IGV4cGFuZG8gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdFxuXHRcdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0Z3JvdXBzWyBpIF0gPSAoIG5pZCA/IFwiI1wiICsgbmlkIDogXCI6c2NvcGVcIiApICsgXCIgXCIgK1xuXHRcdFx0XHRcdFx0XHR0b1NlbGVjdG9yKCBncm91cHNbIGkgXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCBcIixcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fSBjYXRjaCAoIHFzYUVycm9yICkge1xuXHRcdFx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0aWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblxuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKCBjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlICk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuICEhZm4oIGVsICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblxuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcblx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XG5cdFx0fVxuXG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcblx0XHRlbCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWRcbiAqL1xuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcblx0dmFyIGFyciA9IGF0dHJzLnNwbGl0KCBcInxcIiApLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyWyBpIF0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0YS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cblx0Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzXG5cdGlmICggZGlmZiApIHtcblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXG5cdGlmICggY3VyICkge1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIubmV4dFNpYmxpbmcgKSApIHtcblx0XHRcdGlmICggY3VyID09PSBiICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGEgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiAoIG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiICkgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0aW5EaXNhYmxlZEZpZWxkc2V0KCBlbGVtICkgPT09IGRpc2FibGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cblx0XHQvLyBUcnkgdG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVzdGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XG5cdFx0Ly8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuXG5cdFx0fSBlbHNlIGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBhcmd1bWVudCApIHtcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcblx0XHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoIGogPSBtYXRjaEluZGV4ZXNbIGkgXSApIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFsgaiBdID0gISggbWF0Y2hlc1sgaiBdID0gc2VlZFsgaiBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxuICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xuXHRyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb250ZXh0O1xufVxuXG4vLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZVxuc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307XG5cbi8qKlxuICogRGV0ZWN0cyBYTUwgbm9kZXNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlXG4gKi9cbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBuYW1lc3BhY2UgPSBlbGVtICYmIGVsZW0ubmFtZXNwYWNlVVJJLFxuXHRcdGRvY0VsZW0gPSBlbGVtICYmICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD04XG5cdC8vIEFzc3VtZSBIVE1MIHdoZW4gZG9jdW1lbnRFbGVtZW50IGRvZXNuJ3QgeWV0IGV4aXN0LCBzdWNoIGFzIGluc2lkZSBsb2FkaW5nIGlmcmFtZXNcblx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzQ4MzNcblx0cmV0dXJuICFyaHRtbC50ZXN0KCBuYW1lc3BhY2UgfHwgZG9jRWxlbSAmJiBkb2NFbGVtLm5vZGVOYW1lIHx8IFwiSFRNTFwiICk7XG59O1xuXG4vKipcbiAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqL1xuc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbiggbm9kZSApIHtcblx0dmFyIGhhc0NvbXBhcmUsIHN1YldpbmRvdyxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBkb2MgPT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9ycyAoalF1ZXJ5ICMxMzkzNilcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBwcmVmZXJyZWREb2MgIT0gZG9jdW1lbnQgJiZcblx0XHQoIHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3ICkgJiYgc3ViV2luZG93LnRvcCAhPT0gc3ViV2luZG93ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTEsIEVkZ2Vcblx0XHRpZiAoIHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seVxuXHRcdH0gZWxzZSBpZiAoIHN1YldpbmRvdy5hdHRhY2hFdmVudCApIHtcblx0XHRcdHN1YldpbmRvdy5hdHRhY2hFdmVudCggXCJvbnVubG9hZFwiLCB1bmxvYWRIYW5kbGVyICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDExKywgRWRnZSAxMiAtIDE4KywgQ2hyb21lIDw9MTYgLSAyNSBvbmx5LCBGaXJlZm94IDw9My42IC0gMzEgb25seSxcblx0Ly8gU2FmYXJpIDQgLSA1IG9ubHksIE9wZXJhIDw9MTEuNiAtIDEyLnggb25seVxuXHQvLyBJRS9FZGdlICYgb2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgOnNjb3BlIHBzZXVkby1jbGFzcy5cblx0Ly8gU3VwcG9ydDogU2FmYXJpIDYuMCBvbmx5XG5cdC8vIFNhZmFyaSA2LjAgc3VwcG9ydHMgOnNjb3BlIGJ1dCBpdCdzIGFuIGFsaWFzIG9mIDpyb290IHRoZXJlLlxuXHRzdXBwb3J0LnNjb3BlID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cdFx0cmV0dXJuIHR5cGVvZiBlbC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHQhZWwucXVlcnlTZWxlY3RvckFsbCggXCI6c2NvcGUgZmllbGRzZXQgZGl2XCIgKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvKiBBdHRyaWJ1dGVzXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBTdXBwb3J0OiBJRTw4XG5cdC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllc1xuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuY2xhc3NOYW1lID0gXCJpXCI7XG5cdFx0cmV0dXJuICFlbC5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NOYW1lXCIgKTtcblx0fSApO1xuXG5cdC8qIGdldEVsZW1lbnQocylCeSpcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSByZXR1cm5zIG9ubHkgZWxlbWVudHNcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KCBcIlwiICkgKTtcblx0XHRyZXR1cm4gIWVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcIipcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDlcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8MTBcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXJbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJpZFwiICkgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHRyZXR1cm4gZWxlbSA/IFsgZWxlbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHlcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0RXhwci5maW5kWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kWyBcIlRBR1wiIF0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID9cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE5cblx0XHRcdH0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHRcdH1cblx0XHR9IDpcblxuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0dG1wID0gW10sXG5cdFx0XHRcdGkgPSAwLFxuXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHR0bXAucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0bXA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9O1xuXG5cdC8vIENsYXNzXG5cdEV4cHIuZmluZFsgXCJDTEFTU1wiIF0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXG5cdHJidWdneU1hdGNoZXMgPSBbXTtcblxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxuXHQvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3Jcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxuXHQvLyBTZWUgaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4XG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdGlmICggKCBzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApICkgKSB7XG5cblx0XHQvLyBCdWlsZCBRU0EgcmVnZXhcblx0XHQvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHRcdHZhciBpbnB1dDtcblxuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltzZWxlY3RlZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuNCwgU2FmYXJpPDcuMCssIGlPUzw3LjArLCBQaGFudG9tSlM8MS45LjgrXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJ+PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdFx0Ly8gSUUgMTEvRWRnZSBkb24ndCBmaW5kIGVsZW1lbnRzIG9uIGEgYFtuYW1lPScnXWAgcXVlcnkgaW4gc29tZSBjYXNlcy5cblx0XHRcdC8vIEFkZGluZyBhIHRlbXBvcmFyeSBhdHRyaWJ1dGUgdG8gdGhlIGRvY3VtZW50IGJlZm9yZSB0aGUgc2VsZWN0aW9uIHdvcmtzXG5cdFx0XHQvLyBhcm91bmQgdGhlIGlzc3VlLlxuXHRcdFx0Ly8gSW50ZXJlc3RpbmdseSwgSUUgMTAgJiBvbGRlciBkb24ndCBzZWVtIHRvIGhhdmUgdGhlIGlzc3VlLlxuXHRcdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT0nJ11cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIipuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqPVwiICtcblx0XHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCI6Y2hlY2tlZFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6Y2hlY2tlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCIuIy4rWyt+XVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD0zLjYgLSA1IG9ubHlcblx0XHRcdC8vIE9sZCBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgb24gYSBiYWRseS1lc2NhcGVkIGlkZW50aWZpZXIuXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIlxcXFxcXGZcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiW1xcXFxyXFxcXG5cXFxcZl1cIiApO1xuXHRcdH0gKTtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xuXHRcdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0XHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9ZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZW5hYmxlZFwiICkubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmRpc2FibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogT3BlcmEgMTAgLSAxMSBvbmx5XG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbCggXCIqLDp4XCIgKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIiwuKjpcIiApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKCBtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8XG5cdFx0ZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IgKSApICkgKSB7XG5cblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxuXHRcdFx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cblx0XHRcdC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWRcblx0XHRcdG1hdGNoZXMuY2FsbCggZWwsIFwiW3MhPScnXTp4XCIgKTtcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbiggXCJ8XCIgKSApO1xuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCBcInxcIiApICk7XG5cblx0LyogQ29udGFpbnNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XG5cblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXG5cdC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZVxuXHQvLyBBcyBpbiwgYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZlxuXHRjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgP1xuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSxcblx0XHRcdFx0YnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0YWRvd24uY29udGFpbnMgP1xuXHRcdFx0XHRcdGFkb3duLmNvbnRhaW5zKCBidXAgKSA6XG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdFx0XHQpICk7XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHRpZiAoIGIgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBiID0gYi5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cblx0XHR2YXIgY29tcGFyZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247XG5cdFx0aWYgKCBjb21wYXJlICkge1xuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxuXHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCAhc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlICkgKSB7XG5cblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYSA9PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGEgKSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBiID09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYiApICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBFeGl0IGVhcmx5IGlmIHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF1cCA9IGEucGFyZW50Tm9kZSxcblx0XHRcdGJ1cCA9IGIucGFyZW50Tm9kZSxcblx0XHRcdGFwID0gWyBhIF0sXG5cdFx0XHRicCA9IFsgYiBdO1xuXG5cdFx0Ly8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWRcblx0XHRpZiAoICFhdXAgfHwgIWJ1cCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuXHRcdFx0cmV0dXJuIGEgPT0gZG9jdW1lbnQgPyAtMSA6XG5cdFx0XHRcdGIgPT0gZG9jdW1lbnQgPyAxIDpcblx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBlcWVxZXEgKi9cblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcblx0XHRcdHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvblxuXHRcdGN1ciA9IGE7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRhcC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cdFx0Y3VyID0gYjtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XG5cdFx0d2hpbGUgKCBhcFsgaSBdID09PSBicFsgaSBdICkge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBpID9cblxuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXG5cdFx0XHRzaWJsaW5nQ2hlY2soIGFwWyBpIF0sIGJwWyBpIF0gKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuXHRcdFx0YXBbIGkgXSA9PSBwcmVmZXJyZWREb2MgPyAtMSA6XG5cdFx0XHRicFsgaSBdID09IHByZWZlcnJlZERvYyA/IDEgOlxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBlcWVxZXEgKi9cblx0XHRcdDA7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufTtcblxuU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XG59O1xuXG5TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdHNldERvY3VtZW50KCBlbGVtICk7XG5cblx0aWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cblx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0Ly8gZnJhZ21lbnQgaW4gSUUgOVxuXHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggZXhwciwgdHJ1ZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIGRvY3VtZW50LCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7XG59O1xuXG5TaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcbn07XG5cblNpenpsZS5lc2NhcGUgPSBmdW5jdGlvbiggc2VsICkge1xuXHRyZXR1cm4gKCBzZWwgKyBcIlwiICkucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0cmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtXG4gKi9cbmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbm9kZSxcblx0XHRyZXQgPSBcIlwiLFxuXHRcdGkgPSAwLFxuXHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRpZiAoICFub2RlVHlwZSApIHtcblxuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAoIG5vZGUgPSBlbGVtWyBpKysgXSApICkge1xuXG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblxuXHRcdC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHNcblx0XHQvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKVxuXHRcdGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS50ZXh0Q29udGVudDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRyZXQgKz0gZ2V0VGV4dCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuXHR9XG5cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbIDMgXSA9ICggbWF0Y2hbIDMgXSB8fCBtYXRjaFsgNCBdIHx8XG5cdFx0XHRcdG1hdGNoWyA1IF0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDIgXSA9PT0gXCJ+PVwiICkge1xuXHRcdFx0XHRtYXRjaFsgMyBdID0gXCIgXCIgKyBtYXRjaFsgMyBdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblxuXHRcdFx0LyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwcltcIkNISUxEXCJdXG5cdFx0XHRcdDEgdHlwZSAob25seXxudGh8Li4uKVxuXHRcdFx0XHQyIHdoYXQgKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdDMgYXJndW1lbnQgKGV2ZW58b2RkfFxcZCp8XFxkKm4oWystXVxcZCspP3wuLi4pXG5cdFx0XHRcdDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XFxkKm58KVxuXHRcdFx0XHQ1IHNpZ24gb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDYgeCBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NyBzaWduIG9mIHktY29tcG9uZW50XG5cdFx0XHRcdDggeSBvZiB5LWNvbXBvbmVudFxuXHRcdFx0Ki9cblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDEgXS5zbGljZSggMCwgMyApID09PSBcIm50aFwiICkge1xuXG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTERcblx0XHRcdFx0Ly8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMVxuXHRcdFx0XHRtYXRjaFsgNCBdID0gKyggbWF0Y2hbIDQgXSA/XG5cdFx0XHRcdFx0bWF0Y2hbIDUgXSArICggbWF0Y2hbIDYgXSB8fCAxICkgOlxuXHRcdFx0XHRcdDIgKiAoIG1hdGNoWyAzIF0gPT09IFwiZXZlblwiIHx8IG1hdGNoWyAzIF0gPT09IFwib2RkXCIgKSApO1xuXHRcdFx0XHRtYXRjaFsgNSBdID0gKyggKCBtYXRjaFsgNyBdICsgbWF0Y2hbIDggXSApIHx8IG1hdGNoWyAzIF0gPT09IFwib2RkXCIgKTtcblxuXHRcdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWyA2IF0gJiYgbWF0Y2hbIDIgXTtcblxuXHRcdFx0aWYgKCBtYXRjaEV4cHJbIFwiQ0hJTERcIiBdLnRlc3QoIG1hdGNoWyAwIF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSBtYXRjaFsgNCBdIHx8IG1hdGNoWyA1IF0gfHwgXCJcIjtcblxuXHRcdFx0Ly8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90ZWQgKSAmJlxuXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXG5cdFx0XHRcdCggZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkgKSAmJlxuXG5cdFx0XHRcdC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpc1xuXHRcdFx0XHQoIGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCApICkge1xuXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XG5cdFx0XHRcdG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVyOiB7XG5cblx0XHRcIlRBR1wiOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdCggcGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFx0XHRcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSApICYmIGNsYXNzQ2FjaGUoXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KFxuXHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtLmNsYXNzTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8XG5cdFx0XHRcdFx0XHRcdFx0XCJcIlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9ICk7XG5cdFx0fSxcblxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XG5cblx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCI9XCIgPyByZXN1bHQgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIhPVwiID8gcmVzdWx0ICE9PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiXj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIqPVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiJD1cIiA/IGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifj1cIiA/ICggXCIgXCIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsIFwiIFwiICkgKyBcIiBcIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifD1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgXCItXCIgOlxuXHRcdFx0XHRcdGZhbHNlO1xuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgX2FyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9IG5vZGVbIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcblxuXHRcdFx0XHRcdFx0Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGBcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXhcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBwYXJlbnQ7XG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8ICggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZVxuXHRcdFx0XHRcdFx0ZGlmZiAtPSBsYXN0O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHtcblxuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBTaXp6bGUgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRcdHZhciBpZHgsXG5cdFx0XHRcdFx0XHRcdG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSxcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IGluZGV4T2YoIHNlZWQsIG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHRcdFx0dW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLFxuXHRcdFx0XHRcdFx0aSA9IHNlZWQubGVuZ3RoO1xuXG5cdFx0XHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYFxuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpIF0gPSAhKCBtYXRjaGVzWyBpIF0gPSBlbGVtICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBudWxsO1xuXHRcdFx0XHRcdHJldHVybiAhcmVzdWx0cy5wb3AoKTtcblx0XHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHRcImNvbnRhaW5zXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KCBsYW5nIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgbGFuZyApO1xuXHRcdFx0fVxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgZWxlbUxhbmc7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwieG1sOmxhbmdcIiApIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCBcImxhbmdcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdGVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKCAoIGVsZW0gPSBlbGVtLnBhcmVudE5vZGUgKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gTWlzY2VsbGFuZW91c1xuXHRcdFwidGFyZ2V0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdFx0XHRyZXR1cm4gaGFzaCAmJiBoYXNoLnNsaWNlKCAxICkgPT09IGVsZW0uaWQ7XG5cdFx0fSxcblxuXHRcdFwicm9vdFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2NFbGVtO1xuXHRcdH0sXG5cblx0XHRcImZvY3VzXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiZcblx0XHRcdFx0KCAhZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSApICYmXG5cdFx0XHRcdCEhKCBlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4ICk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQgKSB8fFxuXHRcdFx0XHQoIG5vZGVOYW1lID09PSBcIm9wdGlvblwiICYmICEhZWxlbS5zZWxlY3RlZCApO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0XG5cdFx0XHQvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5XG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zWyBcImVtcHR5XCIgXSggZWxlbSApO1xuXHRcdH0sXG5cblx0XHQvLyBFbGVtZW50L2lucHV0IHR5cGVzXG5cdFx0XCJoZWFkZXJcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiaW5wdXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiYnV0dG9uXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fCBuYW1lID09PSBcImJ1dHRvblwiO1xuXHRcdH0sXG5cblx0XHRcInRleHRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgYXR0cjtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiAmJlxuXHRcdFx0XHRlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUU8OFxuXHRcdFx0XHQvLyBOZXcgSFRNTDUgYXR0cmlidXRlIHZhbHVlcyAoZS5nLiwgXCJzZWFyY2hcIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSBcInRleHRcIlxuXHRcdFx0XHQoICggYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICkgPT0gbnVsbCB8fFxuXHRcdFx0XHRcdGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZXh0XCIgKTtcblx0XHR9LFxuXG5cdFx0Ly8gUG9zaXRpb24taW4tY29sbGVjdGlvblxuXHRcdFwiZmlyc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSApLFxuXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSApLFxuXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggX21hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9ICksXG5cblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImx0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/XG5cdFx0XHRcdGFyZ3VtZW50ICsgbGVuZ3RoIDpcblx0XHRcdFx0YXJndW1lbnQgPiBsZW5ndGggP1xuXHRcdFx0XHRcdGxlbmd0aCA6XG5cdFx0XHRcdFx0YXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJndFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyArK2kgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9IClcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zWyBcIm50aFwiIF0gPSBFeHByLnBzZXVkb3NbIFwiZXFcIiBdO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAoIG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbIDAgXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAoIHRva2VucyA9IFtdICkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKCBtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXG5cdFx0XHRcdC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZVxuXHRcdFx0XHR0eXBlOiBtYXRjaFsgMCBdLnJlcGxhY2UoIHJ0cmltLCBcIiBcIiApXG5cdFx0XHR9ICk7XG5cdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZpbHRlcnNcblx0XHRmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xuXHRcdFx0aWYgKCAoIG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSApICYmICggIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxuXHRcdFx0XHQoIG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApICkgKSApIHtcblx0XHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdHJldHVybiBwYXJzZU9ubHkgP1xuXHRcdHNvRmFyLmxlbmd0aCA6XG5cdFx0c29GYXIgP1xuXHRcdFx0U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDpcblxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zWyBpIF0udmFsdWU7XG5cdH1cblx0cmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkge1xuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXG5cdFx0c2tpcCA9IGNvbWJpbmF0b3IubmV4dCxcblx0XHRrZXkgPSBza2lwIHx8IGRpcixcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBrZXkgPT09IFwicGFyZW50Tm9kZVwiLFxuXHRcdGRvbmVOYW1lID0gZG9uZSsrO1xuXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cblxuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKCBlbGVtWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBza2lwICYmIHNraXAgPT09IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0ZWxlbSA9IGVsZW1bIGRpciBdIHx8IGVsZW07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCAoIG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdICkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCBuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyBrZXkgXSA9IG5ld0NhY2hlO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xuXHRcdFx0XHRcdFx0XHRpZiAoICggbmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbIGkgXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1sgMCBdO1xufVxuXG5mdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzWyBpIF0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XG5cdFx0XHRcdFx0bWFwLnB1c2goIGkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdVbm1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHtcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcblx0fVxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XG5cdH1cblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKFxuXHRcdFx0XHRzZWxlY3RvciB8fCBcIipcIixcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCxcblx0XHRcdFx0W11cblx0XHRcdCksXG5cblx0XHRcdC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvblxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0ZWxlbXMsXG5cblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVyID9cblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKCBlbGVtID0gdGVtcFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFsgaSBdIF0gPSAhKCBtYXRjaGVySW5bIHBvc3RNYXBbIGkgXSBdID0gZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAoIG1hdGNoZXJJblsgaSBdID0gZWxlbSApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsICggbWF0Y2hlck91dCA9IFtdICksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICYmXG5cdFx0XHRcdFx0XHQoIHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwWyBpIF0gKSA+IC0xICkge1xuXG5cdFx0XHRcdFx0XHRzZWVkWyB0ZW1wIF0gPSAhKCByZXN1bHRzWyB0ZW1wIF0gPSBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWRcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlck91dCA9IGNvbmRlbnNlKFxuXHRcdFx0XHRtYXRjaGVyT3V0ID09PSByZXN1bHRzID9cblx0XHRcdFx0XHRtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOlxuXHRcdFx0XHRcdG1hdGNoZXJPdXRcblx0XHRcdCk7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAwIF0udHlwZSBdLFxuXHRcdGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVsgXCIgXCIgXSxcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXG5cblx0XHQvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKVxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KCBjaGVja0NvbnRleHQgPSBjb250ZXh0ICkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblxuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRjaGVja0NvbnRleHQgPSBudWxsO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IF07XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGkgXS50eXBlIF0gKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKCBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlciApIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zWyBpIF0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbIGkgXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHQvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmdcblx0XHRcdFx0aiA9ICsraTtcblx0XHRcdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGogXS50eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXG5cdFx0XHRcdFx0aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3RvcihcblxuXHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0dG9rZW5zXG5cdFx0XHRcdFx0XHQuc2xpY2UoIDAsIGkgLSAxIClcblx0XHRcdFx0XHRcdC5jb25jYXQoIHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9IClcblx0XHRcdFx0XHQpLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSxcblx0XHRcdFx0XHRtYXRjaGVyLFxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICggdG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkgKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbIFwiVEFHXCIgXSggXCIqXCIsIG91dGVybW9zdCApLFxuXG5cdFx0XHRcdC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoIGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xICksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgPT0gZG9jdW1lbnQgfHwgY29udGV4dCB8fCBvdXRlcm1vc3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHRcdFx0XHRcdFx0eG1sID0gIWRvY3VtZW50SXNIVE1MO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtICkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS5cblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xuXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZVxuXHRcdFx0Ly8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC5cblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcblx0XHRcdC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgXCIwMFwiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzb1xuXHRcdFx0Ly8gbnVtZXJpY2FsbHkgemVyby5cblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBzZXRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEoIHVubWF0Y2hlZFsgaSBdIHx8IHNldE1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbIGkgXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0U2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoWyBpIF0gKTtcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoXG5cdFx0XHRzZWxlY3Rvcixcblx0XHRcdG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApXG5cdFx0KTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKCBzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yICkgKTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZFxuXHQvLyAodGhlIGxhdHRlciBvZiB3aGljaCBndWFyYW50ZWVzIHVzIGNvbnRleHQpXG5cdGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkge1xuXG5cdFx0Ly8gUmVkdWNlIGNvbnRleHQgaWYgdGhlIGxlYWRpbmcgY29tcG91bmQgc2VsZWN0b3IgaXMgYW4gSURcblx0XHR0b2tlbnMgPSBtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKCB0b2tlbiA9IHRva2Vuc1sgMCBdICkudHlwZSA9PT0gXCJJRFwiICYmXG5cdFx0XHRjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMSBdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kWyBcIklEXCIgXSggdG9rZW4ubWF0Y2hlc1sgMCBdXG5cdFx0XHRcdC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLCBjb250ZXh0ICkgfHwgW10gKVsgMCBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwclsgXCJuZWVkc0NvbnRleHRcIiBdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zWyBpIF07XG5cblx0XHRcdC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3Jcblx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgKCB0eXBlID0gdG9rZW4udHlwZSApIF0gKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAoIGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSApICkge1xuXG5cdFx0XHRcdC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9yc1xuXHRcdFx0XHRpZiAoICggc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1sgMCBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXG5cdFx0XHRcdFx0cnNpYmxpbmcudGVzdCggdG9rZW5zWyAwIF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHQpICkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoIFwiXCIgKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKCBcIlwiICkgPT09IGV4cGFuZG87XG5cbi8vIFN1cHBvcnQ6IENocm9tZSAxNC0zNStcbi8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25cbnN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICkgKSAmIDE7XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFPDhcbi8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5IFwiaW50ZXJwb2xhdGlvblwiXG4vLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nIyc+PC9hPlwiO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwiaHJlZlwiICkgPT09IFwiI1wiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0eXBlXCIgPyAxIDogMiApO1xuXHRcdH1cblx0fSApO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZGVmYXVsdFZhbHVlIGluIHBsYWNlIG9mIGdldEF0dHJpYnV0ZShcInZhbHVlXCIpXG5pZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBcInZhbHVlXCIsIGZ1bmN0aW9uKCBlbGVtLCBfbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWU7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRyZXR1cm4gZWwuZ2V0QXR0cmlidXRlKCBcImRpc2FibGVkXCIgKSA9PSBudWxsO1xufSApICkge1xuXHRhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHZhbDtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHQoIHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApICkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSApO1xufVxuXG5yZXR1cm4gU2l6emxlO1xuXG59ICkoIHdpbmRvdyApO1xuXG5cblxualF1ZXJ5LmZpbmQgPSBTaXp6bGU7XG5qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7XG5cbi8vIERlcHJlY2F0ZWRcbmpRdWVyeS5leHByWyBcIjpcIiBdID0galF1ZXJ5LmV4cHIucHNldWRvcztcbmpRdWVyeS51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0O1xualF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDtcbmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDtcbmpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWlucztcbmpRdWVyeS5lc2NhcGVTZWxlY3RvciA9IFNpenpsZS5lc2NhcGU7XG5cblxuXG5cbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcblx0dmFyIG1hdGNoZWQgPSBbXSxcblx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdO1xuXG5cdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG5cdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7XG5cblxuXG5mdW5jdGlvbiBub2RlTmFtZSggZWxlbSwgbmFtZSApIHtcblxuXHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTtcblxufVxudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pICk7XG5cblxuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gU2luZ2xlIGVsZW1lbnRcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KVxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEZpbHRlcmVkIGRpcmVjdGx5IGZvciBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBzZWxlY3RvcnNcblx0cmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApO1xufVxuXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XG5cdHZhciBlbGVtID0gZWxlbXNbIDAgXTtcblxuXHRpZiAoIG5vdCApIHtcblx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHR9XG5cblx0aWYgKCBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksIHJldCxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTtcblxuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xuXHR9LFxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0gKTtcblxuXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxuXG5cbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxudmFyIHJvb3RqUXVlcnksXG5cblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Ncblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKHRyYWMtOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKHRyYWMtMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIGVsZW0uY29udGVudERvY3VtZW50ICE9IG51bGwgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErXG5cdFx0XHQvLyA8b2JqZWN0PiBlbGVtZW50cyB3aXRoIG5vIGBkYXRhYCBhdHRyaWJ1dGUgaGFzIGFuIG9iamVjdFxuXHRcdFx0Ly8gYGNvbnRlbnREb2N1bWVudGAgd2l0aCBhIGBudWxsYCBwcm90b3R5cGUuXG5cdFx0XHRnZXRQcm90byggZWxlbS5jb250ZW50RG9jdW1lbnQgKSApIHtcblxuXHRcdFx0cmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50O1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seVxuXHRcdC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxuXHRcdC8vIGRvbid0IHN1cHBvcnQgaXQuXG5cdFx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0ZW1wbGF0ZVwiICkgKSB7XG5cdFx0XHRlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xuXHR9XG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcblx0XHR2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XG5cdFx0XHRzZWxlY3RvciA9IHVudGlsO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQucmV2ZXJzZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xuXHR9O1xufSApO1xudmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZyApO1xuXG5cblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXNcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9ICk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXG5cdFx0Ly8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHNcblx0XHRtZW1vcnksXG5cblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXG5cdFx0Ly8gRmxhZyB0byBwcmV2ZW50IGZpcmluZ1xuXHRcdGxvY2tlZCxcblxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXG5cdFx0Ly8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRxdWV1ZSA9IFtdLFxuXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXggPSAtMSxcblxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmdcblx0XHRcdGxvY2tlZCA9IGxvY2tlZCB8fCBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdG9UeXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggIWxvY2tlZCApIHtcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cblxuZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7XG5cdHJldHVybiB2O1xufVxuZnVuY3Rpb24gVGhyb3dlciggZXggKSB7XG5cdHRocm93IGV4O1xufVxuXG5mdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlICkge1xuXHR2YXIgbWV0aG9kO1xuXG5cdHRyeSB7XG5cblx0XHQvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yXG5cdFx0aWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgdGhlbmFibGVzXG5cdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS50aGVuICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciBub24tdGhlbmFibGVzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29udHJvbCBgcmVzb2x2ZWAgYXJndW1lbnRzIGJ5IGxldHRpbmcgQXJyYXkjc2xpY2UgY2FzdCBib29sZWFuIGBub1ZhbHVlYCB0byBpbnRlZ2VyOlxuXHRcdFx0Ly8gKiBmYWxzZTogWyB2YWx1ZSBdLnNsaWNlKCAwICkgPT4gcmVzb2x2ZSggdmFsdWUgKVxuXHRcdFx0Ly8gKiB0cnVlOiBbIHZhbHVlIF0uc2xpY2UoIDEgKSA9PiByZXNvbHZlKClcblx0XHRcdHJlc29sdmUuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdLnNsaWNlKCBub1ZhbHVlICkgKTtcblx0XHR9XG5cblx0Ly8gRm9yIFByb21pc2VzL0ErLCBjb252ZXJ0IGV4Y2VwdGlvbnMgaW50byByZWplY3Rpb25zXG5cdC8vIFNpbmNlIGpRdWVyeS53aGVuIGRvZXNuJ3QgdW53cmFwIHRoZW5hYmxlcywgd2UgY2FuIHNraXAgdGhlIGV4dHJhIGNoZWNrcyBhcHBlYXJpbmcgaW5cblx0Ly8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi5cblx0fSBjYXRjaCAoIHZhbHVlICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seVxuXHRcdC8vIFN0cmljdCBtb2RlIGZ1bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNvbnRleHRcblx0XHRyZWplY3QuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdICk7XG5cdH1cbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHtcblx0XHR2YXIgdHVwbGVzID0gW1xuXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBjYWxsYmFja3MsXG5cdFx0XHRcdC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5kZXgsIFtmaW5hbCBzdGF0ZV1cblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksIDIgXSxcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAwLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDEsIFwicmVqZWN0ZWRcIiBdXG5cdFx0XHRdLFxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcblx0XHRcdHByb21pc2UgPSB7XG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiY2F0Y2hcIjogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRwaXBlOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7XG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBfaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIHByaW1hcnkgRGVmZXJyZWRcblx0XHRcdHByaW1hcnkgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0cHJpbWFyeS5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgcHJpbWFyeS5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBwcmltYXJ5LnJlamVjdCxcblx0XHRcdFx0IXJlbWFpbmluZyApO1xuXG5cdFx0XHQvLyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApXG5cdFx0XHRpZiAoIHByaW1hcnkuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHByaW1hcnkudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgcHJpbWFyeS5yZWplY3QgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJpbWFyeS5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgdHJhYy02NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhlbjtcblxuLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbmZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRqUXVlcnkucmVhZHkoKTtcbn1cblxuLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWRcbi8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seVxuLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5pZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiB8fFxuXHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcblxuXHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG59IGVsc2Uge1xuXG5cdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXG5cdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG59XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggdG9UeXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBfa2V5LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGZuKFxuXHRcdFx0XHRcdGVsZW1zWyBpIF0sIGtleSwgcmF3ID9cblx0XHRcdFx0XHRcdHZhbHVlIDpcblx0XHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBfYWxsLCBsZXR0ZXIgKSB7XG5cdHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcbn1cblxuLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlc1xuLy8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKHRyYWMtOTU3MilcbmZ1bmN0aW9uIGNhbWVsQ2FzZSggc3RyaW5nICkge1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgXCJtcy1cIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTtcbn1cbnZhciBhY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdC8vIEFjY2VwdHMgb25seTpcblx0Ly8gIC0gTm9kZVxuXHQvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFXG5cdC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFXG5cdC8vICAtIE9iamVjdFxuXHQvLyAgICAtIEFueVxuXHRyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBEYXRhKCkge1xuXHR0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7XG59XG5cbkRhdGEudWlkID0gMTtcblxuRGF0YS5wcm90b3R5cGUgPSB7XG5cblx0Y2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBvd25lciBvYmplY3QgYWxyZWFkeSBoYXMgYSBjYWNoZVxuXHRcdHZhciB2YWx1ZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdC8vIElmIG5vdCwgY3JlYXRlIG9uZVxuXHRcdGlmICggIXZhbHVlICkge1xuXHRcdFx0dmFsdWUgPSB7fTtcblxuXHRcdFx0Ly8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsXG5cdFx0XHQvLyBidXQgd2Ugc2hvdWxkIG5vdCwgc2VlIHRyYWMtODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKHRyYWMtMTQ4OTQpXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7XG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTtcblx0XHRcdFx0XHRcdFx0XHRkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZGF0YTtcblxuXHRcdFx0Ly8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHlcblx0XHRcdC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxuXHRcdFx0Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbFxuXHRcdFx0Ly8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS5cblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gVGhlIGtleSB3aWxsIGFsd2F5cyBiZSBjYW1lbENhc2VkIGluIERhdGFcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHN0b3JlIHRoZSBjYW1lbENhc2VkIGtleVxuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTtcblx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgcXVldWU7XG5cblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xuXHRcdFx0cXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxuXHRcdFx0aWYgKCBkYXRhICkge1xuXHRcdFx0XHRpZiAoICFxdWV1ZSB8fCBBcnJheS5pc0FycmF5KCBkYXRhICkgKSB7XG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGRhdGEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHF1ZXVlIHx8IFtdO1xuXHRcdH1cblx0fSxcblxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcblx0XHRcdHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLFxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpLFxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcblx0XHRcdG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTtcblx0XHRcdH07XG5cblx0XHQvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRzdGFydExlbmd0aC0tO1xuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cblx0XHRcdC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmdcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWRcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KCBcImlucHJvZ3Jlc3NcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR2YXIga2V5ID0gdHlwZSArIFwicXVldWVIb29rc1wiO1xuXHRcdHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICkuYWRkKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUgKyBcInF1ZXVlXCIsIGtleSBdICk7XG5cdFx0XHR9IClcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHNldHRlciA9IDI7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZGF0YSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gXCJmeFwiO1xuXHRcdFx0c2V0dGVyLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzIDpcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWyAwIF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0fSxcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdH0gKTtcblx0fSxcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHR9LFxuXG5cdC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGVcblx0Ly8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpXG5cdHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7XG5cdFx0dmFyIHRtcCxcblx0XHRcdGNvdW50ID0gMSxcblx0XHRcdGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRlbGVtZW50cyA9IHRoaXMsXG5cdFx0XHRpID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRyZXNvbHZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISggLS1jb3VudCApICkge1xuXHRcdFx0XHRcdGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgKTtcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0dG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXNvbHZlKCk7XG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xuXHR9XG59ICk7XG52YXIgcG51bSA9ICggL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8gKS5zb3VyY2U7XG5cbnZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggXCJeKD86KFsrLV0pPXwpKFwiICsgcG51bSArIFwiKShbYS16JV0qKSRcIiwgXCJpXCIgKTtcblxuXG52YXIgY3NzRXhwYW5kID0gWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiIF07XG5cbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuXG5cdHZhciBpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblx0XHR9LFxuXHRcdGNvbXBvc2VkID0geyBjb21wb3NlZDogdHJ1ZSB9O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCssIGlPUyAxMC4wIC0gMTAuMiBvbmx5XG5cdC8vIENoZWNrIGF0dGFjaG1lbnQgYWNyb3NzIHNoYWRvdyBET00gYm91bmRhcmllcyB3aGVuIHBvc3NpYmxlIChnaC0zNTA0KVxuXHQvLyBTdXBwb3J0OiBpT1MgMTAuMC0xMC4yIG9ubHlcblx0Ly8gRWFybHkgaU9TIDEwIHZlcnNpb25zIHN1cHBvcnQgYGF0dGFjaFNoYWRvd2AgYnV0IG5vdCBgZ2V0Um9vdE5vZGVgLFxuXHQvLyBsZWFkaW5nIHRvIGVycm9ycy4gV2UgbmVlZCB0byBjaGVjayBmb3IgYGdldFJvb3ROb2RlYC5cblx0aWYgKCBkb2N1bWVudEVsZW1lbnQuZ2V0Um9vdE5vZGUgKSB7XG5cdFx0aXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRSb290Tm9kZSggY29tcG9zZWQgKSA9PT0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdH07XG5cdH1cbnZhciBpc0hpZGRlbldpdGhpblRyZWUgPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7XG5cblx0XHQvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcblx0XHQvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnRcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcblxuXHRcdC8vIElubGluZSBzdHlsZSB0cnVtcHMgYWxsXG5cdFx0cmV0dXJuIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHxcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJlxuXG5cdFx0XHQvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NVxuXHRcdFx0Ly8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3BsYXk6IG5vbmUsIHNvIGZpcnN0IGNvbmZpcm0gdGhhdCBlbGVtIGlzXG5cdFx0XHQvLyBpbiB0aGUgZG9jdW1lbnQuXG5cdFx0XHRpc0F0dGFjaGVkKCBlbGVtICkgJiZcblxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCI7XG5cdH07XG5cblxuXG5mdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHByb3AsIHZhbHVlUGFydHMsIHR3ZWVuICkge1xuXHR2YXIgYWRqdXN0ZWQsIHNjYWxlLFxuXHRcdG1heEl0ZXJhdGlvbnMgPSAyMCxcblx0XHRjdXJyZW50VmFsdWUgPSB0d2VlbiA/XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmN1cigpO1xuXHRcdFx0fSA6XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsIFwiXCIgKTtcblx0XHRcdH0sXG5cdFx0aW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLFxuXHRcdHVuaXQgPSB2YWx1ZVBhcnRzICYmIHZhbHVlUGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKSxcblxuXHRcdC8vIFN0YXJ0aW5nIHZhbHVlIGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzXG5cdFx0aW5pdGlhbEluVW5pdCA9IGVsZW0ubm9kZVR5cGUgJiZcblx0XHRcdCggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiAraW5pdGlhbCApICYmXG5cdFx0XHRyY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApO1xuXG5cdGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0XHQvLyBIYWx2ZSB0aGUgaXRlcmF0aW9uIHRhcmdldCB2YWx1ZSB0byBwcmV2ZW50IGludGVyZmVyZW5jZSBmcm9tIENTUyB1cHBlciBib3VuZHMgKGdoLTIxNDQpXG5cdFx0aW5pdGlhbCA9IGluaXRpYWwgLyAyO1xuXG5cdFx0Ly8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzc1xuXHRcdHVuaXQgPSB1bml0IHx8IGluaXRpYWxJblVuaXRbIDMgXTtcblxuXHRcdC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsIHx8IDE7XG5cblx0XHR3aGlsZSAoIG1heEl0ZXJhdGlvbnMtLSApIHtcblxuXHRcdFx0Ly8gRXZhbHVhdGUgYW5kIHVwZGF0ZSBvdXIgYmVzdCBndWVzcyAoZG91YmxpbmcgZ3Vlc3NlcyB0aGF0IHplcm8gb3V0KS5cblx0XHRcdC8vIEZpbmlzaCBpZiB0aGUgc2NhbGUgZXF1YWxzIG9yIGNyb3NzZXMgMSAobWFraW5nIHRoZSBvbGQqbmV3IHByb2R1Y3Qgbm9uLXBvc2l0aXZlKS5cblx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblx0XHRcdGlmICggKCAxIC0gc2NhbGUgKSAqICggMSAtICggc2NhbGUgPSBjdXJyZW50VmFsdWUoKSAvIGluaXRpYWwgfHwgMC41ICkgKSA8PSAwICkge1xuXHRcdFx0XHRtYXhJdGVyYXRpb25zID0gMDtcblx0XHRcdH1cblx0XHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0IC8gc2NhbGU7XG5cblx0XHR9XG5cblx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAqIDI7XG5cdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvblxuXHRcdHZhbHVlUGFydHMgPSB2YWx1ZVBhcnRzIHx8IFtdO1xuXHR9XG5cblx0aWYgKCB2YWx1ZVBhcnRzICkge1xuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwO1xuXG5cdFx0Ly8gQXBwbHkgcmVsYXRpdmUgb2Zmc2V0ICgrPS8tPSkgaWYgc3BlY2lmaWVkXG5cdFx0YWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gP1xuXHRcdFx0aW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDpcblx0XHRcdCt2YWx1ZVBhcnRzWyAyIF07XG5cdFx0aWYgKCB0d2VlbiApIHtcblx0XHRcdHR3ZWVuLnVuaXQgPSB1bml0O1xuXHRcdFx0dHdlZW4uc3RhcnQgPSBpbml0aWFsSW5Vbml0O1xuXHRcdFx0dHdlZW4uZW5kID0gYWRqdXN0ZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhZGp1c3RlZDtcbn1cblxuXG52YXIgZGVmYXVsdERpc3BsYXlNYXAgPSB7fTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKSB7XG5cdHZhciB0ZW1wLFxuXHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCxcblx0XHRub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUsXG5cdFx0ZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdO1xuXG5cdGlmICggZGlzcGxheSApIHtcblx0XHRyZXR1cm4gZGlzcGxheTtcblx0fVxuXG5cdHRlbXAgPSBkb2MuYm9keS5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICkgKTtcblx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIHRlbXAsIFwiZGlzcGxheVwiICk7XG5cblx0dGVtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0ZW1wICk7XG5cblx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRkaXNwbGF5ID0gXCJibG9ja1wiO1xuXHR9XG5cdGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdID0gZGlzcGxheTtcblxuXHRyZXR1cm4gZGlzcGxheTtcbn1cblxuZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkge1xuXHR2YXIgZGlzcGxheSwgZWxlbSxcblx0XHR2YWx1ZXMgPSBbXSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXG5cdC8vIERldGVybWluZSBuZXcgZGlzcGxheSB2YWx1ZSBmb3IgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGNoYW5nZVxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0ZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTtcblx0XHRpZiAoIHNob3cgKSB7XG5cblx0XHRcdC8vIFNpbmNlIHdlIGZvcmNlIHZpc2liaWxpdHkgdXBvbiBjYXNjYWRlLWhpZGRlbiBlbGVtZW50cywgYW4gaW1tZWRpYXRlIChhbmQgc2xvdylcblx0XHRcdC8vIGNoZWNrIGlzIHJlcXVpcmVkIGluIHRoaXMgZmlyc3QgbG9vcCB1bmxlc3Mgd2UgaGF2ZSBhIG5vbmVtcHR5IGRpc3BsYXkgdmFsdWUgKGVpdGhlclxuXHRcdFx0Ly8gaW5saW5lIG9yIGFib3V0LXRvLWJlLXJlc3RvcmVkKVxuXHRcdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApIHx8IG51bGw7XG5cdFx0XHRcdGlmICggIXZhbHVlc1sgaW5kZXggXSApIHtcblx0XHRcdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBkaXNwbGF5ICE9PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gXCJub25lXCI7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgd2hhdCB3ZSdyZSBvdmVyd3JpdGluZ1xuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiZGlzcGxheVwiLCBkaXNwbGF5ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wIHRvIGF2b2lkIGNvbnN0YW50IHJlZmxvd1xuXHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggdmFsdWVzWyBpbmRleCBdICE9IG51bGwgKSB7XG5cdFx0XHRlbGVtZW50c1sgaW5kZXggXS5zdHlsZS5kaXNwbGF5ID0gdmFsdWVzWyBpbmRleCBdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50cztcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzaG93OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTtcblx0fSxcblx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7XG5cdH0sXG5cdHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkge1xuXHRcdGlmICggdHlwZW9mIHN0YXRlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdHJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGlzSGlkZGVuV2l0aGluVHJlZSggdGhpcyApICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG52YXIgcmNoZWNrYWJsZVR5cGUgPSAoIC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pICk7XG5cbnZhciBydGFnTmFtZSA9ICggLzwoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKS9pICk7XG5cbnZhciByc2NyaXB0VHlwZSA9ICggL14kfF5tb2R1bGUkfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHlcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKHRyYWMtMTEyMTcpXG5cdC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSlcblx0Ly8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICh0cmFjLTE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0Ly8gSUUgPD05IHJlcGxhY2VzIDxvcHRpb24+IHRhZ3Mgd2l0aCB0aGVpciBjb250ZW50cyB3aGVuIGluc2VydGVkIG91dHNpZGUgb2Zcblx0Ly8gdGhlIHNlbGVjdCBlbGVtZW50LlxuXHRkaXYuaW5uZXJIVE1MID0gXCI8b3B0aW9uPjwvb3B0aW9uPlwiO1xuXHRzdXBwb3J0Lm9wdGlvbiA9ICEhZGl2Lmxhc3RDaGlsZDtcbn0gKSgpO1xuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICh0cmFjLTEzMjAwKVxudmFyIHdyYXBNYXAgPSB7XG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xud3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5pZiAoICFzdXBwb3J0Lm9wdGlvbiApIHtcblx0d3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uID0gWyAxLCBcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIiwgXCI8L3NlbGVjdD5cIiBdO1xufVxuXG5cbmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAodHJhYy0xNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBhdHRhY2hlZCwgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIHRvVHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKHRyYWMtMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxudmFyIHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuLy8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXMsIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIG5vLW9wLlxuLy8gU28gZXhwZWN0IGZvY3VzIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBhY3RpdmUsXG4vLyBhbmQgYmx1ciB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhbHJlYWR5IGFjdGl2ZS5cbi8vIChmb2N1cyBhbmQgYmx1ciBhcmUgYWx3YXlzIHN5bmNocm9ub3VzIGluIG90aGVyIHN1cHBvcnRlZCBicm93c2Vycyxcbi8vIHRoaXMganVzdCBkZWZpbmVzIHdoZW4gd2UgY2FuIGNvdW50IG9uIGl0KS5cbmZ1bmN0aW9uIGV4cGVjdFN5bmMoIGVsZW0sIHR5cGUgKSB7XG5cdHJldHVybiAoIGVsZW0gPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgKSA9PT0gKCB0eXBlID09PSBcImZvY3VzXCIgKTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcbi8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5M1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBPbmx5IGF0dGFjaCBldmVudHMgdG8gb2JqZWN0cyB0aGF0IGFjY2VwdCBkYXRhXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblxuXHRcdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksXG5cblx0XHRcdGhhbmRsZXJzID0gKFxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsIClcblx0XHRcdClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKHRyYWMtMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICh0cmFjLTY5MTEsIHRyYWMtODE2NSwgdHJhYy0xMTM4MiwgdHJhYy0xMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICh0cmFjLTEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIGZvciBjaGVja2FibGUgaW5wdXRzXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHQvLyBkYXRhUHJpdi5zZXQoIGVsLCBcImNsaWNrXCIsIC4uLiApXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIsIHJldHVyblRydWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyaW5nIGEgY2xpY2tcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgc3VwcHJlc3MgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHQvLyBBbHNvIHByZXZlbnQgaXQgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZSBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRcdHJldHVybiByY2hlY2thYmxlVHlwZS50ZXN0KCB0YXJnZXQudHlwZSApICYmXG5cdFx0XHRcdFx0dGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsIFwiaW5wdXRcIiApICYmXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0YXJnZXQsIFwiY2xpY2tcIiApIHx8XG5cdFx0XHRcdFx0bm9kZU5hbWUoIHRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFbnN1cmUgdGhlIHByZXNlbmNlIG9mIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaGFuZGxlcyBtYW51YWxseS10cmlnZ2VyZWRcbi8vIHN5bnRoZXRpYyBldmVudHMgYnkgaW50ZXJydXB0aW5nIHByb2dyZXNzIHVudGlsIHJlaW52b2tlZCBpbiByZXNwb25zZSB0b1xuLy8gKm5hdGl2ZSogZXZlbnRzIHRoYXQgaXQgZmlyZXMgZGlyZWN0bHksIGVuc3VyaW5nIHRoYXQgc3RhdGUgY2hhbmdlcyBoYXZlXG4vLyBhbHJlYWR5IG9jY3VycmVkIGJlZm9yZSBvdGhlciBsaXN0ZW5lcnMgYXJlIGludm9rZWQuXG5mdW5jdGlvbiBsZXZlcmFnZU5hdGl2ZSggZWwsIHR5cGUsIGV4cGVjdFN5bmMgKSB7XG5cblx0Ly8gTWlzc2luZyBleHBlY3RTeW5jIGluZGljYXRlcyBhIHRyaWdnZXIgY2FsbCwgd2hpY2ggbXVzdCBmb3JjZSBzZXR1cCB0aHJvdWdoIGpRdWVyeS5ldmVudC5hZGRcblx0aWYgKCAhZXhwZWN0U3luYyApIHtcblx0XHRpZiAoIGRhdGFQcml2LmdldCggZWwsIHR5cGUgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHJldHVyblRydWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVnaXN0ZXIgdGhlIGNvbnRyb2xsZXIgYXMgYSBzcGVjaWFsIHVuaXZlcnNhbCBoYW5kbGVyIGZvciBhbGwgZXZlbnQgbmFtZXNwYWNlc1xuXHRkYXRhUHJpdi5zZXQoIGVsLCB0eXBlLCBmYWxzZSApO1xuXHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwge1xuXHRcdG5hbWVzcGFjZTogZmFsc2UsXG5cdFx0aGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIG5vdEFzeW5jLCByZXN1bHQsXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdGlmICggKCBldmVudC5pc1RyaWdnZXIgJiAxICkgJiYgdGhpc1sgdHlwZSBdICkge1xuXG5cdFx0XHRcdC8vIEludGVycnVwdCBwcm9jZXNzaW5nIG9mIHRoZSBvdXRlciBzeW50aGV0aWMgLnRyaWdnZXIoKWVkIGV2ZW50XG5cdFx0XHRcdC8vIFNhdmVkIGRhdGEgc2hvdWxkIGJlIGZhbHNlIGluIHN1Y2ggY2FzZXMsIGJ1dCBtaWdodCBiZSBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0XG5cdFx0XHRcdC8vIGZyb20gYW4gYXN5bmMgbmF0aXZlIGhhbmRsZXIgKGdoLTQzNTApXG5cdFx0XHRcdGlmICggIXNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRcdC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYW4gZXZlbnQgb2JqZWN0KSwgc28gdGhpcyBhcnJheVxuXHRcdFx0XHRcdC8vIHdpbGwgbm90IGJlIGNvbmZ1c2VkIHdpdGggYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdC5cblx0XHRcdFx0XHRzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgc2F2ZWQgKTtcblxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudCBhbmQgY2FwdHVyZSBpdHMgcmVzdWx0XG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0Ly8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXNcblx0XHRcdFx0XHRub3RBc3luYyA9IGV4cGVjdFN5bmMoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHR0aGlzWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgfHwgbm90QXN5bmMgKSB7XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50XG5cdFx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0XHRcdC8vIEluIENocm9tZSwgaWYgYW4gZWxlbWVudCBoYXZpbmcgYSBmb2N1c291dCBoYW5kbGVyIGlzIGJsdXJyZWQgYnlcblx0XHRcdFx0XHRcdC8vIGNsaWNraW5nIG91dHNpZGUgb2YgaXQsIGl0IGludm9rZXMgdGhlIGhhbmRsZXIgc3luY2hyb25vdXNseS4gSWZcblx0XHRcdFx0XHRcdC8vIHRoYXQgaGFuZGxlciBjYWxscyBgLnJlbW92ZSgpYCBvbiB0aGUgZWxlbWVudCwgdGhlIGRhdGEgaXMgY2xlYXJlZCxcblx0XHRcdFx0XHRcdC8vIGxlYXZpbmcgYHJlc3VsdGAgdW5kZWZpbmVkLiBXZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QgdGhpcy5cblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQgJiYgcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCBmb3IgYW4gZXZlbnQgd2l0aCBhIGJ1YmJsaW5nIHN1cnJvZ2F0ZVxuXHRcdFx0XHQvLyAoZm9jdXMgb3IgYmx1ciksIGFzc3VtZSB0aGF0IHRoZSBzdXJyb2dhdGUgYWxyZWFkeSBwcm9wYWdhdGVkIGZyb20gdHJpZ2dlcmluZyB0aGVcblx0XHRcdFx0Ly8gbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS5cblx0XHRcdFx0Ly8gVGhpcyB0ZWNobmljYWxseSBnZXRzIHRoZSBvcmRlcmluZyB3cm9uZyB3LnIudC4gdG8gYC50cmlnZ2VyKClgIChpbiB3aGljaCB0aGVcblx0XHRcdFx0Ly8gYnViYmxpbmcgc3Vycm9nYXRlIHByb3BhZ2F0ZXMgKmFmdGVyKiB0aGUgbm9uLWJ1YmJsaW5nIGJhc2UpLCBidXQgdGhhdCBzZWVtc1xuXHRcdFx0XHQvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLlxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge30gKS5kZWxlZ2F0ZVR5cGUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBldmVudCB0cmlnZ2VyZWQgYWJvdmUsIGV2ZXJ5dGhpbmcgaXMgbm93IGluIG9yZGVyXG5cdFx0XHQvLyBGaXJlIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHQvLyAuLi5hbmQgY2FwdHVyZSB0aGUgcmVzdWx0XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwge1xuXHRcdFx0XHRcdHZhbHVlOiBqUXVlcnkuZXZlbnQudHJpZ2dlcihcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0XHQvLyBFeHRlbmQgd2l0aCB0aGUgcHJvdG90eXBlIHRvIHJlc2V0IHRoZSBhYm92ZSBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmV4dGVuZCggc2F2ZWRbIDAgXSwgalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSApLFxuXHRcdFx0XHRcdFx0c2F2ZWQuc2xpY2UoIDEgKSxcblx0XHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5qUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkge1xuXG5cdC8vIFRoaXMgXCJpZlwiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0c1xuXHRpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcblx0XHRlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApO1xuXHR9XG59O1xuXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcblxuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0aWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIEV2ZW50IG9iamVjdFxuXHRpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XG5cdFx0dGhpcy50eXBlID0gc3JjLnR5cGU7XG5cblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxuXHRcdC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLlxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seVxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cblx0XHRcdHJldHVyblRydWUgOlxuXHRcdFx0cmV0dXJuRmFsc2U7XG5cblx0XHQvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXNcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgPD02IC0gNyBvbmx5XG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKHRyYWMtNTA0LCB0cmFjLTEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cdHdoaWNoOiB0cnVlXG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHByZXNzIG5hdGl2ZSBmb2N1cyBvciBibHVyIGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGVcblx0XHQvLyBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZXZlbnQudGFyZ2V0LCB0eXBlICk7XG5cdFx0fSxcblxuXHRcdGRlbGVnYXRlVHlwZTogZGVsZWdhdGVUeXBlXG5cdH07XG59ICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhXFxbQ0RBVEFcXFt8XFxdXFxdPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5nZXQoIHNyYyApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkZXN0LCBcImhhbmRsZSBldmVudHNcIiApO1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gZmxhdCggYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICh0cmFjLTgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0sIGRvYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVud3JhcCBhIENEQVRBIHNlY3Rpb24gY29udGFpbmluZyBzY3JpcHQgY29udGVudHMuIFRoaXMgc2hvdWxkbid0IGJlXG5cdFx0XHRcdFx0XHRcdC8vIG5lZWRlZCBhcyBpbiBYTUwgZG9jdW1lbnRzIHRoZXkncmUgYWxyZWFkeSBub3QgdmlzaWJsZSB3aGVuXG5cdFx0XHRcdFx0XHRcdC8vIGluc3BlY3RpbmcgZWxlbWVudCBjb250ZW50cyBhbmQgaW4gSFRNTCBkb2N1bWVudHMgdGhleSBoYXZlIG5vXG5cdFx0XHRcdFx0XHRcdC8vIG1lYW5pbmcgYnV0IHdlJ3JlIHByZXNlcnZpbmcgdGhhdCBsb2dpYyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgd2lsbCBiZSByZW1vdmVkIGNvbXBsZXRlbHkgaW4gNC4wLiBTZWUgZ2gtNDkwNC5cblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgbm9kZSwgZG9jICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBpc0F0dGFjaGVkKCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbDtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgcmN1c3RvbVByb3AgPSAvXi0tLztcblxuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAodHJhYy0xNTA5OCwgdHJhYy0xNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cbnZhciB3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiO1xuXG5cbnZhciBydHJpbUNTUyA9IG5ldyBSZWdFeHAoXG5cdFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsXG5cdFwiZ1wiXG4pO1xuXG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKHRyYWMtODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEJlaGF2aW9yIGluIElFIDkgaXMgbW9yZSBzdWJ0bGUgdGhhbiBpbiBuZXdlciB2ZXJzaW9ucyAmIGl0IHBhc3Nlc1xuXHRcdC8vIHNvbWUgdmVyc2lvbnMgb2YgdGhpcyB0ZXN0OyBtYWtlIHN1cmUgbm90IHRvIG1ha2UgaXQgcGFzcyB0aGVyZSFcblx0XHQvL1xuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNzArXG5cdFx0Ly8gT25seSBGaXJlZm94IGluY2x1ZGVzIGJvcmRlciB3aWR0aHNcblx0XHQvLyBpbiBjb21wdXRlZCBkaW1lbnNpb25zLiAoZ2gtNDUyOSlcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGFibGUsIHRyLCB0ckNoaWxkLCB0clN0eWxlO1xuXHRcdFx0aWYgKCByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidGFibGVcIiApO1xuXHRcdFx0XHR0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidHJcIiApO1xuXHRcdFx0XHR0ckNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdFx0XHRcdHRhYmxlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlXCI7XG5cdFx0XHRcdHRyLnN0eWxlLmNzc1RleHQgPSBcImJvcmRlcjoxcHggc29saWRcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEhlaWdodCBzZXQgdGhyb3VnaCBjc3NUZXh0IGRvZXMgbm90IGdldCBhcHBsaWVkLlxuXHRcdFx0XHQvLyBDb21wdXRlZCBoZWlnaHQgdGhlbiBjb21lcyBiYWNrIGFzIDAuXG5cdFx0XHRcdHRyLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gXCI5cHhcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDggQ2hyb21lIDg2K1xuXHRcdFx0XHQvLyBJbiBvdXIgYm9keUJhY2tncm91bmQuaHRtbCBpZnJhbWUsXG5cdFx0XHRcdC8vIGRpc3BsYXkgZm9yIGFsbCBkaXYgZWxlbWVudHMgaXMgc2V0IHRvIFwiaW5saW5lXCIsXG5cdFx0XHRcdC8vIHdoaWNoIGNhdXNlcyBhIHByb2JsZW0gb25seSBpbiBBbmRyb2lkIDggQ2hyb21lIDg2LlxuXHRcdFx0XHQvLyBFbnN1cmluZyB0aGUgZGl2IGlzIGRpc3BsYXk6IGJsb2NrXG5cdFx0XHRcdC8vIGdldHMgYXJvdW5kIHRoaXMgaXNzdWUuXG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnRcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRhYmxlIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyQ2hpbGQgKTtcblxuXHRcdFx0XHR0clN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIHRyICk7XG5cdFx0XHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID0gKCBwYXJzZUludCggdHJTdHlsZS5oZWlnaHQsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlclRvcFdpZHRoLCAxMCApICtcblx0XHRcdFx0XHRwYXJzZUludCggdHJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCwgMTAgKSApID09PSB0ci5vZmZzZXRIZWlnaHQ7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCB0YWJsZSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsO1xuXHRcdH1cblx0fSApO1xufSApKCk7XG5cblxuZnVuY3Rpb24gY3VyQ1NTKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHtcblx0dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCxcblx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDUxK1xuXHRcdC8vIFJldHJpZXZpbmcgc3R5bGUgYmVmb3JlIGNvbXB1dGVkIHNvbWVob3dcblx0XHQvLyBmaXhlcyBhbiBpc3N1ZSB3aXRoIGdldHRpbmcgd3JvbmcgdmFsdWVzXG5cdFx0Ly8gb24gZGV0YWNoZWQgZWxlbWVudHNcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0Y29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTtcblxuXHQvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG5lZWRlZCBmb3I6XG5cdC8vICAgLmNzcygnZmlsdGVyJykgKElFIDkgb25seSwgdHJhYy0xMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoZ2gtMzE0NClcblx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTtcblxuXHRcdC8vIHRyaW0gd2hpdGVzcGFjZSBmb3IgY3VzdG9tIHByb3BlcnR5IChpc3N1ZSBnaC00OTI2KVxuXHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXG5cdFx0XHQvLyBydHJpbSB0cmVhdHMgVSswMDBEIENBUlJJQUdFIFJFVFVSTiBhbmQgVSswMDBDIEZPUk0gRkVFRFxuXHRcdFx0Ly8gYXMgd2hpdGVzcGFjZSB3aGlsZSBDU1MgZG9lcyBub3QsIGJ1dCB0aGlzIGlzIG5vdCBhIHByb2JsZW1cblx0XHRcdC8vIGJlY2F1c2UgQ1NTIHByZXByb2Nlc3NpbmcgcmVwbGFjZXMgdGhlbSB3aXRoIFUrMDAwQSBMSU5FIEZFRURcblx0XHRcdC8vICh3aGljaCAqaXMqIENTUyB3aGl0ZXNwYWNlKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaW5wdXQtcHJlcHJvY2Vzc2luZ1xuXHRcdFx0cmV0ID0gcmV0LnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKTtcblx0XHR9XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBfZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xuXG5cdC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW5cblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XG5cdHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApO1xuXHRyZXR1cm4gbWF0Y2hlcyA/XG5cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHtcblx0dmFyIGkgPSBkaW1lbnNpb24gPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXHRcdGV4dHJhID0gMCxcblx0XHRkZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0aWYgKCBib3ggPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBib3ggKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGNvbnRlbnQtYm94LCB3ZSdyZSBzZWVraW5nIFwicGFkZGluZ1wiIG9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIlxuXHRcdGlmICggIWlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBBZGQgcGFkZGluZ1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEZvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCIsIGFkZCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHRyYSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGJvcmRlci1ib3ggKGNvbnRlbnQgKyBwYWRkaW5nICsgYm9yZGVyKSwgd2UncmUgc2Vla2luZyBcImNvbnRlbnRcIiBvclxuXHRcdC8vIFwicGFkZGluZ1wiIG9yIFwibWFyZ2luXCJcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIsIHN1YnRyYWN0IHBhZGRpbmdcblx0XHRcdGlmICggYm94ID09PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiBvciBcInBhZGRpbmdcIiwgc3VidHJhY3QgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbFxuXHRpZiAoICFpc0JvcmRlckJveCAmJiBjb21wdXRlZFZhbCA+PSAwICkge1xuXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlclxuXHRcdC8vIEFzc3VtaW5nIGludGVnZXIgc2Nyb2xsIGd1dHRlciwgc3VidHJhY3QgdGhlIHJlc3QgYW5kIHJvdW5kIGRvd25cblx0XHRkZWx0YSArPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKFxuXHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdGNvbXB1dGVkVmFsIC1cblx0XHRcdGRlbHRhIC1cblx0XHRcdGV4dHJhIC1cblx0XHRcdDAuNVxuXG5cdFx0Ly8gSWYgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIHVua25vd24sIHRoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXJcblx0XHQvLyBVc2UgYW4gZXhwbGljaXQgemVybyB0byBhdm9pZCBOYU4gKGdoLTM5NjQpXG5cdFx0KSApIHx8IDA7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIFVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guXG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS5cblx0XHQhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCBcInRyXCIgKSB8fFxuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdFx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHRcdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHZpc2libGUgJiBjb25uZWN0ZWRcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImdyaWRBcmVhXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uRW5kXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uU3RhcnRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dFbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dTdGFydFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKHRyYWMtNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnIHRyYWMtOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICh0cmFjLTcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAodHJhYy0xMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCAodHJhYy0xMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0aWYgKCB0YWJpbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiZcblx0XHRcdFx0XHRlbGVtLmhyZWZcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxuLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXG5cdC8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZVxuXHRmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKCB2YWx1ZSApIHtcblx0XHR2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0XHRyZXR1cm4gdG9rZW5zLmpvaW4oIFwiIFwiICk7XG5cdH1cblxuXG5mdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHtcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VzVG9BcnJheSggdmFsdWUgKSB7XG5cdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGN1ciwgY3VyVmFsdWUsIGNsYXNzTmFtZSwgaSwgZmluYWxWYWx1ZTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc05hbWVzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGN1ciA9IHRoaXMubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGFzc05hbWUgKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGN1ciwgY3VyVmFsdWUsIGNsYXNzTmFtZSwgaSwgZmluYWxWYWx1ZTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3NOYW1lcy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXG5cdFx0XHRcdGN1ciA9IHRoaXMubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIiApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciA9IGN1ci5yZXBsYWNlKCBcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGNsYXNzTmFtZSwgaSwgc2VsZixcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiBpc1ZhbGlkVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKHRyYWMtMTQ2ODYsIHRyYWMtMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICh0cmFjLTI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAodHJhYy05OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAodHJhYy05NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkgKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICh0cmFjLTYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00NFxuLy8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODdcbi8vXG4vLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcbi8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuaWYgKCAhc3VwcG9ydC5mb2N1c2luICkge1xuXHRqUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXG5cdFx0Ly8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXRcblx0XHR2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICkgKTtcblx0XHR9O1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0ge1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIEhhbmRsZTogcmVndWxhciBub2RlcyAodmlhIGB0aGlzLm93bmVyRG9jdW1lbnRgKSwgd2luZG93XG5cdFx0XHRcdC8vICh2aWEgYHRoaXMuZG9jdW1lbnRgKSAmIGRvY3VtZW50ICh2aWEgYHRoaXNgKS5cblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0sXG5cdFx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9ICk7XG59XG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IHsgZ3VpZDogRGF0ZS5ub3coKSB9O1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xualF1ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHZhciB4bWwsIHBhcnNlckVycm9yRWxlbTtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge31cblxuXHRwYXJzZXJFcnJvckVsZW0gPSB4bWwgJiYgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKVsgMCBdO1xuXHRpZiAoICF4bWwgfHwgcGFyc2VyRXJyb3JFbGVtICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyAoXG5cdFx0XHRwYXJzZXJFcnJvckVsZW0gP1xuXHRcdFx0XHRqUXVlcnkubWFwKCBwYXJzZXJFcnJvckVsZW0uY2hpbGROb2RlcywgZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0XHRcdHJldHVybiBlbC50ZXh0Q29udGVudDtcblx0XHRcdFx0fSApLmpvaW4oIFwiXFxuXCIgKSA6XG5cdFx0XHRcdGRhdGFcblx0XHQpICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKS5tYXAoIGZ1bmN0aW9uKCBfaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyMjAgPSAvJTIwL2csXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gdHJhYy03NjUzLCB0cmFjLTgxMjUsIHRyYWMtODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAodHJhYy0xMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvblxuXHRhbGxUeXBlcyA9IFwiKi9cIi5jb25jYXQoIFwiKlwiICksXG5cblx0Ly8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cbm9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjtcblxuLy8gQmFzZSBcImNvbnN0cnVjdG9yXCIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydFxuZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7XG5cblx0Ly8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBcIipcIlxuXHRyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcblxuXHRcdGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247XG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcblx0XHR9XG5cblx0XHR2YXIgZGF0YVR5cGUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIGZ1bmMgKSApIHtcblxuXHRcdFx0Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvblxuXHRcdFx0d2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXG5cdFx0XHRcdGlmICggZGF0YVR5cGVbIDAgXSA9PT0gXCIrXCIgKSB7XG5cdFx0XHRcdFx0ZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8IFwiKlwiO1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBhcHBlbmRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnB1c2goIGZ1bmMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xuXG5cdHZhciBpbnNwZWN0ZWQgPSB7fSxcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcblxuXHRmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHtcblx0XHR2YXIgc2VsZWN0ZWQ7XG5cdFx0aW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTtcblx0XHRqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkge1xuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcblx0XHRcdGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkge1xuXG5cdFx0XHRcdG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0aW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkge1xuXHRcdFx0XHRyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgXCIqXCIgXSAmJiBpbnNwZWN0KCBcIipcIiApO1xufVxuXG4vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnNcbi8vIHRoYXQgdGFrZXMgXCJmbGF0XCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpXG4vLyBGaXhlcyB0cmFjLTk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdID1cblx0XHRcdFx0XHRcdFx0XHRcdCggcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdIHx8IFtdIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNvbmNhdCggbWF0Y2hbIDIgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaC5qb2luKCBcIiwgXCIgKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApO1xuXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICh0cmFjLTEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0IHRyYWMtMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XG5cdFx0XHR1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0XHQvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLFxuXHRcdFx0Ly8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4L1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSBzLnVybDtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSBvbmx5XG5cdFx0XHRcdC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlXG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7XG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cblx0XHRcdFx0XHR1cmxBbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyB1cmxBbmNob3IuaG9zdDtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLFxuXHRcdFx0XHQvLyBpdCBjYW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xuXHRcdGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcblx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICh0cmFjLTE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHQvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNvIHdlIGNhbiBwdXQgaXQgYmFja1xuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gdHJhYy05NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCBcIiQxXCIgKTtcblx0XHRcdFx0dW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgKCBub25jZS5ndWlkKysgKSArXG5cdFx0XHRcdFx0dW5jYWNoZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFB1dCBoYXNoIGFuZCBhbnRpLWNhY2hlIG9uIHRoZSBVUkwgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCAoZ2gtMTczMilcblx0XHRcdHMudXJsID0gY2FjaGVVUkwgKyB1bmNhY2hlZDtcblxuXHRcdC8vIENoYW5nZSAnJTIwJyB0byAnKycgaWYgdGhpcyBpcyBlbmNvZGVkIGZvcm0gYm9keSBjb250ZW50IChnaC0yNjU4KVxuXHRcdH0gZWxzZSBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmXG5cdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApLmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCApIHtcblx0XHRcdHMuZGF0YSA9IHMuZGF0YS5yZXBsYWNlKCByMjAsIFwiK1wiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnRcblx0XHRpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXG5cdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlcihcblx0XHRcdFwiQWNjZXB0XCIsXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID9cblx0XHRcdFx0cy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gK1xuXHRcdFx0XHRcdCggcy5kYXRhVHlwZXNbIDAgXSAhPT0gXCIqXCIgPyBcIiwgXCIgKyBhbGxUeXBlcyArIFwiOyBxPTAuMDFcIiA6IFwiXCIgKSA6XG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxuXHRcdCk7XG5cblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cblx0XHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydFxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmXG5cdFx0XHQoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IGNvbXBsZXRlZCApICkge1xuXG5cdFx0XHQvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm5cblx0XHRcdHJldHVybiBqcVhIUi5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvblxuXHRcdHN0ckFib3J0ID0gXCJhYm9ydFwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzXG5cdFx0Y29tcGxldGVEZWZlcnJlZC5hZGQoIHMuY29tcGxldGUgKTtcblx0XHRqcVhIUi5kb25lKCBzLnN1Y2Nlc3MgKTtcblx0XHRqcVhIUi5mYWlsKCBzLmVycm9yICk7XG5cblx0XHQvLyBHZXQgdHJhbnNwb3J0XG5cdFx0dHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcblx0XHRpZiAoICF0cmFuc3BvcnQgKSB7XG5cdFx0XHRkb25lKCAtMSwgXCJObyBUcmFuc3BvcnRcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gMTtcblxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhTZW5kXCIsIFsganFYSFIsIHMgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhamF4U2VuZCwgc3RvcCB0aGVyZVxuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybiBqcVhIUjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGltZW91dFxuXHRcdFx0aWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7XG5cdFx0XHRcdHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRqcVhIUi5hYm9ydCggXCJ0aW1lb3V0XCIgKTtcblx0XHRcdFx0fSwgcy50aW1lb3V0ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbXBsZXRlZCA9IGZhbHNlO1xuXHRcdFx0XHR0cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIFJldGhyb3cgcG9zdC1jb21wbGV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBvdGhlcnMgYXMgcmVzdWx0c1xuXHRcdFx0XHRkb25lKCAtMSwgZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZVxuXHRcdGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkge1xuXHRcdFx0dmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCxcblx0XHRcdFx0c3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7XG5cblx0XHRcdC8vIElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnNcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbXBsZXRlZCA9IHRydWU7XG5cblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcblx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uXG5cdFx0XHQvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKVxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XG5cblx0XHRcdC8vIFNldCByZWFkeVN0YXRlXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xuXG5cdFx0XHQvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bFxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XG5cblx0XHRcdC8vIEdldCByZXNwb25zZSBkYXRhXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVzZSBhIG5vb3AgY29udmVydGVyIGZvciBtaXNzaW5nIHNjcmlwdCBidXQgbm90IGlmIGpzb25wXG5cdFx0XHRpZiAoICFpc1N1Y2Nlc3MgJiZcblx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIFwic2NyaXB0XCIsIHMuZGF0YVR5cGVzICkgPiAtMSAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJqc29uXCIsIHMuZGF0YVR5cGVzICkgPCAwICkge1xuXHRcdFx0XHRzLmNvbnZlcnRlcnNbIFwidGV4dCBzY3JpcHRcIiBdID0gZnVuY3Rpb24oKSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggX2ksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHR2YXIgaTtcblx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0aWYgKCBpLnRvTG93ZXJDYXNlKCkgPT09IFwiY29udGVudC10eXBlXCIgKSB7XG5cdFx0XHRzLmNvbnRlbnRUeXBlID0gcy5oZWFkZXJzWyBpIF0gfHwgXCJcIjtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsLCBvcHRpb25zLCBkb2MgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICh0cmFjLTExMjY0KVxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0ZGF0YVR5cGU6IFwic2NyaXB0XCIsXG5cdFx0Y2FjaGU6IHRydWUsXG5cdFx0YXN5bmM6IGZhbHNlLFxuXHRcdGdsb2JhbDogZmFsc2UsXG5cblx0XHQvLyBPbmx5IGV2YWx1YXRlIHRoZSByZXNwb25zZSBpZiBpdCBpcyBzdWNjZXNzZnVsIChnaC00MTI2KVxuXHRcdC8vIGRhdGFGaWx0ZXIgaXMgbm90IGludm9rZWQgZm9yIGZhaWx1cmUgcmVzcG9uc2VzLCBzbyB1c2luZyBpdCBpbnN0ZWFkXG5cdFx0Ly8gb2YgdGhlIGRlZmF1bHQgY29udmVydGVyIGlzIGtsdWRneSBidXQgaXQgd29ya3MuXG5cdFx0Y29udmVydGVyczoge1xuXHRcdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbigpIHt9XG5cdFx0fSxcblx0XHRkYXRhRmlsdGVyOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggcmVzcG9uc2UsIG9wdGlvbnMsIGRvYyApO1xuXHRcdH1cblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyB0cmFjLTE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcbnN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkO1xuXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaztcblxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuXHRcdFx0XHR2YXIgaSxcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpO1xuXG5cdFx0XHRcdHhoci5vcGVuKFxuXHRcdFx0XHRcdG9wdGlvbnMudHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcblx0XHRcdFx0XHRvcHRpb25zLmFzeW5jLFxuXHRcdFx0XHRcdG9wdGlvbnMudXNlcm5hbWUsXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXG5cdFx0XHRcdC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cblx0XHRcdFx0aWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSApIHtcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XG5cdFx0XHRcdFx0XHRcdFx0eGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnRpbWVvdXQgPVxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0ZVxuXHRcdFx0XHRcdFx0XHRcdGlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggMCwgXCJlcnJvclwiICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSB0cmFjLTg2MDUsIHRyYWMtMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vIHRyYWMtMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFByZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBlIHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLmNvbnRlbnRzLnNjcmlwdCA9IGZhbHNlO1xuXHR9XG59ICk7XG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gb3IgZm9yY2VkLWJ5LWF0dHJzIHJlcXVlc3RzXG5cdGlmICggcy5jcm9zc0RvbWFpbiB8fCBzLnNjcmlwdEF0dHJzICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiIClcblx0XHRcdFx0XHQuYXR0ciggcy5zY3JpcHRBdHRycyB8fCB7fSApXG5cdFx0XHRcdFx0LnByb3AoIHsgY2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LCBzcmM6IHMudXJsIH0gKVxuXHRcdFx0XHRcdC5vbiggXCJsb2FkIGVycm9yXCIsIGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGNhbGxiYWNrID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XG5cdFx0XHR9LFxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBvbGRDYWxsYmFja3MgPSBbXSxcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcblxuLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5nc1xualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZS5ndWlkKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XG4vLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50XG4vLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzdcbnN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHtcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xuXHRib2R5LmlubmVySFRNTCA9IFwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIjtcblx0cmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7XG59ICkoKTtcblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cblx0dmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0cztcblxuXHRpZiAoICFjb250ZXh0ICkge1xuXG5cdFx0Ly8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5XG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cblx0XHRpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ICkge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApO1xuXG5cdFx0XHQvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxuXHRcdFx0YmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJiYXNlXCIgKTtcblx0XHRcdGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xuXHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBfaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCgge1xuXHRcdHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsXG5cdFx0Y29udGVudDogdHlwZSxcblx0XHRcIlwiOiBcIm91dGVyXCIgKyBuYW1lXG5cdH0sIGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KVxuXHRcdFx0XHRcdHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCBcIm91dGVyXCIgKSA9PT0gMCA/XG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxuXHRcdFx0XHRcdFx0ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIF9pLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fSxcblxuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goXG5cdCggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cblx0XHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRcdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cdH1cbik7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG4vLyBSZXF1aXJlIHRoYXQgdGhlIFwid2hpdGVzcGFjZSBydW5cIiBzdGFydHMgZnJvbSBhIG5vbi13aGl0ZXNwYWNlXG4vLyB0byBhdm9pZCBPKE5eMikgYmVoYXZpb3Igd2hlbiB0aGUgZW5naW5lIHdvdWxkIHRyeSBtYXRjaGluZyBcIlxccyskXCIgYXQgZWFjaCBzcGFjZSBwb3NpdGlvbi5cbnZhciBydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfChbXlxcc1xcdUZFRkZcXHhBMF0pW1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApO1xufTtcblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAodHJhYy03MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAodHJhYy0xMzU2NilcbmlmICggdHlwZW9mIG5vR2xvYmFsID09PSBcInVuZGVmaW5lZFwiICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBDbGllbnRSZWN0T2JqZWN0LCBWaXJ0dWFsRWxlbWVudCB9IGZyb20gJy4uL3R5cGVzJztcbi8vIGltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tICcuL2luc3RhbmNlT2YnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoXG4gIGVsZW1lbnQ6IEVsZW1lbnQgfCBWaXJ0dWFsRWxlbWVudCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVudXNlZC1pbXBvcnRzL25vLXVudXNlZC12YXJzXG4gIGluY2x1ZGVTY2FsZTogYm9vbGVhbiA9IGZhbHNlXG4pOiBDbGllbnRSZWN0T2JqZWN0IHtcbiAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCBzY2FsZVggPSAxO1xuICBsZXQgc2NhbGVZID0gMTtcblxuICAvLyBGSVhNRTpcbiAgLy8gYG9mZnNldFdpZHRoYCByZXR1cm5zIGFuIGludGVnZXIgd2hpbGUgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGBcbiAgLy8gcmV0dXJucyBhIGZsb2F0LiBUaGlzIHJlc3VsdHMgaW4gYHNjYWxlWGAgb3IgYHNjYWxlWWAgYmVpbmdcbiAgLy8gbm9uLTEgd2hlbiBpdCBzaG91bGQgYmUgZm9yIGVsZW1lbnRzIHRoYXQgYXJlbid0IGEgZnVsbCBwaXhlbCBpblxuICAvLyB3aWR0aCBvciBoZWlnaHQuXG4gIC8vIGlmIChpc0hUTUxFbGVtZW50KGVsZW1lbnQpICYmIGluY2x1ZGVTY2FsZSkge1xuICAvLyAgIGNvbnN0IG9mZnNldEhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAvLyAgIGNvbnN0IG9mZnNldFdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcblxuICAvLyAgIC8vIERvIG5vdCBhdHRlbXB0IHRvIGRpdmlkZSBieSAwLCBvdGhlcndpc2Ugd2UgZ2V0IGBJbmZpbml0eWAgYXMgc2NhbGVcbiAgLy8gICAvLyBGYWxsYmFjayB0byAxIGluIGNhc2UgYm90aCB2YWx1ZXMgYXJlIGAwYFxuICAvLyAgIGlmIChvZmZzZXRXaWR0aCA+IDApIHtcbiAgLy8gICAgIHNjYWxlWCA9IHJlY3Qud2lkdGggLyBvZmZzZXRXaWR0aCB8fCAxO1xuICAvLyAgIH1cbiAgLy8gICBpZiAob2Zmc2V0SGVpZ2h0ID4gMCkge1xuICAvLyAgICAgc2NhbGVZID0gcmVjdC5oZWlnaHQgLyBvZmZzZXRIZWlnaHQgfHwgMTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiByZWN0LndpZHRoIC8gc2NhbGVYLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgLyBzY2FsZVksXG4gICAgdG9wOiByZWN0LnRvcCAvIHNjYWxlWSxcbiAgICByaWdodDogcmVjdC5yaWdodCAvIHNjYWxlWCxcbiAgICBib3R0b206IHJlY3QuYm90dG9tIC8gc2NhbGVZLFxuICAgIGxlZnQ6IHJlY3QubGVmdCAvIHNjYWxlWCxcbiAgICB4OiByZWN0LmxlZnQgLyBzY2FsZVgsXG4gICAgeTogcmVjdC50b3AgLyBzY2FsZVksXG4gIH07XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBXaW5kb3cgfSBmcm9tICcuLi90eXBlcyc7XG5kZWNsYXJlIGZ1bmN0aW9uIGdldFdpbmRvdyhub2RlOiBOb2RlIHwgV2luZG93KTogV2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgY29uc3Qgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93IDogd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tICcuL2dldFdpbmRvdyc7XG5pbXBvcnQgdHlwZSB7IFdpbmRvdyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGU6IE5vZGUgfCBXaW5kb3cpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICBjb25zdCBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0O1xuICBjb25zdCBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcCxcbiAgfTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gJy4vZ2V0V2luZG93JztcblxuZGVjbGFyZSBmdW5jdGlvbiBpc0VsZW1lbnQobm9kZTogbWl4ZWQpOiBib29sZWFuICVjaGVja3Mobm9kZSBpbnN0YW5jZW9mXG4gIEVsZW1lbnQpO1xuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgY29uc3QgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmRlY2xhcmUgZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlOiBtaXhlZCk6IGJvb2xlYW4gJWNoZWNrcyhub2RlIGluc3RhbmNlb2ZcbiAgSFRNTEVsZW1lbnQpO1xuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIGNvbnN0IE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmRlY2xhcmUgZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGU6IG1peGVkKTogYm9vbGVhbiAlY2hlY2tzKG5vZGUgaW5zdGFuY2VvZlxuICBTaGFkb3dSb290KTtcbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wLFxuICB9O1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSAnLi9nZXRXaW5kb3dTY3JvbGwnO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tICcuL2dldFdpbmRvdyc7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSAnLi9pbnN0YW5jZU9mJztcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tICcuL2dldEhUTUxFbGVtZW50U2Nyb2xsJztcbmltcG9ydCB0eXBlIHsgV2luZG93IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlU2Nyb2xsKG5vZGU6IE5vZGUgfCBXaW5kb3cpIHtcbiAgaWYgKG5vZGUgPT09IGdldFdpbmRvdyhub2RlKSB8fCAhaXNIVE1MRWxlbWVudChub2RlKSkge1xuICAgIHJldHVybiBnZXRXaW5kb3dTY3JvbGwobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldEhUTUxFbGVtZW50U2Nyb2xsKG5vZGUpO1xuICB9XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBXaW5kb3cgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQ6ID9Ob2RlIHwgV2luZG93KTogP3N0cmluZyB7XG4gIHJldHVybiBlbGVtZW50ID8gKGVsZW1lbnQubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gJy4vaW5zdGFuY2VPZic7XG5pbXBvcnQgdHlwZSB7IFdpbmRvdyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KFxuICBlbGVtZW50OiBFbGVtZW50IHwgV2luZG93XG4pOiBIVE1MRWxlbWVudCB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuIChcbiAgICAoaXNFbGVtZW50KGVsZW1lbnQpXG4gICAgICA/IGVsZW1lbnQub3duZXJEb2N1bWVudFxuICAgICAgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgICAgZWxlbWVudC5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50XG4gICkuZG9jdW1lbnRFbGVtZW50O1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSAnLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QnO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tICcuL2dldERvY3VtZW50RWxlbWVudCc7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gJy4vZ2V0V2luZG93U2Nyb2xsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50OiBFbGVtZW50KTogbnVtYmVyIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiAoXG4gICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArXG4gICAgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnRcbiAgKTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gJy4vZ2V0V2luZG93JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShcbiAgZWxlbWVudDogRWxlbWVudFxuKTogQ1NTU3R5bGVEZWNsYXJhdGlvbiB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tICcuL2dldENvbXB1dGVkU3R5bGUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIGNvbnN0IHsgb3ZlcmZsb3csIG92ZXJmbG93WCwgb3ZlcmZsb3dZIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IFJlY3QsIFZpcnR1YWxFbGVtZW50LCBXaW5kb3cgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gJy4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0JztcbmltcG9ydCBnZXROb2RlU2Nyb2xsIGZyb20gJy4vZ2V0Tm9kZVNjcm9sbCc7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSAnLi9nZXROb2RlTmFtZSc7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSAnLi9pbnN0YW5jZU9mJztcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gJy4vZ2V0V2luZG93U2Nyb2xsQmFyWCc7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gJy4vZ2V0RG9jdW1lbnRFbGVtZW50JztcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tICcuL2lzU2Nyb2xsUGFyZW50JztcblxuZnVuY3Rpb24gaXNFbGVtZW50U2NhbGVkKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBzY2FsZVggPSByZWN0LndpZHRoIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICBjb25zdCBzY2FsZVkgPSByZWN0LmhlaWdodCAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG5cbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59XG5cbi8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXBvc2l0ZVJlY3QoXG4gIGVsZW1lbnRPclZpcnR1YWxFbGVtZW50OiBFbGVtZW50IHwgVmlydHVhbEVsZW1lbnQsXG4gIG9mZnNldFBhcmVudDogRWxlbWVudCB8IFdpbmRvdyxcbiAgaXNGaXhlZDogYm9vbGVhbiA9IGZhbHNlXG4pOiBSZWN0IHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IG9mZnNldFBhcmVudElzU2NhbGVkID1cbiAgICBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNFbGVtZW50U2NhbGVkKG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KFxuICAgIGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LFxuICAgIG9mZnNldFBhcmVudElzU2NhbGVkXG4gICk7XG5cbiAgbGV0IHNjcm9sbCA9IHsgc2Nyb2xsTGVmdDogMCwgc2Nyb2xsVG9wOiAwIH07XG4gIGxldCBvZmZzZXRzID0geyB4OiAwLCB5OiAwIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICghaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpKSB7XG4gICAgaWYgKFxuICAgICAgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEwNzhcbiAgICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudClcbiAgICApIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gIH07XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBSZWN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tICcuL2dldEJvdW5kaW5nQ2xpZW50UmVjdCc7XG5cbi8vIFJldHVybnMgdGhlIGxheW91dCByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC4gTGF5b3V0XG4vLyBtZWFucyBpdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRyYW5zZm9ybXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUmVjdCB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7XG5cbiAgLy8gVXNlIHRoZSBjbGllbnRSZWN0IHNpemVzIGlmIGl0J3Mgbm90IGJlZW4gdHJhbnNmb3JtZWQuXG4gIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTIyM1xuICBsZXQgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICBsZXQgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICB9O1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tICcuL2dldE5vZGVOYW1lJztcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSAnLi9nZXREb2N1bWVudEVsZW1lbnQnO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSAnLi9pbnN0YW5jZU9mJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50OiBOb2RlIHwgU2hhZG93Um9vdCk6IE5vZGUge1xuICBpZiAoZ2V0Tm9kZU5hbWUoZWxlbWVudCkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAvLyB0aGlzIGlzIGEgcXVpY2tlciAoYnV0IGxlc3MgdHlwZSBzYWZlKSB3YXkgdG8gc2F2ZSBxdWl0ZSBzb21lIGJ5dGVzIGZyb20gdGhlIGJ1bmRsZVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlbGVtZW50LmFzc2lnbmVkU2xvdCB8fCAvLyBzdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZVxuICAgIGVsZW1lbnQucGFyZW50Tm9kZSB8fCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIChpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuICApO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gJy4vZ2V0UGFyZW50Tm9kZSc7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSAnLi9pc1Njcm9sbFBhcmVudCc7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSAnLi9nZXROb2RlTmFtZSc7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSAnLi9pbnN0YW5jZU9mJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KG5vZGU6IE5vZGUpOiBIVE1MRWxlbWVudCB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSAnLi9nZXRTY3JvbGxQYXJlbnQnO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSAnLi9nZXRQYXJlbnROb2RlJztcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSAnLi9nZXRXaW5kb3cnO1xuaW1wb3J0IHR5cGUgeyBXaW5kb3csIFZpc3VhbFZpZXdwb3J0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gJy4vaXNTY3JvbGxQYXJlbnQnO1xuXG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKFxuICBlbGVtZW50OiBOb2RlLFxuICBsaXN0OiBBcnJheTxFbGVtZW50IHwgV2luZG93PiA9IFtdXG4pOiBBcnJheTxFbGVtZW50IHwgV2luZG93IHwgVmlzdWFsVmlld3BvcnQ+IHtcbiAgY29uc3Qgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxQYXJlbnQgPT09IGVsZW1lbnQub3duZXJEb2N1bWVudD8uYm9keTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbFBhcmVudCk7XG4gIGNvbnN0IHRhcmdldCA9IGlzQm9keVxuICAgID8gW3dpbl0uY29uY2F0KFxuICAgICAgICB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sXG4gICAgICAgIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXVxuICAgICAgKVxuICAgIDogc2Nyb2xsUGFyZW50O1xuICBjb25zdCB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG5cbiAgcmV0dXJuIGlzQm9keVxuICAgID8gdXBkYXRlZExpc3RcbiAgICA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICAgICAgdXBkYXRlZExpc3QuY29uY2F0KGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUodGFyZ2V0KSkpO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tICcuL2dldE5vZGVOYW1lJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gWyd0YWJsZScsICd0ZCcsICd0aCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpID49IDA7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tICcuL2dldFdpbmRvdyc7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSAnLi9nZXROb2RlTmFtZSc7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tICcuL2dldENvbXB1dGVkU3R5bGUnO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gJy4vaW5zdGFuY2VPZic7XG5pbXBvcnQgaXNUYWJsZUVsZW1lbnQgZnJvbSAnLi9pc1RhYmxlRWxlbWVudCc7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tICcuL2dldFBhcmVudE5vZGUnO1xuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiA/RWxlbWVudCB7XG4gIGlmIChcbiAgICAhaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvODM3XG4gICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJ1xuICApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcbn1cblxuLy8gYC5vZmZzZXRQYXJlbnRgIHJlcG9ydHMgYG51bGxgIGZvciBmaXhlZCBlbGVtZW50cywgd2hpbGUgYWJzb2x1dGUgZWxlbWVudHNcbi8vIHJldHVybiB0aGUgY29udGFpbmluZyBibG9ja1xuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgY29uc3QgaXNGaXJlZm94ID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSAhPT0gLTE7XG4gIGNvbnN0IGlzSUUgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQnKSAhPT0gLTE7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICBjb25zdCBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgbGV0IGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICB3aGlsZSAoXG4gICAgaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiZcbiAgICBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDBcbiAgKSB7XG4gICAgY29uc3QgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7XG5cbiAgICAvLyBUaGlzIGlzIG5vbi1leGhhdXN0aXZlIGJ1dCBjb3ZlcnMgdGhlIG1vc3QgY29tbW9uIENTUyBwcm9wZXJ0aWVzIHRoYXRcbiAgICAvLyBjcmVhdGUgYSBjb250YWluaW5nIGJsb2NrLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gICAgaWYgKFxuICAgICAgY3NzLnRyYW5zZm9ybSAhPT0gJ25vbmUnIHx8XG4gICAgICBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fFxuICAgICAgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHxcbiAgICAgIFsndHJhbnNmb3JtJywgJ3BlcnNwZWN0aXZlJ10uaW5kZXhPZihjc3Mud2lsbENoYW5nZSkgIT09IC0xIHx8XG4gICAgICAoaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJykgfHxcbiAgICAgIChpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpXG4gICAgKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50OiBFbGVtZW50KSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcblxuICBsZXQgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KTtcblxuICB3aGlsZSAoXG4gICAgb2Zmc2V0UGFyZW50ICYmXG4gICAgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJlxuICAgIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYydcbiAgKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKFxuICAgIG9mZnNldFBhcmVudCAmJlxuICAgIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHxcbiAgICAgIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnYm9keScgJiZcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykpXG4gICkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59XG4iLCIvLyBAZmxvd1xuZXhwb3J0IGNvbnN0IHRvcDogJ3RvcCcgPSAndG9wJztcbmV4cG9ydCBjb25zdCBib3R0b206ICdib3R0b20nID0gJ2JvdHRvbSc7XG5leHBvcnQgY29uc3QgcmlnaHQ6ICdyaWdodCcgPSAncmlnaHQnO1xuZXhwb3J0IGNvbnN0IGxlZnQ6ICdsZWZ0JyA9ICdsZWZ0JztcbmV4cG9ydCBjb25zdCBhdXRvOiAnYXV0bycgPSAnYXV0byc7XG5leHBvcnQgdHlwZSBCYXNlUGxhY2VtZW50ID1cbiAgfCB0eXBlb2YgdG9wXG4gIHwgdHlwZW9mIGJvdHRvbVxuICB8IHR5cGVvZiByaWdodFxuICB8IHR5cGVvZiBsZWZ0O1xuZXhwb3J0IGNvbnN0IGJhc2VQbGFjZW1lbnRzOiBBcnJheTxCYXNlUGxhY2VtZW50PiA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuXG5leHBvcnQgY29uc3Qgc3RhcnQ6ICdzdGFydCcgPSAnc3RhcnQnO1xuZXhwb3J0IGNvbnN0IGVuZDogJ2VuZCcgPSAnZW5kJztcbmV4cG9ydCB0eXBlIFZhcmlhdGlvbiA9IHR5cGVvZiBzdGFydCB8IHR5cGVvZiBlbmQ7XG5cbmV4cG9ydCBjb25zdCBjbGlwcGluZ1BhcmVudHM6ICdjbGlwcGluZ1BhcmVudHMnID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgY29uc3Qgdmlld3BvcnQ6ICd2aWV3cG9ydCcgPSAndmlld3BvcnQnO1xuZXhwb3J0IHR5cGUgQm91bmRhcnkgPVxuICB8IEhUTUxFbGVtZW50XG4gIHwgQXJyYXk8SFRNTEVsZW1lbnQ+XG4gIHwgdHlwZW9mIGNsaXBwaW5nUGFyZW50cztcbmV4cG9ydCB0eXBlIFJvb3RCb3VuZGFyeSA9IHR5cGVvZiB2aWV3cG9ydCB8ICdkb2N1bWVudCc7XG5cbmV4cG9ydCBjb25zdCBwb3BwZXI6ICdwb3BwZXInID0gJ3BvcHBlcic7XG5leHBvcnQgY29uc3QgcmVmZXJlbmNlOiAncmVmZXJlbmNlJyA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHR5cGUgQ29udGV4dCA9IHR5cGVvZiBwb3BwZXIgfCB0eXBlb2YgcmVmZXJlbmNlO1xuXG5leHBvcnQgdHlwZSBWYXJpYXRpb25QbGFjZW1lbnQgPVxuICB8ICd0b3Atc3RhcnQnXG4gIHwgJ3RvcC1lbmQnXG4gIHwgJ2JvdHRvbS1zdGFydCdcbiAgfCAnYm90dG9tLWVuZCdcbiAgfCAncmlnaHQtc3RhcnQnXG4gIHwgJ3JpZ2h0LWVuZCdcbiAgfCAnbGVmdC1zdGFydCdcbiAgfCAnbGVmdC1lbmQnO1xuZXhwb3J0IHR5cGUgQXV0b1BsYWNlbWVudCA9ICdhdXRvJyB8ICdhdXRvLXN0YXJ0JyB8ICdhdXRvLWVuZCc7XG5leHBvcnQgdHlwZSBDb21wdXRlZFBsYWNlbWVudCA9IFZhcmlhdGlvblBsYWNlbWVudCB8IEJhc2VQbGFjZW1lbnQ7XG5leHBvcnQgdHlwZSBQbGFjZW1lbnQgPSBBdXRvUGxhY2VtZW50IHwgQmFzZVBsYWNlbWVudCB8IFZhcmlhdGlvblBsYWNlbWVudDtcblxuZXhwb3J0IGNvbnN0IHZhcmlhdGlvblBsYWNlbWVudHM6IEFycmF5PFZhcmlhdGlvblBsYWNlbWVudD4gPSBiYXNlUGxhY2VtZW50cy5yZWR1Y2UoXG4gIChhY2M6IEFycmF5PFZhcmlhdGlvblBsYWNlbWVudD4sIHBsYWNlbWVudDogQmFzZVBsYWNlbWVudCkgPT5cbiAgICBhY2MuY29uY2F0KFsoYCR7cGxhY2VtZW50fS0ke3N0YXJ0fWA6IGFueSksIChgJHtwbGFjZW1lbnR9LSR7ZW5kfWA6IGFueSldKSxcbiAgW11cbik7XG5leHBvcnQgY29uc3QgcGxhY2VtZW50czogQXJyYXk8UGxhY2VtZW50PiA9IFsuLi5iYXNlUGxhY2VtZW50cywgYXV0b10ucmVkdWNlKFxuICAoXG4gICAgYWNjOiBBcnJheTxQbGFjZW1lbnQ+LFxuICAgIHBsYWNlbWVudDogQmFzZVBsYWNlbWVudCB8IHR5cGVvZiBhdXRvXG4gICk6IEFycmF5PFBsYWNlbWVudD4gPT5cbiAgICBhY2MuY29uY2F0KFtcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIChgJHtwbGFjZW1lbnR9LSR7c3RhcnR9YDogYW55KSxcbiAgICAgIChgJHtwbGFjZW1lbnR9LSR7ZW5kfWA6IGFueSksXG4gICAgXSksXG4gIFtdXG4pO1xuXG4vLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuZXhwb3J0IGNvbnN0IGJlZm9yZVJlYWQ6ICdiZWZvcmVSZWFkJyA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCBjb25zdCByZWFkOiAncmVhZCcgPSAncmVhZCc7XG5leHBvcnQgY29uc3QgYWZ0ZXJSZWFkOiAnYWZ0ZXJSZWFkJyA9ICdhZnRlclJlYWQnO1xuLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcbmV4cG9ydCBjb25zdCBiZWZvcmVNYWluOiAnYmVmb3JlTWFpbicgPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgY29uc3QgbWFpbjogJ21haW4nID0gJ21haW4nO1xuZXhwb3J0IGNvbnN0IGFmdGVyTWFpbjogJ2FmdGVyTWFpbicgPSAnYWZ0ZXJNYWluJztcbi8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcbmV4cG9ydCBjb25zdCBiZWZvcmVXcml0ZTogJ2JlZm9yZVdyaXRlJyA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgY29uc3Qgd3JpdGU6ICd3cml0ZScgPSAnd3JpdGUnO1xuZXhwb3J0IGNvbnN0IGFmdGVyV3JpdGU6ICdhZnRlcldyaXRlJyA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCBjb25zdCBtb2RpZmllclBoYXNlczogQXJyYXk8TW9kaWZpZXJQaGFzZXM+ID0gW1xuICBiZWZvcmVSZWFkLFxuICByZWFkLFxuICBhZnRlclJlYWQsXG4gIGJlZm9yZU1haW4sXG4gIG1haW4sXG4gIGFmdGVyTWFpbixcbiAgYmVmb3JlV3JpdGUsXG4gIHdyaXRlLFxuICBhZnRlcldyaXRlLFxuXTtcblxuZXhwb3J0IHR5cGUgTW9kaWZpZXJQaGFzZXMgPVxuICB8IHR5cGVvZiBiZWZvcmVSZWFkXG4gIHwgdHlwZW9mIHJlYWRcbiAgfCB0eXBlb2YgYWZ0ZXJSZWFkXG4gIHwgdHlwZW9mIGJlZm9yZU1haW5cbiAgfCB0eXBlb2YgbWFpblxuICB8IHR5cGVvZiBhZnRlck1haW5cbiAgfCB0eXBlb2YgYmVmb3JlV3JpdGVcbiAgfCB0eXBlb2Ygd3JpdGVcbiAgfCB0eXBlb2YgYWZ0ZXJXcml0ZTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IE1vZGlmaWVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tICcuLi9lbnVtcyc7XG5cbi8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gIG1vZGlmaWVycy5mb3JFYWNoKG1vZGlmaWVyID0+IHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7XG5cbiAgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyOiBNb2RpZmllcjxhbnksIGFueT4pIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcblxuICAgIGNvbnN0IHJlcXVpcmVzID0gW1xuICAgICAgLi4uKG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdKSxcbiAgICAgIC4uLihtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKSxcbiAgICBdO1xuXG4gICAgcmVxdWlyZXMuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIGNvbnN0IGRlcE1vZGlmaWVyID0gbWFwLmdldChkZXApO1xuXG4gICAgICAgIGlmIChkZXBNb2RpZmllcikge1xuICAgICAgICAgIHNvcnQoZGVwTW9kaWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChtb2RpZmllciA9PiB7XG4gICAgaWYgKCF2aXNpdGVkLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgLy8gY2hlY2sgZm9yIHZpc2l0ZWQgb2JqZWN0XG4gICAgICBzb3J0KG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKFxuICBtb2RpZmllcnM6IEFycmF5PE1vZGlmaWVyPGFueSwgYW55Pj5cbik6IEFycmF5PE1vZGlmaWVyPGFueSwgYW55Pj4ge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgY29uc3Qgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7XG5cbiAgLy8gb3JkZXIgYmFzZWQgb24gcGhhc2VcbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZSgoYWNjLCBwaGFzZSkgPT4ge1xuICAgIHJldHVybiBhY2MuY29uY2F0KFxuICAgICAgb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIobW9kaWZpZXIgPT4gbW9kaWZpZXIucGhhc2UgPT09IHBoYXNlKVxuICAgICk7XG4gIH0sIFtdKTtcbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlPFQ+KGZuOiBGdW5jdGlvbik6ICgpID0+IFByb21pc2U8VD4ge1xuICBsZXQgcGVuZGluZztcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZTxUPihyZXNvbHZlID0+IHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KHN0cjogc3RyaW5nLCAuLi5hcmdzOiBBcnJheTxzdHJpbmc+KSB7XG4gIHJldHVybiBbLi4uYXJnc10ucmVkdWNlKChwLCBjKSA9PiBwLnJlcGxhY2UoLyVzLywgYyksIHN0cik7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IGZvcm1hdCBmcm9tICcuL2Zvcm1hdCc7XG5pbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gJy4uL2VudW1zJztcblxuY29uc3QgSU5WQUxJRF9NT0RJRklFUl9FUlJPUiA9XG4gICdQb3BwZXI6IG1vZGlmaWVyIFwiJXNcIiBwcm92aWRlZCBhbiBpbnZhbGlkICVzIHByb3BlcnR5LCBleHBlY3RlZCAlcyBidXQgZ290ICVzJztcbmNvbnN0IE1JU1NJTkdfREVQRU5ERU5DWV9FUlJPUiA9XG4gICdQb3BwZXI6IG1vZGlmaWVyIFwiJXNcIiByZXF1aXJlcyBcIiVzXCIsIGJ1dCBcIiVzXCIgbW9kaWZpZXIgaXMgbm90IGF2YWlsYWJsZSc7XG5jb25zdCBWQUxJRF9QUk9QRVJUSUVTID0gW1xuICAnbmFtZScsXG4gICdlbmFibGVkJyxcbiAgJ3BoYXNlJyxcbiAgJ2ZuJyxcbiAgJ2VmZmVjdCcsXG4gICdyZXF1aXJlcycsXG4gICdvcHRpb25zJyxcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlTW9kaWZpZXJzKG1vZGlmaWVyczogQXJyYXk8YW55Pik6IHZvaWQge1xuICBtb2RpZmllcnMuZm9yRWFjaCgobW9kaWZpZXIpID0+IHtcbiAgICBbLi4uT2JqZWN0LmtleXMobW9kaWZpZXIpLCAuLi5WQUxJRF9QUk9QRVJUSUVTXVxuICAgICAgLy8gSUUxMS1jb21wYXRpYmxlIHJlcGxhY2VtZW50IGZvciBgbmV3IFNldChpdGVyYWJsZSlgXG4gICAgICAuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IHNlbGYuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4KVxuICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5uYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGZvcm1hdChcbiAgICAgICAgICAgICAgICAgIElOVkFMSURfTU9ESUZJRVJfRVJST1IsXG4gICAgICAgICAgICAgICAgICBTdHJpbmcobW9kaWZpZXIubmFtZSksXG4gICAgICAgICAgICAgICAgICAnXCJuYW1lXCInLFxuICAgICAgICAgICAgICAgICAgJ1wic3RyaW5nXCInLFxuICAgICAgICAgICAgICAgICAgYFwiJHtTdHJpbmcobW9kaWZpZXIubmFtZSl9XCJgXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZW5hYmxlZCc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1vZGlmaWVyLmVuYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGZvcm1hdChcbiAgICAgICAgICAgICAgICAgIElOVkFMSURfTU9ESUZJRVJfRVJST1IsXG4gICAgICAgICAgICAgICAgICBtb2RpZmllci5uYW1lLFxuICAgICAgICAgICAgICAgICAgJ1wiZW5hYmxlZFwiJyxcbiAgICAgICAgICAgICAgICAgICdcImJvb2xlYW5cIicsXG4gICAgICAgICAgICAgICAgICBgXCIke1N0cmluZyhtb2RpZmllci5lbmFibGVkKX1cImBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdwaGFzZSc6XG4gICAgICAgICAgICBpZiAobW9kaWZpZXJQaGFzZXMuaW5kZXhPZihtb2RpZmllci5waGFzZSkgPCAwKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgSU5WQUxJRF9NT0RJRklFUl9FUlJPUixcbiAgICAgICAgICAgICAgICAgIG1vZGlmaWVyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAnXCJwaGFzZVwiJyxcbiAgICAgICAgICAgICAgICAgIGBlaXRoZXIgJHttb2RpZmllclBoYXNlcy5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICAgICAgICBgXCIke1N0cmluZyhtb2RpZmllci5waGFzZSl9XCJgXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZm4nOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5mbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGZvcm1hdChcbiAgICAgICAgICAgICAgICAgIElOVkFMSURfTU9ESUZJRVJfRVJST1IsXG4gICAgICAgICAgICAgICAgICBtb2RpZmllci5uYW1lLFxuICAgICAgICAgICAgICAgICAgJ1wiZm5cIicsXG4gICAgICAgICAgICAgICAgICAnXCJmdW5jdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgIGBcIiR7U3RyaW5nKG1vZGlmaWVyLmZuKX1cImBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdlZmZlY3QnOlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBtb2RpZmllci5lZmZlY3QgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICB0eXBlb2YgbW9kaWZpZXIuZWZmZWN0ICE9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgICAgICAgICBJTlZBTElEX01PRElGSUVSX0VSUk9SLFxuICAgICAgICAgICAgICAgICAgbW9kaWZpZXIubmFtZSxcbiAgICAgICAgICAgICAgICAgICdcImVmZmVjdFwiJyxcbiAgICAgICAgICAgICAgICAgICdcImZ1bmN0aW9uXCInLFxuICAgICAgICAgICAgICAgICAgYFwiJHtTdHJpbmcobW9kaWZpZXIuZm4pfVwiYFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3JlcXVpcmVzJzpcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbW9kaWZpZXIucmVxdWlyZXMgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShtb2RpZmllci5yZXF1aXJlcylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGZvcm1hdChcbiAgICAgICAgICAgICAgICAgIElOVkFMSURfTU9ESUZJRVJfRVJST1IsXG4gICAgICAgICAgICAgICAgICBtb2RpZmllci5uYW1lLFxuICAgICAgICAgICAgICAgICAgJ1wicmVxdWlyZXNcIicsXG4gICAgICAgICAgICAgICAgICAnXCJhcnJheVwiJyxcbiAgICAgICAgICAgICAgICAgIGBcIiR7U3RyaW5nKG1vZGlmaWVyLnJlcXVpcmVzKX1cImBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXF1aXJlc0lmRXhpc3RzJzpcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGZvcm1hdChcbiAgICAgICAgICAgICAgICAgIElOVkFMSURfTU9ESUZJRVJfRVJST1IsXG4gICAgICAgICAgICAgICAgICBtb2RpZmllci5uYW1lLFxuICAgICAgICAgICAgICAgICAgJ1wicmVxdWlyZXNJZkV4aXN0c1wiJyxcbiAgICAgICAgICAgICAgICAgICdcImFycmF5XCInLFxuICAgICAgICAgICAgICAgICAgYFwiJHtTdHJpbmcobW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cyl9XCJgXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgYFBvcHBlckpTOiBhbiBpbnZhbGlkIHByb3BlcnR5IGhhcyBiZWVuIHByb3ZpZGVkIHRvIHRoZSBcIiR7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXIubmFtZVxuICAgICAgICAgICAgICB9XCIgbW9kaWZpZXIsIHZhbGlkIHByb3BlcnRpZXMgYXJlICR7VkFMSURfUFJPUEVSVElFUy5tYXAoXG4gICAgICAgICAgICAgICAgKHMpID0+IGBcIiR7c31cImBcbiAgICAgICAgICAgICAgKS5qb2luKCcsICcpfTsgYnV0IFwiJHtrZXl9XCIgd2FzIHByb3ZpZGVkLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBtb2RpZmllci5yZXF1aXJlcyAmJlxuICAgICAgICAgIG1vZGlmaWVyLnJlcXVpcmVzLmZvckVhY2goKHJlcXVpcmVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAobW9kaWZpZXJzLmZpbmQoKG1vZCkgPT4gbW9kLm5hbWUgPT09IHJlcXVpcmVtZW50KSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgTUlTU0lOR19ERVBFTkRFTkNZX0VSUk9SLFxuICAgICAgICAgICAgICAgICAgU3RyaW5nKG1vZGlmaWVyLm5hbWUpLFxuICAgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnQsXG4gICAgICAgICAgICAgICAgICByZXF1aXJlbWVudFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9KTtcbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXF1ZUJ5PFQ+KGFycjogQXJyYXk8VD4sIGZuOiBUID0+IGFueSk6IEFycmF5PFQ+IHtcbiAgY29uc3QgaWRlbnRpZmllcnMgPSBuZXcgU2V0KCk7XG5cbiAgcmV0dXJuIGFyci5maWx0ZXIoaXRlbSA9PiB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IGZuKGl0ZW0pO1xuXG4gICAgaWYgKCFpZGVudGlmaWVycy5oYXMoaWRlbnRpZmllcikpIHtcbiAgICAgIGlkZW50aWZpZXJzLmFkZChpZGVudGlmaWVyKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHsgdHlwZSBCYXNlUGxhY2VtZW50LCB0eXBlIFBsYWNlbWVudCwgYXV0byB9IGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChcbiAgcGxhY2VtZW50OiBQbGFjZW1lbnQgfCB0eXBlb2YgYXV0b1xuKTogQmFzZVBsYWNlbWVudCB7XG4gIHJldHVybiAocGxhY2VtZW50LnNwbGl0KCctJylbMF06IGFueSk7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBNb2RpZmllciB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUoXG4gIG1vZGlmaWVyczogQXJyYXk8JFNoYXBlPE1vZGlmaWVyPGFueSwgYW55Pj4+XG4pOiBBcnJheTwkU2hhcGU8TW9kaWZpZXI8YW55LCBhbnk+Pj4ge1xuICBjb25zdCBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKChtZXJnZWQsIGN1cnJlbnQpID0+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IG1lcmdlZFtjdXJyZW50Lm5hbWVdO1xuICAgIG1lcmdlZFtjdXJyZW50Lm5hbWVdID0gZXhpc3RpbmdcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgb3B0aW9uczogeyAuLi5leGlzdGluZy5vcHRpb25zLCAuLi5jdXJyZW50Lm9wdGlvbnMgfSxcbiAgICAgICAgICBkYXRhOiB7IC4uLmV4aXN0aW5nLmRhdGEsIC4uLmN1cnJlbnQuZGF0YSB9LFxuICAgICAgICB9XG4gICAgICA6IGN1cnJlbnQ7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfSwge30pO1xuXG4gIC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG4gIHJldHVybiBPYmplY3Qua2V5cyhtZXJnZWQpLm1hcChrZXkgPT4gbWVyZ2VkW2tleV0pO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSAnLi9nZXRXaW5kb3cnO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tICcuL2dldERvY3VtZW50RWxlbWVudCc7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tICcuL2dldFdpbmRvd1Njcm9sbEJhclgnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudDogRWxlbWVudCkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuXG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG5cbiAgLy8gTkI6IFRoaXMgaXNuJ3Qgc3VwcG9ydGVkIG9uIGlPUyA8PSAxMi4gSWYgdGhlIGtleWJvYXJkIGlzIG9wZW4sIHRoZSBwb3BwZXJcbiAgLy8gY2FuIGJlIG9ic2N1cmVkIHVuZGVybmVhdGggaXQuXG4gIC8vIEFsc28sIGBodG1sLmNsaWVudEhlaWdodGAgYWRkcyB0aGUgYm90dG9tIGJhciBoZWlnaHQgaW4gU2FmYXJpIGlPUywgZXZlblxuICAvLyBpZiBpdCBpc24ndCBvcGVuLCBzbyBpZiB0aGlzIGlzbid0IGF2YWlsYWJsZSwgdGhlIHBvcHBlciB3aWxsIGJlIGRldGVjdGVkXG4gIC8vIHRvIG92ZXJmbG93IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbiB0b28gZWFybHkuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuXG4gICAgLy8gVXNlcyBMYXlvdXQgVmlld3BvcnQgKGxpa2UgQ2hyb21lOyBTYWZhcmkgZG9lcyBub3QgY3VycmVudGx5KVxuICAgIC8vIEluIENocm9tZSwgaXQgcmV0dXJucyBhIHZhbHVlIHZlcnkgY2xvc2UgdG8gMCAoKy8tKSBidXQgY29udGFpbnMgcm91bmRpbmdcbiAgICAvLyBlcnJvcnMgZHVlIHRvIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIHNvIHdlIG5lZWQgdG8gY2hlY2sgcHJlY2lzaW9uLlxuICAgIC8vIFNhZmFyaSByZXR1cm5zIGEgbnVtYmVyIDw9IDAsIHVzdWFsbHkgPCAtMSB3aGVuIHBpbmNoLXpvb21lZFxuXG4gICAgLy8gRmVhdHVyZSBkZXRlY3Rpb24gZmFpbHMgaW4gbW9iaWxlIGVtdWxhdGlvbiBtb2RlIGluIENocm9tZS5cbiAgICAvLyBNYXRoLmFicyh3aW4uaW5uZXJXaWR0aCAvIHZpc3VhbFZpZXdwb3J0LnNjYWxlIC0gdmlzdWFsVmlld3BvcnQud2lkdGgpIDxcbiAgICAvLyAwLjAwMVxuICAgIC8vIEZhbGxiYWNrIGhlcmU6IFwiTm90IFNhZmFyaVwiIHVzZXJBZ2VudFxuICAgIGlmICghL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHksXG4gIH07XG59XG4iLCIvLyBAZmxvd1xuZXhwb3J0IGNvbnN0IG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IGNvbnN0IG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IGNvbnN0IHJvdW5kID0gTWF0aC5yb3VuZDtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IFJlY3QgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gJy4vZ2V0RG9jdW1lbnRFbGVtZW50JztcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gJy4vZ2V0Q29tcHV0ZWRTdHlsZSc7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tICcuL2dldFdpbmRvd1Njcm9sbEJhclgnO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tICcuL2dldFdpbmRvd1Njcm9sbCc7XG5pbXBvcnQgeyBtYXggfSBmcm9tICcuLi91dGlscy9tYXRoJztcblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUmVjdCB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgY29uc3QgYm9keSA9IGVsZW1lbnQub3duZXJEb2N1bWVudD8uYm9keTtcblxuICBjb25zdCB3aWR0aCA9IG1heChcbiAgICBodG1sLnNjcm9sbFdpZHRoLFxuICAgIGh0bWwuY2xpZW50V2lkdGgsXG4gICAgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLFxuICAgIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMFxuICApO1xuICBjb25zdCBoZWlnaHQgPSBtYXgoXG4gICAgaHRtbC5zY3JvbGxIZWlnaHQsXG4gICAgaHRtbC5jbGllbnRIZWlnaHQsXG4gICAgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCxcbiAgICBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwXG4gICk7XG5cbiAgbGV0IHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICBjb25zdCB5ID0gLXdpblNjcm9sbC5zY3JvbGxUb3A7XG5cbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSB8fCBodG1sKS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKSAtIHdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgeCwgeSB9O1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gJy4vaW5zdGFuY2VPZic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudDogRWxlbWVudCwgY2hpbGQ6IEVsZW1lbnQpIHtcbiAgY29uc3Qgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZSAmJiBjaGlsZC5nZXRSb290Tm9kZSgpO1xuXG4gIC8vIEZpcnN0LCBhdHRlbXB0IHdpdGggZmFzdGVyIG5hdGl2ZSBtZXRob2RcbiAgaWYgKHBhcmVudC5jb250YWlucyhjaGlsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyB0aGVuIGZhbGxiYWNrIHRvIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB3aXRoIFNoYWRvdyBET00gc3VwcG9ydFxuICBlbHNlIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgbGV0IG5leHQgPSBjaGlsZDtcbiAgICBkbyB7XG4gICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cbiAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgIH0gd2hpbGUgKG5leHQpO1xuICB9XG5cbiAgLy8gR2l2ZSB1cCwgdGhlIHJlc3VsdCBpcyBmYWxzZVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBSZWN0LCBDbGllbnRSZWN0T2JqZWN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3Q6IFJlY3QpOiBDbGllbnRSZWN0T2JqZWN0IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZWN0LFxuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0LFxuICB9O1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgQ2xpZW50UmVjdE9iamVjdCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgQm91bmRhcnksIFJvb3RCb3VuZGFyeSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IHZpZXdwb3J0IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tICcuL2dldFZpZXdwb3J0UmVjdCc7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gJy4vZ2V0RG9jdW1lbnRSZWN0JztcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tICcuL2xpc3RTY3JvbGxQYXJlbnRzJztcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSAnLi9nZXRPZmZzZXRQYXJlbnQnO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tICcuL2dldERvY3VtZW50RWxlbWVudCc7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tICcuL2dldENvbXB1dGVkU3R5bGUnO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSAnLi9pbnN0YW5jZU9mJztcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSAnLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QnO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSAnLi9nZXRQYXJlbnROb2RlJztcbmltcG9ydCBjb250YWlucyBmcm9tICcuL2NvbnRhaW5zJztcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tICcuL2dldE5vZGVOYW1lJztcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gJy4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QnO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tICcuLi91dGlscy9tYXRoJztcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudDogRWxlbWVudCkge1xuICBjb25zdCByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpO1xuXG4gIHJlY3QudG9wID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgcmVjdC5sZWZ0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LndpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC54ID0gcmVjdC5sZWZ0O1xuICByZWN0LnkgPSByZWN0LnRvcDtcblxuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoXG4gIGVsZW1lbnQ6IEVsZW1lbnQsXG4gIGNsaXBwaW5nUGFyZW50OiBFbGVtZW50IHwgUm9vdEJvdW5kYXJ5XG4pOiBDbGllbnRSZWN0T2JqZWN0IHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydFxuICAgID8gcmVjdFRvQ2xpZW50UmVjdChnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCkpXG4gICAgOiBpc0hUTUxFbGVtZW50KGNsaXBwaW5nUGFyZW50KVxuICAgID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQpXG4gICAgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn1cblxuLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudDogRWxlbWVudCk6IEFycmF5PEVsZW1lbnQ+IHtcbiAgY29uc3QgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIGNvbnN0IGNhbkVzY2FwZUNsaXBwaW5nID1cbiAgICBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICBjb25zdCBjbGlwcGVyRWxlbWVudCA9XG4gICAgY2FuRXNjYXBlQ2xpcHBpbmcgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KVxuICAgICAgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudClcbiAgICAgIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuICByZXR1cm4gY2xpcHBpbmdQYXJlbnRzLmZpbHRlcihcbiAgICAoY2xpcHBpbmdQYXJlbnQpID0+XG4gICAgICBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmXG4gICAgICBjb250YWlucyhjbGlwcGluZ1BhcmVudCwgY2xpcHBlckVsZW1lbnQpICYmXG4gICAgICBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5J1xuICApO1xufVxuXG4vLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoXG4gIGVsZW1lbnQ6IEVsZW1lbnQsXG4gIGJvdW5kYXJ5OiBCb3VuZGFyeSxcbiAgcm9vdEJvdW5kYXJ5OiBSb290Qm91bmRhcnlcbik6IENsaWVudFJlY3RPYmplY3Qge1xuICBjb25zdCBtYWluQ2xpcHBpbmdQYXJlbnRzID1cbiAgICBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cydcbiAgICAgID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpXG4gICAgICA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIGNvbnN0IGNsaXBwaW5nUGFyZW50cyA9IFsuLi5tYWluQ2xpcHBpbmdQYXJlbnRzLCByb290Qm91bmRhcnldO1xuICBjb25zdCBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuXG4gIGNvbnN0IGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nUGFyZW50cy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nUGFyZW50KSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50KTtcblxuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG5cbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCkpO1xuXG4gIGNsaXBwaW5nUmVjdC53aWR0aCA9IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QuaGVpZ2h0ID0gY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3A7XG4gIGNsaXBwaW5nUmVjdC54ID0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC55ID0gY2xpcHBpbmdSZWN0LnRvcDtcblxuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB7IHR5cGUgVmFyaWF0aW9uLCB0eXBlIFBsYWNlbWVudCB9IGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudDogUGxhY2VtZW50KTogP1ZhcmlhdGlvbiB7XG4gIHJldHVybiAocGxhY2VtZW50LnNwbGl0KCctJylbMV06IGFueSk7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBQbGFjZW1lbnQgfSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChcbiAgcGxhY2VtZW50OiBQbGFjZW1lbnRcbik6ICd4JyB8ICd5JyB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tICcuL2dldEJhc2VQbGFjZW1lbnQnO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tICcuL2dldFZhcmlhdGlvbic7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gJy4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50JztcbmltcG9ydCB0eXBlIHtcbiAgUmVjdCxcbiAgUG9zaXRpb25pbmdTdHJhdGVneSxcbiAgT2Zmc2V0cyxcbiAgQ2xpZW50UmVjdE9iamVjdCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kLCB0eXBlIFBsYWNlbWVudCB9IGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZU9mZnNldHMoe1xuICByZWZlcmVuY2UsXG4gIGVsZW1lbnQsXG4gIHBsYWNlbWVudCxcbn06IHtcbiAgcmVmZXJlbmNlOiBSZWN0IHwgQ2xpZW50UmVjdE9iamVjdCxcbiAgZWxlbWVudDogUmVjdCB8IENsaWVudFJlY3RPYmplY3QsXG4gIHN0cmF0ZWd5OiBQb3NpdGlvbmluZ1N0cmF0ZWd5LFxuICBwbGFjZW1lbnQ/OiBQbGFjZW1lbnQsXG59KTogT2Zmc2V0cyB7XG4gIGNvbnN0IGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICBjb25zdCB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIGNvbnN0IGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBlbGVtZW50LndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG5cbiAgbGV0IG9mZnNldHM7XG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIHJpZ2h0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vblksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnksXG4gICAgICB9O1xuICB9XG5cbiAgY29uc3QgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50XG4gICAgPyBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudClcbiAgICA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID1cbiAgICAgICAgICBvZmZzZXRzW21haW5BeGlzXSAtIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPVxuICAgICAgICAgIG9mZnNldHNbbWFpbkF4aXNdICsgKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBTaWRlT2JqZWN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRGcmVzaFNpZGVPYmplY3QoKTogU2lkZU9iamVjdCB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICB9O1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgU2lkZU9iamVjdCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSAnLi9nZXRGcmVzaFNpZGVPYmplY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QoXG4gIHBhZGRpbmdPYmplY3Q6ICRTaGFwZTxTaWRlT2JqZWN0PlxuKTogU2lkZU9iamVjdCB7XG4gIHJldHVybiB7XG4gICAgLi4uZ2V0RnJlc2hTaWRlT2JqZWN0KCksXG4gICAgLi4ucGFkZGluZ09iamVjdCxcbiAgfTtcbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGFuZFRvSGFzaE1hcDxcbiAgVDogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbixcbiAgSzogc3RyaW5nXG4+KHZhbHVlOiBULCBrZXlzOiBBcnJheTxLPik6IHsgW2tleTogc3RyaW5nXTogVCB9IHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKChoYXNoTWFwLCBrZXkpID0+IHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgU3RhdGUsIFNpZGVPYmplY3QsIFBhZGRpbmcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFBsYWNlbWVudCwgQm91bmRhcnksIFJvb3RCb3VuZGFyeSwgQ29udGV4dCB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSAnLi4vZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdCc7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gJy4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQnO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tICcuLi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0JztcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tICcuL2NvbXB1dGVPZmZzZXRzJztcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gJy4vcmVjdFRvQ2xpZW50UmVjdCc7XG5pbXBvcnQge1xuICBjbGlwcGluZ1BhcmVudHMsXG4gIHJlZmVyZW5jZSxcbiAgcG9wcGVyLFxuICBib3R0b20sXG4gIHRvcCxcbiAgcmlnaHQsXG4gIGJhc2VQbGFjZW1lbnRzLFxuICB2aWV3cG9ydCxcbn0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSAnLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YnO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tICcuL21lcmdlUGFkZGluZ09iamVjdCc7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gJy4vZXhwYW5kVG9IYXNoTWFwJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHR5cGUgT3B0aW9ucyA9IHtcbiAgcGxhY2VtZW50OiBQbGFjZW1lbnQsXG4gIGJvdW5kYXJ5OiBCb3VuZGFyeSxcbiAgcm9vdEJvdW5kYXJ5OiBSb290Qm91bmRhcnksXG4gIGVsZW1lbnRDb250ZXh0OiBDb250ZXh0LFxuICBhbHRCb3VuZGFyeTogYm9vbGVhbixcbiAgcGFkZGluZzogUGFkZGluZyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KFxuICBzdGF0ZTogU3RhdGUsXG4gIG9wdGlvbnM6ICRTaGFwZTxPcHRpb25zPiA9IHt9XG4pOiBTaWRlT2JqZWN0IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCA9IHN0YXRlLnBsYWNlbWVudCxcbiAgICBib3VuZGFyeSA9IGNsaXBwaW5nUGFyZW50cyxcbiAgICByb290Qm91bmRhcnkgPSB2aWV3cG9ydCxcbiAgICBlbGVtZW50Q29udGV4dCA9IHBvcHBlcixcbiAgICBhbHRCb3VuZGFyeSA9IGZhbHNlLFxuICAgIHBhZGRpbmcgPSAwLFxuICB9ID0gb3B0aW9ucztcblxuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KFxuICAgIHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJ1xuICAgICAgPyBwYWRkaW5nXG4gICAgICA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cylcbiAgKTtcblxuICBjb25zdCBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHJlZmVyZW5jZSA6IHBvcHBlcjtcblxuICBjb25zdCBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICBjb25zdCBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuXG4gIGNvbnN0IGNsaXBwaW5nQ2xpZW50UmVjdCA9IGdldENsaXBwaW5nUmVjdChcbiAgICBpc0VsZW1lbnQoZWxlbWVudClcbiAgICAgID8gZWxlbWVudFxuICAgICAgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IGdldERvY3VtZW50RWxlbWVudChzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeVxuICApO1xuXG4gIGNvbnN0IHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcblxuICBjb25zdCBwb3BwZXJPZmZzZXRzID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlQ2xpZW50UmVjdCxcbiAgICBlbGVtZW50OiBwb3BwZXJSZWN0LFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudCxcbiAgfSk7XG5cbiAgY29uc3QgcG9wcGVyQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIC4uLnBvcHBlclJlY3QsXG4gICAgLi4ucG9wcGVyT2Zmc2V0cyxcbiAgfSk7XG5cbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPVxuICAgIGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDtcblxuICAvLyBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyByZWN0XG4gIC8vIDAgb3IgbmVnYXRpdmUgPSB3aXRoaW4gdGhlIGNsaXBwaW5nIHJlY3RcbiAgY29uc3Qgb3ZlcmZsb3dPZmZzZXRzID0ge1xuICAgIHRvcDogY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wLFxuICAgIGJvdHRvbTpcbiAgICAgIGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtXG4gICAgICBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICtcbiAgICAgIHBhZGRpbmdPYmplY3QuYm90dG9tLFxuICAgIGxlZnQ6IGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCxcbiAgICByaWdodDpcbiAgICAgIGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodCxcbiAgfTtcblxuICBjb25zdCBvZmZzZXREYXRhID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQ7XG5cbiAgLy8gT2Zmc2V0cyBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIHRoZSBwb3BwZXIgZWxlbWVudFxuICBpZiAoZWxlbWVudENvbnRleHQgPT09IHBvcHBlciAmJiBvZmZzZXREYXRhKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gb2Zmc2V0RGF0YVtwbGFjZW1lbnRdO1xuXG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IG11bHRpcGx5ID0gW3JpZ2h0LCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gMSA6IC0xO1xuICAgICAgY29uc3QgYXhpcyA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAneScgOiAneCc7XG4gICAgICBvdmVyZmxvd09mZnNldHNba2V5XSArPSBvZmZzZXRbYXhpc10gKiBtdWx0aXBseTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdmVyZmxvd09mZnNldHM7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUge1xuICBTdGF0ZSxcbiAgT3B0aW9uc0dlbmVyaWMsXG4gIE1vZGlmaWVyLFxuICBJbnN0YW5jZSxcbiAgVmlydHVhbEVsZW1lbnQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSAnLi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdCc7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tICcuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0JztcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tICcuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cyc7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gJy4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudCc7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tICcuL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlJztcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tICcuL3V0aWxzL29yZGVyTW9kaWZpZXJzJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICcuL3V0aWxzL2RlYm91bmNlJztcbmltcG9ydCB2YWxpZGF0ZU1vZGlmaWVycyBmcm9tICcuL3V0aWxzL3ZhbGlkYXRlTW9kaWZpZXJzJztcbmltcG9ydCB1bmlxdWVCeSBmcm9tICcuL3V0aWxzL3VuaXF1ZUJ5JztcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gJy4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudCc7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSAnLi91dGlscy9tZXJnZUJ5TmFtZSc7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSAnLi91dGlscy9kZXRlY3RPdmVyZmxvdyc7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICcuL2RvbS11dGlscy9pbnN0YW5jZU9mJztcbmltcG9ydCB7IGF1dG8gfSBmcm9tICcuL2VudW1zJztcblxuY29uc3QgSU5WQUxJRF9FTEVNRU5UX0VSUk9SID1cbiAgJ1BvcHBlcjogSW52YWxpZCByZWZlcmVuY2Ugb3IgcG9wcGVyIGFyZ3VtZW50IHByb3ZpZGVkLiBUaGV5IG11c3QgYmUgZWl0aGVyIGEgRE9NIGVsZW1lbnQgb3IgdmlydHVhbCBlbGVtZW50Lic7XG5jb25zdCBJTkZJTklURV9MT09QX0VSUk9SID1cbiAgJ1BvcHBlcjogQW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgbW9kaWZpZXJzIGN5Y2xlIGhhcyBiZWVuIGRldGVjdGVkISBUaGUgY3ljbGUgaGFzIGJlZW4gaW50ZXJydXB0ZWQgdG8gcHJldmVudCBhIGJyb3dzZXIgY3Jhc2guJztcblxuY29uc3QgREVGQVVMVF9PUFRJT05TOiBPcHRpb25zR2VuZXJpYzxhbnk+ID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbn07XG5cbnR5cGUgUG9wcGVyR2VuZXJhdG9yQXJncyA9IHtcbiAgZGVmYXVsdE1vZGlmaWVycz86IEFycmF5PE1vZGlmaWVyPGFueSwgYW55Pj4sXG4gIGRlZmF1bHRPcHRpb25zPzogJFNoYXBlPE9wdGlvbnNHZW5lcmljPGFueT4+LFxufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cyguLi5hcmdzOiBBcnJheTxhbnk+KTogYm9vbGVhbiB7XG4gIHJldHVybiAhYXJncy5zb21lKFxuICAgIChlbGVtZW50KSA9PlxuICAgICAgIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJylcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zOiBQb3BwZXJHZW5lcmF0b3JBcmdzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGRlZmF1bHRNb2RpZmllcnMgPSBbXSxcbiAgICBkZWZhdWx0T3B0aW9ucyA9IERFRkFVTFRfT1BUSU9OUyxcbiAgfSA9IGdlbmVyYXRvck9wdGlvbnM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcjxUTW9kaWZpZXI6ICRTaGFwZTxNb2RpZmllcjxhbnksIGFueT4+PihcbiAgICByZWZlcmVuY2U6IEVsZW1lbnQgfCBWaXJ0dWFsRWxlbWVudCxcbiAgICBwb3BwZXI6IEhUTUxFbGVtZW50LFxuICAgIG9wdGlvbnM6ICRTaGFwZTxPcHRpb25zR2VuZXJpYzxUTW9kaWZpZXI+PiA9IGRlZmF1bHRPcHRpb25zXG4gICk6IEluc3RhbmNlIHtcbiAgICBsZXQgc3RhdGU6ICRTaGFwZTxTdGF0ZT4gPSB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiB7IC4uLkRFRkFVTFRfT1BUSU9OUywgLi4uZGVmYXVsdE9wdGlvbnMgfSxcbiAgICAgIG1vZGlmaWVyc0RhdGE6IHt9LFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXIsXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9LFxuICAgIH07XG5cbiAgICBsZXQgZWZmZWN0Q2xlYW51cEZuczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcbiAgICBsZXQgaXNEZXN0cm95ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGluc3RhbmNlID0ge1xuICAgICAgc3RhdGUsXG4gICAgICBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9XG4gICAgICAgICAgdHlwZW9mIHNldE9wdGlvbnNBY3Rpb24gPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gc2V0T3B0aW9uc0FjdGlvbihzdGF0ZS5vcHRpb25zKVxuICAgICAgICAgICAgOiBzZXRPcHRpb25zQWN0aW9uO1xuXG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcblxuICAgICAgICBzdGF0ZS5vcHRpb25zID0ge1xuICAgICAgICAgIC8vICRGbG93Rml4TWVbZXhwb25lbnRpYWwtc3ByZWFkXVxuICAgICAgICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgICAgICAgIC4uLnN0YXRlLm9wdGlvbnMsXG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgfTtcblxuICAgICAgICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogaXNFbGVtZW50KHJlZmVyZW5jZSlcbiAgICAgICAgICAgID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKVxuICAgICAgICAgICAgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnRcbiAgICAgICAgICAgID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlLmNvbnRleHRFbGVtZW50KVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlciksXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcbiAgICAgICAgY29uc3Qgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKFxuICAgICAgICAgIG1lcmdlQnlOYW1lKFsuLi5kZWZhdWx0TW9kaWZpZXJzLCAuLi5zdGF0ZS5vcHRpb25zLm1vZGlmaWVyc10pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoKG0pID0+IG0uZW5hYmxlZCk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgdGhlIHByb3ZpZGVkIG1vZGlmaWVycyBzbyB0aGF0IHRoZSBjb25zdW1lciB3aWxsIGdldCB3YXJuZWRcbiAgICAgICAgLy8gaWYgb25lIG9mIHRoZSBtb2RpZmllcnMgaXMgaW52YWxpZCBmb3IgYW55IHJlYXNvblxuICAgICAgICBpZiAoX19ERVZfXykge1xuICAgICAgICAgIGNvbnN0IG1vZGlmaWVycyA9IHVuaXF1ZUJ5KFxuICAgICAgICAgICAgWy4uLm9yZGVyZWRNb2RpZmllcnMsIC4uLnN0YXRlLm9wdGlvbnMubW9kaWZpZXJzXSxcbiAgICAgICAgICAgICh7IG5hbWUgfSkgPT4gbmFtZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB2YWxpZGF0ZU1vZGlmaWVycyhtb2RpZmllcnMpO1xuXG4gICAgICAgICAgaWYgKGdldEJhc2VQbGFjZW1lbnQoc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgICAgICAgICBjb25zdCBmbGlwTW9kaWZpZXIgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZpbmQoXG4gICAgICAgICAgICAgICh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gJ2ZsaXAnXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIWZsaXBNb2RpZmllcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICdQb3BwZXI6IFwiYXV0b1wiIHBsYWNlbWVudHMgcmVxdWlyZSB0aGUgXCJmbGlwXCIgbW9kaWZpZXIgYmUnLFxuICAgICAgICAgICAgICAgICAgJ3ByZXNlbnQgYW5kIGVuYWJsZWQgdG8gd29yay4nLFxuICAgICAgICAgICAgICAgIF0uam9pbignICcpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbWFyZ2luVG9wLFxuICAgICAgICAgICAgbWFyZ2luUmlnaHQsXG4gICAgICAgICAgICBtYXJnaW5Cb3R0b20sXG4gICAgICAgICAgICBtYXJnaW5MZWZ0LFxuICAgICAgICAgIH0gPSBnZXRDb21wdXRlZFN0eWxlKHBvcHBlcik7XG5cbiAgICAgICAgICAvLyBXZSBubyBsb25nZXIgdGFrZSBpbnRvIGFjY291bnQgYG1hcmdpbnNgIG9uIHRoZSBwb3BwZXIsIGFuZCBpdCBjYW5cbiAgICAgICAgICAvLyBjYXVzZSBidWdzIHdpdGggcG9zaXRpb25pbmcsIHNvIHdlJ2xsIHdhcm4gdGhlIGNvbnN1bWVyXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgW21hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdF0uc29tZSgobWFyZ2luKSA9PlxuICAgICAgICAgICAgICBwYXJzZUZsb2F0KG1hcmdpbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICdQb3BwZXI6IENTUyBcIm1hcmdpblwiIHN0eWxlcyBjYW5ub3QgYmUgdXNlZCB0byBhcHBseSBwYWRkaW5nJyxcbiAgICAgICAgICAgICAgICAnYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQgb3IgYm91bmRhcnkuJyxcbiAgICAgICAgICAgICAgICAnVG8gcmVwbGljYXRlIG1hcmdpbiwgdXNlIHRoZSBgb2Zmc2V0YCBtb2RpZmllciwgYXMgd2VsbCBhcycsXG4gICAgICAgICAgICAgICAgJ3RoZSBgcGFkZGluZ2Agb3B0aW9uIGluIHRoZSBgcHJldmVudE92ZXJmbG93YCBhbmQgYGZsaXBgJyxcbiAgICAgICAgICAgICAgICAnbW9kaWZpZXJzLicsXG4gICAgICAgICAgICAgIF0uam9pbignICcpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIFN5bmMgdXBkYXRlIOKAkyBpdCB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCwgZXZlbiBpZiBub3QgbmVjZXNzYXJ5LiBUaGlzXG4gICAgICAvLyBpcyB1c2VmdWwgZm9yIGxvdyBmcmVxdWVuY3kgdXBkYXRlcyB3aGVyZSBzeW5jIGJlaGF2aW9yIHNpbXBsaWZpZXMgdGhlXG4gICAgICAvLyBsb2dpYy5cbiAgICAgIC8vIEZvciBoaWdoIGZyZXF1ZW5jeSB1cGRhdGVzIChlLmcuIGByZXNpemVgIGFuZCBgc2Nyb2xsYCBldmVudHMpLCBhbHdheXNcbiAgICAgIC8vIHByZWZlciB0aGUgYXN5bmMgUG9wcGVyI3VwZGF0ZSBtZXRob2RcbiAgICAgIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHJlZmVyZW5jZSwgcG9wcGVyIH0gPSBzdGF0ZS5lbGVtZW50cztcblxuICAgICAgICAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgaWYgKF9fREVWX18pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSU5WQUxJRF9FTEVNRU5UX0VSUk9SKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIGdldE9mZnNldFBhcmVudChwb3BwZXIpLFxuICAgICAgICAgICAgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJ1xuICAgICAgICAgICksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlciksXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG4gICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG5cbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7XG5cbiAgICAgICAgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goXG4gICAgICAgICAgKG1vZGlmaWVyKSA9PlxuICAgICAgICAgICAgKHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSB7XG4gICAgICAgICAgICAgIC4uLm1vZGlmaWVyLmRhdGEsXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBfX2RlYnVnX2xvb3BzX18gPSAwO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBpZiAoX19ERVZfXykge1xuICAgICAgICAgICAgX19kZWJ1Z19sb29wc19fICs9IDE7XG4gICAgICAgICAgICBpZiAoX19kZWJ1Z19sb29wc19fID4gMTAwKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSU5GSU5JVEVfTE9PUF9FUlJPUik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGZuLCBvcHRpb25zID0ge30sIG5hbWUgfSA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnNbaW5kZXhdO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RhdGUgPSBmbih7IHN0YXRlLCBvcHRpb25zLCBuYW1lLCBpbnN0YW5jZSB9KSB8fCBzdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlPCRTaGFwZTxTdGF0ZT4+KFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBQcm9taXNlPCRTaGFwZTxTdGF0ZT4+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgcmVzb2x2ZShzdGF0ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICksXG5cbiAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgaWYgKF9fREVWX18pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihJTlZBTElEX0VMRU1FTlRfRVJST1IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbigoc3RhdGUpID0+IHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIGJlZm9yZSB0aGUgZmlyc3RcbiAgICAvLyB1cGRhdGUgY3ljbGUgcnVucy4gVGhleSB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSB1cGRhdGVcbiAgICAvLyBjeWNsZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBhIG1vZGlmaWVyIGFkZHMgc29tZSBwZXJzaXN0ZW50IGRhdGEgdGhhdFxuICAgIC8vIG90aGVyIG1vZGlmaWVycyBuZWVkIHRvIHVzZSwgYnV0IHRoZSBtb2RpZmllciBpcyBydW4gYWZ0ZXIgdGhlIGRlcGVuZGVudFxuICAgIC8vIG9uZS5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goKHsgbmFtZSwgb3B0aW9ucyA9IHt9LCBlZmZlY3QgfSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGVmZmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IGNsZWFudXBGbiA9IGVmZmVjdCh7IHN0YXRlLCBuYW1lLCBpbnN0YW5jZSwgb3B0aW9ucyB9KTtcbiAgICAgICAgICBjb25zdCBub29wRm4gPSAoKSA9PiB7fTtcbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goKGZuKSA9PiBmbigpKTtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQb3BwZXIgPSBwb3BwZXJHZW5lcmF0b3IoKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IE1vZGlmaWVyQXJndW1lbnRzLCBNb2RpZmllciB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSAnLi4vZG9tLXV0aWxzL2dldFdpbmRvdyc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB0eXBlIE9wdGlvbnMgPSB7XG4gIHNjcm9sbDogYm9vbGVhbixcbiAgcmVzaXplOiBib29sZWFuLFxufTtcblxuY29uc3QgcGFzc2l2ZSA9IHsgcGFzc2l2ZTogdHJ1ZSB9O1xuXG5mdW5jdGlvbiBlZmZlY3QoeyBzdGF0ZSwgaW5zdGFuY2UsIG9wdGlvbnMgfTogTW9kaWZpZXJBcmd1bWVudHM8T3B0aW9ucz4pIHtcbiAgY29uc3QgeyBzY3JvbGwgPSB0cnVlLCByZXNpemUgPSB0cnVlIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIpO1xuICBjb25zdCBzY3JvbGxQYXJlbnRzID0gW1xuICAgIC4uLnN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLFxuICAgIC4uLnN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyLFxuICBdO1xuXG4gIGlmIChzY3JvbGwpIHtcbiAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goc2Nyb2xsUGFyZW50ID0+IHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goc2Nyb2xsUGFyZW50ID0+IHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB0eXBlIEV2ZW50TGlzdGVuZXJzTW9kaWZpZXIgPSBNb2RpZmllcjwnZXZlbnRMaXN0ZW5lcnMnLCBPcHRpb25zPjtcbmV4cG9ydCBkZWZhdWx0ICh7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogKCkgPT4ge30sXG4gIGVmZmVjdCxcbiAgZGF0YToge30sXG59OiBFdmVudExpc3RlbmVyc01vZGlmaWVyKTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IE1vZGlmaWVyQXJndW1lbnRzLCBNb2RpZmllciB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tICcuLi91dGlscy9jb21wdXRlT2Zmc2V0cyc7XG5cbmZ1bmN0aW9uIHBvcHBlck9mZnNldHMoeyBzdGF0ZSwgbmFtZSB9OiBNb2RpZmllckFyZ3VtZW50czx7fHx9Pikge1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnQsXG4gIH0pO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBQb3BwZXJPZmZzZXRzTW9kaWZpZXIgPSBNb2RpZmllcjwncG9wcGVyT2Zmc2V0cycsIHt8fH0+O1xuZXhwb3J0IGRlZmF1bHQgKHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge30sXG59OiBQb3BwZXJPZmZzZXRzTW9kaWZpZXIpO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHtcbiAgUG9zaXRpb25pbmdTdHJhdGVneSxcbiAgT2Zmc2V0cyxcbiAgTW9kaWZpZXIsXG4gIE1vZGlmaWVyQXJndW1lbnRzLFxuICBSZWN0LFxuICBXaW5kb3csXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIHR5cGUgQmFzZVBsYWNlbWVudCxcbiAgdHlwZSBWYXJpYXRpb24sXG4gIHRvcCxcbiAgbGVmdCxcbiAgcmlnaHQsXG4gIGJvdHRvbSxcbiAgZW5kLFxufSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gJy4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQnO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tICcuLi9kb20tdXRpbHMvZ2V0V2luZG93JztcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSAnLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudCc7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tICcuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZSc7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tICcuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50JztcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSAnLi4vdXRpbHMvZ2V0VmFyaWF0aW9uJztcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSAnLi4vdXRpbHMvbWF0aCc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB0eXBlIFJvdW5kT2Zmc2V0cyA9IChcbiAgb2Zmc2V0czogJFNoYXBlPHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIGNlbnRlck9mZnNldDogbnVtYmVyIH0+XG4pID0+IE9mZnNldHM7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB0eXBlIE9wdGlvbnMgPSB7XG4gIGdwdUFjY2VsZXJhdGlvbjogYm9vbGVhbixcbiAgYWRhcHRpdmU6IGJvb2xlYW4sXG4gIHJvdW5kT2Zmc2V0cz86IGJvb2xlYW4gfCBSb3VuZE9mZnNldHMsXG59O1xuXG5jb25zdCB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJyxcbn07XG5cbi8vIFJvdW5kIHRoZSBvZmZzZXRzIHRvIHRoZSBuZWFyZXN0IHN1aXRhYmxlIHN1YnBpeGVsIGJhc2VkIG9uIHRoZSBEUFIuXG4vLyBab29taW5nIGNhbiBjaGFuZ2UgdGhlIERQUiwgYnV0IGl0IHNlZW1zIHRvIHJlcG9ydCBhIHZhbHVlIHRoYXQgd2lsbFxuLy8gY2xlYW5seSBkaXZpZGUgdGhlIHZhbHVlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWJwaXhlbHMuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUih7IHgsIHkgfSk6IE9mZnNldHMge1xuICBjb25zdCB3aW46IFdpbmRvdyA9IHdpbmRvdztcbiAgY29uc3QgZHByID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcblxuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHJvdW5kKHggKiBkcHIpIC8gZHByKSB8fCAwLFxuICAgIHk6IHJvdW5kKHJvdW5kKHkgKiBkcHIpIC8gZHByKSB8fCAwLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9TdHlsZXMoe1xuICBwb3BwZXIsXG4gIHBvcHBlclJlY3QsXG4gIHBsYWNlbWVudCxcbiAgdmFyaWF0aW9uLFxuICBvZmZzZXRzLFxuICBwb3NpdGlvbixcbiAgZ3B1QWNjZWxlcmF0aW9uLFxuICBhZGFwdGl2ZSxcbiAgcm91bmRPZmZzZXRzLFxufToge1xuICBwb3BwZXI6IEhUTUxFbGVtZW50LFxuICBwb3BwZXJSZWN0OiBSZWN0LFxuICBwbGFjZW1lbnQ6IEJhc2VQbGFjZW1lbnQsXG4gIHZhcmlhdGlvbjogP1ZhcmlhdGlvbixcbiAgb2Zmc2V0czogJFNoYXBlPHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIGNlbnRlck9mZnNldDogbnVtYmVyIH0+LFxuICBwb3NpdGlvbjogUG9zaXRpb25pbmdTdHJhdGVneSxcbiAgZ3B1QWNjZWxlcmF0aW9uOiBib29sZWFuLFxuICBhZGFwdGl2ZTogYm9vbGVhbixcbiAgcm91bmRPZmZzZXRzOiBib29sZWFuIHwgUm91bmRPZmZzZXRzLFxufSkge1xuICBsZXQgeyB4ID0gMCwgeSA9IDAgfSA9XG4gICAgcm91bmRPZmZzZXRzID09PSB0cnVlXG4gICAgICA/IHJvdW5kT2Zmc2V0c0J5RFBSKG9mZnNldHMpXG4gICAgICA6IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gcm91bmRPZmZzZXRzKG9mZnNldHMpXG4gICAgICA6IG9mZnNldHM7XG5cbiAgY29uc3QgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgY29uc3QgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcblxuICBsZXQgc2lkZVg6IHN0cmluZyA9IGxlZnQ7XG4gIGxldCBzaWRlWTogc3RyaW5nID0gdG9wO1xuXG4gIGNvbnN0IHdpbjogV2luZG93ID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIGxldCBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICBsZXQgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIGxldCB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycgJiZcbiAgICAgICAgcG9zaXRpb24gPT09ICdhYnNvbHV0ZSdcbiAgICAgICkge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG4gICAgb2Zmc2V0UGFyZW50ID0gKG9mZnNldFBhcmVudDogRWxlbWVudCk7XG5cbiAgICBpZiAoXG4gICAgICBwbGFjZW1lbnQgPT09IHRvcCB8fFxuICAgICAgKChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpXG4gICAgKSB7XG4gICAgICBzaWRlWSA9IGJvdHRvbTtcbiAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgeSAtPSBvZmZzZXRQYXJlbnRbaGVpZ2h0UHJvcF0gLSBwb3BwZXJSZWN0LmhlaWdodDtcbiAgICAgIHkgKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHBsYWNlbWVudCA9PT0gbGVmdCB8fFxuICAgICAgKChwbGFjZW1lbnQgPT09IHRvcCB8fCBwbGFjZW1lbnQgPT09IGJvdHRvbSkgJiYgdmFyaWF0aW9uID09PSBlbmQpXG4gICAgKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICB4IC09IG9mZnNldFBhcmVudFt3aWR0aFByb3BdIC0gcG9wcGVyUmVjdC53aWR0aDtcbiAgICAgIHggKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbW1vblN0eWxlcyA9IHtcbiAgICBwb3NpdGlvbixcbiAgICAuLi4oYWRhcHRpdmUgJiYgdW5zZXRTaWRlcyksXG4gIH07XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jb21tb25TdHlsZXMsXG4gICAgICBbc2lkZVldOiBoYXNZID8gJzAnIDogJycsXG4gICAgICBbc2lkZVhdOiBoYXNYID8gJzAnIDogJycsXG4gICAgICAvLyBMYXllciBhY2NlbGVyYXRpb24gY2FuIGRpc2FibGUgc3VicGl4ZWwgcmVuZGVyaW5nIHdoaWNoIGNhdXNlcyBzbGlnaHRseVxuICAgICAgLy8gYmx1cnJ5IHRleHQgb24gbG93IFBQSSBkaXNwbGF5cywgc28gd2Ugd2FudCB0byB1c2UgMkQgdHJhbnNmb3Jtc1xuICAgICAgLy8gaW5zdGVhZFxuICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMVxuICAgICAgICAgID8gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgXG4gICAgICAgICAgOiBgdHJhbnNsYXRlM2QoJHt4fXB4LCAke3l9cHgsIDApYCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5jb21tb25TdHlsZXMsXG4gICAgW3NpZGVZXTogaGFzWSA/IGAke3l9cHhgIDogJycsXG4gICAgW3NpZGVYXTogaGFzWCA/IGAke3h9cHhgIDogJycsXG4gICAgdHJhbnNmb3JtOiAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyh7IHN0YXRlLCBvcHRpb25zIH06IE1vZGlmaWVyQXJndW1lbnRzPE9wdGlvbnM+KSB7XG4gIGNvbnN0IHtcbiAgICBncHVBY2NlbGVyYXRpb24gPSB0cnVlLFxuICAgIGFkYXB0aXZlID0gdHJ1ZSxcbiAgICAvLyBkZWZhdWx0cyB0byB1c2UgYnVpbHRpbiBgcm91bmRPZmZzZXRzQnlEUFJgXG4gICAgcm91bmRPZmZzZXRzID0gdHJ1ZSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgaWYgKF9fREVWX18pIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uUHJvcGVydHkgPVxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLnRyYW5zaXRpb25Qcm9wZXJ0eSB8fCAnJztcblxuICAgIGlmIChcbiAgICAgIGFkYXB0aXZlICYmXG4gICAgICBbJ3RyYW5zZm9ybScsICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXS5zb21lKFxuICAgICAgICAocHJvcGVydHkpID0+IHRyYW5zaXRpb25Qcm9wZXJ0eS5pbmRleE9mKHByb3BlcnR5KSA+PSAwXG4gICAgICApXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFtcbiAgICAgICAgICAnUG9wcGVyOiBEZXRlY3RlZCBDU1MgdHJhbnNpdGlvbnMgb24gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcnLFxuICAgICAgICAgICdDU1MgcHJvcGVydGllczogXCJ0cmFuc2Zvcm1cIiwgXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIi4nLFxuICAgICAgICAgICdcXG5cXG4nLFxuICAgICAgICAgICdEaXNhYmxlIHRoZSBcImNvbXB1dGVTdHlsZXNcIiBtb2RpZmllclxcJ3MgYGFkYXB0aXZlYCBvcHRpb24gdG8gYWxsb3cnLFxuICAgICAgICAgICdmb3Igc21vb3RoIHRyYW5zaXRpb25zLCBvciByZW1vdmUgdGhlc2UgcHJvcGVydGllcyBmcm9tIHRoZSBDU1MnLFxuICAgICAgICAgICd0cmFuc2l0aW9uIGRlY2xhcmF0aW9uIG9uIHRoZSBwb3BwZXIgZWxlbWVudCBpZiBvbmx5IHRyYW5zaXRpb25pbmcnLFxuICAgICAgICAgICdvcGFjaXR5IG9yIGJhY2tncm91bmQtY29sb3IgZm9yIGV4YW1wbGUuJyxcbiAgICAgICAgICAnXFxuXFxuJyxcbiAgICAgICAgICAnV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBwb3BwZXIgZWxlbWVudCBhcyBhIHdyYXBwZXIgYXJvdW5kIGFuIGlubmVyJyxcbiAgICAgICAgICAnZWxlbWVudCB0aGF0IGNhbiBoYXZlIGFueSBDU1MgcHJvcGVydHkgdHJhbnNpdGlvbmVkIGZvciBhbmltYXRpb25zLicsXG4gICAgICAgIF0uam9pbignICcpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb24sXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IHtcbiAgICAgIC4uLnN0YXRlLnN0eWxlcy5wb3BwZXIsXG4gICAgICAuLi5tYXBUb1N0eWxlcyh7XG4gICAgICAgIC4uLmNvbW1vblN0eWxlcyxcbiAgICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgICAgYWRhcHRpdmUsXG4gICAgICAgIHJvdW5kT2Zmc2V0cyxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0ge1xuICAgICAgLi4uc3RhdGUuc3R5bGVzLmFycm93LFxuICAgICAgLi4ubWFwVG9TdHlsZXMoe1xuICAgICAgICAuLi5jb21tb25TdHlsZXMsXG4gICAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICAgIHJvdW5kT2Zmc2V0cyxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IHtcbiAgICAuLi5zdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlcixcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50LFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBDb21wdXRlU3R5bGVzTW9kaWZpZXIgPSBNb2RpZmllcjwnY29tcHV0ZVN0eWxlcycsIE9wdGlvbnM+O1xuZXhwb3J0IGRlZmF1bHQgKHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9LFxufTogQ29tcHV0ZVN0eWxlc01vZGlmaWVyKTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IE1vZGlmaWVyLCBNb2RpZmllckFyZ3VtZW50cyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tICcuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUnO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gJy4uL2RvbS11dGlscy9pbnN0YW5jZU9mJztcblxuLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoeyBzdGF0ZSB9OiBNb2RpZmllckFyZ3VtZW50czx7fHx9Pikge1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgY29uc3QgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuXG4gICAgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG5cbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdCh7IHN0YXRlIH06IE1vZGlmaWVyQXJndW1lbnRzPHt8fH0+KSB7XG4gIGNvbnN0IGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCcsXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9LFxuICB9O1xuXG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gKCkgPT4ge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcblxuICAgICAgY29uc3Qgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoXG4gICAgICAgIHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKVxuICAgICAgICAgID8gc3RhdGUuc3R5bGVzW25hbWVdXG4gICAgICAgICAgOiBpbml0aWFsU3R5bGVzW25hbWVdXG4gICAgICApO1xuXG4gICAgICAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuICAgICAgY29uc3Qgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKChzdHlsZSwgcHJvcGVydHkpID0+IHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTtcblxuICAgICAgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG5cbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB0eXBlIEFwcGx5U3R5bGVzTW9kaWZpZXIgPSBNb2RpZmllcjwnYXBwbHlTdHlsZXMnLCB7fHx9PjtcbmV4cG9ydCBkZWZhdWx0ICh7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddLFxufTogQXBwbHlTdHlsZXNNb2RpZmllcik7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgeyBQbGFjZW1lbnQgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE1vZGlmaWVyQXJndW1lbnRzLCBNb2RpZmllciwgUmVjdCwgT2Zmc2V0cyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gJy4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQnO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gJy4uL2VudW1zJztcblxudHlwZSBPZmZzZXRzRnVuY3Rpb24gPSAoe1xuICBwb3BwZXI6IFJlY3QsXG4gIHJlZmVyZW5jZTogUmVjdCxcbiAgcGxhY2VtZW50OiBQbGFjZW1lbnQsXG59KSA9PiBbP251bWJlciwgP251bWJlcl07XG5cbnR5cGUgT2Zmc2V0ID0gT2Zmc2V0c0Z1bmN0aW9uIHwgWz9udW1iZXIsID9udW1iZXJdO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBPcHRpb25zID0ge1xuICBvZmZzZXQ6IE9mZnNldCxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShcbiAgcGxhY2VtZW50OiBQbGFjZW1lbnQsXG4gIHJlY3RzOiB7IHBvcHBlcjogUmVjdCwgcmVmZXJlbmNlOiBSZWN0IH0sXG4gIG9mZnNldDogT2Zmc2V0XG4pOiBPZmZzZXRzIHtcbiAgY29uc3QgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaW52ZXJ0RGlzdGFuY2UgPSBbbGVmdCwgdG9wXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyAtMSA6IDE7XG5cbiAgbGV0IFtza2lkZGluZywgZGlzdGFuY2VdID1cbiAgICB0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nXG4gICAgICA/IG9mZnNldCh7XG4gICAgICAgICAgLi4ucmVjdHMsXG4gICAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICB9KVxuICAgICAgOiBvZmZzZXQ7XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuXG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMFxuICAgID8geyB4OiBkaXN0YW5jZSwgeTogc2tpZGRpbmcgfVxuICAgIDogeyB4OiBza2lkZGluZywgeTogZGlzdGFuY2UgfTtcbn1cblxuZnVuY3Rpb24gb2Zmc2V0KHsgc3RhdGUsIG9wdGlvbnMsIG5hbWUgfTogTW9kaWZpZXJBcmd1bWVudHM8T3B0aW9ucz4pIHtcbiAgY29uc3QgeyBvZmZzZXQgPSBbMCwgMF0gfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKChhY2MsIHBsYWNlbWVudCkgPT4ge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgY29uc3QgeyB4LCB5IH0gPSBkYXRhW3N0YXRlLnBsYWNlbWVudF07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB0eXBlIE9mZnNldE1vZGlmaWVyID0gTW9kaWZpZXI8J29mZnNldCcsIE9wdGlvbnM+O1xuZXhwb3J0IGRlZmF1bHQgKHtcbiAgbmFtZTogJ29mZnNldCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgZm46IG9mZnNldCxcbn06IE9mZnNldE1vZGlmaWVyKTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7IFBsYWNlbWVudCB9IGZyb20gJy4uL2VudW1zJztcblxuY29uc3QgaGFzaCA9IHsgbGVmdDogJ3JpZ2h0JywgcmlnaHQ6ICdsZWZ0JywgYm90dG9tOiAndG9wJywgdG9wOiAnYm90dG9tJyB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQ6IFBsYWNlbWVudCk6IFBsYWNlbWVudCB7XG4gIHJldHVybiAocGxhY2VtZW50LnJlcGxhY2UoXG4gICAgL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLFxuICAgIG1hdGNoZWQgPT4gaGFzaFttYXRjaGVkXVxuICApOiBhbnkpO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgUGxhY2VtZW50IH0gZnJvbSAnLi4vZW51bXMnO1xuXG5jb25zdCBoYXNoID0geyBzdGFydDogJ2VuZCcsIGVuZDogJ3N0YXJ0JyB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChcbiAgcGxhY2VtZW50OiBQbGFjZW1lbnRcbik6IFBsYWNlbWVudCB7XG4gIHJldHVybiAocGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBtYXRjaGVkID0+IGhhc2hbbWF0Y2hlZF0pOiBhbnkpO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgU3RhdGUsIFBhZGRpbmcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBsYWNlbWVudCxcbiAgQ29tcHV0ZWRQbGFjZW1lbnQsXG4gIEJvdW5kYXJ5LFxuICBSb290Qm91bmRhcnksXG59IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSAnLi9nZXRWYXJpYXRpb24nO1xuaW1wb3J0IHtcbiAgdmFyaWF0aW9uUGxhY2VtZW50cyxcbiAgYmFzZVBsYWNlbWVudHMsXG4gIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyxcbn0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gJy4vZGV0ZWN0T3ZlcmZsb3cnO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSAnLi9nZXRCYXNlUGxhY2VtZW50JztcblxudHlwZSBPcHRpb25zID0ge1xuICBwbGFjZW1lbnQ6IFBsYWNlbWVudCxcbiAgcGFkZGluZzogUGFkZGluZyxcbiAgYm91bmRhcnk6IEJvdW5kYXJ5LFxuICByb290Qm91bmRhcnk6IFJvb3RCb3VuZGFyeSxcbiAgZmxpcFZhcmlhdGlvbnM6IGJvb2xlYW4sXG4gIGFsbG93ZWRBdXRvUGxhY2VtZW50cz86IEFycmF5PFBsYWNlbWVudD4sXG59O1xuXG50eXBlIE92ZXJmbG93c01hcCA9IHsgW0NvbXB1dGVkUGxhY2VtZW50XTogbnVtYmVyIH07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KFxuICBzdGF0ZTogJFNoYXBlPFN0YXRlPixcbiAgb3B0aW9uczogT3B0aW9ucyA9IHt9XG4pOiBBcnJheTxDb21wdXRlZFBsYWNlbWVudD4ge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBwYWRkaW5nLFxuICAgIGZsaXBWYXJpYXRpb25zLFxuICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IGFsbFBsYWNlbWVudHMsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpO1xuXG4gIGNvbnN0IHBsYWNlbWVudHMgPSB2YXJpYXRpb25cbiAgICA/IGZsaXBWYXJpYXRpb25zXG4gICAgICA/IHZhcmlhdGlvblBsYWNlbWVudHNcbiAgICAgIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoXG4gICAgICAgICAgKHBsYWNlbWVudCkgPT4gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHZhcmlhdGlvblxuICAgICAgICApXG4gICAgOiBiYXNlUGxhY2VtZW50cztcblxuICBsZXQgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihcbiAgICAocGxhY2VtZW50KSA9PiBhbGxvd2VkQXV0b1BsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpID49IDBcbiAgKTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFtcbiAgICAgICAgICAnUG9wcGVyOiBUaGUgYGFsbG93ZWRBdXRvUGxhY2VtZW50c2Agb3B0aW9uIGRpZCBub3QgYWxsb3cgYW55JyxcbiAgICAgICAgICAncGxhY2VtZW50cy4gRW5zdXJlIHRoZSBgcGxhY2VtZW50YCBvcHRpb24gbWF0Y2hlcyB0aGUgdmFyaWF0aW9uJyxcbiAgICAgICAgICAnb2YgdGhlIGFsbG93ZWQgcGxhY2VtZW50cy4nLFxuICAgICAgICAgICdGb3IgZXhhbXBsZSwgXCJhdXRvXCIgY2Fubm90IGJlIHVzZWQgdG8gYWxsb3cgXCJib3R0b20tc3RhcnRcIi4nLFxuICAgICAgICAgICdVc2UgXCJhdXRvLXN0YXJ0XCIgaW5zdGVhZC4nLFxuICAgICAgICBdLmpvaW4oJyAnKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuICBjb25zdCBvdmVyZmxvd3M6IE92ZXJmbG93c01hcCA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZSgoYWNjLCBwbGFjZW1lbnQpID0+IHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcsXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KChhLCBiKSA9PiBvdmVyZmxvd3NbYV0gLSBvdmVyZmxvd3NbYl0pO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgUGxhY2VtZW50LCBCb3VuZGFyeSwgUm9vdEJvdW5kYXJ5IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBNb2RpZmllckFyZ3VtZW50cywgTW9kaWZpZXIsIFBhZGRpbmcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSAnLi4vdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQnO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSAnLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudCc7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQgZnJvbSAnLi4vdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQnO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gJy4uL3V0aWxzL2RldGVjdE92ZXJmbG93JztcbmltcG9ydCBjb21wdXRlQXV0b1BsYWNlbWVudCBmcm9tICcuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudCc7XG5pbXBvcnQgeyBib3R0b20sIHRvcCwgc3RhcnQsIHJpZ2h0LCBsZWZ0LCBhdXRvIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tICcuLi91dGlscy9nZXRWYXJpYXRpb24nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBPcHRpb25zID0ge1xuICBtYWluQXhpczogYm9vbGVhbixcbiAgYWx0QXhpczogYm9vbGVhbixcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiBBcnJheTxQbGFjZW1lbnQ+LFxuICBwYWRkaW5nOiBQYWRkaW5nLFxuICBib3VuZGFyeTogQm91bmRhcnksXG4gIHJvb3RCb3VuZGFyeTogUm9vdEJvdW5kYXJ5LFxuICBhbHRCb3VuZGFyeTogYm9vbGVhbixcbiAgZmxpcFZhcmlhdGlvbnM6IGJvb2xlYW4sXG4gIGFsbG93ZWRBdXRvUGxhY2VtZW50czogQXJyYXk8UGxhY2VtZW50Pixcbn07XG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHBsYWNlbWVudDogUGxhY2VtZW50KTogQXJyYXk8UGxhY2VtZW50PiB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgcmV0dXJuIFtcbiAgICBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpLFxuICAgIG9wcG9zaXRlUGxhY2VtZW50LFxuICAgIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gZmxpcCh7IHN0YXRlLCBvcHRpb25zLCBuYW1lIH06IE1vZGlmaWVyQXJndW1lbnRzPE9wdGlvbnM+KSB7XG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICBhbHRBeGlzOiBjaGVja0FsdEF4aXMgPSB0cnVlLFxuICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgIHBhZGRpbmcsXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIGFsdEJvdW5kYXJ5LFxuICAgIGZsaXBWYXJpYXRpb25zID0gdHJ1ZSxcbiAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICBjb25zdCBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpO1xuICBjb25zdCBpc0Jhc2VQbGFjZW1lbnQgPSBiYXNlUGxhY2VtZW50ID09PSBwcmVmZXJyZWRQbGFjZW1lbnQ7XG5cbiAgY29uc3QgZmFsbGJhY2tQbGFjZW1lbnRzID1cbiAgICBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHxcbiAgICAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9uc1xuICAgICAgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KV1cbiAgICAgIDogZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocHJlZmVycmVkUGxhY2VtZW50KSk7XG5cbiAgY29uc3QgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnQsIC4uLmZhbGxiYWNrUGxhY2VtZW50c10ucmVkdWNlKFxuICAgIChhY2MsIHBsYWNlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGFjYy5jb25jYXQoXG4gICAgICAgIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0b1xuICAgICAgICAgID8gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICAgICAgICBib3VuZGFyeSxcbiAgICAgICAgICAgICAgcm9vdEJvdW5kYXJ5LFxuICAgICAgICAgICAgICBwYWRkaW5nLFxuICAgICAgICAgICAgICBmbGlwVmFyaWF0aW9ucyxcbiAgICAgICAgICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHBsYWNlbWVudFxuICAgICAgKTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgY29uc3QgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcblxuICBjb25zdCBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIGxldCBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICBsZXQgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2ldO1xuICAgIGNvbnN0IGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gICAgY29uc3QgaXNTdGFydFZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSBzdGFydDtcbiAgICBjb25zdCBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDA7XG4gICAgY29uc3QgbGVuID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICAgIGNvbnN0IG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nLFxuICAgIH0pO1xuXG4gICAgbGV0IG1haW5WYXJpYXRpb25TaWRlOiBhbnkgPSBpc1ZlcnRpY2FsXG4gICAgICA/IGlzU3RhcnRWYXJpYXRpb25cbiAgICAgICAgPyByaWdodFxuICAgICAgICA6IGxlZnRcbiAgICAgIDogaXNTdGFydFZhcmlhdGlvblxuICAgICAgPyBib3R0b21cbiAgICAgIDogdG9wO1xuXG4gICAgaWYgKHJlZmVyZW5jZVJlY3RbbGVuXSA+IHBvcHBlclJlY3RbbGVuXSkge1xuICAgICAgbWFpblZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgfVxuXG4gICAgY29uc3QgYWx0VmFyaWF0aW9uU2lkZTogYW55ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuXG4gICAgY29uc3QgY2hlY2tzID0gW107XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2goXG4gICAgICAgIG92ZXJmbG93W21haW5WYXJpYXRpb25TaWRlXSA8PSAwLFxuICAgICAgICBvdmVyZmxvd1thbHRWYXJpYXRpb25TaWRlXSA8PSAwXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoKGNoZWNrKSA9PiBjaGVjaykpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgY29uc3QgbnVtYmVyT2ZDaGVja3MgPSBmbGlwVmFyaWF0aW9ucyA/IDMgOiAxO1xuXG4gICAgZm9yIChsZXQgaSA9IG51bWJlck9mQ2hlY2tzOyBpID4gMDsgaS0tKSB7XG4gICAgICBjb25zdCBmaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50cy5maW5kKChwbGFjZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2tzID0gY2hlY2tzTWFwLmdldChwbGFjZW1lbnQpO1xuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrcy5zbGljZSgwLCBpKS5ldmVyeSgoY2hlY2spID0+IGNoZWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IGZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5wbGFjZW1lbnQgIT09IGZpcnN0Rml0dGluZ1BsYWNlbWVudCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXAgPSB0cnVlO1xuICAgIHN0YXRlLnBsYWNlbWVudCA9IGZpcnN0Rml0dGluZ1BsYWNlbWVudDtcbiAgICBzdGF0ZS5yZXNldCA9IHRydWU7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHR5cGUgRmxpcE1vZGlmaWVyID0gTW9kaWZpZXI8J2ZsaXAnLCBPcHRpb25zPjtcbmV4cG9ydCBkZWZhdWx0ICh7XG4gIG5hbWU6ICdmbGlwJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGZsaXAsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J10sXG4gIGRhdGE6IHsgX3NraXA6IGZhbHNlIH0sXG59OiBGbGlwTW9kaWZpZXIpO1xuIiwiLy8gQGZsb3dcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzOiAneCcgfCAneScpOiAneCcgfCAneScge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gJy4vbWF0aCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdpdGhpbihcbiAgbWluOiBudW1iZXIsXG4gIHZhbHVlOiBudW1iZXIsXG4gIG1heDogbnVtYmVyXG4pOiBudW1iZXIge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFBsYWNlbWVudCwgQm91bmRhcnksIFJvb3RCb3VuZGFyeSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUmVjdCwgTW9kaWZpZXJBcmd1bWVudHMsIE1vZGlmaWVyLCBQYWRkaW5nIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSAnLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudCc7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gJy4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudCc7XG5pbXBvcnQgZ2V0QWx0QXhpcyBmcm9tICcuLi91dGlscy9nZXRBbHRBeGlzJztcbmltcG9ydCB3aXRoaW4gZnJvbSAnLi4vdXRpbHMvd2l0aGluJztcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gJy4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0JztcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSAnLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudCc7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSAnLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cnO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tICcuLi91dGlscy9nZXRWYXJpYXRpb24nO1xuaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tICcuLi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QnO1xuaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSAnLi4vdXRpbHMvbWF0aCc7XG5cbnR5cGUgVGV0aGVyT2Zmc2V0ID1cbiAgfCAoKHtcbiAgICAgIHBvcHBlcjogUmVjdCxcbiAgICAgIHJlZmVyZW5jZTogUmVjdCxcbiAgICAgIHBsYWNlbWVudDogUGxhY2VtZW50LFxuICAgIH0pID0+IG51bWJlcilcbiAgfCBudW1iZXI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcbmV4cG9ydCB0eXBlIE9wdGlvbnMgPSB7XG4gIC8qIFByZXZlbnRzIGJvdW5kYXJpZXMgb3ZlcmZsb3cgb24gdGhlIG1haW4gYXhpcyAqL1xuICBtYWluQXhpczogYm9vbGVhbixcbiAgLyogUHJldmVudHMgYm91bmRhcmllcyBvdmVyZmxvdyBvbiB0aGUgYWx0ZXJuYXRlIGF4aXMgKi9cbiAgYWx0QXhpczogYm9vbGVhbixcbiAgLyogVGhlIGFyZWEgdG8gY2hlY2sgdGhlIHBvcHBlciBpcyBvdmVyZmxvd2luZyBpbiAqL1xuICBib3VuZGFyeTogQm91bmRhcnksXG4gIC8qIElmIHRoZSBwb3BwZXIgaXMgbm90IG92ZXJmbG93aW5nIHRoZSBtYWluIGFyZWEsIGZhbGxiYWNrIHRvIHRoaXMgb25lICovXG4gIHJvb3RCb3VuZGFyeTogUm9vdEJvdW5kYXJ5LFxuICAvKiBVc2UgdGhlIHJlZmVyZW5jZSdzIFwiY2xpcHBpbmdQYXJlbnRzXCIgYm91bmRhcnkgY29udGV4dCAqL1xuICBhbHRCb3VuZGFyeTogYm9vbGVhbixcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgcG9wcGVyIHRvIG92ZXJmbG93IGZyb20gaXRzIGJvdW5kYXJpZXMgdG8ga2VlcCBpdCBuZWFyIGl0c1xuICAgKiByZWZlcmVuY2UgZWxlbWVudFxuICAgKi9cbiAgdGV0aGVyOiBib29sZWFuLFxuICAvKiBPZmZzZXRzIHdoZW4gdGhlIGB0ZXRoZXJgIG9wdGlvbiBzaG91bGQgYWN0aXZhdGUgKi9cbiAgdGV0aGVyT2Zmc2V0OiBUZXRoZXJPZmZzZXQsXG4gIC8qIFNldHMgYSBwYWRkaW5nIHRvIHRoZSBwcm92aWRlZCBib3VuZGFyeSAqL1xuICBwYWRkaW5nOiBQYWRkaW5nLFxufTtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KHsgc3RhdGUsIG9wdGlvbnMsIG5hbWUgfTogTW9kaWZpZXJBcmd1bWVudHM8T3B0aW9ucz4pIHtcbiAgY29uc3Qge1xuICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICBhbHRBeGlzOiBjaGVja0FsdEF4aXMgPSBmYWxzZSxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgYWx0Qm91bmRhcnksXG4gICAgcGFkZGluZyxcbiAgICB0ZXRoZXIgPSB0cnVlLFxuICAgIHRldGhlck9mZnNldCA9IDAsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeSxcbiAgfSk7XG4gIGNvbnN0IGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIGNvbnN0IHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpO1xuICBjb25zdCBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICBjb25zdCBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgY29uc3QgYWx0QXhpcyA9IGdldEFsdEF4aXMobWFpbkF4aXMpO1xuICBjb25zdCBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICBjb25zdCByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICBjb25zdCBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICBjb25zdCB0ZXRoZXJPZmZzZXRWYWx1ZSA9XG4gICAgdHlwZW9mIHRldGhlck9mZnNldCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyB0ZXRoZXJPZmZzZXQoe1xuICAgICAgICAgIC4uLnN0YXRlLnJlY3RzLFxuICAgICAgICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50LFxuICAgICAgICB9KVxuICAgICAgOiB0ZXRoZXJPZmZzZXQ7XG5cbiAgY29uc3QgZGF0YSA9IHsgeDogMCwgeTogMCB9O1xuXG4gIGlmICghcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjaGVja01haW5BeGlzIHx8IGNoZWNrQWx0QXhpcykge1xuICAgIGNvbnN0IG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgY29uc3QgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIGNvbnN0IG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuXG4gICAgY29uc3QgbWluID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgY29uc3QgbWF4ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gLSBvdmVyZmxvd1thbHRTaWRlXTtcblxuICAgIGNvbnN0IGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuXG4gICAgY29uc3QgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICBjb25zdCBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07XG5cbiAgICAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcbiAgICBjb25zdCBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICBjb25zdCBhcnJvd1JlY3QgPVxuICAgICAgdGV0aGVyICYmIGFycm93RWxlbWVudFxuICAgICAgICA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KVxuICAgICAgICA6IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IGFycm93UGFkZGluZ09iamVjdCA9IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXVxuICAgICAgPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZ1xuICAgICAgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICBjb25zdCBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIGNvbnN0IGFycm93UGFkZGluZ01heCA9IGFycm93UGFkZGluZ09iamVjdFthbHRTaWRlXTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcbiAgICBjb25zdCBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcblxuICAgIGNvbnN0IG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudFxuICAgICAgPyByZWZlcmVuY2VSZWN0W2xlbl0gLyAyIC1cbiAgICAgICAgYWRkaXRpdmUgLVxuICAgICAgICBhcnJvd0xlbiAtXG4gICAgICAgIGFycm93UGFkZGluZ01pbiAtXG4gICAgICAgIHRldGhlck9mZnNldFZhbHVlXG4gICAgICA6IG1pbkxlbiAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gdGV0aGVyT2Zmc2V0VmFsdWU7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50XG4gICAgICA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICtcbiAgICAgICAgYWRkaXRpdmUgK1xuICAgICAgICBhcnJvd0xlbiArXG4gICAgICAgIGFycm93UGFkZGluZ01heCArXG4gICAgICAgIHRldGhlck9mZnNldFZhbHVlXG4gICAgICA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgdGV0aGVyT2Zmc2V0VmFsdWU7XG5cbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9XG4gICAgICBzdGF0ZS5lbGVtZW50cy5hcnJvdyAmJiBnZXRPZmZzZXRQYXJlbnQoc3RhdGUuZWxlbWVudHMuYXJyb3cpO1xuICAgIGNvbnN0IGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50XG4gICAgICA/IG1haW5BeGlzID09PSAneSdcbiAgICAgICAgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRUb3AgfHwgMFxuICAgICAgICA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudExlZnQgfHwgMFxuICAgICAgOiAwO1xuXG4gICAgY29uc3Qgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0XG4gICAgICA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF1bbWFpbkF4aXNdXG4gICAgICA6IDA7XG5cbiAgICBjb25zdCB0ZXRoZXJNaW4gPVxuICAgICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gKyBtaW5PZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlIC0gY2xpZW50T2Zmc2V0O1xuICAgIGNvbnN0IHRldGhlck1heCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdICsgbWF4T2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjb25zdCBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4oXG4gICAgICAgIHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLFxuICAgICAgICBvZmZzZXQsXG4gICAgICAgIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4XG4gICAgICApO1xuXG4gICAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICAgIGRhdGFbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0IC0gb2Zmc2V0O1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIGNvbnN0IG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG4gICAgICBjb25zdCBhbHRTaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1thbHRBeGlzXTtcblxuICAgICAgY29uc3QgbWluID0gb2Zmc2V0ICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgICAgY29uc3QgbWF4ID0gb2Zmc2V0IC0gb3ZlcmZsb3dbYWx0U2lkZV07XG5cbiAgICAgIGNvbnN0IHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbihcbiAgICAgICAgdGV0aGVyID8gbWF0aE1pbihtaW4sIHRldGhlck1pbikgOiBtaW4sXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgdGV0aGVyID8gbWF0aE1heChtYXgsIHRldGhlck1heCkgOiBtYXhcbiAgICAgICk7XG5cbiAgICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgICBkYXRhW2FsdEF4aXNdID0gcHJldmVudGVkT2Zmc2V0IC0gb2Zmc2V0O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBQcmV2ZW50T3ZlcmZsb3dNb2RpZmllciA9IE1vZGlmaWVyPCdwcmV2ZW50T3ZlcmZsb3cnLCBPcHRpb25zPjtcbmV4cG9ydCBkZWZhdWx0ICh7XG4gIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogcHJldmVudE92ZXJmbG93LFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxufTogUHJldmVudE92ZXJmbG93TW9kaWZpZXIpO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHsgTW9kaWZpZXIsIE1vZGlmaWVyQXJndW1lbnRzLCBQYWRkaW5nLCBSZWN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBQbGFjZW1lbnQgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tICcuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50JztcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gJy4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0JztcbmltcG9ydCBjb250YWlucyBmcm9tICcuLi9kb20tdXRpbHMvY29udGFpbnMnO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tICcuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50JztcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSAnLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50JztcbmltcG9ydCB3aXRoaW4gZnJvbSAnLi4vdXRpbHMvd2l0aGluJztcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSAnLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0JztcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSAnLi4vdXRpbHMvZXhwYW5kVG9IYXNoTWFwJztcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSAnLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBPcHRpb25zID0ge1xuICBlbGVtZW50OiBIVE1MRWxlbWVudCB8IHN0cmluZyB8IG51bGwsXG4gIHBhZGRpbmc6XG4gICAgfCBQYWRkaW5nXG4gICAgfCAoKHt8XG4gICAgICAgIHBvcHBlcjogUmVjdCxcbiAgICAgICAgcmVmZXJlbmNlOiBSZWN0LFxuICAgICAgICBwbGFjZW1lbnQ6IFBsYWNlbWVudCxcbiAgICAgIHx9KSA9PiBQYWRkaW5nKSxcbn07XG5cbmNvbnN0IHRvUGFkZGluZ09iamVjdCA9IChwYWRkaW5nLCBzdGF0ZSkgPT4ge1xuICBwYWRkaW5nID1cbiAgICB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwYWRkaW5nKHsgLi4uc3RhdGUucmVjdHMsIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50IH0pXG4gICAgICA6IHBhZGRpbmc7XG5cbiAgcmV0dXJuIG1lcmdlUGFkZGluZ09iamVjdChcbiAgICB0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcidcbiAgICAgID8gcGFkZGluZ1xuICAgICAgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpXG4gICk7XG59O1xuXG5mdW5jdGlvbiBhcnJvdyh7IHN0YXRlLCBuYW1lLCBvcHRpb25zIH06IE1vZGlmaWVyQXJndW1lbnRzPE9wdGlvbnM+KSB7XG4gIGNvbnN0IGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICBjb25zdCBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICBjb25zdCBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICBjb25zdCBheGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDA7XG4gIGNvbnN0IGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gdG9QYWRkaW5nT2JqZWN0KG9wdGlvbnMucGFkZGluZywgc3RhdGUpO1xuICBjb25zdCBhcnJvd1JlY3QgPSBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCk7XG4gIGNvbnN0IG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICBjb25zdCBtYXhQcm9wID0gYXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgY29uc3QgZW5kRGlmZiA9XG4gICAgc3RhdGUucmVjdHMucmVmZXJlbmNlW2xlbl0gK1xuICAgIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXSAtXG4gICAgcG9wcGVyT2Zmc2V0c1theGlzXSAtXG4gICAgc3RhdGUucmVjdHMucG9wcGVyW2xlbl07XG4gIGNvbnN0IHN0YXJ0RGlmZiA9IHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc107XG5cbiAgY29uc3QgYXJyb3dPZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoYXJyb3dFbGVtZW50KTtcbiAgY29uc3QgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50XG4gICAgPyBheGlzID09PSAneSdcbiAgICAgID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0IHx8IDBcbiAgICAgIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50V2lkdGggfHwgMFxuICAgIDogMDtcblxuICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBvcHBlciBpZiB0aGUgY2VudGVyIHBvaW50IGlzXG4gIC8vIG91dHNpZGUgb2YgdGhlIHBvcHBlciBib3VuZHNcbiAgY29uc3QgbWluID0gcGFkZGluZ09iamVjdFttaW5Qcm9wXTtcbiAgY29uc3QgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgY29uc3QgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd1JlY3RbbGVuXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgY29uc3Qgb2Zmc2V0ID0gd2l0aGluKG1pbiwgY2VudGVyLCBtYXgpO1xuXG4gIC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cbiAgY29uc3QgYXhpc1Byb3A6IHN0cmluZyA9IGF4aXM7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSB7XG4gICAgW2F4aXNQcm9wXTogb2Zmc2V0LFxuICAgIGNlbnRlck9mZnNldDogb2Zmc2V0IC0gY2VudGVyLFxuICB9O1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoeyBzdGF0ZSwgb3B0aW9ucyB9OiBNb2RpZmllckFyZ3VtZW50czxPcHRpb25zPikge1xuICBsZXQgeyBlbGVtZW50OiBhcnJvd0VsZW1lbnQgPSAnW2RhdGEtcG9wcGVyLWFycm93XScgfSA9IG9wdGlvbnM7XG5cbiAgaWYgKGFycm93RWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ1NTIHNlbGVjdG9yXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGFycm93RWxlbWVudCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFtcbiAgICAgICAgICAnUG9wcGVyOiBcImFycm93XCIgZWxlbWVudCBtdXN0IGJlIGFuIEhUTUxFbGVtZW50IChub3QgYW4gU1ZHRWxlbWVudCkuJyxcbiAgICAgICAgICAnVG8gdXNlIGFuIFNWRyBhcnJvdywgd3JhcCBpdCBpbiBhbiBIVE1MRWxlbWVudCB0aGF0IHdpbGwgYmUgdXNlZCBhcycsXG4gICAgICAgICAgJ3RoZSBhcnJvdy4nLFxuICAgICAgICBdLmpvaW4oJyAnKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbnRhaW5zKHN0YXRlLmVsZW1lbnRzLnBvcHBlciwgYXJyb3dFbGVtZW50KSkge1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBbXG4gICAgICAgICAgJ1BvcHBlcjogXCJhcnJvd1wiIG1vZGlmaWVyXFwncyBgZWxlbWVudGAgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBwb3BwZXInLFxuICAgICAgICAgICdlbGVtZW50LicsXG4gICAgICAgIF0uam9pbignICcpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgdHlwZSBBcnJvd01vZGlmaWVyID0gTW9kaWZpZXI8J2Fycm93JywgT3B0aW9ucz47XG5leHBvcnQgZGVmYXVsdCAoe1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxufTogQXJyb3dNb2RpZmllcik7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUge1xuICBNb2RpZmllckFyZ3VtZW50cyxcbiAgTW9kaWZpZXIsXG4gIFJlY3QsXG4gIFNpZGVPYmplY3QsXG4gIE9mZnNldHMsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tICcuLi91dGlscy9kZXRlY3RPdmVyZmxvdyc7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKFxuICBvdmVyZmxvdzogU2lkZU9iamVjdCxcbiAgcmVjdDogUmVjdCxcbiAgcHJldmVudGVkT2Zmc2V0czogT2Zmc2V0cyA9IHsgeDogMCwgeTogMCB9XG4pOiBTaWRlT2JqZWN0IHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93OiBTaWRlT2JqZWN0KTogYm9vbGVhbiB7XG4gIHJldHVybiBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XS5zb21lKChzaWRlKSA9PiBvdmVyZmxvd1tzaWRlXSA+PSAwKTtcbn1cblxuZnVuY3Rpb24gaGlkZSh7IHN0YXRlLCBuYW1lIH06IE1vZGlmaWVyQXJndW1lbnRzPHt8fH0+KSB7XG4gIGNvbnN0IHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIGNvbnN0IHByZXZlbnRlZE9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdztcblxuICBjb25zdCByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnLFxuICB9KTtcbiAgY29uc3QgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlLFxuICB9KTtcblxuICBjb25zdCByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhcbiAgICByZWZlcmVuY2VPdmVyZmxvdyxcbiAgICByZWZlcmVuY2VSZWN0XG4gICk7XG4gIGNvbnN0IHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhcbiAgICBwb3BwZXJBbHRPdmVyZmxvdyxcbiAgICBwb3BwZXJSZWN0LFxuICAgIHByZXZlbnRlZE9mZnNldHNcbiAgKTtcblxuICBjb25zdCBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICBjb25zdCBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSB7XG4gICAgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgaGFzUG9wcGVyRXNjYXBlZCxcbiAgfTtcblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IHtcbiAgICAuLi5zdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlcixcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZCxcbiAgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHR5cGUgSGlkZU1vZGlmaWVyID0gTW9kaWZpZXI8J2hpZGUnLCB7fHx9PjtcbmV4cG9ydCBkZWZhdWx0ICh7XG4gIG5hbWU6ICdoaWRlJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXSxcbiAgZm46IGhpZGUsXG59OiBIaWRlTW9kaWZpZXIpO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tICcuL2NyZWF0ZVBvcHBlcic7XG5cbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tICcuL21vZGlmaWVycy9ldmVudExpc3RlbmVycyc7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tICcuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzJztcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gJy4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMnO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gJy4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzJztcblxuZXhwb3J0IHR5cGUgKiBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgZGVmYXVsdE1vZGlmaWVycyA9IFtcbiAgZXZlbnRMaXN0ZW5lcnMsXG4gIHBvcHBlck9mZnNldHMsXG4gIGNvbXB1dGVTdHlsZXMsXG4gIGFwcGx5U3R5bGVzLFxuXTtcblxuY29uc3QgY3JlYXRlUG9wcGVyID0gcG9wcGVyR2VuZXJhdG9yKHsgZGVmYXVsdE1vZGlmaWVycyB9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gJy4vY3JlYXRlUG9wcGVyJztcblxuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gJy4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzJztcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gJy4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMnO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSAnLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcyc7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSAnLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMnO1xuaW1wb3J0IG9mZnNldCBmcm9tICcuL21vZGlmaWVycy9vZmZzZXQnO1xuaW1wb3J0IGZsaXAgZnJvbSAnLi9tb2RpZmllcnMvZmxpcCc7XG5pbXBvcnQgcHJldmVudE92ZXJmbG93IGZyb20gJy4vbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdyc7XG5pbXBvcnQgYXJyb3cgZnJvbSAnLi9tb2RpZmllcnMvYXJyb3cnO1xuaW1wb3J0IGhpZGUgZnJvbSAnLi9tb2RpZmllcnMvaGlkZSc7XG5cbmV4cG9ydCB0eXBlICogZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGRlZmF1bHRNb2RpZmllcnMgPSBbXG4gIGV2ZW50TGlzdGVuZXJzLFxuICBwb3BwZXJPZmZzZXRzLFxuICBjb21wdXRlU3R5bGVzLFxuICBhcHBseVN0eWxlcyxcbiAgb2Zmc2V0LFxuICBmbGlwLFxuICBwcmV2ZW50T3ZlcmZsb3csXG4gIGFycm93LFxuICBoaWRlLFxuXTtcblxuY29uc3QgY3JlYXRlUG9wcGVyID0gcG9wcGVyR2VuZXJhdG9yKHsgZGVmYXVsdE1vZGlmaWVycyB9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gJy4vcG9wcGVyLWxpdGUnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuZXhwb3J0ICogZnJvbSAnLi9tb2RpZmllcnMnO1xuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiB1dGlsL2luZGV4LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTUFYX1VJRCA9IDEwMDAwMDBcbmNvbnN0IE1JTExJU0VDT05EU19NVUxUSVBMSUVSID0gMTAwMFxuY29uc3QgVFJBTlNJVElPTl9FTkQgPSAndHJhbnNpdGlvbmVuZCdcblxuLy8gU2hvdXRvdXQgQW5ndXNDcm9sbCAoaHR0cHM6Ly9nb28uZ2wvcHh3UUdwKVxuY29uc3QgdG9UeXBlID0gb2JqID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgJHtvYmp9YFxuICB9XG5cbiAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwob2JqKS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBQdWJsaWMgVXRpbCBBcGlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgZ2V0VUlEID0gcHJlZml4ID0+IHtcbiAgZG8ge1xuICAgIHByZWZpeCArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBNQVhfVUlEKVxuICB9IHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKVxuXG4gIHJldHVybiBwcmVmaXhcbn1cblxuY29uc3QgZ2V0U2VsZWN0b3IgPSBlbGVtZW50ID0+IHtcbiAgbGV0IHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdGFyZ2V0JylcblxuICBpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAnIycpIHtcbiAgICBsZXQgaHJlZkF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpXG5cbiAgICAvLyBUaGUgb25seSB2YWxpZCBjb250ZW50IHRoYXQgY291bGQgZG91YmxlIGFzIGEgc2VsZWN0b3IgYXJlIElEcyBvciBjbGFzc2VzLFxuICAgIC8vIHNvIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCBgI2Agb3IgYC5gLiBJZiBhIFwicmVhbFwiIFVSTCBpcyB1c2VkIGFzIHRoZSBzZWxlY3RvcixcbiAgICAvLyBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAgd2lsbCByaWdodGZ1bGx5IGNvbXBsYWluIGl0IGlzIGludmFsaWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMzIyNzNcbiAgICBpZiAoIWhyZWZBdHRyIHx8ICghaHJlZkF0dHIuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHIuc3RhcnRzV2l0aCgnLicpKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyBKdXN0IGluIGNhc2Ugc29tZSBDTVMgcHV0cyBvdXQgYSBmdWxsIFVSTCB3aXRoIHRoZSBhbmNob3IgYXBwZW5kZWRcbiAgICBpZiAoaHJlZkF0dHIuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHIuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICBocmVmQXR0ciA9IGAjJHtocmVmQXR0ci5zcGxpdCgnIycpWzFdfWBcbiAgICB9XG5cbiAgICBzZWxlY3RvciA9IGhyZWZBdHRyICYmIGhyZWZBdHRyICE9PSAnIycgPyBocmVmQXR0ci50cmltKCkgOiBudWxsXG4gIH1cblxuICByZXR1cm4gc2VsZWN0b3Jcbn1cblxuY29uc3QgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCA9IGVsZW1lbnQgPT4ge1xuICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKGVsZW1lbnQpXG5cbiAgaWYgKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCBnZXRFbGVtZW50RnJvbVNlbGVjdG9yID0gZWxlbWVudCA9PiB7XG4gIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudClcblxuICByZXR1cm4gc2VsZWN0b3IgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSA6IG51bGxcbn1cblxuY29uc3QgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIC8vIEdldCB0cmFuc2l0aW9uLWR1cmF0aW9uIG9mIHRoZSBlbGVtZW50XG4gIGxldCB7IHRyYW5zaXRpb25EdXJhdGlvbiwgdHJhbnNpdGlvbkRlbGF5IH0gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuXG4gIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKVxuICBjb25zdCBmbG9hdFRyYW5zaXRpb25EZWxheSA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSlcblxuICAvLyBSZXR1cm4gMCBpZiBlbGVtZW50IG9yIHRyYW5zaXRpb24gZHVyYXRpb24gaXMgbm90IGZvdW5kXG4gIGlmICghZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gJiYgIWZsb2F0VHJhbnNpdGlvbkRlbGF5KSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIC8vIElmIG11bHRpcGxlIGR1cmF0aW9ucyBhcmUgZGVmaW5lZCwgdGFrZSB0aGUgZmlyc3RcbiAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uLnNwbGl0KCcsJylbMF1cbiAgdHJhbnNpdGlvbkRlbGF5ID0gdHJhbnNpdGlvbkRlbGF5LnNwbGl0KCcsJylbMF1cblxuICByZXR1cm4gKE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbikgKyBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpKSAqIE1JTExJU0VDT05EU19NVUxUSVBMSUVSXG59XG5cbmNvbnN0IHRyaWdnZXJUcmFuc2l0aW9uRW5kID0gZWxlbWVudCA9PiB7XG4gIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoVFJBTlNJVElPTl9FTkQpKVxufVxuXG5jb25zdCBpc0VsZW1lbnQgPSBvYmogPT4ge1xuICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmouanF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgIG9iaiA9IG9ialswXVxuICB9XG5cbiAgcmV0dXJuIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09ICd1bmRlZmluZWQnXG59XG5cbmNvbnN0IGdldEVsZW1lbnQgPSBvYmogPT4ge1xuICBpZiAoaXNFbGVtZW50KG9iaikpIHsgLy8gaXQncyBhIGpRdWVyeSBvYmplY3Qgb3IgYSBub2RlIGVsZW1lbnRcbiAgICByZXR1cm4gb2JqLmpxdWVyeSA/IG9ialswXSA6IG9ialxuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnICYmIG9iai5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iob2JqKVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgdHlwZUNoZWNrQ29uZmlnID0gKGNvbXBvbmVudE5hbWUsIGNvbmZpZywgY29uZmlnVHlwZXMpID0+IHtcbiAgT2JqZWN0LmtleXMoY29uZmlnVHlwZXMpLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgIGNvbnN0IGV4cGVjdGVkVHlwZXMgPSBjb25maWdUeXBlc1twcm9wZXJ0eV1cbiAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1twcm9wZXJ0eV1cbiAgICBjb25zdCB2YWx1ZVR5cGUgPSB2YWx1ZSAmJiBpc0VsZW1lbnQodmFsdWUpID8gJ2VsZW1lbnQnIDogdG9UeXBlKHZhbHVlKVxuXG4gICAgaWYgKCFuZXcgUmVnRXhwKGV4cGVjdGVkVHlwZXMpLnRlc3QodmFsdWVUeXBlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYCR7Y29tcG9uZW50TmFtZS50b1VwcGVyQ2FzZSgpfTogT3B0aW9uIFwiJHtwcm9wZXJ0eX1cIiBwcm92aWRlZCB0eXBlIFwiJHt2YWx1ZVR5cGV9XCIgYnV0IGV4cGVjdGVkIHR5cGUgXCIke2V4cGVjdGVkVHlwZXN9XCIuYFxuICAgICAgKVxuICAgIH1cbiAgfSlcbn1cblxuY29uc3QgaXNWaXNpYmxlID0gZWxlbWVudCA9PiB7XG4gIGlmICghaXNFbGVtZW50KGVsZW1lbnQpIHx8IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJ3Zpc2liaWxpdHknKSA9PT0gJ3Zpc2libGUnXG59XG5cbmNvbnN0IGlzRGlzYWJsZWQgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZGlzYWJsZWQnKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAodHlwZW9mIGVsZW1lbnQuZGlzYWJsZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuZGlzYWJsZWRcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSAhPT0gJ2ZhbHNlJ1xufVxuXG5jb25zdCBmaW5kU2hhZG93Um9vdCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gQ2FuIGZpbmQgdGhlIHNoYWRvdyByb290IG90aGVyd2lzZSBpdCdsbCByZXR1cm4gdGhlIGRvY3VtZW50XG4gIGlmICh0eXBlb2YgZWxlbWVudC5nZXRSb290Tm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IHJvb3QgPSBlbGVtZW50LmdldFJvb3ROb2RlKClcbiAgICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogbnVsbFxuICB9XG5cbiAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgcmV0dXJuIGVsZW1lbnRcbiAgfVxuXG4gIC8vIHdoZW4gd2UgZG9uJ3QgZmluZCBhIHNoYWRvdyByb290XG4gIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiBmaW5kU2hhZG93Um9vdChlbGVtZW50LnBhcmVudE5vZGUpXG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG4vKipcbiAqIFRyaWNrIHRvIHJlc3RhcnQgYW4gZWxlbWVudCdzIGFuaW1hdGlvblxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4gdm9pZFxuICpcbiAqIEBzZWUgaHR0cHM6Ly93d3cuY2hhcmlzdGhlby5pby9ibG9nLzIwMjEvMDIvcmVzdGFydC1hLWNzcy1hbmltYXRpb24td2l0aC1qYXZhc2NyaXB0LyNyZXN0YXJ0aW5nLWEtY3NzLWFuaW1hdGlvblxuICovXG5jb25zdCByZWZsb3cgPSBlbGVtZW50ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICBlbGVtZW50Lm9mZnNldEhlaWdodFxufVxuXG5jb25zdCBnZXRqUXVlcnkgPSAoKSA9PiB7XG4gIGNvbnN0IHsgalF1ZXJ5IH0gPSB3aW5kb3dcblxuICBpZiAoalF1ZXJ5ICYmICFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS1icy1uby1qcXVlcnknKSkge1xuICAgIHJldHVybiBqUXVlcnlcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MgPSBbXVxuXG5jb25zdCBvbkRPTUNvbnRlbnRMb2FkZWQgPSBjYWxsYmFjayA9PiB7XG4gIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAvLyBhZGQgbGlzdGVuZXIgb24gdGhlIGZpcnN0IGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaXMgaW4gbG9hZGluZyBzdGF0ZVxuICAgIGlmICghRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgIERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MuZm9yRWFjaChjYWxsYmFjayA9PiBjYWxsYmFjaygpKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spXG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soKVxuICB9XG59XG5cbmNvbnN0IGlzUlRMID0gKCkgPT4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PT0gJ3J0bCdcblxuY29uc3QgZGVmaW5lSlF1ZXJ5UGx1Z2luID0gcGx1Z2luID0+IHtcbiAgb25ET01Db250ZW50TG9hZGVkKCgpID0+IHtcbiAgICBjb25zdCAkID0gZ2V0alF1ZXJ5KClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoJCkge1xuICAgICAgY29uc3QgbmFtZSA9IHBsdWdpbi5OQU1FXG4gICAgICBjb25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkLmZuW25hbWVdXG4gICAgICAkLmZuW25hbWVdID0gcGx1Z2luLmpRdWVyeUludGVyZmFjZVxuICAgICAgJC5mbltuYW1lXS5Db25zdHJ1Y3RvciA9IHBsdWdpblxuICAgICAgJC5mbltuYW1lXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAgICAgICAkLmZuW25hbWVdID0gSlFVRVJZX05PX0NPTkZMSUNUXG4gICAgICAgIHJldHVybiBwbHVnaW4ualF1ZXJ5SW50ZXJmYWNlXG4gICAgICB9XG4gICAgfVxuICB9KVxufVxuXG5jb25zdCBleGVjdXRlID0gY2FsbGJhY2sgPT4ge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2soKVxuICB9XG59XG5cbmNvbnN0IGV4ZWN1dGVBZnRlclRyYW5zaXRpb24gPSAoY2FsbGJhY2ssIHRyYW5zaXRpb25FbGVtZW50LCB3YWl0Rm9yVHJhbnNpdGlvbiA9IHRydWUpID0+IHtcbiAgaWYgKCF3YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBkdXJhdGlvblBhZGRpbmcgPSA1XG4gIGNvbnN0IGVtdWxhdGVkRHVyYXRpb24gPSBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0cmFuc2l0aW9uRWxlbWVudCkgKyBkdXJhdGlvblBhZGRpbmdcblxuICBsZXQgY2FsbGVkID0gZmFsc2VcblxuICBjb25zdCBoYW5kbGVyID0gKHsgdGFyZ2V0IH0pID0+IHtcbiAgICBpZiAodGFyZ2V0ICE9PSB0cmFuc2l0aW9uRWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIHRyYW5zaXRpb25FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpXG4gICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgfVxuXG4gIHRyYW5zaXRpb25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRWxlbWVudClcbiAgICB9XG4gIH0sIGVtdWxhdGVkRHVyYXRpb24pXG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwcmV2aW91cy9uZXh0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IGxpc3QgICAgVGhlIGxpc3Qgb2YgZWxlbWVudHNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50ICAgVGhlIGFjdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gc2hvdWxkR2V0TmV4dCAgIENob29zZSB0byBnZXQgbmV4dCBvciBwcmV2aW91cyBlbGVtZW50XG4gKiBAcGFyYW0gaXNDeWNsZUFsbG93ZWRcbiAqIEByZXR1cm4ge0VsZW1lbnR8ZWxlbX0gVGhlIHByb3BlciBlbGVtZW50XG4gKi9cbmNvbnN0IGdldE5leHRBY3RpdmVFbGVtZW50ID0gKGxpc3QsIGFjdGl2ZUVsZW1lbnQsIHNob3VsZEdldE5leHQsIGlzQ3ljbGVBbGxvd2VkKSA9PiB7XG4gIGxldCBpbmRleCA9IGxpc3QuaW5kZXhPZihhY3RpdmVFbGVtZW50KVxuXG4gIC8vIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaXN0IHJldHVybiBhbiBlbGVtZW50IGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIGFuZCBpZiBjeWNsZSBpcyBhbGxvd2VkXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gbGlzdFshc2hvdWxkR2V0TmV4dCAmJiBpc0N5Y2xlQWxsb3dlZCA/IGxpc3QubGVuZ3RoIC0gMSA6IDBdXG4gIH1cblxuICBjb25zdCBsaXN0TGVuZ3RoID0gbGlzdC5sZW5ndGhcblxuICBpbmRleCArPSBzaG91bGRHZXROZXh0ID8gMSA6IC0xXG5cbiAgaWYgKGlzQ3ljbGVBbGxvd2VkKSB7XG4gICAgaW5kZXggPSAoaW5kZXggKyBsaXN0TGVuZ3RoKSAlIGxpc3RMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBsaXN0W01hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBsaXN0TGVuZ3RoIC0gMSkpXVxufVxuXG5leHBvcnQge1xuICBnZXRFbGVtZW50LFxuICBnZXRVSUQsXG4gIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQsXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsXG4gIGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50LFxuICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCxcbiAgaXNFbGVtZW50LFxuICB0eXBlQ2hlY2tDb25maWcsXG4gIGlzVmlzaWJsZSxcbiAgaXNEaXNhYmxlZCxcbiAgZmluZFNoYWRvd1Jvb3QsXG4gIG5vb3AsXG4gIGdldE5leHRBY3RpdmVFbGVtZW50LFxuICByZWZsb3csXG4gIGdldGpRdWVyeSxcbiAgb25ET01Db250ZW50TG9hZGVkLFxuICBpc1JUTCxcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBleGVjdXRlLFxuICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uXG59XG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IGRvbS9ldmVudC1oYW5kbGVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHsgZ2V0alF1ZXJ5IH0gZnJvbSAnLi4vdXRpbC9pbmRleCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgbmFtZXNwYWNlUmVnZXggPSAvW14uXSooPz1cXC4uKilcXC58LiovXG5jb25zdCBzdHJpcE5hbWVSZWdleCA9IC9cXC4uKi9cbmNvbnN0IHN0cmlwVWlkUmVnZXggPSAvOjpcXGQrJC9cbmNvbnN0IGV2ZW50UmVnaXN0cnkgPSB7fSAvLyBFdmVudHMgc3RvcmFnZVxubGV0IHVpZEV2ZW50ID0gMVxuY29uc3QgY3VzdG9tRXZlbnRzID0ge1xuICBtb3VzZWVudGVyOiAnbW91c2VvdmVyJyxcbiAgbW91c2VsZWF2ZTogJ21vdXNlb3V0J1xufVxuY29uc3QgY3VzdG9tRXZlbnRzUmVnZXggPSAvXihtb3VzZWVudGVyfG1vdXNlbGVhdmUpL2lcbmNvbnN0IG5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoW1xuICAnY2xpY2snLFxuICAnZGJsY2xpY2snLFxuICAnbW91c2V1cCcsXG4gICdtb3VzZWRvd24nLFxuICAnY29udGV4dG1lbnUnLFxuICAnbW91c2V3aGVlbCcsXG4gICdET01Nb3VzZVNjcm9sbCcsXG4gICdtb3VzZW92ZXInLFxuICAnbW91c2VvdXQnLFxuICAnbW91c2Vtb3ZlJyxcbiAgJ3NlbGVjdHN0YXJ0JyxcbiAgJ3NlbGVjdGVuZCcsXG4gICdrZXlkb3duJyxcbiAgJ2tleXByZXNzJyxcbiAgJ2tleXVwJyxcbiAgJ29yaWVudGF0aW9uY2hhbmdlJyxcbiAgJ3RvdWNoc3RhcnQnLFxuICAndG91Y2htb3ZlJyxcbiAgJ3RvdWNoZW5kJyxcbiAgJ3RvdWNoY2FuY2VsJyxcbiAgJ3BvaW50ZXJkb3duJyxcbiAgJ3BvaW50ZXJtb3ZlJyxcbiAgJ3BvaW50ZXJ1cCcsXG4gICdwb2ludGVybGVhdmUnLFxuICAncG9pbnRlcmNhbmNlbCcsXG4gICdnZXN0dXJlc3RhcnQnLFxuICAnZ2VzdHVyZWNoYW5nZScsXG4gICdnZXN0dXJlZW5kJyxcbiAgJ2ZvY3VzJyxcbiAgJ2JsdXInLFxuICAnY2hhbmdlJyxcbiAgJ3Jlc2V0JyxcbiAgJ3NlbGVjdCcsXG4gICdzdWJtaXQnLFxuICAnZm9jdXNpbicsXG4gICdmb2N1c291dCcsXG4gICdsb2FkJyxcbiAgJ3VubG9hZCcsXG4gICdiZWZvcmV1bmxvYWQnLFxuICAncmVzaXplJyxcbiAgJ21vdmUnLFxuICAnRE9NQ29udGVudExvYWRlZCcsXG4gICdyZWFkeXN0YXRlY2hhbmdlJyxcbiAgJ2Vycm9yJyxcbiAgJ2Fib3J0JyxcbiAgJ3Njcm9sbCdcbl0pXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBQcml2YXRlIG1ldGhvZHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmZ1bmN0aW9uIGdldFVpZEV2ZW50KGVsZW1lbnQsIHVpZCkge1xuICByZXR1cm4gKHVpZCAmJiBgJHt1aWR9Ojoke3VpZEV2ZW50Kyt9YCkgfHwgZWxlbWVudC51aWRFdmVudCB8fCB1aWRFdmVudCsrXG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgdWlkID0gZ2V0VWlkRXZlbnQoZWxlbWVudClcblxuICBlbGVtZW50LnVpZEV2ZW50ID0gdWlkXG4gIGV2ZW50UmVnaXN0cnlbdWlkXSA9IGV2ZW50UmVnaXN0cnlbdWlkXSB8fCB7fVxuXG4gIHJldHVybiBldmVudFJlZ2lzdHJ5W3VpZF1cbn1cblxuZnVuY3Rpb24gYm9vdHN0cmFwSGFuZGxlcihlbGVtZW50LCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgIGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gZWxlbWVudFxuXG4gICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsIGV2ZW50LnR5cGUsIGZuKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5hcHBseShlbGVtZW50LCBbZXZlbnRdKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyKGVsZW1lbnQsIHNlbGVjdG9yLCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgIGNvbnN0IGRvbUVsZW1lbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKVxuXG4gICAgZm9yIChsZXQgeyB0YXJnZXQgfSA9IGV2ZW50OyB0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0aGlzOyB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZSkge1xuICAgICAgZm9yIChsZXQgaSA9IGRvbUVsZW1lbnRzLmxlbmd0aDsgaS0tOykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudHNbaV0gPT09IHRhcmdldCkge1xuICAgICAgICAgIGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGFyZ2V0XG5cbiAgICAgICAgICBpZiAoaGFuZGxlci5vbmVPZmYpIHtcbiAgICAgICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgc2VsZWN0b3IsIGZuKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0YXJnZXQsIFtldmVudF0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUbyBwbGVhc2UgRVNMaW50XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kSGFuZGxlcihldmVudHMsIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3RvciA9IG51bGwpIHtcbiAgY29uc3QgdWlkRXZlbnRMaXN0ID0gT2JqZWN0LmtleXMoZXZlbnRzKVxuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSB1aWRFdmVudExpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBldmVudCA9IGV2ZW50c1t1aWRFdmVudExpc3RbaV1dXG5cbiAgICBpZiAoZXZlbnQub3JpZ2luYWxIYW5kbGVyID09PSBoYW5kbGVyICYmIGV2ZW50LmRlbGVnYXRpb25TZWxlY3RvciA9PT0gZGVsZWdhdGlvblNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gZXZlbnRcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXJhbXMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25Gbikge1xuICBjb25zdCBkZWxlZ2F0aW9uID0gdHlwZW9mIGhhbmRsZXIgPT09ICdzdHJpbmcnXG4gIGNvbnN0IG9yaWdpbmFsSGFuZGxlciA9IGRlbGVnYXRpb24gPyBkZWxlZ2F0aW9uRm4gOiBoYW5kbGVyXG5cbiAgbGV0IHR5cGVFdmVudCA9IGdldFR5cGVFdmVudChvcmlnaW5hbFR5cGVFdmVudClcbiAgY29uc3QgaXNOYXRpdmUgPSBuYXRpdmVFdmVudHMuaGFzKHR5cGVFdmVudClcblxuICBpZiAoIWlzTmF0aXZlKSB7XG4gICAgdHlwZUV2ZW50ID0gb3JpZ2luYWxUeXBlRXZlbnRcbiAgfVxuXG4gIHJldHVybiBbZGVsZWdhdGlvbiwgb3JpZ2luYWxIYW5kbGVyLCB0eXBlRXZlbnRdXG59XG5cbmZ1bmN0aW9uIGFkZEhhbmRsZXIoZWxlbWVudCwgb3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25Gbiwgb25lT2ZmKSB7XG4gIGlmICh0eXBlb2Ygb3JpZ2luYWxUeXBlRXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoIWhhbmRsZXIpIHtcbiAgICBoYW5kbGVyID0gZGVsZWdhdGlvbkZuXG4gICAgZGVsZWdhdGlvbkZuID0gbnVsbFxuICB9XG5cbiAgLy8gaW4gY2FzZSBvZiBtb3VzZWVudGVyIG9yIG1vdXNlbGVhdmUgd3JhcCB0aGUgaGFuZGxlciB3aXRoaW4gYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBmb3IgaXRzIERPTSBwb3NpdGlvblxuICAvLyB0aGlzIHByZXZlbnRzIHRoZSBoYW5kbGVyIGZyb20gYmVpbmcgZGlzcGF0Y2hlZCB0aGUgc2FtZSB3YXkgYXMgbW91c2VvdmVyIG9yIG1vdXNlb3V0IGRvZXNcbiAgaWYgKGN1c3RvbUV2ZW50c1JlZ2V4LnRlc3Qob3JpZ2luYWxUeXBlRXZlbnQpKSB7XG4gICAgY29uc3Qgd3JhcEZuID0gZm4gPT4ge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgIT09IGV2ZW50LmRlbGVnYXRlVGFyZ2V0ICYmICFldmVudC5kZWxlZ2F0ZVRhcmdldC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkpIHtcbiAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWxlZ2F0aW9uRm4pIHtcbiAgICAgIGRlbGVnYXRpb25GbiA9IHdyYXBGbihkZWxlZ2F0aW9uRm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXIgPSB3cmFwRm4oaGFuZGxlcilcbiAgICB9XG4gIH1cblxuICBjb25zdCBbZGVsZWdhdGlvbiwgb3JpZ2luYWxIYW5kbGVyLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1zKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4pXG4gIGNvbnN0IGV2ZW50cyA9IGdldEV2ZW50KGVsZW1lbnQpXG4gIGNvbnN0IGhhbmRsZXJzID0gZXZlbnRzW3R5cGVFdmVudF0gfHwgKGV2ZW50c1t0eXBlRXZlbnRdID0ge30pXG4gIGNvbnN0IHByZXZpb3VzRm4gPSBmaW5kSGFuZGxlcihoYW5kbGVycywgb3JpZ2luYWxIYW5kbGVyLCBkZWxlZ2F0aW9uID8gaGFuZGxlciA6IG51bGwpXG5cbiAgaWYgKHByZXZpb3VzRm4pIHtcbiAgICBwcmV2aW91c0ZuLm9uZU9mZiA9IHByZXZpb3VzRm4ub25lT2ZmICYmIG9uZU9mZlxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB1aWQgPSBnZXRVaWRFdmVudChvcmlnaW5hbEhhbmRsZXIsIG9yaWdpbmFsVHlwZUV2ZW50LnJlcGxhY2UobmFtZXNwYWNlUmVnZXgsICcnKSlcbiAgY29uc3QgZm4gPSBkZWxlZ2F0aW9uID9cbiAgICBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4pIDpcbiAgICBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGhhbmRsZXIpXG5cbiAgZm4uZGVsZWdhdGlvblNlbGVjdG9yID0gZGVsZWdhdGlvbiA/IGhhbmRsZXIgOiBudWxsXG4gIGZuLm9yaWdpbmFsSGFuZGxlciA9IG9yaWdpbmFsSGFuZGxlclxuICBmbi5vbmVPZmYgPSBvbmVPZmZcbiAgZm4udWlkRXZlbnQgPSB1aWRcbiAgaGFuZGxlcnNbdWlkXSA9IGZuXG5cbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIGRlbGVnYXRpb24pXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3Rvcikge1xuICBjb25zdCBmbiA9IGZpbmRIYW5kbGVyKGV2ZW50c1t0eXBlRXZlbnRdLCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpXG5cbiAgaWYgKCFmbikge1xuICAgIHJldHVyblxuICB9XG5cbiAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIEJvb2xlYW4oZGVsZWdhdGlvblNlbGVjdG9yKSlcbiAgZGVsZXRlIGV2ZW50c1t0eXBlRXZlbnRdW2ZuLnVpZEV2ZW50XVxufVxuXG5mdW5jdGlvbiByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIG5hbWVzcGFjZSkge1xuICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9XG5cbiAgT2JqZWN0LmtleXMoc3RvcmVFbGVtZW50RXZlbnQpLmZvckVhY2goaGFuZGxlcktleSA9PiB7XG4gICAgaWYgKGhhbmRsZXJLZXkuaW5jbHVkZXMobmFtZXNwYWNlKSkge1xuICAgICAgY29uc3QgZXZlbnQgPSBzdG9yZUVsZW1lbnRFdmVudFtoYW5kbGVyS2V5XVxuXG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5vcmlnaW5hbEhhbmRsZXIsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3RvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldFR5cGVFdmVudChldmVudCkge1xuICAvLyBhbGxvdyB0byBnZXQgdGhlIG5hdGl2ZSBldmVudHMgZnJvbSBuYW1lc3BhY2VkIGV2ZW50cyAoJ2NsaWNrLmJzLmJ1dHRvbicgLS0+ICdjbGljaycpXG4gIGV2ZW50ID0gZXZlbnQucmVwbGFjZShzdHJpcE5hbWVSZWdleCwgJycpXG4gIHJldHVybiBjdXN0b21FdmVudHNbZXZlbnRdIHx8IGV2ZW50XG59XG5cbmNvbnN0IEV2ZW50SGFuZGxlciA9IHtcbiAgb24oZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25Gbikge1xuICAgIGFkZEhhbmRsZXIoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GbiwgZmFsc2UpXG4gIH0sXG5cbiAgb25lKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4sIHRydWUpXG4gIH0sXG5cbiAgb2ZmKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4pIHtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgW2RlbGVnYXRpb24sIG9yaWdpbmFsSGFuZGxlciwgdHlwZUV2ZW50XSA9IG5vcm1hbGl6ZVBhcmFtcyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZuKVxuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gdHlwZUV2ZW50ICE9PSBvcmlnaW5hbFR5cGVFdmVudFxuICAgIGNvbnN0IGV2ZW50cyA9IGdldEV2ZW50KGVsZW1lbnQpXG4gICAgY29uc3QgaXNOYW1lc3BhY2UgPSBvcmlnaW5hbFR5cGVFdmVudC5zdGFydHNXaXRoKCcuJylcblxuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxIYW5kbGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gU2ltcGxlc3QgY2FzZTogaGFuZGxlciBpcyBwYXNzZWQsIHJlbW92ZSB0aGF0IGxpc3RlbmVyIE9OTFkuXG4gICAgICBpZiAoIWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVFdmVudF0pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIG9yaWdpbmFsSGFuZGxlciwgZGVsZWdhdGlvbiA/IGhhbmRsZXIgOiBudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzTmFtZXNwYWNlKSB7XG4gICAgICBPYmplY3Qua2V5cyhldmVudHMpLmZvckVhY2goZWxlbWVudEV2ZW50ID0+IHtcbiAgICAgICAgcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgZWxlbWVudEV2ZW50LCBvcmlnaW5hbFR5cGVFdmVudC5zbGljZSgxKSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fVxuICAgIE9iamVjdC5rZXlzKHN0b3JlRWxlbWVudEV2ZW50KS5mb3JFYWNoKGtleUhhbmRsZXJzID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXJLZXkgPSBrZXlIYW5kbGVycy5yZXBsYWNlKHN0cmlwVWlkUmVnZXgsICcnKVxuXG4gICAgICBpZiAoIWluTmFtZXNwYWNlIHx8IG9yaWdpbmFsVHlwZUV2ZW50LmluY2x1ZGVzKGhhbmRsZXJLZXkpKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gc3RvcmVFbGVtZW50RXZlbnRba2V5SGFuZGxlcnNdXG5cbiAgICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQub3JpZ2luYWxIYW5kbGVyLCBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB0cmlnZ2VyKGVsZW1lbnQsIGV2ZW50LCBhcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpXG4gICAgY29uc3QgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KGV2ZW50KVxuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gZXZlbnQgIT09IHR5cGVFdmVudFxuICAgIGNvbnN0IGlzTmF0aXZlID0gbmF0aXZlRXZlbnRzLmhhcyh0eXBlRXZlbnQpXG5cbiAgICBsZXQgalF1ZXJ5RXZlbnRcbiAgICBsZXQgYnViYmxlcyA9IHRydWVcbiAgICBsZXQgbmF0aXZlRGlzcGF0Y2ggPSB0cnVlXG4gICAgbGV0IGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZVxuICAgIGxldCBldnQgPSBudWxsXG5cbiAgICBpZiAoaW5OYW1lc3BhY2UgJiYgJCkge1xuICAgICAgalF1ZXJ5RXZlbnQgPSAkLkV2ZW50KGV2ZW50LCBhcmdzKVxuXG4gICAgICAkKGVsZW1lbnQpLnRyaWdnZXIoalF1ZXJ5RXZlbnQpXG4gICAgICBidWJibGVzID0gIWpRdWVyeUV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgICAgIG5hdGl2ZURpc3BhdGNoID0gIWpRdWVyeUV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSBqUXVlcnlFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKVxuICAgIH1cblxuICAgIGlmIChpc05hdGl2ZSkge1xuICAgICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKVxuICAgICAgZXZ0LmluaXRFdmVudCh0eXBlRXZlbnQsIGJ1YmJsZXMsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGV2dCA9IG5ldyBDdXN0b21FdmVudChldmVudCwge1xuICAgICAgICBidWJibGVzLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIG1lcmdlIGN1c3RvbSBpbmZvcm1hdGlvbiBpbiBvdXIgZXZlbnRcbiAgICBpZiAodHlwZW9mIGFyZ3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBPYmplY3Qua2V5cyhhcmdzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldnQsIGtleSwge1xuICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdzW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKVxuICAgIH1cblxuICAgIGlmIChuYXRpdmVEaXNwYXRjaCkge1xuICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2dClcbiAgICB9XG5cbiAgICBpZiAoZXZ0LmRlZmF1bHRQcmV2ZW50ZWQgJiYgdHlwZW9mIGpRdWVyeUV2ZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgalF1ZXJ5RXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIH1cblxuICAgIHJldHVybiBldnRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFdmVudEhhbmRsZXJcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogZG9tL2RhdGEuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBlbGVtZW50TWFwID0gbmV3IE1hcCgpXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2V0KGVsZW1lbnQsIGtleSwgaW5zdGFuY2UpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICBlbGVtZW50TWFwLnNldChlbGVtZW50LCBuZXcgTWFwKCkpXG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KVxuXG4gICAgLy8gbWFrZSBpdCBjbGVhciB3ZSBvbmx5IHdhbnQgb25lIGluc3RhbmNlIHBlciBlbGVtZW50XG4gICAgLy8gY2FuIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBtdWx0aXBsZSBrZXkvaW5zdGFuY2VzIGFyZSBmaW5lIHRvIGJlIHVzZWRcbiAgICBpZiAoIWluc3RhbmNlTWFwLmhhcyhrZXkpICYmIGluc3RhbmNlTWFwLnNpemUgIT09IDApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKGBCb290c3RyYXAgZG9lc24ndCBhbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIHBlciBlbGVtZW50LiBCb3VuZCBpbnN0YW5jZTogJHtBcnJheS5mcm9tKGluc3RhbmNlTWFwLmtleXMoKSlbMF19LmApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpbnN0YW5jZU1hcC5zZXQoa2V5LCBpbnN0YW5jZSlcbiAgfSxcblxuICBnZXQoZWxlbWVudCwga2V5KSB7XG4gICAgaWYgKGVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gZWxlbWVudE1hcC5nZXQoZWxlbWVudCkuZ2V0KGtleSkgfHwgbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH0sXG5cbiAgcmVtb3ZlKGVsZW1lbnQsIGtleSkge1xuICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudClcblxuICAgIGluc3RhbmNlTWFwLmRlbGV0ZShrZXkpXG5cbiAgICAvLyBmcmVlIHVwIGVsZW1lbnQgcmVmZXJlbmNlcyBpZiB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIGxlZnQgZm9yIGFuIGVsZW1lbnRcbiAgICBpZiAoaW5zdGFuY2VNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgZWxlbWVudE1hcC5kZWxldGUoZWxlbWVudClcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogYmFzZS1jb21wb25lbnQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgRGF0YSBmcm9tICcuL2RvbS9kYXRhJ1xuaW1wb3J0IHtcbiAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbixcbiAgZ2V0RWxlbWVudFxufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IFZFUlNJT04gPSAnNS4xLjMnXG5cbmNsYXNzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XG4gICAgZWxlbWVudCA9IGdldEVsZW1lbnQoZWxlbWVudClcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnRcbiAgICBEYXRhLnNldCh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBEYXRhLnJlbW92ZSh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZKVxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9LRVkpXG5cbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKS5mb3JFYWNoKHByb3BlcnR5TmFtZSA9PiB7XG4gICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBudWxsXG4gICAgfSlcbiAgfVxuXG4gIF9xdWV1ZUNhbGxiYWNrKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkID0gdHJ1ZSkge1xuICAgIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQpXG4gIH1cblxuICAvKiogU3RhdGljICovXG5cbiAgc3RhdGljIGdldEluc3RhbmNlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gRGF0YS5nZXQoZ2V0RWxlbWVudChlbGVtZW50KSwgdGhpcy5EQVRBX0tFWSlcbiAgfVxuXG4gIHN0YXRpYyBnZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2UoZWxlbWVudCkgfHwgbmV3IHRoaXMoZWxlbWVudCwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsKVxuICB9XG5cbiAgc3RhdGljIGdldCBWRVJTSU9OKCkge1xuICAgIHJldHVybiBWRVJTSU9OXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHN0YXRpYyBtZXRob2QgXCJOQU1FXCIsIGZvciBlYWNoIGNvbXBvbmVudCEnKVxuICB9XG5cbiAgc3RhdGljIGdldCBEQVRBX0tFWSgpIHtcbiAgICByZXR1cm4gYGJzLiR7dGhpcy5OQU1FfWBcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRVZFTlRfS0VZKCkge1xuICAgIHJldHVybiBgLiR7dGhpcy5EQVRBX0tFWX1gXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmFzZUNvbXBvbmVudFxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiB1dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4uL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IHsgZ2V0RWxlbWVudEZyb21TZWxlY3RvciwgaXNEaXNhYmxlZCB9IGZyb20gJy4vaW5kZXgnXG5cbmNvbnN0IGVuYWJsZURpc21pc3NUcmlnZ2VyID0gKGNvbXBvbmVudCwgbWV0aG9kID0gJ2hpZGUnKSA9PiB7XG4gIGNvbnN0IGNsaWNrRXZlbnQgPSBgY2xpY2suZGlzbWlzcyR7Y29tcG9uZW50LkVWRU5UX0tFWX1gXG4gIGNvbnN0IG5hbWUgPSBjb21wb25lbnQuTkFNRVxuXG4gIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgY2xpY2tFdmVudCwgYFtkYXRhLWJzLWRpc21pc3M9XCIke25hbWV9XCJdYCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIH1cblxuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXQgPSBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpIHx8IHRoaXMuY2xvc2VzdChgLiR7bmFtZX1gKVxuICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50LmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KVxuXG4gICAgLy8gTWV0aG9kIGFyZ3VtZW50IGlzIGxlZnQsIGZvciBBbGVydCBhbmQgb25seSwgYXMgaXQgZG9lc24ndCBpbXBsZW1lbnQgdGhlICdoaWRlJyBtZXRob2RcbiAgICBpbnN0YW5jZVttZXRob2RdKClcbiAgfSlcbn1cblxuZXhwb3J0IHtcbiAgZW5hYmxlRGlzbWlzc1RyaWdnZXJcbn1cbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogYWxlcnQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4gfSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucydcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdhbGVydCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmFsZXJ0J1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcblxuY29uc3QgRVZFTlRfQ0xPU0UgPSBgY2xvc2Uke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTE9TRUQgPSBgY2xvc2VkJHtFVkVOVF9LRVl9YFxuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIEFsZXJ0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIGNsb3NlKCkge1xuICAgIGNvbnN0IGNsb3NlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTE9TRSlcblxuICAgIGlmIChjbG9zZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBjb25zdCBpc0FuaW1hdGVkID0gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKVxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4gdGhpcy5fZGVzdHJveUVsZW1lbnQoKSwgdGhpcy5fZWxlbWVudCwgaXNBbmltYXRlZClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2Rlc3Ryb3lFbGVtZW50KCkge1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKClcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTE9TRUQpXG4gICAgdGhpcy5kaXNwb3NlKClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQWxlcnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihBbGVydCwgJ2Nsb3NlJylcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBhZGQgLkFsZXJ0IHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKEFsZXJ0KVxuXG5leHBvcnQgZGVmYXVsdCBBbGVydFxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiBidXR0b24uanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4gfSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ2J1dHRvbidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmJ1dHRvbidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImJ1dHRvblwiXSdcblxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBCdXR0b24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgdG9nZ2xlKCkge1xuICAgIC8vIFRvZ2dsZSBjbGFzcyBhbmQgc3luYyB0aGUgYGFyaWEtcHJlc3NlZGAgYXR0cmlidXRlIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYC50b2dnbGUoKWAgbWV0aG9kXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDTEFTU19OQU1FX0FDVElWRSkpXG4gIH1cblxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpXG5cbiAgICAgIGlmIChjb25maWcgPT09ICd0b2dnbGUnKSB7XG4gICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBldmVudCA9PiB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICBjb25zdCBidXR0b24gPSBldmVudC50YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EQVRBX1RPR0dMRSlcbiAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKGJ1dHRvbilcblxuICBkYXRhLnRvZ2dsZSgpXG59KVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuQnV0dG9uIHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKEJ1dHRvbilcblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IGRvbS9tYW5pcHVsYXRvci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGEodmFsKSB7XG4gIGlmICh2YWwgPT09ICd0cnVlJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAodmFsID09PSAnZmFsc2UnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAodmFsID09PSBOdW1iZXIodmFsKS50b1N0cmluZygpKSB7XG4gICAgcmV0dXJuIE51bWJlcih2YWwpXG4gIH1cblxuICBpZiAodmFsID09PSAnJyB8fCB2YWwgPT09ICdudWxsJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFLZXkoa2V5KSB7XG4gIHJldHVybiBrZXkucmVwbGFjZSgvW0EtWl0vZywgY2hyID0+IGAtJHtjaHIudG9Mb3dlckNhc2UoKX1gKVxufVxuXG5jb25zdCBNYW5pcHVsYXRvciA9IHtcbiAgc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXksIHZhbHVlKSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCwgdmFsdWUpXG4gIH0sXG5cbiAgcmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXkpIHtcbiAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKVxuICB9LFxuXG4gIGdldERhdGFBdHRyaWJ1dGVzKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fVxuXG4gICAgT2JqZWN0LmtleXMoZWxlbWVudC5kYXRhc2V0KVxuICAgICAgLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2JzJykpXG4gICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBsZXQgcHVyZUtleSA9IGtleS5yZXBsYWNlKC9eYnMvLCAnJylcbiAgICAgICAgcHVyZUtleSA9IHB1cmVLZXkuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBwdXJlS2V5LnNsaWNlKDEsIHB1cmVLZXkubGVuZ3RoKVxuICAgICAgICBhdHRyaWJ1dGVzW3B1cmVLZXldID0gbm9ybWFsaXplRGF0YShlbGVtZW50LmRhdGFzZXRba2V5XSlcbiAgICAgIH0pXG5cbiAgICByZXR1cm4gYXR0cmlidXRlc1xuICB9LFxuXG4gIGdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZURhdGEoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCkpXG4gIH0sXG5cbiAgb2Zmc2V0KGVsZW1lbnQpIHtcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogcmVjdC50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQsXG4gICAgICBsZWZ0OiByZWN0LmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXRcbiAgICB9XG4gIH0sXG5cbiAgcG9zaXRpb24oZWxlbWVudCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgICAgbGVmdDogZWxlbWVudC5vZmZzZXRMZWZ0XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hbmlwdWxhdG9yXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IGRvbS9zZWxlY3Rvci1lbmdpbmUuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBpc0Rpc2FibGVkLCBpc1Zpc2libGUgfSBmcm9tICcuLi91dGlsL2luZGV4J1xuXG5jb25zdCBOT0RFX1RFWFQgPSAzXG5cbmNvbnN0IFNlbGVjdG9yRW5naW5lID0ge1xuICBmaW5kKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCguLi5FbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpKVxuICB9LFxuXG4gIGZpbmRPbmUoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3Rvci5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKVxuICB9LFxuXG4gIGNoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCguLi5lbGVtZW50LmNoaWxkcmVuKVxuICAgICAgLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5tYXRjaGVzKHNlbGVjdG9yKSlcbiAgfSxcblxuICBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgcGFyZW50cyA9IFtdXG5cbiAgICBsZXQgYW5jZXN0b3IgPSBlbGVtZW50LnBhcmVudE5vZGVcblxuICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3Rvci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgYW5jZXN0b3Iubm9kZVR5cGUgIT09IE5PREVfVEVYVCkge1xuICAgICAgaWYgKGFuY2VzdG9yLm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHBhcmVudHMucHVzaChhbmNlc3RvcilcbiAgICAgIH1cblxuICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudHNcbiAgfSxcblxuICBwcmV2KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgbGV0IHByZXZpb3VzID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXG5cbiAgICB3aGlsZSAocHJldmlvdXMpIHtcbiAgICAgIGlmIChwcmV2aW91cy5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gW3ByZXZpb3VzXVxuICAgICAgfVxuXG4gICAgICBwcmV2aW91cyA9IHByZXZpb3VzLnByZXZpb3VzRWxlbWVudFNpYmxpbmdcbiAgICB9XG5cbiAgICByZXR1cm4gW11cbiAgfSxcblxuICBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgbGV0IG5leHQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZ1xuXG4gICAgd2hpbGUgKG5leHQpIHtcbiAgICAgIGlmIChuZXh0Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbbmV4dF1cbiAgICAgIH1cblxuICAgICAgbmV4dCA9IG5leHQubmV4dEVsZW1lbnRTaWJsaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH0sXG5cbiAgZm9jdXNhYmxlQ2hpbGRyZW4oZWxlbWVudCkge1xuICAgIGNvbnN0IGZvY3VzYWJsZXMgPSBbXG4gICAgICAnYScsXG4gICAgICAnYnV0dG9uJyxcbiAgICAgICdpbnB1dCcsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ3NlbGVjdCcsXG4gICAgICAnZGV0YWlscycsXG4gICAgICAnW3RhYmluZGV4XScsXG4gICAgICAnW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXG4gICAgXS5tYXAoc2VsZWN0b3IgPT4gYCR7c2VsZWN0b3J9Om5vdChbdGFiaW5kZXhePVwiLVwiXSlgKS5qb2luKCcsICcpXG5cbiAgICByZXR1cm4gdGhpcy5maW5kKGZvY3VzYWJsZXMsIGVsZW1lbnQpLmZpbHRlcihlbCA9PiAhaXNEaXNhYmxlZChlbCkgJiYgaXNWaXNpYmxlKGVsKSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RvckVuZ2luZVxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiBjYXJvdXNlbC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcixcbiAgaXNSVEwsXG4gIGlzVmlzaWJsZSxcbiAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQsXG4gIHJlZmxvdyxcbiAgdHJpZ2dlclRyYW5zaXRpb25FbmQsXG4gIHR5cGVDaGVja0NvbmZpZ1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdjYXJvdXNlbCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmNhcm91c2VsJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IEFSUk9XX0xFRlRfS0VZID0gJ0Fycm93TGVmdCdcbmNvbnN0IEFSUk9XX1JJR0hUX0tFWSA9ICdBcnJvd1JpZ2h0J1xuY29uc3QgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCA9IDUwMCAvLyBUaW1lIGZvciBtb3VzZSBjb21wYXQgZXZlbnRzIHRvIGZpcmUgYWZ0ZXIgdG91Y2hcbmNvbnN0IFNXSVBFX1RIUkVTSE9MRCA9IDQwXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGludGVydmFsOiA1MDAwLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgc2xpZGU6IGZhbHNlLFxuICBwYXVzZTogJ2hvdmVyJyxcbiAgd3JhcDogdHJ1ZSxcbiAgdG91Y2g6IHRydWVcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGludGVydmFsOiAnKG51bWJlcnxib29sZWFuKScsXG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHNsaWRlOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIHBhdXNlOiAnKHN0cmluZ3xib29sZWFuKScsXG4gIHdyYXA6ICdib29sZWFuJyxcbiAgdG91Y2g6ICdib29sZWFuJ1xufVxuXG5jb25zdCBPUkRFUl9ORVhUID0gJ25leHQnXG5jb25zdCBPUkRFUl9QUkVWID0gJ3ByZXYnXG5jb25zdCBESVJFQ1RJT05fTEVGVCA9ICdsZWZ0J1xuY29uc3QgRElSRUNUSU9OX1JJR0hUID0gJ3JpZ2h0J1xuXG5jb25zdCBLRVlfVE9fRElSRUNUSU9OID0ge1xuICBbQVJST1dfTEVGVF9LRVldOiBESVJFQ1RJT05fUklHSFQsXG4gIFtBUlJPV19SSUdIVF9LRVldOiBESVJFQ1RJT05fTEVGVFxufVxuXG5jb25zdCBFVkVOVF9TTElERSA9IGBzbGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NMSUQgPSBgc2xpZCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV04gPSBga2V5ZG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFRU5URVIgPSBgbW91c2VlbnRlciR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUgPSBgbW91c2VsZWF2ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1RPVUNIU1RBUlQgPSBgdG91Y2hzdGFydCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1RPVUNITU9WRSA9IGB0b3VjaG1vdmUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9UT1VDSEVORCA9IGB0b3VjaGVuZCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1BPSU5URVJET1dOID0gYHBvaW50ZXJkb3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUE9JTlRFUlVQID0gYHBvaW50ZXJ1cCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0RSQUdfU1RBUlQgPSBgZHJhZ3N0YXJ0JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfQ0FST1VTRUwgPSAnY2Fyb3VzZWwnXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBDTEFTU19OQU1FX1NMSURFID0gJ3NsaWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9FTkQgPSAnY2Fyb3VzZWwtaXRlbS1lbmQnXG5jb25zdCBDTEFTU19OQU1FX1NUQVJUID0gJ2Nhcm91c2VsLWl0ZW0tc3RhcnQnXG5jb25zdCBDTEFTU19OQU1FX05FWFQgPSAnY2Fyb3VzZWwtaXRlbS1uZXh0J1xuY29uc3QgQ0xBU1NfTkFNRV9QUkVWID0gJ2Nhcm91c2VsLWl0ZW0tcHJldidcbmNvbnN0IENMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCA9ICdwb2ludGVyLWV2ZW50J1xuXG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkUgPSAnLmFjdGl2ZSdcbmNvbnN0IFNFTEVDVE9SX0FDVElWRV9JVEVNID0gJy5hY3RpdmUuY2Fyb3VzZWwtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0lURU0gPSAnLmNhcm91c2VsLWl0ZW0nXG5jb25zdCBTRUxFQ1RPUl9JVEVNX0lNRyA9ICcuY2Fyb3VzZWwtaXRlbSBpbWcnXG5jb25zdCBTRUxFQ1RPUl9ORVhUX1BSRVYgPSAnLmNhcm91c2VsLWl0ZW0tbmV4dCwgLmNhcm91c2VsLWl0ZW0tcHJldidcbmNvbnN0IFNFTEVDVE9SX0lORElDQVRPUlMgPSAnLmNhcm91c2VsLWluZGljYXRvcnMnXG5jb25zdCBTRUxFQ1RPUl9JTkRJQ0FUT1IgPSAnW2RhdGEtYnMtdGFyZ2V0XSdcbmNvbnN0IFNFTEVDVE9SX0RBVEFfU0xJREUgPSAnW2RhdGEtYnMtc2xpZGVdLCBbZGF0YS1icy1zbGlkZS10b10nXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1JJREUgPSAnW2RhdGEtYnMtcmlkZT1cImNhcm91c2VsXCJdJ1xuXG5jb25zdCBQT0lOVEVSX1RZUEVfVE9VQ0ggPSAndG91Y2gnXG5jb25zdCBQT0lOVEVSX1RZUEVfUEVOID0gJ3BlbidcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5jbGFzcyBDYXJvdXNlbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50KVxuXG4gICAgdGhpcy5faXRlbXMgPSBudWxsXG4gICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsXG4gICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IG51bGxcbiAgICB0aGlzLl9pc1BhdXNlZCA9IGZhbHNlXG4gICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2VcbiAgICB0aGlzLnRvdWNoVGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRvdWNoU3RhcnRYID0gMFxuICAgIHRoaXMudG91Y2hEZWx0YVggPSAwXG5cbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2luZGljYXRvcnNFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9JTkRJQ0FUT1JTLCB0aGlzLl9lbGVtZW50KVxuICAgIHRoaXMuX3RvdWNoU3VwcG9ydGVkID0gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDBcbiAgICB0aGlzLl9wb2ludGVyRXZlbnQgPSBCb29sZWFuKHdpbmRvdy5Qb2ludGVyRXZlbnQpXG5cbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIG5leHQoKSB7XG4gICAgdGhpcy5fc2xpZGUoT1JERVJfTkVYVClcbiAgfVxuXG4gIG5leHRXaGVuVmlzaWJsZSgpIHtcbiAgICAvLyBEb24ndCBjYWxsIG5leHQgd2hlbiB0aGUgcGFnZSBpc24ndCB2aXNpYmxlXG4gICAgLy8gb3IgdGhlIGNhcm91c2VsIG9yIGl0cyBwYXJlbnQgaXNuJ3QgdmlzaWJsZVxuICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmIGlzVmlzaWJsZSh0aGlzLl9lbGVtZW50KSkge1xuICAgICAgdGhpcy5uZXh0KClcbiAgICB9XG4gIH1cblxuICBwcmV2KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX1BSRVYpXG4gIH1cblxuICBwYXVzZShldmVudCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuX2lzUGF1c2VkID0gdHJ1ZVxuICAgIH1cblxuICAgIGlmIChTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX05FWFRfUFJFViwgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIHRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpXG4gICAgICB0aGlzLmN5Y2xlKHRydWUpXG4gICAgfVxuXG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbClcbiAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcbiAgfVxuXG4gIGN5Y2xlKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbClcbiAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcgJiYgdGhpcy5fY29uZmlnLmludGVydmFsICYmICF0aGlzLl9pc1BhdXNlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwoKVxuXG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IHNldEludGVydmFsKFxuICAgICAgICAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID8gdGhpcy5uZXh0V2hlblZpc2libGUgOiB0aGlzLm5leHQpLmJpbmQodGhpcyksXG4gICAgICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHRvKGluZGV4KSB7XG4gICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFX0lURU0sIHRoaXMuX2VsZW1lbnQpXG4gICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgodGhpcy5fYWN0aXZlRWxlbWVudClcblxuICAgIGlmIChpbmRleCA+IHRoaXMuX2l0ZW1zLmxlbmd0aCAtIDEgfHwgaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NMSUQsICgpID0+IHRoaXMudG8oaW5kZXgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGFjdGl2ZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgdGhpcy5wYXVzZSgpXG4gICAgICB0aGlzLmN5Y2xlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyID0gaW5kZXggPiBhY3RpdmVJbmRleCA/XG4gICAgICBPUkRFUl9ORVhUIDpcbiAgICAgIE9SREVSX1BSRVZcblxuICAgIHRoaXMuX3NsaWRlKG9yZGVyLCB0aGlzLl9pdGVtc1tpbmRleF0pXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2hhbmRsZVN3aXBlKCkge1xuICAgIGNvbnN0IGFic0RlbHRheCA9IE1hdGguYWJzKHRoaXMudG91Y2hEZWx0YVgpXG5cbiAgICBpZiAoYWJzRGVsdGF4IDw9IFNXSVBFX1RIUkVTSE9MRCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gYWJzRGVsdGF4IC8gdGhpcy50b3VjaERlbHRhWFxuXG4gICAgdGhpcy50b3VjaERlbHRhWCA9IDBcblxuICAgIGlmICghZGlyZWN0aW9uKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9zbGlkZShkaXJlY3Rpb24gPiAwID8gRElSRUNUSU9OX1JJR0hUIDogRElSRUNUSU9OX0xFRlQpXG4gIH1cblxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV04sIGV2ZW50ID0+IHRoaXMuX2tleWRvd24oZXZlbnQpKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRUVOVEVSLCBldmVudCA9PiB0aGlzLnBhdXNlKGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRUxFQVZFLCBldmVudCA9PiB0aGlzLmN5Y2xlKGV2ZW50KSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvdWNoICYmIHRoaXMuX3RvdWNoU3VwcG9ydGVkKSB7XG4gICAgICB0aGlzLl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKClcbiAgICB9XG4gIH1cblxuICBfYWRkVG91Y2hFdmVudExpc3RlbmVycygpIHtcbiAgICBjb25zdCBoYXNQb2ludGVyUGVuVG91Y2ggPSBldmVudCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fcG9pbnRlckV2ZW50ICYmXG4gICAgICAgIChldmVudC5wb2ludGVyVHlwZSA9PT0gUE9JTlRFUl9UWVBFX1BFTiB8fCBldmVudC5wb2ludGVyVHlwZSA9PT0gUE9JTlRFUl9UWVBFX1RPVUNIKVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gZXZlbnQgPT4ge1xuICAgICAgaWYgKGhhc1BvaW50ZXJQZW5Ub3VjaChldmVudCkpIHtcbiAgICAgICAgdGhpcy50b3VjaFN0YXJ0WCA9IGV2ZW50LmNsaWVudFhcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3BvaW50ZXJFdmVudCkge1xuICAgICAgICB0aGlzLnRvdWNoU3RhcnRYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgIC8vIGVuc3VyZSBzd2lwaW5nIHdpdGggb25lIHRvdWNoIGFuZCBub3QgcGluY2hpbmdcbiAgICAgIHRoaXMudG91Y2hEZWx0YVggPSBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMSA/XG4gICAgICAgIDAgOlxuICAgICAgICBldmVudC50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLnRvdWNoU3RhcnRYXG4gICAgfVxuXG4gICAgY29uc3QgZW5kID0gZXZlbnQgPT4ge1xuICAgICAgaWYgKGhhc1BvaW50ZXJQZW5Ub3VjaChldmVudCkpIHtcbiAgICAgICAgdGhpcy50b3VjaERlbHRhWCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLnRvdWNoU3RhcnRYXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2hhbmRsZVN3aXBlKClcbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgICAgLy8gSWYgaXQncyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlLCBtb3VzZWVudGVyL2xlYXZlIGFyZSBmaXJlZCBhc1xuICAgICAgICAvLyBwYXJ0IG9mIHRoZSBtb3VzZSBjb21wYXRpYmlsaXR5IGV2ZW50cyBvbiBmaXJzdCB0YXAgLSB0aGUgY2Fyb3VzZWxcbiAgICAgICAgLy8gd291bGQgc3RvcCBjeWNsaW5nIHVudGlsIHVzZXIgdGFwcGVkIG91dCBvZiBpdDtcbiAgICAgICAgLy8gaGVyZSwgd2UgbGlzdGVuIGZvciB0b3VjaGVuZCwgZXhwbGljaXRseSBwYXVzZSB0aGUgY2Fyb3VzZWxcbiAgICAgICAgLy8gKGFzIGlmIGl0J3MgdGhlIHNlY29uZCB0aW1lIHdlIHRhcCBvbiBpdCwgbW91c2VlbnRlciBjb21wYXQgZXZlbnRcbiAgICAgICAgLy8gaXMgTk9UIGZpcmVkKSBhbmQgYWZ0ZXIgYSB0aW1lb3V0ICh0byBhbGxvdyBmb3IgbW91c2UgY29tcGF0aWJpbGl0eVxuICAgICAgICAvLyBldmVudHMgdG8gZmlyZSkgd2UgZXhwbGljaXRseSByZXN0YXJ0IGN5Y2xpbmdcblxuICAgICAgICB0aGlzLnBhdXNlKClcbiAgICAgICAgaWYgKHRoaXMudG91Y2hUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG91Y2hUaW1lb3V0KVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b3VjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KGV2ZW50ID0+IHRoaXMuY3ljbGUoZXZlbnQpLCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUICsgdGhpcy5fY29uZmlnLmludGVydmFsKVxuICAgICAgfVxuICAgIH1cblxuICAgIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSVRFTV9JTUcsIHRoaXMuX2VsZW1lbnQpLmZvckVhY2goaXRlbUltZyA9PiB7XG4gICAgICBFdmVudEhhbmRsZXIub24oaXRlbUltZywgRVZFTlRfRFJBR19TVEFSVCwgZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSlcbiAgICB9KVxuXG4gICAgaWYgKHRoaXMuX3BvaW50ZXJFdmVudCkge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1BPSU5URVJET1dOLCBldmVudCA9PiBzdGFydChldmVudCkpXG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUlVQLCBldmVudCA9PiBlbmQoZXZlbnQpKVxuXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UKVxuICAgIH0gZWxzZSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hTVEFSVCwgZXZlbnQgPT4gc3RhcnQoZXZlbnQpKVxuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNITU9WRSwgZXZlbnQgPT4gbW92ZShldmVudCkpXG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hFTkQsIGV2ZW50ID0+IGVuZChldmVudCkpXG4gICAgfVxuICB9XG5cbiAgX2tleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IEtFWV9UT19ESVJFQ1RJT05bZXZlbnQua2V5XVxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIHRoaXMuX3NsaWRlKGRpcmVjdGlvbilcbiAgICB9XG4gIH1cblxuICBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICB0aGlzLl9pdGVtcyA9IGVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnROb2RlID9cbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSVRFTSwgZWxlbWVudC5wYXJlbnROb2RlKSA6XG4gICAgICBbXVxuXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zLmluZGV4T2YoZWxlbWVudClcbiAgfVxuXG4gIF9nZXRJdGVtQnlPcmRlcihvcmRlciwgYWN0aXZlRWxlbWVudCkge1xuICAgIGNvbnN0IGlzTmV4dCA9IG9yZGVyID09PSBPUkRFUl9ORVhUXG4gICAgcmV0dXJuIGdldE5leHRBY3RpdmVFbGVtZW50KHRoaXMuX2l0ZW1zLCBhY3RpdmVFbGVtZW50LCBpc05leHQsIHRoaXMuX2NvbmZpZy53cmFwKVxuICB9XG5cbiAgX3RyaWdnZXJTbGlkZUV2ZW50KHJlbGF0ZWRUYXJnZXQsIGV2ZW50RGlyZWN0aW9uTmFtZSkge1xuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHJlbGF0ZWRUYXJnZXQpXG4gICAgY29uc3QgZnJvbUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFX0lURU0sIHRoaXMuX2VsZW1lbnQpKVxuXG4gICAgcmV0dXJuIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NMSURFLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0LFxuICAgICAgZGlyZWN0aW9uOiBldmVudERpcmVjdGlvbk5hbWUsXG4gICAgICBmcm9tOiBmcm9tSW5kZXgsXG4gICAgICB0bzogdGFyZ2V0SW5kZXhcbiAgICB9KVxuICB9XG5cbiAgX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQoZWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgY29uc3QgYWN0aXZlSW5kaWNhdG9yID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkUsIHRoaXMuX2luZGljYXRvcnNFbGVtZW50KVxuXG4gICAgICBhY3RpdmVJbmRpY2F0b3IuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSlcbiAgICAgIGFjdGl2ZUluZGljYXRvci5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcpXG5cbiAgICAgIGNvbnN0IGluZGljYXRvcnMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lORElDQVRPUiwgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpXG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoTnVtYmVyLnBhcnNlSW50KGluZGljYXRvcnNbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXNsaWRlLXRvJyksIDEwKSA9PT0gdGhpcy5fZ2V0SXRlbUluZGV4KGVsZW1lbnQpKSB7XG4gICAgICAgICAgaW5kaWNhdG9yc1tpXS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgICAgICAgIGluZGljYXRvcnNbaV0uc2V0QXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnLCAndHJ1ZScpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVJbnRlcnZhbCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fYWN0aXZlRWxlbWVudCB8fCBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRV9JVEVNLCB0aGlzLl9lbGVtZW50KVxuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50SW50ZXJ2YWwgPSBOdW1iZXIucGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtaW50ZXJ2YWwnKSwgMTApXG5cbiAgICBpZiAoZWxlbWVudEludGVydmFsKSB7XG4gICAgICB0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsID0gdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCB8fCB0aGlzLl9jb25maWcuaW50ZXJ2YWxcbiAgICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCA9IGVsZW1lbnRJbnRlcnZhbFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWwgPSB0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsIHx8IHRoaXMuX2NvbmZpZy5pbnRlcnZhbFxuICAgIH1cbiAgfVxuXG4gIF9zbGlkZShkaXJlY3Rpb25Pck9yZGVyLCBlbGVtZW50KSB7XG4gICAgY29uc3Qgb3JkZXIgPSB0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKGRpcmVjdGlvbk9yT3JkZXIpXG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFX0lURU0sIHRoaXMuX2VsZW1lbnQpXG4gICAgY29uc3QgYWN0aXZlRWxlbWVudEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpXG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBlbGVtZW50IHx8IHRoaXMuX2dldEl0ZW1CeU9yZGVyKG9yZGVyLCBhY3RpdmVFbGVtZW50KVxuXG4gICAgY29uc3QgbmV4dEVsZW1lbnRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChuZXh0RWxlbWVudClcbiAgICBjb25zdCBpc0N5Y2xpbmcgPSBCb29sZWFuKHRoaXMuX2ludGVydmFsKVxuXG4gICAgY29uc3QgaXNOZXh0ID0gb3JkZXIgPT09IE9SREVSX05FWFRcbiAgICBjb25zdCBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfU1RBUlQgOiBDTEFTU19OQU1FX0VORFxuICAgIGNvbnN0IG9yZGVyQ2xhc3NOYW1lID0gaXNOZXh0ID8gQ0xBU1NfTkFNRV9ORVhUIDogQ0xBU1NfTkFNRV9QUkVWXG4gICAgY29uc3QgZXZlbnREaXJlY3Rpb25OYW1lID0gdGhpcy5fb3JkZXJUb0RpcmVjdGlvbihvcmRlcilcblxuICAgIGlmIChuZXh0RWxlbWVudCAmJiBuZXh0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9BQ1RJVkUpKSB7XG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2xpZGVFdmVudCA9IHRoaXMuX3RyaWdnZXJTbGlkZUV2ZW50KG5leHRFbGVtZW50LCBldmVudERpcmVjdGlvbk5hbWUpXG4gICAgaWYgKHNsaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFhY3RpdmVFbGVtZW50IHx8ICFuZXh0RWxlbWVudCkge1xuICAgICAgLy8gU29tZSB3ZWlyZG5lc3MgaXMgaGFwcGVuaW5nLCBzbyB3ZSBiYWlsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc1NsaWRpbmcgPSB0cnVlXG5cbiAgICBpZiAoaXNDeWNsaW5nKSB7XG4gICAgICB0aGlzLnBhdXNlKClcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KG5leHRFbGVtZW50KVxuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBuZXh0RWxlbWVudFxuXG4gICAgY29uc3QgdHJpZ2dlclNsaWRFdmVudCA9ICgpID0+IHtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NMSUQsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogbmV4dEVsZW1lbnQsXG4gICAgICAgIGRpcmVjdGlvbjogZXZlbnREaXJlY3Rpb25OYW1lLFxuICAgICAgICBmcm9tOiBhY3RpdmVFbGVtZW50SW5kZXgsXG4gICAgICAgIHRvOiBuZXh0RWxlbWVudEluZGV4XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NMSURFKSkge1xuICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChvcmRlckNsYXNzTmFtZSlcblxuICAgICAgcmVmbG93KG5leHRFbGVtZW50KVxuXG4gICAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoZGlyZWN0aW9uYWxDbGFzc05hbWUpXG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKVxuXG4gICAgICBjb25zdCBjb21wbGV0ZUNhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGRpcmVjdGlvbmFsQ2xhc3NOYW1lLCBvcmRlckNsYXNzTmFtZSlcbiAgICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcblxuICAgICAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUsIG9yZGVyQ2xhc3NOYW1lLCBkaXJlY3Rpb25hbENsYXNzTmFtZSlcblxuICAgICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZVxuXG4gICAgICAgIHNldFRpbWVvdXQodHJpZ2dlclNsaWRFdmVudCwgMClcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCBhY3RpdmVFbGVtZW50LCB0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuXG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZVxuICAgICAgdHJpZ2dlclNsaWRFdmVudCgpXG4gICAgfVxuXG4gICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgdGhpcy5jeWNsZSgpXG4gICAgfVxuICB9XG5cbiAgX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSB7XG4gICAgaWYgKCFbRElSRUNUSU9OX1JJR0hULCBESVJFQ1RJT05fTEVGVF0uaW5jbHVkZXMoZGlyZWN0aW9uKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvblxuICAgIH1cblxuICAgIGlmIChpc1JUTCgpKSB7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCA/IE9SREVSX1BSRVYgOiBPUkRFUl9ORVhUXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9ORVhUIDogT1JERVJfUFJFVlxuICB9XG5cbiAgX29yZGVyVG9EaXJlY3Rpb24ob3JkZXIpIHtcbiAgICBpZiAoIVtPUkRFUl9ORVhULCBPUkRFUl9QUkVWXS5pbmNsdWRlcyhvcmRlcikpIHtcbiAgICAgIHJldHVybiBvcmRlclxuICAgIH1cblxuICAgIGlmIChpc1JUTCgpKSB7XG4gICAgICByZXR1cm4gb3JkZXIgPT09IE9SREVSX1BSRVYgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVFxuICAgIH1cblxuICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9SSUdIVCA6IERJUkVDVElPTl9MRUZUXG4gIH1cblxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgY2Fyb3VzZWxJbnRlcmZhY2UoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgY29uc3QgZGF0YSA9IENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgbGV0IHsgX2NvbmZpZyB9ID0gZGF0YVxuICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0Jykge1xuICAgICAgX2NvbmZpZyA9IHtcbiAgICAgICAgLi4uX2NvbmZpZyxcbiAgICAgICAgLi4uY29uZmlnXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aW9uID0gdHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycgPyBjb25maWcgOiBfY29uZmlnLnNsaWRlXG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGRhdGEudG8oY29uZmlnKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YVthY3Rpb25dID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2FjdGlvbn1cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbYWN0aW9uXSgpXG4gICAgfSBlbHNlIGlmIChfY29uZmlnLmludGVydmFsICYmIF9jb25maWcucmlkZSkge1xuICAgICAgZGF0YS5wYXVzZSgpXG4gICAgICBkYXRhLmN5Y2xlKClcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgQ2Fyb3VzZWwuY2Fyb3VzZWxJbnRlcmZhY2UodGhpcywgY29uZmlnKVxuICAgIH0pXG4gIH1cblxuICBzdGF0aWMgZGF0YUFwaUNsaWNrSGFuZGxlcihldmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcylcblxuICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQ0FST1VTRUwpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAuLi5NYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0YXJnZXQpLFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcylcbiAgICB9XG4gICAgY29uc3Qgc2xpZGVJbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXNsaWRlLXRvJylcblxuICAgIGlmIChzbGlkZUluZGV4KSB7XG4gICAgICBjb25maWcuaW50ZXJ2YWwgPSBmYWxzZVxuICAgIH1cblxuICAgIENhcm91c2VsLmNhcm91c2VsSW50ZXJmYWNlKHRhcmdldCwgY29uZmlnKVxuXG4gICAgaWYgKHNsaWRlSW5kZXgpIHtcbiAgICAgIENhcm91c2VsLmdldEluc3RhbmNlKHRhcmdldCkudG8oc2xpZGVJbmRleClcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1NMSURFLCBDYXJvdXNlbC5kYXRhQXBpQ2xpY2tIYW5kbGVyKVxuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJLCAoKSA9PiB7XG4gIGNvbnN0IGNhcm91c2VscyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9SSURFKVxuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjYXJvdXNlbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBDYXJvdXNlbC5jYXJvdXNlbEludGVyZmFjZShjYXJvdXNlbHNbaV0sIENhcm91c2VsLmdldEluc3RhbmNlKGNhcm91c2Vsc1tpXSkpXG4gIH1cbn0pXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5DYXJvdXNlbCB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihDYXJvdXNlbClcblxuZXhwb3J0IGRlZmF1bHQgQ2Fyb3VzZWxcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogY29sbGFwc2UuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGdldEVsZW1lbnQsXG4gIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQsXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsXG4gIHJlZmxvdyxcbiAgdHlwZUNoZWNrQ29uZmlnXG59IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBEYXRhIGZyb20gJy4vZG9tL2RhdGEnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdjb2xsYXBzZSdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmNvbGxhcHNlJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIHRvZ2dsZTogdHJ1ZSxcbiAgcGFyZW50OiBudWxsXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICB0b2dnbGU6ICdib29sZWFuJyxcbiAgcGFyZW50OiAnKG51bGx8ZWxlbWVudCknXG59XG5cbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0UgPSAnY29sbGFwc2UnXG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNJTkcgPSAnY29sbGFwc2luZydcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0VEID0gJ2NvbGxhcHNlZCdcbmNvbnN0IENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOID0gYDpzY29wZSAuJHtDTEFTU19OQU1FX0NPTExBUFNFfSAuJHtDTEFTU19OQU1FX0NPTExBUFNFfWBcbmNvbnN0IENMQVNTX05BTUVfSE9SSVpPTlRBTCA9ICdjb2xsYXBzZS1ob3Jpem9udGFsJ1xuXG5jb25zdCBXSURUSCA9ICd3aWR0aCdcbmNvbnN0IEhFSUdIVCA9ICdoZWlnaHQnXG5cbmNvbnN0IFNFTEVDVE9SX0FDVElWRVMgPSAnLmNvbGxhcHNlLnNob3csIC5jb2xsYXBzZS5jb2xsYXBzaW5nJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIl0nXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBDb2xsYXBzZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50KVxuXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX3RyaWdnZXJBcnJheSA9IFtdXG5cbiAgICBjb25zdCB0b2dnbGVMaXN0ID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRSlcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0b2dnbGVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBlbGVtID0gdG9nZ2xlTGlzdFtpXVxuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW0pXG4gICAgICBjb25zdCBmaWx0ZXJFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcilcbiAgICAgICAgLmZpbHRlcihmb3VuZEVsZW0gPT4gZm91bmRFbGVtID09PSB0aGlzLl9lbGVtZW50KVxuXG4gICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwgJiYgZmlsdGVyRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0b3IgPSBzZWxlY3RvclxuICAgICAgICB0aGlzLl90cmlnZ2VyQXJyYXkucHVzaChlbGVtKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2luaXRpYWxpemVDaGlsZHJlbigpXG5cbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl90cmlnZ2VyQXJyYXksIHRoaXMuX2lzU2hvd24oKSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvZ2dsZSkge1xuICAgICAgdGhpcy50b2dnbGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvdygpXG4gICAgfVxuICB9XG5cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8IHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IGFjdGl2ZXMgPSBbXVxuICAgIGxldCBhY3RpdmVzRGF0YVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gU2VsZWN0b3JFbmdpbmUuZmluZChDTEFTU19OQU1FX0RFRVBFUl9DSElMRFJFTiwgdGhpcy5fY29uZmlnLnBhcmVudClcbiAgICAgIGFjdGl2ZXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0FDVElWRVMsIHRoaXMuX2NvbmZpZy5wYXJlbnQpLmZpbHRlcihlbGVtID0+ICFjaGlsZHJlbi5pbmNsdWRlcyhlbGVtKSkgLy8gcmVtb3ZlIGNoaWxkcmVuIGlmIGdyZWF0ZXIgZGVwdGhcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHRoaXMuX3NlbGVjdG9yKVxuICAgIGlmIChhY3RpdmVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgdGVtcEFjdGl2ZURhdGEgPSBhY3RpdmVzLmZpbmQoZWxlbSA9PiBjb250YWluZXIgIT09IGVsZW0pXG4gICAgICBhY3RpdmVzRGF0YSA9IHRlbXBBY3RpdmVEYXRhID8gQ29sbGFwc2UuZ2V0SW5zdGFuY2UodGVtcEFjdGl2ZURhdGEpIDogbnVsbFxuXG4gICAgICBpZiAoYWN0aXZlc0RhdGEgJiYgYWN0aXZlc0RhdGEuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVylcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhY3RpdmVzLmZvckVhY2goZWxlbUFjdGl2ZSA9PiB7XG4gICAgICBpZiAoY29udGFpbmVyICE9PSBlbGVtQWN0aXZlKSB7XG4gICAgICAgIENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbUFjdGl2ZSwgeyB0b2dnbGU6IGZhbHNlIH0pLmhpZGUoKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFjdGl2ZXNEYXRhKSB7XG4gICAgICAgIERhdGEuc2V0KGVsZW1BY3RpdmUsIERBVEFfS0VZLCBudWxsKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0UpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0lORylcblxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IDBcblxuICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl90cmlnZ2VyQXJyYXksIHRydWUpXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0UsIENMQVNTX05BTUVfU0hPVylcblxuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJydcblxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04pXG4gICAgfVxuXG4gICAgY29uc3QgY2FwaXRhbGl6ZWREaW1lbnNpb24gPSBkaW1lbnNpb25bMF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSgxKVxuICAgIGNvbnN0IHNjcm9sbFNpemUgPSBgc2Nyb2xsJHtjYXBpdGFsaXplZERpbWVuc2lvbn1gXG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0cnVlKVxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IGAke3RoaXMuX2VsZW1lbnRbc2Nyb2xsU2l6ZV19cHhgXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG4gICAgaWYgKHN0YXJ0RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5fZ2V0RGltZW5zaW9uKClcblxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IGAke3RoaXMuX2VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZGltZW5zaW9uXX1weGBcblxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0lORylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSwgQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgY29uc3QgdHJpZ2dlckFycmF5TGVuZ3RoID0gdGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJpZ2dlckFycmF5TGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLl90cmlnZ2VyQXJyYXlbaV1cbiAgICAgIGNvbnN0IGVsZW0gPSBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRyaWdnZXIpXG5cbiAgICAgIGlmIChlbGVtICYmICF0aGlzLl9pc1Nob3duKGVsZW0pKSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhbdHJpZ2dlcl0sIGZhbHNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWVcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSlcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTilcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJ1xuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSlcbiAgfVxuXG4gIF9pc1Nob3duKGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVylcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLkRlZmF1bHQsXG4gICAgICAuLi5NYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KSxcbiAgICAgIC4uLmNvbmZpZ1xuICAgIH1cbiAgICBjb25maWcudG9nZ2xlID0gQm9vbGVhbihjb25maWcudG9nZ2xlKSAvLyBDb2VyY2Ugc3RyaW5nIHZhbHVlc1xuICAgIGNvbmZpZy5wYXJlbnQgPSBnZXRFbGVtZW50KGNvbmZpZy5wYXJlbnQpXG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2dldERpbWVuc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9IT1JJWk9OVEFMKSA/IFdJRFRIIDogSEVJR0hUXG4gIH1cblxuICBfaW5pdGlhbGl6ZUNoaWxkcmVuKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kKENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOLCB0aGlzLl9jb25maWcucGFyZW50KVxuICAgIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEUsIHRoaXMuX2NvbmZpZy5wYXJlbnQpLmZpbHRlcihlbGVtID0+ICFjaGlsZHJlbi5pbmNsdWRlcyhlbGVtKSlcbiAgICAgIC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudClcblxuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW2VsZW1lbnRdLCB0aGlzLl9pc1Nob3duKHNlbGVjdGVkKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIF9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModHJpZ2dlckFycmF5LCBpc09wZW4pIHtcbiAgICBpZiAoIXRyaWdnZXJBcnJheS5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyaWdnZXJBcnJheS5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRUQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRUQpXG4gICAgICB9XG5cbiAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgaXNPcGVuKVxuICAgIH0pXG4gIH1cblxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgX2NvbmZpZyA9IHt9XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycgJiYgL3Nob3d8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgIF9jb25maWcudG9nZ2xlID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgX2NvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gcHJldmVudERlZmF1bHQgb25seSBmb3IgPGE+IGVsZW1lbnRzICh3aGljaCBjaGFuZ2UgdGhlIFVSTCkgbm90IGluc2lkZSB0aGUgY29sbGFwc2libGUgZWxlbWVudFxuICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdBJyB8fCAoZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgZXZlbnQuZGVsZWdhdGVUYXJnZXQudGFnTmFtZSA9PT0gJ0EnKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKVxuICBjb25zdCBzZWxlY3RvckVsZW1lbnRzID0gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcilcblxuICBzZWxlY3RvckVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7IHRvZ2dsZTogZmFsc2UgfSkudG9nZ2xlKClcbiAgfSlcbn0pXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5Db2xsYXBzZSB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihDb2xsYXBzZSlcblxuZXhwb3J0IGRlZmF1bHQgQ29sbGFwc2VcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogZHJvcGRvd24uanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgKiBhcyBQb3BwZXIgZnJvbSAnQHBvcHBlcmpzL2NvcmUnXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcixcbiAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQsXG4gIGlzRGlzYWJsZWQsXG4gIGlzRWxlbWVudCxcbiAgaXNSVEwsXG4gIGlzVmlzaWJsZSxcbiAgbm9vcCxcbiAgdHlwZUNoZWNrQ29uZmlnXG59IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuL2RvbS9tYW5pcHVsYXRvcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ2Ryb3Bkb3duJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuZHJvcGRvd24nXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5jb25zdCBTUEFDRV9LRVkgPSAnU3BhY2UnXG5jb25zdCBUQUJfS0VZID0gJ1RhYidcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJ1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJ1xuY29uc3QgUklHSFRfTU9VU0VfQlVUVE9OID0gMiAvLyBNb3VzZUV2ZW50LmJ1dHRvbiB2YWx1ZSBmb3IgdGhlIHNlY29uZGFyeSBidXR0b24sIHVzdWFsbHkgdGhlIHJpZ2h0IGJ1dHRvblxuXG5jb25zdCBSRUdFWFBfS0VZRE9XTiA9IG5ldyBSZWdFeHAoYCR7QVJST1dfVVBfS0VZfXwke0FSUk9XX0RPV05fS0VZfXwke0VTQ0FQRV9LRVl9YClcblxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5jb25zdCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJID0gYGtleWRvd24ke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5jb25zdCBFVkVOVF9LRVlVUF9EQVRBX0FQSSA9IGBrZXl1cCR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX0RST1BVUCA9ICdkcm9wdXAnXG5jb25zdCBDTEFTU19OQU1FX0RST1BFTkQgPSAnZHJvcGVuZCdcbmNvbnN0IENMQVNTX05BTUVfRFJPUFNUQVJUID0gJ2Ryb3BzdGFydCdcbmNvbnN0IENMQVNTX05BTUVfTkFWQkFSID0gJ25hdmJhcidcblxuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIl0nXG5jb25zdCBTRUxFQ1RPUl9NRU5VID0gJy5kcm9wZG93bi1tZW51J1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSX05BViA9ICcubmF2YmFyLW5hdidcbmNvbnN0IFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMgPSAnLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknXG5cbmNvbnN0IFBMQUNFTUVOVF9UT1AgPSBpc1JUTCgpID8gJ3RvcC1lbmQnIDogJ3RvcC1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9UT1BFTkQgPSBpc1JUTCgpID8gJ3RvcC1zdGFydCcgOiAndG9wLWVuZCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT00gPSBpc1JUTCgpID8gJ2JvdHRvbS1lbmQnIDogJ2JvdHRvbS1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01FTkQgPSBpc1JUTCgpID8gJ2JvdHRvbS1zdGFydCcgOiAnYm90dG9tLWVuZCdcbmNvbnN0IFBMQUNFTUVOVF9SSUdIVCA9IGlzUlRMKCkgPyAnbGVmdC1zdGFydCcgOiAncmlnaHQtc3RhcnQnXG5jb25zdCBQTEFDRU1FTlRfTEVGVCA9IGlzUlRMKCkgPyAncmlnaHQtc3RhcnQnIDogJ2xlZnQtc3RhcnQnXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIG9mZnNldDogWzAsIDJdLFxuICBib3VuZGFyeTogJ2NsaXBwaW5nUGFyZW50cycsXG4gIHJlZmVyZW5jZTogJ3RvZ2dsZScsXG4gIGRpc3BsYXk6ICdkeW5hbWljJyxcbiAgcG9wcGVyQ29uZmlnOiBudWxsLFxuICBhdXRvQ2xvc2U6IHRydWVcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgcmVmZXJlbmNlOiAnKHN0cmluZ3xlbGVtZW50fG9iamVjdCknLFxuICBkaXNwbGF5OiAnc3RyaW5nJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIGF1dG9DbG9zZTogJyhib29sZWFufHN0cmluZyknXG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBEcm9wZG93biBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50KVxuXG4gICAgdGhpcy5fcG9wcGVyID0gbnVsbFxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fbWVudSA9IHRoaXMuX2dldE1lbnVFbGVtZW50KClcbiAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE5hdmJhcigpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcblxuICB0b2dnbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24oKSA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KClcbiAgfVxuXG4gIHNob3coKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcy5fZWxlbWVudCkgfHwgdGhpcy5faXNTaG93bih0aGlzLl9tZW51KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCByZWxhdGVkVGFyZ2V0KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBEcm9wZG93bi5nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KVxuICAgIC8vIFRvdGFsbHkgZGlzYWJsZSBQb3BwZXIgZm9yIERyb3Bkb3ducyBpbiBOYXZiYXJcbiAgICBpZiAodGhpcy5faW5OYXZiYXIpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicsICdub25lJylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wcGVyKHBhcmVudClcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICAgICFwYXJlbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVJfTkFWKSkge1xuICAgICAgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pXG4gICAgICAgIC5mb3JFYWNoKGVsZW0gPT4gRXZlbnRIYW5kbGVyLm9uKGVsZW0sICdtb3VzZW92ZXInLCBub29wKSlcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmZvY3VzKClcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIHRydWUpXG5cbiAgICB0aGlzLl9tZW51LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04sIHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8ICF0aGlzLl9pc1Nob3duKHRoaXMuX21lbnUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH1cblxuICAgIHRoaXMuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKVxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFLCByZWxhdGVkVGFyZ2V0KVxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKVxuICAgICAgICAuZm9yRWFjaChlbGVtID0+IEV2ZW50SGFuZGxlci5vZmYoZWxlbSwgJ21vdXNlb3ZlcicsIG5vb3ApKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KClcbiAgICB9XG5cbiAgICB0aGlzLl9tZW51LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKVxuICAgIE1hbmlwdWxhdG9yLnJlbW92ZURhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicpXG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOLCByZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi50aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsXG4gICAgICAuLi5NYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KSxcbiAgICAgIC4uLmNvbmZpZ1xuICAgIH1cblxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpXG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWZlcmVuY2UgPT09ICdvYmplY3QnICYmICFpc0VsZW1lbnQoY29uZmlnLnJlZmVyZW5jZSkgJiZcbiAgICAgIHR5cGVvZiBjb25maWcucmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgLy8gUG9wcGVyIHZpcnR1YWwgZWxlbWVudHMgcmVxdWlyZSBhIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBtZXRob2RcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7TkFNRS50b1VwcGVyQ2FzZSgpfTogT3B0aW9uIFwicmVmZXJlbmNlXCIgcHJvdmlkZWQgdHlwZSBcIm9iamVjdFwiIHdpdGhvdXQgYSByZXF1aXJlZCBcImdldEJvdW5kaW5nQ2xpZW50UmVjdFwiIG1ldGhvZC5gKVxuICAgIH1cblxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9jcmVhdGVQb3BwZXIocGFyZW50KSB7XG4gICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIGRyb3Bkb3ducyByZXF1aXJlIFBvcHBlciAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpXG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSBwYXJlbnRcbiAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCh0aGlzLl9jb25maWcucmVmZXJlbmNlKSkge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IGdldEVsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2NvbmZpZy5yZWZlcmVuY2VcbiAgICB9XG5cbiAgICBjb25zdCBwb3BwZXJDb25maWcgPSB0aGlzLl9nZXRQb3BwZXJDb25maWcoKVxuICAgIGNvbnN0IGlzRGlzcGxheVN0YXRpYyA9IHBvcHBlckNvbmZpZy5tb2RpZmllcnMuZmluZChtb2RpZmllciA9PiBtb2RpZmllci5uYW1lID09PSAnYXBwbHlTdHlsZXMnICYmIG1vZGlmaWVyLmVuYWJsZWQgPT09IGZhbHNlKVxuXG4gICAgdGhpcy5fcG9wcGVyID0gUG9wcGVyLmNyZWF0ZVBvcHBlcihyZWZlcmVuY2VFbGVtZW50LCB0aGlzLl9tZW51LCBwb3BwZXJDb25maWcpXG5cbiAgICBpZiAoaXNEaXNwbGF5U3RhdGljKSB7XG4gICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKHRoaXMuX21lbnUsICdwb3BwZXInLCAnc3RhdGljJylcbiAgICB9XG4gIH1cblxuICBfaXNTaG93bihlbGVtZW50ID0gdGhpcy5fZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICBfZ2V0TWVudUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLm5leHQodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF1cbiAgfVxuXG4gIF9nZXRQbGFjZW1lbnQoKSB7XG4gICAgY29uc3QgcGFyZW50RHJvcGRvd24gPSB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGVcblxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRU5EKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9SSUdIVFxuICAgIH1cblxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QU1RBUlQpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0xFRlRcbiAgICB9XG5cbiAgICAvLyBXZSBuZWVkIHRvIHRyaW0gdGhlIHZhbHVlIGJlY2F1c2UgY3VzdG9tIHByb3BlcnRpZXMgY2FuIGFsc28gaW5jbHVkZSBzcGFjZXNcbiAgICBjb25zdCBpc0VuZCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fbWVudSkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1icy1wb3NpdGlvbicpLnRyaW0oKSA9PT0gJ2VuZCdcblxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QVVApKSB7XG4gICAgICByZXR1cm4gaXNFbmQgPyBQTEFDRU1FTlRfVE9QRU5EIDogUExBQ0VNRU5UX1RPUFxuICAgIH1cblxuICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9CT1RUT01FTkQgOiBQTEFDRU1FTlRfQk9UVE9NXG4gIH1cblxuICBfZGV0ZWN0TmF2YmFyKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoYC4ke0NMQVNTX05BTUVfTkFWQkFSfWApICE9PSBudWxsXG4gIH1cblxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWwgPT4gTnVtYmVyLnBhcnNlSW50KHZhbCwgMTApKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0XG4gIH1cblxuICBfZ2V0UG9wcGVyQ29uZmlnKCkge1xuICAgIGNvbnN0IGRlZmF1bHRCc1BvcHBlckNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogdGhpcy5fZ2V0UGxhY2VtZW50KCksXG4gICAgICBtb2RpZmllcnM6IFt7XG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYm91bmRhcnk6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KClcbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlIFBvcHBlciBpZiB3ZSBoYXZlIGEgc3RhdGljIGRpc3BsYXlcbiAgICBpZiAodGhpcy5fY29uZmlnLmRpc3BsYXkgPT09ICdzdGF0aWMnKSB7XG4gICAgICBkZWZhdWx0QnNQb3BwZXJDb25maWcubW9kaWZpZXJzID0gW3tcbiAgICAgICAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH1dXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRCc1BvcHBlckNvbmZpZyxcbiAgICAgIC4uLih0eXBlb2YgdGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcoZGVmYXVsdEJzUG9wcGVyQ29uZmlnKSA6IHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcpXG4gICAgfVxuICB9XG5cbiAgX3NlbGVjdE1lbnVJdGVtKHsga2V5LCB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGl0ZW1zID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9WSVNJQkxFX0lURU1TLCB0aGlzLl9tZW51KS5maWx0ZXIoaXNWaXNpYmxlKVxuXG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGlmIHRhcmdldCBpc24ndCBpbmNsdWRlZCBpbiBpdGVtcyAoZS5nLiB3aGVuIGV4cGFuZGluZyB0aGUgZHJvcGRvd24pXG4gICAgLy8gYWxsb3cgY3ljbGluZyB0byBnZXQgdGhlIGxhc3QgaXRlbSBpbiBjYXNlIGtleSBlcXVhbHMgQVJST1dfVVBfS0VZXG4gICAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoaXRlbXMsIHRhcmdldCwga2V5ID09PSBBUlJPV19ET1dOX0tFWSwgIWl0ZW1zLmluY2x1ZGVzKHRhcmdldCkpLmZvY3VzKClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKClcbiAgICB9KVxuICB9XG5cbiAgc3RhdGljIGNsZWFyTWVudXMoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LmJ1dHRvbiA9PT0gUklHSFRfTU9VU0VfQlVUVE9OIHx8IChldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LmtleSAhPT0gVEFCX0tFWSkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0b2dnbGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRSlcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0b2dnbGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gRHJvcGRvd24uZ2V0SW5zdGFuY2UodG9nZ2xlc1tpXSlcbiAgICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSBmYWxzZSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoIWNvbnRleHQuX2lzU2hvd24oKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBjb250ZXh0Ll9lbGVtZW50XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBjb25zdCBjb21wb3NlZFBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKVxuICAgICAgICBjb25zdCBpc01lbnVUYXJnZXQgPSBjb21wb3NlZFBhdGguaW5jbHVkZXMoY29udGV4dC5fbWVudSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbXBvc2VkUGF0aC5pbmNsdWRlcyhjb250ZXh0Ll9lbGVtZW50KSB8fFxuICAgICAgICAgIChjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnaW5zaWRlJyAmJiAhaXNNZW51VGFyZ2V0KSB8fFxuICAgICAgICAgIChjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnb3V0c2lkZScgJiYgaXNNZW51VGFyZ2V0KVxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGFiIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgZHJvcGRvd24gbWVudSBvciBldmVudHMgZnJvbSBjb250YWluZWQgaW5wdXRzIHNob3VsZG4ndCBjbG9zZSB0aGUgbWVudVxuICAgICAgICBpZiAoY29udGV4dC5fbWVudS5jb250YWlucyhldmVudC50YXJnZXQpICYmICgoZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgPT09IFRBQl9LRVkpIHx8IC9pbnB1dHxzZWxlY3R8b3B0aW9ufHRleHRhcmVhfGZvcm0vaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRQYXJlbnRGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkgfHwgZWxlbWVudC5wYXJlbnROb2RlXG4gIH1cblxuICBzdGF0aWMgZGF0YUFwaUtleWRvd25IYW5kbGVyKGV2ZW50KSB7XG4gICAgLy8gSWYgbm90IGlucHV0L3RleHRhcmVhOlxuICAgIC8vICAtIEFuZCBub3QgYSBrZXkgaW4gUkVHRVhQX0tFWURPV04gPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIC8vIElmIGlucHV0L3RleHRhcmVhOlxuICAgIC8vICAtIElmIHNwYWNlIGtleSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgLy8gIC0gSWYga2V5IGlzIG90aGVyIHRoYW4gZXNjYXBlXG4gICAgLy8gICAgLSBJZiBrZXkgaXMgbm90IHVwIG9yIGRvd24gPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIC8vICAgIC0gSWYgdHJpZ2dlciBpbnNpZGUgdGhlIG1lbnUgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSA/XG4gICAgICBldmVudC5rZXkgPT09IFNQQUNFX0tFWSB8fCAoZXZlbnQua2V5ICE9PSBFU0NBUEVfS0VZICYmXG4gICAgICAoKGV2ZW50LmtleSAhPT0gQVJST1dfRE9XTl9LRVkgJiYgZXZlbnQua2V5ICE9PSBBUlJPV19VUF9LRVkpIHx8XG4gICAgICAgIGV2ZW50LnRhcmdldC5jbG9zZXN0KFNFTEVDVE9SX01FTlUpKSkgOlxuICAgICAgIVJFR0VYUF9LRVlET1dOLnRlc3QoZXZlbnQua2V5KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBpZiAoIWlzQWN0aXZlICYmIGV2ZW50LmtleSA9PT0gRVNDQVBFX0tFWSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZ2V0VG9nZ2xlQnV0dG9uID0gdGhpcy5tYXRjaGVzKFNFTEVDVE9SX0RBVEFfVE9HR0xFKSA/IHRoaXMgOiBTZWxlY3RvckVuZ2luZS5wcmV2KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFKVswXVxuICAgIGNvbnN0IGluc3RhbmNlID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZShnZXRUb2dnbGVCdXR0b24pXG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZKSB7XG4gICAgICBpbnN0YW5jZS5oaWRlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09IEFSUk9XX1VQX0tFWSB8fCBldmVudC5rZXkgPT09IEFSUk9XX0RPV05fS0VZKSB7XG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIGluc3RhbmNlLnNob3coKVxuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5fc2VsZWN0TWVudUl0ZW0oZXZlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWlzQWN0aXZlIHx8IGV2ZW50LmtleSA9PT0gU1BBQ0VfS0VZKSB7XG4gICAgICBEcm9wZG93bi5jbGVhck1lbnVzKClcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX01FTlUsIERyb3Bkb3duLmRhdGFBcGlLZXlkb3duSGFuZGxlcilcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIERyb3Bkb3duLmNsZWFyTWVudXMpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWVVQX0RBVEFfQVBJLCBEcm9wZG93bi5jbGVhck1lbnVzKVxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykudG9nZ2xlKClcbn0pXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5Ecm9wZG93biB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihEcm9wZG93bilcblxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd25cbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogdXRpbC9zY3JvbGxCYXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICcuL2luZGV4J1xuXG5jb25zdCBTRUxFQ1RPUl9GSVhFRF9DT05URU5UID0gJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AnXG5jb25zdCBTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCA9ICcuc3RpY2t5LXRvcCdcblxuY2xhc3MgU2Nyb2xsQmFySGVscGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmJvZHlcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvaW5uZXJXaWR0aCN1c2FnZV9ub3Rlc1xuICAgIGNvbnN0IGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICByZXR1cm4gTWF0aC5hYnMod2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudFdpZHRoKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKVxuICAgIHRoaXMuX2Rpc2FibGVPdmVyRmxvdygpXG4gICAgLy8gZ2l2ZSBwYWRkaW5nIHRvIGVsZW1lbnQgdG8gYmFsYW5jZSB0aGUgaGlkZGVuIHNjcm9sbGJhciB3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsICdwYWRkaW5nUmlnaHQnLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpXG4gICAgLy8gdHJpY2s6IFdlIGFkanVzdCBwb3NpdGl2ZSBwYWRkaW5nUmlnaHQgYW5kIG5lZ2F0aXZlIG1hcmdpblJpZ2h0IHRvIHN0aWNreS10b3AgZWxlbWVudHMgdG8ga2VlcCBzaG93aW5nIGZ1bGx3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsICdwYWRkaW5nUmlnaHQnLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsICdtYXJnaW5SaWdodCcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgLSB3aWR0aClcbiAgfVxuXG4gIF9kaXNhYmxlT3ZlckZsb3coKSB7XG4gICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUodGhpcy5fZWxlbWVudCwgJ292ZXJmbG93JylcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcbiAgfVxuXG4gIF9zZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5nZXRXaWR0aCgpXG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGlmIChlbGVtZW50ICE9PSB0aGlzLl9lbGVtZW50ICYmIHdpbmRvdy5pbm5lcldpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCArIHNjcm9sbGJhcldpZHRoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3ApXG4gICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVtzdHlsZVByb3BdXG4gICAgICBlbGVtZW50LnN0eWxlW3N0eWxlUHJvcF0gPSBgJHtjYWxsYmFjayhOdW1iZXIucGFyc2VGbG9hdChjYWxjdWxhdGVkVmFsdWUpKX1weGBcbiAgICB9XG5cbiAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjaylcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgJ292ZXJmbG93JylcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsICdwYWRkaW5nUmlnaHQnKVxuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgJ3BhZGRpbmdSaWdodCcpXG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgJ21hcmdpblJpZ2h0JylcbiAgfVxuXG4gIF9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3ApIHtcbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGVsZW1lbnQuc3R5bGVbc3R5bGVQcm9wXVxuICAgIGlmIChhY3R1YWxWYWx1ZSkge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3AsIGFjdHVhbFZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIF9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3ApIHtcbiAgICBjb25zdCBtYW5pcHVsYXRpb25DYWxsQmFjayA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcClcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoc3R5bGVQcm9wKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3ApXG4gICAgICAgIGVsZW1lbnQuc3R5bGVbc3R5bGVQcm9wXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spXG4gIH1cblxuICBfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgY2FsbEJhY2spIHtcbiAgICBpZiAoaXNFbGVtZW50KHNlbGVjdG9yKSkge1xuICAgICAgY2FsbEJhY2soc2VsZWN0b3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2VsZW1lbnQpLmZvckVhY2goY2FsbEJhY2spXG4gICAgfVxuICB9XG5cbiAgaXNPdmVyZmxvd2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRXaWR0aCgpID4gMFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNjcm9sbEJhckhlbHBlclxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiB1dGlsL2JhY2tkcm9wLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCB7IGV4ZWN1dGUsIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24sIGdldEVsZW1lbnQsIHJlZmxvdywgdHlwZUNoZWNrQ29uZmlnIH0gZnJvbSAnLi9pbmRleCdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgY2xhc3NOYW1lOiAnbW9kYWwtYmFja2Ryb3AnLFxuICBpc1Zpc2libGU6IHRydWUsIC8vIGlmIGZhbHNlLCB3ZSB1c2UgdGhlIGJhY2tkcm9wIGhlbHBlciB3aXRob3V0IGFkZGluZyBhbnkgZWxlbWVudCB0byB0aGUgZG9tXG4gIGlzQW5pbWF0ZWQ6IGZhbHNlLFxuICByb290RWxlbWVudDogJ2JvZHknLCAvLyBnaXZlIHRoZSBjaG9pY2UgdG8gcGxhY2UgYmFja2Ryb3AgdW5kZXIgZGlmZmVyZW50IGVsZW1lbnRzXG4gIGNsaWNrQ2FsbGJhY2s6IG51bGxcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gIGlzVmlzaWJsZTogJ2Jvb2xlYW4nLFxuICBpc0FuaW1hdGVkOiAnYm9vbGVhbicsXG4gIHJvb3RFbGVtZW50OiAnKGVsZW1lbnR8c3RyaW5nKScsXG4gIGNsaWNrQ2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknXG59XG5jb25zdCBOQU1FID0gJ2JhY2tkcm9wJ1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcblxuY29uc3QgRVZFTlRfTU9VU0VET1dOID0gYG1vdXNlZG93bi5icy4ke05BTUV9YFxuXG5jbGFzcyBCYWNrZHJvcCB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlXG4gICAgdGhpcy5fZWxlbWVudCA9IG51bGxcbiAgfVxuXG4gIHNob3coY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5pc1Zpc2libGUpIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9hcHBlbmQoKVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICByZWZsb3codGhpcy5fZ2V0RWxlbWVudCgpKVxuICAgIH1cblxuICAgIHRoaXMuX2dldEVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICB9KVxuICB9XG5cbiAgaGlkZShjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2dldEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgdGhpcy5kaXNwb3NlKClcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgfSlcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfZ2V0RWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGJhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgIGJhY2tkcm9wLmNsYXNzTmFtZSA9IHRoaXMuX2NvbmZpZy5jbGFzc05hbWVcbiAgICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgICBiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZWxlbWVudCA9IGJhY2tkcm9wXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRcbiAgfVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IHt9KVxuICAgIH1cblxuICAgIC8vIHVzZSBnZXRFbGVtZW50KCkgd2l0aCB0aGUgZGVmYXVsdCBcImJvZHlcIiB0byBnZXQgYSBmcmVzaCBFbGVtZW50IG9uIGVhY2ggaW5zdGFudGlhdGlvblxuICAgIGNvbmZpZy5yb290RWxlbWVudCA9IGdldEVsZW1lbnQoY29uZmlnLnJvb3RFbGVtZW50KVxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9hcHBlbmQoKSB7XG4gICAgaWYgKHRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZy5yb290RWxlbWVudC5hcHBlbmQodGhpcy5fZ2V0RWxlbWVudCgpKVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2dldEVsZW1lbnQoKSwgRVZFTlRfTU9VU0VET1dOLCAoKSA9PiB7XG4gICAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5jbGlja0NhbGxiYWNrKVxuICAgIH0pXG5cbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gdHJ1ZVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOKVxuXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKVxuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZVxuICB9XG5cbiAgX2VtdWxhdGVBbmltYXRpb24oY2FsbGJhY2spIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCB0aGlzLl9nZXRFbGVtZW50KCksIHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhY2tkcm9wXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IHV0aWwvZm9jdXN0cmFwLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IHsgdHlwZUNoZWNrQ29uZmlnIH0gZnJvbSAnLi9pbmRleCdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgdHJhcEVsZW1lbnQ6IG51bGwsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG4gIGF1dG9mb2N1czogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgdHJhcEVsZW1lbnQ6ICdlbGVtZW50JyxcbiAgYXV0b2ZvY3VzOiAnYm9vbGVhbidcbn1cblxuY29uc3QgTkFNRSA9ICdmb2N1c3RyYXAnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5mb2N1c3RyYXAnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWX1gXG5cbmNvbnN0IFRBQl9LRVkgPSAnVGFiJ1xuY29uc3QgVEFCX05BVl9GT1JXQVJEID0gJ2ZvcndhcmQnXG5jb25zdCBUQUJfTkFWX0JBQ0tXQVJEID0gJ2JhY2t3YXJkJ1xuXG5jbGFzcyBGb2N1c1RyYXAge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2VcbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gbnVsbFxuICB9XG5cbiAgYWN0aXZhdGUoKSB7XG4gICAgY29uc3QgeyB0cmFwRWxlbWVudCwgYXV0b2ZvY3VzIH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmICh0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGF1dG9mb2N1cykge1xuICAgICAgdHJhcEVsZW1lbnQuZm9jdXMoKVxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSkgLy8gZ3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBmb2N1cyBsb29wXG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9GT0NVU0lOLCBldmVudCA9PiB0aGlzLl9oYW5kbGVGb2N1c2luKGV2ZW50KSlcbiAgICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fVEFCLCBldmVudCA9PiB0aGlzLl9oYW5kbGVLZXlkb3duKGV2ZW50KSlcblxuICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZVxuICB9XG5cbiAgZGVhY3RpdmF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlXG4gICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9oYW5kbGVGb2N1c2luKGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IGV2ZW50XG4gICAgY29uc3QgeyB0cmFwRWxlbWVudCB9ID0gdGhpcy5fY29uZmlnXG5cbiAgICBpZiAodGFyZ2V0ID09PSBkb2N1bWVudCB8fCB0YXJnZXQgPT09IHRyYXBFbGVtZW50IHx8IHRyYXBFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRzID0gU2VsZWN0b3JFbmdpbmUuZm9jdXNhYmxlQ2hpbGRyZW4odHJhcEVsZW1lbnQpXG5cbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0cmFwRWxlbWVudC5mb2N1cygpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID09PSBUQUJfTkFWX0JBQ0tXQVJEKSB7XG4gICAgICBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXS5mb2N1cygpXG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRzWzBdLmZvY3VzKClcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlS2V5ZG93bihldmVudCkge1xuICAgIGlmIChldmVudC5rZXkgIT09IFRBQl9LRVkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBldmVudC5zaGlmdEtleSA/IFRBQl9OQVZfQkFDS1dBUkQgOiBUQUJfTkFWX0ZPUldBUkRcbiAgfVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IHt9KVxuICAgIH1cbiAgICB0eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCBEZWZhdWx0VHlwZSlcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9jdXNUcmFwXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IG1vZGFsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBpc1JUTCxcbiAgaXNWaXNpYmxlLFxuICByZWZsb3csXG4gIHR5cGVDaGVja0NvbmZpZ1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IFNjcm9sbEJhckhlbHBlciBmcm9tICcuL3V0aWwvc2Nyb2xsYmFyJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcbmltcG9ydCBCYWNrZHJvcCBmcm9tICcuL3V0aWwvYmFja2Ryb3AnXG5pbXBvcnQgRm9jdXNUcmFwIGZyb20gJy4vdXRpbC9mb2N1c3RyYXAnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ21vZGFsJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMubW9kYWwnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcbmNvbnN0IEVTQ0FQRV9LRVkgPSAnRXNjYXBlJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIGZvY3VzOiB0cnVlXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBmb2N1czogJ2Jvb2xlYW4nXG59XG5cbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9SRVNJWkUgPSBgcmVzaXplJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfRElTTUlTUyA9IGBjbGljay5kaXNtaXNzJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFVVBfRElTTUlTUyA9IGBtb3VzZXVwLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRURPV05fRElTTUlTUyA9IGBtb3VzZWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX09QRU4gPSAnbW9kYWwtb3BlbidcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX1NUQVRJQyA9ICdtb2RhbC1zdGF0aWMnXG5cbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm1vZGFsLnNob3cnXG5jb25zdCBTRUxFQ1RPUl9ESUFMT0cgPSAnLm1vZGFsLWRpYWxvZydcbmNvbnN0IFNFTEVDVE9SX01PREFMX0JPRFkgPSAnLm1vZGFsLWJvZHknXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiXSdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIE1vZGFsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQpXG5cbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2RpYWxvZyA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRElBTE9HLCB0aGlzLl9lbGVtZW50KVxuICAgIHRoaXMuX2JhY2tkcm9wID0gdGhpcy5faW5pdGlhbGl6ZUJhY2tEcm9wKClcbiAgICB0aGlzLl9mb2N1c3RyYXAgPSB0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKClcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2VcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuICAgIHRoaXMuX3Njcm9sbEJhciA9IG5ldyBTY3JvbGxCYXJIZWxwZXIoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcblxuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVywge1xuICAgICAgcmVsYXRlZFRhcmdldFxuICAgIH0pXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlXG5cbiAgICBpZiAodGhpcy5faXNBbmltYXRlZCgpKSB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5fc2Nyb2xsQmFyLmhpZGUoKVxuXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfT1BFTilcblxuICAgIHRoaXMuX2FkanVzdERpYWxvZygpXG5cbiAgICB0aGlzLl9zZXRFc2NhcGVFdmVudCgpXG4gICAgdGhpcy5fc2V0UmVzaXplRXZlbnQoKVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2RpYWxvZywgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MsICgpID0+IHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VVUF9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMuX2VsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICB0aGlzLl9zaG93QmFja2Ryb3AoKCkgPT4gdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZVxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLl9pc0FuaW1hdGVkKClcblxuICAgIGlmIChpc0FuaW1hdGVkKSB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5fc2V0RXNjYXBlRXZlbnQoKVxuICAgIHRoaXMuX3NldFJlc2l6ZUV2ZW50KClcblxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMSUNLX0RJU01JU1MpXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9kaWFsb2csIEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTKVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9oaWRlTW9kYWwoKSwgdGhpcy5fZWxlbWVudCwgaXNBbmltYXRlZClcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgW3dpbmRvdywgdGhpcy5fZGlhbG9nXVxuICAgICAgLmZvckVhY2goaHRtbEVsZW1lbnQgPT4gRXZlbnRIYW5kbGVyLm9mZihodG1sRWxlbWVudCwgRVZFTlRfS0VZKSlcblxuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKVxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIGhhbmRsZVVwZGF0ZSgpIHtcbiAgICB0aGlzLl9hZGp1c3REaWFsb2coKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBpc1Zpc2libGU6IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKSwgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlXG4gICAgICBpc0FuaW1hdGVkOiB0aGlzLl9pc0FuaW1hdGVkKClcbiAgICB9KVxuICB9XG5cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBjb25zdCBpc0FuaW1hdGVkID0gdGhpcy5faXNBbmltYXRlZCgpXG4gICAgY29uc3QgbW9kYWxCb2R5ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NT0RBTF9CT0RZLCB0aGlzLl9kaWFsb2cpXG5cbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSB8fCB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAvLyBEb24ndCBtb3ZlIG1vZGFsJ3MgRE9NIHBvc2l0aW9uXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSlcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKVxuICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMFxuXG4gICAgaWYgKG1vZGFsQm9keSkge1xuICAgICAgbW9kYWxCb2R5LnNjcm9sbFRvcCA9IDBcbiAgICB9XG5cbiAgICBpZiAoaXNBbmltYXRlZCkge1xuICAgICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IHRyYW5zaXRpb25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayh0cmFuc2l0aW9uQ29tcGxldGUsIHRoaXMuX2RpYWxvZywgaXNBbmltYXRlZClcbiAgfVxuXG4gIF9zZXRFc2NhcGVFdmVudCgpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkICYmIGV2ZW50LmtleSA9PT0gRVNDQVBFX0tFWSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jb25maWcua2V5Ym9hcmQgJiYgZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZKSB7XG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTKVxuICAgIH1cbiAgfVxuXG4gIF9zZXRSZXNpemVFdmVudCgpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB0aGlzLl9hZGp1c3REaWFsb2coKSlcbiAgICB9IGVsc2Uge1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZih3aW5kb3csIEVWRU5UX1JFU0laRSlcbiAgICB9XG4gIH1cblxuICBfaGlkZU1vZGFsKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKVxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJylcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfT1BFTilcbiAgICAgIHRoaXMuX3Jlc2V0QWRqdXN0bWVudHMoKVxuICAgICAgdGhpcy5fc2Nyb2xsQmFyLnJlc2V0KClcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTilcbiAgICB9KVxuICB9XG5cbiAgX3Nob3dCYWNrZHJvcChjYWxsYmFjaykge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTElDS19ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICBpZiAodGhpcy5faWdub3JlQmFja2Ryb3BDbGljaykge1xuICAgICAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdyhjYWxsYmFjaylcbiAgfVxuXG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpXG4gIH1cblxuICBfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRClcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xhc3NMaXN0LCBzY3JvbGxIZWlnaHQsIHN0eWxlIH0gPSB0aGlzLl9lbGVtZW50XG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodFxuXG4gICAgLy8gcmV0dXJuIGlmIHRoZSBmb2xsb3dpbmcgYmFja2dyb3VuZCB0cmFuc2l0aW9uIGhhc24ndCB5ZXQgY29tcGxldGVkXG4gICAgaWYgKCghaXNNb2RhbE92ZXJmbG93aW5nICYmIHN0eWxlLm92ZXJmbG93WSA9PT0gJ2hpZGRlbicpIHx8IGNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NUQVRJQykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICBzdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJ1xuICAgIH1cblxuICAgIGNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TVEFUSUMpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU1RBVElDKVxuICAgICAgaWYgKCFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgc3R5bGUub3ZlcmZsb3dZID0gJydcbiAgICAgICAgfSwgdGhpcy5fZGlhbG9nKVxuICAgICAgfVxuICAgIH0sIHRoaXMuX2RpYWxvZylcblxuICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgX2FkanVzdERpYWxvZygpIHtcbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuX3Njcm9sbEJhci5nZXRXaWR0aCgpXG4gICAgY29uc3QgaXNCb2R5T3ZlcmZsb3dpbmcgPSBzY3JvbGxiYXJXaWR0aCA+IDBcblxuICAgIGlmICgoIWlzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZyAmJiAhaXNSVEwoKSkgfHwgKGlzQm9keU92ZXJmbG93aW5nICYmICFpc01vZGFsT3ZlcmZsb3dpbmcgJiYgaXNSVEwoKSkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSBgJHtzY3JvbGxiYXJXaWR0aH1weGBcbiAgICB9XG5cbiAgICBpZiAoKGlzQm9keU92ZXJmbG93aW5nICYmICFpc01vZGFsT3ZlcmZsb3dpbmcgJiYgIWlzUlRMKCkpIHx8ICghaXNCb2R5T3ZlcmZsb3dpbmcgJiYgaXNNb2RhbE92ZXJmbG93aW5nICYmIGlzUlRMKCkpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke3Njcm9sbGJhcldpZHRofXB4YFxuICAgIH1cbiAgfVxuXG4gIF9yZXNldEFkanVzdG1lbnRzKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJ1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJydcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnLCByZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKHJlbGF0ZWRUYXJnZXQpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfU0hPVywgc2hvd0V2ZW50ID0+IHtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIC8vIG9ubHkgcmVnaXN0ZXIgZm9jdXMgcmVzdG9yZXIgaWYgbW9kYWwgd2lsbCBhY3R1YWxseSBnZXQgc2hvd25cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4sICgpID0+IHtcbiAgICAgIGlmIChpc1Zpc2libGUodGhpcykpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICAvLyBhdm9pZCBjb25mbGljdCB3aGVuIGNsaWNraW5nIG1vZGRhbCB0b2dnbGVyIHdoaWxlIGFub3RoZXIgb25lIGlzIG9wZW5cbiAgY29uc3QgYWxsUmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SKVxuICBpZiAoYWxsUmVhZHlPcGVuKSB7XG4gICAgTW9kYWwuZ2V0SW5zdGFuY2UoYWxsUmVhZHlPcGVuKS5oaWRlKClcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldClcblxuICBkYXRhLnRvZ2dsZSh0aGlzKVxufSlcblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoTW9kYWwpXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5Nb2RhbCB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihNb2RhbClcblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogb2ZmY2FudmFzLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBpc0Rpc2FibGVkLFxuICBpc1Zpc2libGUsXG4gIHR5cGVDaGVja0NvbmZpZ1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgU2Nyb2xsQmFySGVscGVyIGZyb20gJy4vdXRpbC9zY3JvbGxiYXInXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuL2RvbS9tYW5pcHVsYXRvcidcbmltcG9ydCBCYWNrZHJvcCBmcm9tICcuL3V0aWwvYmFja2Ryb3AnXG5pbXBvcnQgRm9jdXNUcmFwIGZyb20gJy4vdXRpbC9mb2N1c3RyYXAnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ29mZmNhbnZhcydcbmNvbnN0IERBVEFfS0VZID0gJ2JzLm9mZmNhbnZhcydcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGJhY2tkcm9wOiB0cnVlLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgc2Nyb2xsOiBmYWxzZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYmFja2Ryb3A6ICdib29sZWFuJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgc2Nyb2xsOiAnYm9vbGVhbidcbn1cblxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX0JBQ0tEUk9QID0gJ29mZmNhbnZhcy1iYWNrZHJvcCdcbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm9mZmNhbnZhcy5zaG93J1xuXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cIm9mZmNhbnZhc1wiXSdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIE9mZmNhbnZhcyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50KVxuXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpXG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpXG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICAvLyBQdWJsaWNcblxuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCB7IHJlbGF0ZWRUYXJnZXQgfSlcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTaG93biA9IHRydWVcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSdcblxuICAgIHRoaXMuX2JhY2tkcm9wLnNob3coKVxuXG4gICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsKSB7XG4gICAgICBuZXcgU2Nyb2xsQmFySGVscGVyKCkuaGlkZSgpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJylcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKVxuICAgICAgfVxuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiwgeyByZWxhdGVkVGFyZ2V0IH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcbiAgICB0aGlzLl9lbGVtZW50LmJsdXIoKVxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fYmFja2Ryb3AuaGlkZSgpXG5cbiAgICBjb25zdCBjb21wbGV0ZUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSlcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJylcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJylcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nXG5cbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgICBuZXcgU2Nyb2xsQmFySGVscGVyKCkucmVzZXQoKVxuICAgICAgfVxuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxiYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKClcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGNsYXNzTmFtZTogQ0xBU1NfTkFNRV9CQUNLRFJPUCxcbiAgICAgIGlzVmlzaWJsZTogdGhpcy5fY29uZmlnLmJhY2tkcm9wLFxuICAgICAgaXNBbmltYXRlZDogdHJ1ZSxcbiAgICAgIHJvb3RFbGVtZW50OiB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUsXG4gICAgICBjbGlja0NhbGxiYWNrOiAoKSA9PiB0aGlzLmhpZGUoKVxuICAgIH0pXG4gIH1cblxuICBfaW5pdGlhbGl6ZUZvY3VzVHJhcCgpIHtcbiAgICByZXR1cm4gbmV3IEZvY3VzVHJhcCh7XG4gICAgICB0cmFwRWxlbWVudDogdGhpcy5fZWxlbWVudFxuICAgIH0pXG4gIH1cblxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCAmJiBldmVudC5rZXkgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiwgKCkgPT4ge1xuICAgIC8vIGZvY3VzIG9uIHRyaWdnZXIgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0pXG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBhIHRvZ2dsZXIgb2YgYW4gb2ZmY2FudmFzLCB3aGlsZSBhbm90aGVyIGlzIG9wZW5cbiAgY29uc3QgYWxsUmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SKVxuICBpZiAoYWxsUmVhZHlPcGVuICYmIGFsbFJlYWR5T3BlbiAhPT0gdGFyZ2V0KSB7XG4gICAgT2ZmY2FudmFzLmdldEluc3RhbmNlKGFsbFJlYWR5T3BlbikuaGlkZSgpXG4gIH1cblxuICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KVxuICBkYXRhLnRvZ2dsZSh0aGlzKVxufSlcblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT5cbiAgU2VsZWN0b3JFbmdpbmUuZmluZChPUEVOX1NFTEVDVE9SKS5mb3JFYWNoKGVsID0+IE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKGVsKS5zaG93KCkpXG4pXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKE9mZmNhbnZhcylcbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihPZmZjYW52YXMpXG5cbmV4cG9ydCBkZWZhdWx0IE9mZmNhbnZhc1xuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiB1dGlsL3Nhbml0aXplci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IHVyaUF0dHJpYnV0ZXMgPSBuZXcgU2V0KFtcbiAgJ2JhY2tncm91bmQnLFxuICAnY2l0ZScsXG4gICdocmVmJyxcbiAgJ2l0ZW10eXBlJyxcbiAgJ2xvbmdkZXNjJyxcbiAgJ3Bvc3RlcicsXG4gICdzcmMnLFxuICAneGxpbms6aHJlZidcbl0pXG5cbmNvbnN0IEFSSUFfQVRUUklCVVRFX1BBVFRFUk4gPSAvXmFyaWEtW1xcdy1dKiQvaVxuXG4vKipcbiAqIEEgcGF0dGVybiB0aGF0IHJlY29nbml6ZXMgYSBjb21tb25seSB1c2VmdWwgc3Vic2V0IG9mIFVSTHMgdGhhdCBhcmUgc2FmZS5cbiAqXG4gKiBTaG91dG91dCB0byBBbmd1bGFyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi8xMi4yLngvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHNcbiAqL1xuY29uc3QgU0FGRV9VUkxfUEFUVEVSTiA9IC9eKD86KD86aHR0cHM/fG1haWx0b3xmdHB8dGVsfGZpbGV8c21zKTp8W14jJi86P10qKD86WyMvP118JCkpL2lcblxuLyoqXG4gKiBBIHBhdHRlcm4gdGhhdCBtYXRjaGVzIHNhZmUgZGF0YSBVUkxzLiBPbmx5IG1hdGNoZXMgaW1hZ2UsIHZpZGVvIGFuZCBhdWRpbyB0eXBlcy5cbiAqXG4gKiBTaG91dG91dCB0byBBbmd1bGFyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi8xMi4yLngvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHNcbiAqL1xuY29uc3QgREFUQV9VUkxfUEFUVEVSTiA9IC9eZGF0YTooPzppbWFnZVxcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cXC8oPzptcGVnfG1wNHxvZ2d8d2VibSl8YXVkaW9cXC8oPzptcDN8b2dhfG9nZ3xvcHVzKSk7YmFzZTY0LFtcXGQrL2Etel0rPSokL2lcblxuY29uc3QgYWxsb3dlZEF0dHJpYnV0ZSA9IChhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVMaXN0KSA9PiB7XG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIGlmIChhbGxvd2VkQXR0cmlidXRlTGlzdC5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgIGlmICh1cmlBdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4oU0FGRV9VUkxfUEFUVEVSTi50ZXN0KGF0dHJpYnV0ZS5ub2RlVmFsdWUpIHx8IERBVEFfVVJMX1BBVFRFUk4udGVzdChhdHRyaWJ1dGUubm9kZVZhbHVlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgY29uc3QgcmVnRXhwID0gYWxsb3dlZEF0dHJpYnV0ZUxpc3QuZmlsdGVyKGF0dHJpYnV0ZVJlZ2V4ID0+IGF0dHJpYnV0ZVJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKVxuXG4gIC8vIENoZWNrIGlmIGEgcmVndWxhciBleHByZXNzaW9uIHZhbGlkYXRlcyB0aGUgYXR0cmlidXRlLlxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVnRXhwLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKHJlZ0V4cFtpXS50ZXN0KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgY29uc3QgRGVmYXVsdEFsbG93bGlzdCA9IHtcbiAgLy8gR2xvYmFsIGF0dHJpYnV0ZXMgYWxsb3dlZCBvbiBhbnkgc3VwcGxpZWQgZWxlbWVudCBiZWxvdy5cbiAgJyonOiBbJ2NsYXNzJywgJ2RpcicsICdpZCcsICdsYW5nJywgJ3JvbGUnLCBBUklBX0FUVFJJQlVURV9QQVRURVJOXSxcbiAgYTogWyd0YXJnZXQnLCAnaHJlZicsICd0aXRsZScsICdyZWwnXSxcbiAgYXJlYTogW10sXG4gIGI6IFtdLFxuICBicjogW10sXG4gIGNvbDogW10sXG4gIGNvZGU6IFtdLFxuICBkaXY6IFtdLFxuICBlbTogW10sXG4gIGhyOiBbXSxcbiAgaDE6IFtdLFxuICBoMjogW10sXG4gIGgzOiBbXSxcbiAgaDQ6IFtdLFxuICBoNTogW10sXG4gIGg2OiBbXSxcbiAgaTogW10sXG4gIGltZzogWydzcmMnLCAnc3Jjc2V0JywgJ2FsdCcsICd0aXRsZScsICd3aWR0aCcsICdoZWlnaHQnXSxcbiAgbGk6IFtdLFxuICBvbDogW10sXG4gIHA6IFtdLFxuICBwcmU6IFtdLFxuICBzOiBbXSxcbiAgc21hbGw6IFtdLFxuICBzcGFuOiBbXSxcbiAgc3ViOiBbXSxcbiAgc3VwOiBbXSxcbiAgc3Ryb25nOiBbXSxcbiAgdTogW10sXG4gIHVsOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVIdG1sKHVuc2FmZUh0bWwsIGFsbG93TGlzdCwgc2FuaXRpemVGbikge1xuICBpZiAoIXVuc2FmZUh0bWwubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc2FmZUh0bWxcbiAgfVxuXG4gIGlmIChzYW5pdGl6ZUZuICYmIHR5cGVvZiBzYW5pdGl6ZUZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHNhbml0aXplRm4odW5zYWZlSHRtbClcbiAgfVxuXG4gIGNvbnN0IGRvbVBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKClcbiAgY29uc3QgY3JlYXRlZERvY3VtZW50ID0gZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyh1bnNhZmVIdG1sLCAndGV4dC9odG1sJylcbiAgY29uc3QgZWxlbWVudHMgPSBbXS5jb25jYXQoLi4uY3JlYXRlZERvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbCgnKicpKVxuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tpXVxuICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAoIU9iamVjdC5rZXlzKGFsbG93TGlzdCkuaW5jbHVkZXMoZWxlbWVudE5hbWUpKSB7XG4gICAgICBlbGVtZW50LnJlbW92ZSgpXG5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlTGlzdCA9IFtdLmNvbmNhdCguLi5lbGVtZW50LmF0dHJpYnV0ZXMpXG4gICAgY29uc3QgYWxsb3dlZEF0dHJpYnV0ZXMgPSBbXS5jb25jYXQoYWxsb3dMaXN0WycqJ10gfHwgW10sIGFsbG93TGlzdFtlbGVtZW50TmFtZV0gfHwgW10pXG5cbiAgICBhdHRyaWJ1dGVMaXN0LmZvckVhY2goYXR0cmlidXRlID0+IHtcbiAgICAgIGlmICghYWxsb3dlZEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVzKSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUubm9kZU5hbWUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVkRG9jdW1lbnQuYm9keS5pbm5lckhUTUxcbn1cbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogdG9vbHRpcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCAqIGFzIFBvcHBlciBmcm9tICdAcG9wcGVyanMvY29yZSdcblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBmaW5kU2hhZG93Um9vdCxcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0VUlELFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMLFxuICBub29wLFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IHsgRGVmYXVsdEFsbG93bGlzdCwgc2FuaXRpemVIdG1sIH0gZnJvbSAnLi91dGlsL3Nhbml0aXplcidcbmltcG9ydCBEYXRhIGZyb20gJy4vZG9tL2RhdGEnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICd0b29sdGlwJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMudG9vbHRpcCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBDTEFTU19QUkVGSVggPSAnYnMtdG9vbHRpcCdcbmNvbnN0IERJU0FMTE9XRURfQVRUUklCVVRFUyA9IG5ldyBTZXQoWydzYW5pdGl6ZScsICdhbGxvd0xpc3QnLCAnc2FuaXRpemVGbiddKVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJyxcbiAgdGl0bGU6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJyxcbiAgdHJpZ2dlcjogJ3N0cmluZycsXG4gIGRlbGF5OiAnKG51bWJlcnxvYmplY3QpJyxcbiAgaHRtbDogJ2Jvb2xlYW4nLFxuICBzZWxlY3RvcjogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICBwbGFjZW1lbnQ6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgY29udGFpbmVyOiAnKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pJyxcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiAnYXJyYXknLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBjdXN0b21DbGFzczogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIHBvcHBlckNvbmZpZzogJyhudWxsfG9iamVjdHxmdW5jdGlvbiknXG59XG5cbmNvbnN0IEF0dGFjaG1lbnRNYXAgPSB7XG4gIEFVVE86ICdhdXRvJyxcbiAgVE9QOiAndG9wJyxcbiAgUklHSFQ6IGlzUlRMKCkgPyAnbGVmdCcgOiAncmlnaHQnLFxuICBCT1RUT006ICdib3R0b20nLFxuICBMRUZUOiBpc1JUTCgpID8gJ3JpZ2h0JyA6ICdsZWZ0J1xufVxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhbmltYXRpb246IHRydWUsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPicgK1xuICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+JyArXG4gICAgICAgICAgICAnPC9kaXY+JyxcbiAgdHJpZ2dlcjogJ2hvdmVyIGZvY3VzJyxcbiAgdGl0bGU6ICcnLFxuICBkZWxheTogMCxcbiAgaHRtbDogZmFsc2UsXG4gIHNlbGVjdG9yOiBmYWxzZSxcbiAgcGxhY2VtZW50OiAndG9wJyxcbiAgb2Zmc2V0OiBbMCwgMF0sXG4gIGNvbnRhaW5lcjogZmFsc2UsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXSxcbiAgYm91bmRhcnk6ICdjbGlwcGluZ1BhcmVudHMnLFxuICBjdXN0b21DbGFzczogJycsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICBhbGxvd0xpc3Q6IERlZmF1bHRBbGxvd2xpc3QsXG4gIHBvcHBlckNvbmZpZzogbnVsbFxufVxuXG5jb25zdCBFdmVudCA9IHtcbiAgSElERTogYGhpZGUke0VWRU5UX0tFWX1gLFxuICBISURERU46IGBoaWRkZW4ke0VWRU5UX0tFWX1gLFxuICBTSE9XOiBgc2hvdyR7RVZFTlRfS0VZfWAsXG4gIFNIT1dOOiBgc2hvd24ke0VWRU5UX0tFWX1gLFxuICBJTlNFUlRFRDogYGluc2VydGVkJHtFVkVOVF9LRVl9YCxcbiAgQ0xJQ0s6IGBjbGljayR7RVZFTlRfS0VZfWAsXG4gIEZPQ1VTSU46IGBmb2N1c2luJHtFVkVOVF9LRVl9YCxcbiAgRk9DVVNPVVQ6IGBmb2N1c291dCR7RVZFTlRfS0VZfWAsXG4gIE1PVVNFRU5URVI6IGBtb3VzZWVudGVyJHtFVkVOVF9LRVl9YCxcbiAgTU9VU0VMRUFWRTogYG1vdXNlbGVhdmUke0VWRU5UX0tFWX1gXG59XG5cbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9NT0RBTCA9ICdtb2RhbCdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuXG5jb25zdCBIT1ZFUl9TVEFURV9TSE9XID0gJ3Nob3cnXG5jb25zdCBIT1ZFUl9TVEFURV9PVVQgPSAnb3V0J1xuXG5jb25zdCBTRUxFQ1RPUl9UT09MVElQX0lOTkVSID0gJy50b29sdGlwLWlubmVyJ1xuY29uc3QgU0VMRUNUT1JfTU9EQUwgPSBgLiR7Q0xBU1NfTkFNRV9NT0RBTH1gXG5cbmNvbnN0IEVWRU5UX01PREFMX0hJREUgPSAnaGlkZS5icy5tb2RhbCdcblxuY29uc3QgVFJJR0dFUl9IT1ZFUiA9ICdob3ZlcidcbmNvbnN0IFRSSUdHRVJfRk9DVVMgPSAnZm9jdXMnXG5jb25zdCBUUklHR0VSX0NMSUNLID0gJ2NsaWNrJ1xuY29uc3QgVFJJR0dFUl9NQU5VQUwgPSAnbWFudWFsJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgVG9vbHRpcCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKVxuICAgIH1cblxuICAgIHN1cGVyKGVsZW1lbnQpXG5cbiAgICAvLyBwcml2YXRlXG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZVxuICAgIHRoaXMuX3RpbWVvdXQgPSAwXG4gICAgdGhpcy5faG92ZXJTdGF0ZSA9ICcnXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlciA9IHt9XG4gICAgdGhpcy5fcG9wcGVyID0gbnVsbFxuXG4gICAgLy8gUHJvdGVjdGVkXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLnRpcCA9IG51bGxcblxuICAgIHRoaXMuX3NldExpc3RlbmVycygpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRXZlbnQoKSB7XG4gICAgcmV0dXJuIEV2ZW50XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWVcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2VcbiAgfVxuXG4gIHRvZ2dsZUVuYWJsZWQoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gIXRoaXMuX2lzRW5hYmxlZFxuICB9XG5cbiAgdG9nZ2xlKGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChldmVudCkge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudClcblxuICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlci5jbGljayA9ICFjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyLmNsaWNrXG5cbiAgICAgIGlmIChjb250ZXh0Ll9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgY29udGV4dC5fZW50ZXIobnVsbCwgY29udGV4dClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuX2xlYXZlKG51bGwsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmdldFRpcEVsZW1lbnQoKS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XKSkge1xuICAgICAgICB0aGlzLl9sZWF2ZShudWxsLCB0aGlzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fZW50ZXIobnVsbCwgdGhpcylcbiAgICB9XG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKVxuXG4gICAgaWYgKHRoaXMudGlwKSB7XG4gICAgICB0aGlzLnRpcC5yZW1vdmUoKVxuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKVxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMnKVxuICAgIH1cblxuICAgIGlmICghKHRoaXMuaXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuU0hPVylcbiAgICBjb25zdCBzaGFkb3dSb290ID0gZmluZFNoYWRvd1Jvb3QodGhpcy5fZWxlbWVudClcbiAgICBjb25zdCBpc0luVGhlRG9tID0gc2hhZG93Um9vdCA9PT0gbnVsbCA/XG4gICAgICB0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpIDpcbiAgICAgIHNoYWRvd1Jvb3QuY29udGFpbnModGhpcy5fZWxlbWVudClcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAhaXNJblRoZURvbSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQSB0cmljayB0byByZWNyZWF0ZSBhIHRvb2x0aXAgaW4gY2FzZSBhIG5ldyB0aXRsZSBpcyBnaXZlbiBieSB1c2luZyB0aGUgTk9UIGRvY3VtZW50ZWQgYGRhdGEtYnMtb3JpZ2luYWwtdGl0bGVgXG4gICAgLy8gVGhpcyB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIgaW4gZmF2b3Igb2YgYSBgc2V0Q29udGVudGAgbWV0aG9kXG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IuTkFNRSA9PT0gJ3Rvb2x0aXAnICYmIHRoaXMudGlwICYmIHRoaXMuZ2V0VGl0bGUoKSAhPT0gdGhpcy50aXAucXVlcnlTZWxlY3RvcihTRUxFQ1RPUl9UT09MVElQX0lOTkVSKS5pbm5lckhUTUwpIHtcbiAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKVxuICAgICAgdGhpcy50aXAucmVtb3ZlKClcbiAgICAgIHRoaXMudGlwID0gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpXG4gICAgY29uc3QgdGlwSWQgPSBnZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKVxuXG4gICAgdGlwLnNldEF0dHJpYnV0ZSgnaWQnLCB0aXBJZClcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRpcElkKVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSlcbiAgICB9XG5cbiAgICBjb25zdCBwbGFjZW1lbnQgPSB0eXBlb2YgdGhpcy5fY29uZmlnLnBsYWNlbWVudCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICB0aGlzLl9jb25maWcucGxhY2VtZW50LmNhbGwodGhpcywgdGlwLCB0aGlzLl9lbGVtZW50KSA6XG4gICAgICB0aGlzLl9jb25maWcucGxhY2VtZW50XG5cbiAgICBjb25zdCBhdHRhY2htZW50ID0gdGhpcy5fZ2V0QXR0YWNobWVudChwbGFjZW1lbnQpXG4gICAgdGhpcy5fYWRkQXR0YWNobWVudENsYXNzKGF0dGFjaG1lbnQpXG5cbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gdGhpcy5fY29uZmlnXG4gICAgRGF0YS5zZXQodGlwLCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKVxuXG4gICAgaWYgKCF0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMudGlwKSkge1xuICAgICAgY29udGFpbmVyLmFwcGVuZCh0aXApXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LklOU0VSVEVEKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wb3BwZXIgPSBQb3BwZXIuY3JlYXRlUG9wcGVyKHRoaXMuX2VsZW1lbnQsIHRpcCwgdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKGF0dGFjaG1lbnQpKVxuICAgIH1cblxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IGN1c3RvbUNsYXNzID0gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmN1c3RvbUNsYXNzKVxuICAgIGlmIChjdXN0b21DbGFzcykge1xuICAgICAgdGlwLmNsYXNzTGlzdC5hZGQoLi4uY3VzdG9tQ2xhc3Muc3BsaXQoJyAnKSlcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgY29uc3QgcHJldkhvdmVyU3RhdGUgPSB0aGlzLl9ob3ZlclN0YXRlXG5cbiAgICAgIHRoaXMuX2hvdmVyU3RhdGUgPSBudWxsXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LlNIT1dOKVxuXG4gICAgICBpZiAocHJldkhvdmVyU3RhdGUgPT09IEhPVkVSX1NUQVRFX09VVCkge1xuICAgICAgICB0aGlzLl9sZWF2ZShudWxsLCB0aGlzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLnRpcC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKVxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX3BvcHBlcikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KClcbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ob3ZlclN0YXRlICE9PSBIT1ZFUl9TVEFURV9TSE9XKSB7XG4gICAgICAgIHRpcC5yZW1vdmUoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jbGVhblRpcENsYXNzKClcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JylcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSElEREVOKVxuXG4gICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcbiAgICB9XG5cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkhJREUpXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgcmVtb3ZlIHRoZSBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pXG4gICAgICAgIC5mb3JFYWNoKGVsZW1lbnQgPT4gRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCkpXG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0NMSUNLXSA9IGZhbHNlXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0ZPQ1VTXSA9IGZhbHNlXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0hPVkVSXSA9IGZhbHNlXG5cbiAgICBjb25zdCBpc0FuaW1hdGVkID0gdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSlcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLnRpcCwgaXNBbmltYXRlZClcbiAgICB0aGlzLl9ob3ZlclN0YXRlID0gJydcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKClcbiAgICB9XG4gIH1cblxuICAvLyBQcm90ZWN0ZWRcblxuICBpc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuZ2V0VGl0bGUoKSlcbiAgfVxuXG4gIGdldFRpcEVsZW1lbnQoKSB7XG4gICAgaWYgKHRoaXMudGlwKSB7XG4gICAgICByZXR1cm4gdGhpcy50aXBcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBlbGVtZW50LmlubmVySFRNTCA9IHRoaXMuX2NvbmZpZy50ZW1wbGF0ZVxuXG4gICAgY29uc3QgdGlwID0gZWxlbWVudC5jaGlsZHJlblswXVxuICAgIHRoaXMuc2V0Q29udGVudCh0aXApXG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9GQURFLCBDTEFTU19OQU1FX1NIT1cpXG5cbiAgICB0aGlzLnRpcCA9IHRpcFxuICAgIHJldHVybiB0aGlzLnRpcFxuICB9XG5cbiAgc2V0Q29udGVudCh0aXApIHtcbiAgICB0aGlzLl9zYW5pdGl6ZUFuZFNldENvbnRlbnQodGlwLCB0aGlzLmdldFRpdGxlKCksIFNFTEVDVE9SX1RPT0xUSVBfSU5ORVIpXG4gIH1cblxuICBfc2FuaXRpemVBbmRTZXRDb250ZW50KHRlbXBsYXRlLCBjb250ZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHRlbXBsYXRlRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IsIHRlbXBsYXRlKVxuXG4gICAgaWYgKCFjb250ZW50ICYmIHRlbXBsYXRlRWxlbWVudCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LnJlbW92ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3ZSB1c2UgYXBwZW5kIGZvciBodG1sIG9iamVjdHMgdG8gbWFpbnRhaW4ganMgZXZlbnRzXG4gICAgdGhpcy5zZXRFbGVtZW50Q29udGVudCh0ZW1wbGF0ZUVsZW1lbnQsIGNvbnRlbnQpXG4gIH1cblxuICBzZXRFbGVtZW50Q29udGVudChlbGVtZW50LCBjb250ZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc0VsZW1lbnQoY29udGVudCkpIHtcbiAgICAgIGNvbnRlbnQgPSBnZXRFbGVtZW50KGNvbnRlbnQpXG5cbiAgICAgIC8vIGNvbnRlbnQgaXMgYSBET00gbm9kZSBvciBhIGpRdWVyeVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICAgIGlmIChjb250ZW50LnBhcmVudE5vZGUgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICcnXG4gICAgICAgICAgZWxlbWVudC5hcHBlbmQoY29udGVudClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IGNvbnRlbnQudGV4dENvbnRlbnRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLnNhbml0aXplKSB7XG4gICAgICAgIGNvbnRlbnQgPSBzYW5pdGl6ZUh0bWwoY29udGVudCwgdGhpcy5fY29uZmlnLmFsbG93TGlzdCwgdGhpcy5fY29uZmlnLnNhbml0aXplRm4pXG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudFxuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gY29udGVudFxuICAgIH1cbiAgfVxuXG4gIGdldFRpdGxlKCkge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSB8fCB0aGlzLl9jb25maWcudGl0bGVcblxuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aXRsZSlcbiAgfVxuXG4gIHVwZGF0ZUF0dGFjaG1lbnQoYXR0YWNobWVudCkge1xuICAgIGlmIChhdHRhY2htZW50ID09PSAncmlnaHQnKSB7XG4gICAgICByZXR1cm4gJ2VuZCdcbiAgICB9XG5cbiAgICBpZiAoYXR0YWNobWVudCA9PT0gJ2xlZnQnKSB7XG4gICAgICByZXR1cm4gJ3N0YXJ0J1xuICAgIH1cblxuICAgIHJldHVybiBhdHRhY2htZW50XG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IHx8IHRoaXMuY29uc3RydWN0b3IuZ2V0T3JDcmVhdGVJbnN0YW5jZShldmVudC5kZWxlZ2F0ZVRhcmdldCwgdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSlcbiAgfVxuXG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbCA9PiBOdW1iZXIucGFyc2VJbnQodmFsLCAxMCkpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBwb3BwZXJEYXRhID0+IG9mZnNldChwb3BwZXJEYXRhLCB0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgIHJldHVybiBvZmZzZXRcbiAgfVxuXG4gIF9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihjb250ZW50KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjb250ZW50ID09PSAnZnVuY3Rpb24nID8gY29udGVudC5jYWxsKHRoaXMuX2VsZW1lbnQpIDogY29udGVudFxuICB9XG5cbiAgX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiBhdHRhY2htZW50LFxuICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiB0aGlzLl9jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGAuJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWFycm93YFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdvbkNoYW5nZScsXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBwaGFzZTogJ2FmdGVyV3JpdGUnLFxuICAgICAgICAgIGZuOiBkYXRhID0+IHRoaXMuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZShkYXRhKVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgb25GaXJzdFVwZGF0ZTogZGF0YSA9PiB7XG4gICAgICAgIGlmIChkYXRhLm9wdGlvbnMucGxhY2VtZW50ICE9PSBkYXRhLnBsYWNlbWVudCkge1xuICAgICAgICAgIHRoaXMuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZShkYXRhKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRCc1BvcHBlckNvbmZpZyxcbiAgICAgIC4uLih0eXBlb2YgdGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcoZGVmYXVsdEJzUG9wcGVyQ29uZmlnKSA6IHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcpXG4gICAgfVxuICB9XG5cbiAgX2FkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgdGhpcy5nZXRUaXBFbGVtZW50KCkuY2xhc3NMaXN0LmFkZChgJHt0aGlzLl9nZXRCYXNpY0NsYXNzUHJlZml4KCl9LSR7dGhpcy51cGRhdGVBdHRhY2htZW50KGF0dGFjaG1lbnQpfWApXG4gIH1cblxuICBfZ2V0QXR0YWNobWVudChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gQXR0YWNobWVudE1hcFtwbGFjZW1lbnQudG9VcHBlckNhc2UoKV1cbiAgfVxuXG4gIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgY29uc3QgdHJpZ2dlcnMgPSB0aGlzLl9jb25maWcudHJpZ2dlci5zcGxpdCgnICcpXG5cbiAgICB0cmlnZ2Vycy5mb3JFYWNoKHRyaWdnZXIgPT4ge1xuICAgICAgaWYgKHRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuQ0xJQ0ssIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4gdGhpcy50b2dnbGUoZXZlbnQpKVxuICAgICAgfSBlbHNlIGlmICh0cmlnZ2VyICE9PSBUUklHR0VSX01BTlVBTCkge1xuICAgICAgICBjb25zdCBldmVudEluID0gdHJpZ2dlciA9PT0gVFJJR0dFUl9IT1ZFUiA/XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5NT1VTRUVOVEVSIDpcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkZPQ1VTSU5cbiAgICAgICAgY29uc3QgZXZlbnRPdXQgPSB0cmlnZ2VyID09PSBUUklHR0VSX0hPVkVSID9cbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFTEVBVkUgOlxuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuRk9DVVNPVVRcblxuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRJbiwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB0aGlzLl9lbnRlcihldmVudCkpXG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBldmVudE91dCwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB0aGlzLl9sZWF2ZShldmVudCkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudCkge1xuICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgfVxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5zZWxlY3Rvcikge1xuICAgICAgdGhpcy5fY29uZmlnID0ge1xuICAgICAgICAuLi50aGlzLl9jb25maWcsXG4gICAgICAgIHRyaWdnZXI6ICdtYW51YWwnLFxuICAgICAgICBzZWxlY3RvcjogJydcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZml4VGl0bGUoKVxuICAgIH1cbiAgfVxuXG4gIF9maXhUaXRsZSgpIHtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgY29uc3Qgb3JpZ2luYWxUaXRsZVR5cGUgPSB0eXBlb2YgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKVxuXG4gICAgaWYgKHRpdGxlIHx8IG9yaWdpbmFsVGl0bGVUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnLCB0aXRsZSB8fCAnJylcbiAgICAgIGlmICh0aXRsZSAmJiAhdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSAmJiAhdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudCkge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgndGl0bGUnLCAnJylcbiAgICB9XG4gIH1cblxuICBfZW50ZXIoZXZlbnQsIGNvbnRleHQpIHtcbiAgICBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50LCBjb250ZXh0KVxuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW1xuICAgICAgICBldmVudC50eXBlID09PSAnZm9jdXNpbicgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUlxuICAgICAgXSA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dC5nZXRUaXBFbGVtZW50KCkuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVykgfHwgY29udGV4dC5faG92ZXJTdGF0ZSA9PT0gSE9WRVJfU1RBVEVfU0hPVykge1xuICAgICAgY29udGV4dC5faG92ZXJTdGF0ZSA9IEhPVkVSX1NUQVRFX1NIT1dcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNsZWFyVGltZW91dChjb250ZXh0Ll90aW1lb3V0KVxuXG4gICAgY29udGV4dC5faG92ZXJTdGF0ZSA9IEhPVkVSX1NUQVRFX1NIT1dcblxuICAgIGlmICghY29udGV4dC5fY29uZmlnLmRlbGF5IHx8ICFjb250ZXh0Ll9jb25maWcuZGVsYXkuc2hvdykge1xuICAgICAgY29udGV4dC5zaG93KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnRleHQuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIT1ZFUl9TVEFURV9TSE9XKSB7XG4gICAgICAgIGNvbnRleHQuc2hvdygpXG4gICAgICB9XG4gICAgfSwgY29udGV4dC5fY29uZmlnLmRlbGF5LnNob3cpXG4gIH1cblxuICBfbGVhdmUoZXZlbnQsIGNvbnRleHQpIHtcbiAgICBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50LCBjb250ZXh0KVxuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW1xuICAgICAgICBldmVudC50eXBlID09PSAnZm9jdXNvdXQnID8gVFJJR0dFUl9GT0NVUyA6IFRSSUdHRVJfSE9WRVJcbiAgICAgIF0gPSBjb250ZXh0Ll9lbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpXG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KGNvbnRleHQuX3RpbWVvdXQpXG5cbiAgICBjb250ZXh0Ll9ob3ZlclN0YXRlID0gSE9WRVJfU1RBVEVfT1VUXG5cbiAgICBpZiAoIWNvbnRleHQuX2NvbmZpZy5kZWxheSB8fCAhY29udGV4dC5fY29uZmlnLmRlbGF5LmhpZGUpIHtcbiAgICAgIGNvbnRleHQuaGlkZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb250ZXh0Ll90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoY29udGV4dC5faG92ZXJTdGF0ZSA9PT0gSE9WRVJfU1RBVEVfT1VUKSB7XG4gICAgICAgIGNvbnRleHQuaGlkZSgpXG4gICAgICB9XG4gICAgfSwgY29udGV4dC5fY29uZmlnLmRlbGF5LmhpZGUpXG4gIH1cblxuICBfaXNXaXRoQWN0aXZlVHJpZ2dlcigpIHtcbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgaW4gdGhpcy5fYWN0aXZlVHJpZ2dlcikge1xuICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRyaWdnZXJbdHJpZ2dlcl0pIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uc3QgZGF0YUF0dHJpYnV0ZXMgPSBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KVxuXG4gICAgT2JqZWN0LmtleXMoZGF0YUF0dHJpYnV0ZXMpLmZvckVhY2goZGF0YUF0dHIgPT4ge1xuICAgICAgaWYgKERJU0FMTE9XRURfQVRUUklCVVRFUy5oYXMoZGF0YUF0dHIpKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhQXR0cmlidXRlc1tkYXRhQXR0cl1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uZmlnID0ge1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgLi4uZGF0YUF0dHJpYnV0ZXMsXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pXG4gICAgfVxuXG4gICAgY29uZmlnLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlID8gZG9jdW1lbnQuYm9keSA6IGdldEVsZW1lbnQoY29uZmlnLmNvbnRhaW5lcilcblxuICAgIGlmICh0eXBlb2YgY29uZmlnLmRlbGF5ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmRlbGF5ID0ge1xuICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgIGhpZGU6IGNvbmZpZy5kZWxheVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLnRpdGxlID0gY29uZmlnLnRpdGxlLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5jb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpXG4gICAgfVxuXG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSlcblxuICAgIGlmIChjb25maWcuc2FuaXRpemUpIHtcbiAgICAgIGNvbmZpZy50ZW1wbGF0ZSA9IHNhbml0aXplSHRtbChjb25maWcudGVtcGxhdGUsIGNvbmZpZy5hbGxvd0xpc3QsIGNvbmZpZy5zYW5pdGl6ZUZuKVxuICAgIH1cblxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9nZXREZWxlZ2F0ZUNvbmZpZygpIHtcbiAgICBjb25zdCBjb25maWcgPSB7fVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5fY29uZmlnKSB7XG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2tleV0gIT09IHRoaXMuX2NvbmZpZ1trZXldKSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gdGhpcy5fY29uZmlnW2tleV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbiB0aGUgZnV0dXJlIGNhbiBiZSByZXBsYWNlZCB3aXRoOlxuICAgIC8vIGNvbnN0IGtleXNXaXRoRGlmZmVyZW50VmFsdWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnKS5maWx0ZXIoZW50cnkgPT4gdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2VudHJ5WzBdXSAhPT0gdGhpcy5fY29uZmlnW2VudHJ5WzBdXSlcbiAgICAvLyBgT2JqZWN0LmZyb21FbnRyaWVzKGtleXNXaXRoRGlmZmVyZW50VmFsdWVzKWBcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY2xlYW5UaXBDbGFzcygpIHtcbiAgICBjb25zdCB0aXAgPSB0aGlzLmdldFRpcEVsZW1lbnQoKVxuICAgIGNvbnN0IGJhc2ljQ2xhc3NQcmVmaXhSZWdleCA9IG5ldyBSZWdFeHAoYChefFxcXFxzKSR7dGhpcy5fZ2V0QmFzaWNDbGFzc1ByZWZpeCgpfVxcXFxTK2AsICdnJylcbiAgICBjb25zdCB0YWJDbGFzcyA9IHRpcC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykubWF0Y2goYmFzaWNDbGFzc1ByZWZpeFJlZ2V4KVxuICAgIGlmICh0YWJDbGFzcyAhPT0gbnVsbCAmJiB0YWJDbGFzcy5sZW5ndGggPiAwKSB7XG4gICAgICB0YWJDbGFzcy5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKVxuICAgICAgICAuZm9yRWFjaCh0Q2xhc3MgPT4gdGlwLmNsYXNzTGlzdC5yZW1vdmUodENsYXNzKSlcbiAgICB9XG4gIH1cblxuICBfZ2V0QmFzaWNDbGFzc1ByZWZpeCgpIHtcbiAgICByZXR1cm4gQ0xBU1NfUFJFRklYXG4gIH1cblxuICBfaGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKHBvcHBlckRhdGEpIHtcbiAgICBjb25zdCB7IHN0YXRlIH0gPSBwb3BwZXJEYXRhXG5cbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRpcCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlclxuICAgIHRoaXMuX2NsZWFuVGlwQ2xhc3MoKVxuICAgIHRoaXMuX2FkZEF0dGFjaG1lbnRDbGFzcyh0aGlzLl9nZXRBdHRhY2htZW50KHN0YXRlLnBsYWNlbWVudCkpXG4gIH1cblxuICBfZGlzcG9zZVBvcHBlcigpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpXG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb29sdGlwLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5Ub29sdGlwIHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvb2x0aXApXG5cbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXBcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogcG9wb3Zlci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBUb29sdGlwIGZyb20gJy4vdG9vbHRpcCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdwb3BvdmVyJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMucG9wb3ZlcidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBDTEFTU19QUkVGSVggPSAnYnMtcG9wb3ZlcidcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0LFxuICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gIG9mZnNldDogWzAsIDhdLFxuICB0cmlnZ2VyOiAnY2xpY2snLFxuICBjb250ZW50OiAnJyxcbiAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwicG9wb3ZlclwiIHJvbGU9XCJ0b29sdGlwXCI+JyArXG4gICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1hcnJvd1wiPjwvZGl2PicgK1xuICAgICAgICAgICAgICAnPGgzIGNsYXNzPVwicG9wb3Zlci1oZWFkZXJcIj48L2gzPicgK1xuICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPjwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZGl2Pidcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdFR5cGUsXG4gIGNvbnRlbnQ6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJ1xufVxuXG5jb25zdCBFdmVudCA9IHtcbiAgSElERTogYGhpZGUke0VWRU5UX0tFWX1gLFxuICBISURERU46IGBoaWRkZW4ke0VWRU5UX0tFWX1gLFxuICBTSE9XOiBgc2hvdyR7RVZFTlRfS0VZfWAsXG4gIFNIT1dOOiBgc2hvd24ke0VWRU5UX0tFWX1gLFxuICBJTlNFUlRFRDogYGluc2VydGVkJHtFVkVOVF9LRVl9YCxcbiAgQ0xJQ0s6IGBjbGljayR7RVZFTlRfS0VZfWAsXG4gIEZPQ1VTSU46IGBmb2N1c2luJHtFVkVOVF9LRVl9YCxcbiAgRk9DVVNPVVQ6IGBmb2N1c291dCR7RVZFTlRfS0VZfWAsXG4gIE1PVVNFRU5URVI6IGBtb3VzZWVudGVyJHtFVkVOVF9LRVl9YCxcbiAgTU9VU0VMRUFWRTogYG1vdXNlbGVhdmUke0VWRU5UX0tFWX1gXG59XG5cbmNvbnN0IFNFTEVDVE9SX1RJVExFID0gJy5wb3BvdmVyLWhlYWRlcidcbmNvbnN0IFNFTEVDVE9SX0NPTlRFTlQgPSAnLnBvcG92ZXItYm9keSdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIFBvcG92ZXIgZXh0ZW5kcyBUb29sdGlwIHtcbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICBzdGF0aWMgZ2V0IEV2ZW50KCkge1xuICAgIHJldHVybiBFdmVudFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIC8vIE92ZXJyaWRlc1xuXG4gIGlzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGUoKSB8fCB0aGlzLl9nZXRDb250ZW50KClcbiAgfVxuXG4gIHNldENvbnRlbnQodGlwKSB7XG4gICAgdGhpcy5fc2FuaXRpemVBbmRTZXRDb250ZW50KHRpcCwgdGhpcy5nZXRUaXRsZSgpLCBTRUxFQ1RPUl9USVRMRSlcbiAgICB0aGlzLl9zYW5pdGl6ZUFuZFNldENvbnRlbnQodGlwLCB0aGlzLl9nZXRDb250ZW50KCksIFNFTEVDVE9SX0NPTlRFTlQpXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5jb250ZW50KVxuICB9XG5cbiAgX2dldEJhc2ljQ2xhc3NQcmVmaXgoKSB7XG4gICAgcmV0dXJuIENMQVNTX1BSRUZJWFxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBQb3BvdmVyLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5Qb3BvdmVyIHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFBvcG92ZXIpXG5cbmV4cG9ydCBkZWZhdWx0IFBvcG92ZXJcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogc2Nyb2xsc3B5LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50LFxuICBnZXRTZWxlY3RvckZyb21FbGVtZW50LFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAnc2Nyb2xsc3B5J1xuY29uc3QgREFUQV9LRVkgPSAnYnMuc2Nyb2xsc3B5J1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIG9mZnNldDogMTAsXG4gIG1ldGhvZDogJ2F1dG8nLFxuICB0YXJnZXQ6ICcnXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBvZmZzZXQ6ICdudW1iZXInLFxuICBtZXRob2Q6ICdzdHJpbmcnLFxuICB0YXJnZXQ6ICcoc3RyaW5nfGVsZW1lbnQpJ1xufVxuXG5jb25zdCBFVkVOVF9BQ1RJVkFURSA9IGBhY3RpdmF0ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NDUk9MTCA9IGBzY3JvbGwke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJID0gYGxvYWQke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fSVRFTSA9ICdkcm9wZG93bi1pdGVtJ1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NQWSA9ICdbZGF0YS1icy1zcHk9XCJzY3JvbGxcIl0nXG5jb25zdCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCA9ICcubmF2LCAubGlzdC1ncm91cCdcbmNvbnN0IFNFTEVDVE9SX05BVl9MSU5LUyA9ICcubmF2LWxpbmsnXG5jb25zdCBTRUxFQ1RPUl9OQVZfSVRFTVMgPSAnLm5hdi1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfTElTVF9JVEVNUyA9ICcubGlzdC1ncm91cC1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfTElOS19JVEVNUyA9IGAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTElTVF9JVEVNU30sIC4ke0NMQVNTX05BTUVfRFJPUERPV05fSVRFTX1gXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTiA9ICcuZHJvcGRvd24nXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnLmRyb3Bkb3duLXRvZ2dsZSdcblxuY29uc3QgTUVUSE9EX09GRlNFVCA9ICdvZmZzZXQnXG5jb25zdCBNRVRIT0RfUE9TSVRJT04gPSAncG9zaXRpb24nXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBTY3JvbGxTcHkgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudClcbiAgICB0aGlzLl9zY3JvbGxFbGVtZW50ID0gdGhpcy5fZWxlbWVudC50YWdOYW1lID09PSAnQk9EWScgPyB3aW5kb3cgOiB0aGlzLl9lbGVtZW50XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9vZmZzZXRzID0gW11cbiAgICB0aGlzLl90YXJnZXRzID0gW11cbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsXG4gICAgdGhpcy5fc2Nyb2xsSGVpZ2h0ID0gMFxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX3Njcm9sbEVsZW1lbnQsIEVWRU5UX1NDUk9MTCwgKCkgPT4gdGhpcy5fcHJvY2VzcygpKVxuXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgICB0aGlzLl9wcm9jZXNzKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgcmVmcmVzaCgpIHtcbiAgICBjb25zdCBhdXRvTWV0aG9kID0gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gdGhpcy5fc2Nyb2xsRWxlbWVudC53aW5kb3cgP1xuICAgICAgTUVUSE9EX09GRlNFVCA6XG4gICAgICBNRVRIT0RfUE9TSVRJT05cblxuICAgIGNvbnN0IG9mZnNldE1ldGhvZCA9IHRoaXMuX2NvbmZpZy5tZXRob2QgPT09ICdhdXRvJyA/XG4gICAgICBhdXRvTWV0aG9kIDpcbiAgICAgIHRoaXMuX2NvbmZpZy5tZXRob2RcblxuICAgIGNvbnN0IG9mZnNldEJhc2UgPSBvZmZzZXRNZXRob2QgPT09IE1FVEhPRF9QT1NJVElPTiA/XG4gICAgICB0aGlzLl9nZXRTY3JvbGxUb3AoKSA6XG4gICAgICAwXG5cbiAgICB0aGlzLl9vZmZzZXRzID0gW11cbiAgICB0aGlzLl90YXJnZXRzID0gW11cbiAgICB0aGlzLl9zY3JvbGxIZWlnaHQgPSB0aGlzLl9nZXRTY3JvbGxIZWlnaHQoKVxuXG4gICAgY29uc3QgdGFyZ2V0cyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfTElOS19JVEVNUywgdGhpcy5fY29uZmlnLnRhcmdldClcblxuICAgIHRhcmdldHMubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0U2VsZWN0b3IgPSBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpXG4gICAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRTZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUodGFyZ2V0U2VsZWN0b3IpIDogbnVsbFxuXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEJDUiA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBpZiAodGFyZ2V0QkNSLndpZHRoIHx8IHRhcmdldEJDUi5oZWlnaHQpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgTWFuaXB1bGF0b3Jbb2Zmc2V0TWV0aG9kXSh0YXJnZXQpLnRvcCArIG9mZnNldEJhc2UsXG4gICAgICAgICAgICB0YXJnZXRTZWxlY3RvclxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0pXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSlcbiAgICAgIC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICB0aGlzLl9vZmZzZXRzLnB1c2goaXRlbVswXSlcbiAgICAgICAgdGhpcy5fdGFyZ2V0cy5wdXNoKGl0ZW1bMV0pXG4gICAgICB9KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX3Njcm9sbEVsZW1lbnQsIEVWRU5UX0tFWSlcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLkRlZmF1bHQsXG4gICAgICAuLi5NYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KSxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSlcbiAgICB9XG5cbiAgICBjb25maWcudGFyZ2V0ID0gZ2V0RWxlbWVudChjb25maWcudGFyZ2V0KSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcblxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2dldFNjcm9sbFRvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID9cbiAgICAgIHRoaXMuX3Njcm9sbEVsZW1lbnQucGFnZVlPZmZzZXQgOlxuICAgICAgdGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3BcbiAgfVxuXG4gIF9nZXRTY3JvbGxIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IHx8IE1hdGgubWF4KFxuICAgICAgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsXG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0XG4gICAgKVxuICB9XG5cbiAgX2dldE9mZnNldEhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID9cbiAgICAgIHdpbmRvdy5pbm5lckhlaWdodCA6XG4gICAgICB0aGlzLl9zY3JvbGxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodFxuICB9XG5cbiAgX3Byb2Nlc3MoKSB7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5fZ2V0U2Nyb2xsVG9wKCkgKyB0aGlzLl9jb25maWcub2Zmc2V0XG4gICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gdGhpcy5fZ2V0U2Nyb2xsSGVpZ2h0KClcbiAgICBjb25zdCBtYXhTY3JvbGwgPSB0aGlzLl9jb25maWcub2Zmc2V0ICsgc2Nyb2xsSGVpZ2h0IC0gdGhpcy5fZ2V0T2Zmc2V0SGVpZ2h0KClcblxuICAgIGlmICh0aGlzLl9zY3JvbGxIZWlnaHQgIT09IHNjcm9sbEhlaWdodCkge1xuICAgICAgdGhpcy5yZWZyZXNoKClcbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsVG9wID49IG1heFNjcm9sbCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0c1t0aGlzLl90YXJnZXRzLmxlbmd0aCAtIDFdXG5cbiAgICAgIGlmICh0aGlzLl9hY3RpdmVUYXJnZXQgIT09IHRhcmdldCkge1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZSh0YXJnZXQpXG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9hY3RpdmVUYXJnZXQgJiYgc2Nyb2xsVG9wIDwgdGhpcy5fb2Zmc2V0c1swXSAmJiB0aGlzLl9vZmZzZXRzWzBdID4gMCkge1xuICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbFxuICAgICAgdGhpcy5fY2xlYXIoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHRoaXMuX29mZnNldHMubGVuZ3RoOyBpLS07KSB7XG4gICAgICBjb25zdCBpc0FjdGl2ZVRhcmdldCA9IHRoaXMuX2FjdGl2ZVRhcmdldCAhPT0gdGhpcy5fdGFyZ2V0c1tpXSAmJlxuICAgICAgICAgIHNjcm9sbFRvcCA+PSB0aGlzLl9vZmZzZXRzW2ldICYmXG4gICAgICAgICAgKHR5cGVvZiB0aGlzLl9vZmZzZXRzW2kgKyAxXSA9PT0gJ3VuZGVmaW5lZCcgfHwgc2Nyb2xsVG9wIDwgdGhpcy5fb2Zmc2V0c1tpICsgMV0pXG5cbiAgICAgIGlmIChpc0FjdGl2ZVRhcmdldCkge1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZSh0aGlzLl90YXJnZXRzW2ldKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9hY3RpdmF0ZSh0YXJnZXQpIHtcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSB0YXJnZXRcblxuICAgIHRoaXMuX2NsZWFyKClcblxuICAgIGNvbnN0IHF1ZXJpZXMgPSBTRUxFQ1RPUl9MSU5LX0lURU1TLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoc2VsZWN0b3IgPT4gYCR7c2VsZWN0b3J9W2RhdGEtYnMtdGFyZ2V0PVwiJHt0YXJnZXR9XCJdLCR7c2VsZWN0b3J9W2hyZWY9XCIke3RhcmdldH1cIl1gKVxuXG4gICAgY29uc3QgbGluayA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUocXVlcmllcy5qb2luKCcsJyksIHRoaXMuX2NvbmZpZy50YXJnZXQpXG5cbiAgICBsaW5rLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgaWYgKGxpbmsuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUERPV05fSVRFTSkpIHtcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFLCBsaW5rLmNsb3Nlc3QoU0VMRUNUT1JfRFJPUERPV04pKVxuICAgICAgICAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcbiAgICB9IGVsc2Uge1xuICAgICAgU2VsZWN0b3JFbmdpbmUucGFyZW50cyhsaW5rLCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUClcbiAgICAgICAgLmZvckVhY2gobGlzdEdyb3VwID0+IHtcbiAgICAgICAgICAvLyBTZXQgdHJpZ2dlcmVkIGxpbmtzIHBhcmVudHMgYXMgYWN0aXZlXG4gICAgICAgICAgLy8gV2l0aCBib3RoIDx1bD4gYW5kIDxuYXY+IG1hcmt1cCBhIHBhcmVudCBpcyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBhbnkgbmF2IGFuY2VzdG9yXG4gICAgICAgICAgU2VsZWN0b3JFbmdpbmUucHJldihsaXN0R3JvdXAsIGAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTElTVF9JVEVNU31gKVxuICAgICAgICAgICAgLmZvckVhY2goaXRlbSA9PiBpdGVtLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuXG4gICAgICAgICAgLy8gSGFuZGxlIHNwZWNpYWwgY2FzZSB3aGVuIC5uYXYtbGluayBpcyBpbnNpZGUgLm5hdi1pdGVtXG4gICAgICAgICAgU2VsZWN0b3JFbmdpbmUucHJldihsaXN0R3JvdXAsIFNFTEVDVE9SX05BVl9JVEVNUylcbiAgICAgICAgICAgIC5mb3JFYWNoKG5hdkl0ZW0gPT4ge1xuICAgICAgICAgICAgICBTZWxlY3RvckVuZ2luZS5jaGlsZHJlbihuYXZJdGVtLCBTRUxFQ1RPUl9OQVZfTElOS1MpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goaXRlbSA9PiBpdGVtLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9zY3JvbGxFbGVtZW50LCBFVkVOVF9BQ1RJVkFURSwge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGFyZ2V0XG4gICAgfSlcbiAgfVxuXG4gIF9jbGVhcigpIHtcbiAgICBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0xJTktfSVRFTVMsIHRoaXMuX2NvbmZpZy50YXJnZXQpXG4gICAgICAuZmlsdGVyKG5vZGUgPT4gbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuICAgICAgLmZvckVhY2gobm9kZSA9PiBub2RlLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBTY3JvbGxTcHkuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKClcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfU1BZKVxuICAgIC5mb3JFYWNoKHNweSA9PiBuZXcgU2Nyb2xsU3B5KHNweSkpXG59KVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuU2Nyb2xsU3B5IHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFNjcm9sbFNweSlcblxuZXhwb3J0IGRlZmF1bHQgU2Nyb2xsU3B5XG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IHRhYi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcixcbiAgaXNEaXNhYmxlZCxcbiAgcmVmbG93XG59IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ3RhYidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRhYidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRE9XTl9NRU5VID0gJ2Ryb3Bkb3duLW1lbnUnXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTiA9ICcuZHJvcGRvd24nXG5jb25zdCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCA9ICcubmF2LCAubGlzdC1ncm91cCdcbmNvbnN0IFNFTEVDVE9SX0FDVElWRSA9ICcuYWN0aXZlJ1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFX1VMID0gJzpzY29wZSA+IGxpID4gLmFjdGl2ZSdcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwibGlzdFwiXSdcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSA9ICcuZHJvcGRvd24tdG9nZ2xlJ1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fQUNUSVZFX0NISUxEID0gJzpzY29wZSA+IC5kcm9wZG93bi1tZW51IC5hY3RpdmUnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBUYWIgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgc2hvdygpIHtcbiAgICBpZiAoKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSAmJlxuICAgICAgdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9BQ1RJVkUpKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IHByZXZpb3VzXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzLl9lbGVtZW50KVxuICAgIGNvbnN0IGxpc3RFbGVtZW50ID0gdGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX05BVl9MSVNUX0dST1VQKVxuXG4gICAgaWYgKGxpc3RFbGVtZW50KSB7XG4gICAgICBjb25zdCBpdGVtU2VsZWN0b3IgPSBsaXN0RWxlbWVudC5ub2RlTmFtZSA9PT0gJ1VMJyB8fCBsaXN0RWxlbWVudC5ub2RlTmFtZSA9PT0gJ09MJyA/IFNFTEVDVE9SX0FDVElWRV9VTCA6IFNFTEVDVE9SX0FDVElWRVxuICAgICAgcHJldmlvdXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKGl0ZW1TZWxlY3RvciwgbGlzdEVsZW1lbnQpXG4gICAgICBwcmV2aW91cyA9IHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gcHJldmlvdXMgP1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIocHJldmlvdXMsIEVWRU5UX0hJREUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgICAgfSkgOlxuICAgICAgbnVsbFxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVywge1xuICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXNcbiAgICB9KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkIHx8IChoaWRlRXZlbnQgIT09IG51bGwgJiYgaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9lbGVtZW50LCBsaXN0RWxlbWVudClcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIocHJldmlvdXMsIEVWRU5UX0hJRERFTiwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgICB9KVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04sIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXNcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGhpcy5fYWN0aXZhdGUodGFyZ2V0LCB0YXJnZXQucGFyZW50Tm9kZSwgY29tcGxldGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBsZXRlKClcbiAgICB9XG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2FjdGl2YXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50cyA9IGNvbnRhaW5lciAmJiAoY29udGFpbmVyLm5vZGVOYW1lID09PSAnVUwnIHx8IGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gJ09MJykgP1xuICAgICAgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9BQ1RJVkVfVUwsIGNvbnRhaW5lcikgOlxuICAgICAgU2VsZWN0b3JFbmdpbmUuY2hpbGRyZW4oY29udGFpbmVyLCBTRUxFQ1RPUl9BQ1RJVkUpXG5cbiAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVFbGVtZW50c1swXVxuICAgIGNvbnN0IGlzVHJhbnNpdGlvbmluZyA9IGNhbGxiYWNrICYmIChhY3RpdmUgJiYgYWN0aXZlLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpKVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB0aGlzLl90cmFuc2l0aW9uQ29tcGxldGUoZWxlbWVudCwgYWN0aXZlLCBjYWxsYmFjaylcblxuICAgIGlmIChhY3RpdmUgJiYgaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICBhY3RpdmUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCBlbGVtZW50LCB0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wbGV0ZSgpXG4gICAgfVxuICB9XG5cbiAgX3RyYW5zaXRpb25Db21wbGV0ZShlbGVtZW50LCBhY3RpdmUsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgYWN0aXZlLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG5cbiAgICAgIGNvbnN0IGRyb3Bkb3duQ2hpbGQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RST1BET1dOX0FDVElWRV9DSElMRCwgYWN0aXZlLnBhcmVudE5vZGUpXG5cbiAgICAgIGlmIChkcm9wZG93bkNoaWxkKSB7XG4gICAgICAgIGRyb3Bkb3duQ2hpbGQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSlcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3RhYicpIHtcbiAgICAgICAgYWN0aXZlLnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIGZhbHNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcbiAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3RhYicpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgdHJ1ZSlcbiAgICB9XG5cbiAgICByZWZsb3coZWxlbWVudClcblxuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpKSB7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIH1cblxuICAgIGxldCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGVcbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC5ub2RlTmFtZSA9PT0gJ0xJJykge1xuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGVcbiAgICB9XG5cbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9NRU5VKSkge1xuICAgICAgY29uc3QgZHJvcGRvd25FbGVtZW50ID0gZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX0RST1BET1dOKVxuXG4gICAgICBpZiAoZHJvcGRvd25FbGVtZW50KSB7XG4gICAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFLCBkcm9wZG93bkVsZW1lbnQpXG4gICAgICAgICAgLmZvckVhY2goZHJvcGRvd24gPT4gZHJvcGRvd24uY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSkpXG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcbiAgICB9XG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICAgIH1cblxuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgZGF0YSA9IFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpXG4gIGRhdGEuc2hvdygpXG59KVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuVGFiIHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRhYilcblxuZXhwb3J0IGRlZmF1bHQgVGFiXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IHRvYXN0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICByZWZsb3csXG4gIHR5cGVDaGVja0NvbmZpZ1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucydcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICd0b2FzdCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRvYXN0J1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcblxuY29uc3QgRVZFTlRfTU9VU0VPVkVSID0gYG1vdXNlb3ZlciR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFT1VUID0gYG1vdXNlb3V0JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfRk9DVVNPVVQgPSBgZm9jdXNvdXQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9ISURFID0gJ2hpZGUnIC8vIEBkZXByZWNhdGVkIC0ga2VwdCBoZXJlIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfU0hPV0lORyA9ICdzaG93aW5nJ1xuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gIGF1dG9oaWRlOiAnYm9vbGVhbicsXG4gIGRlbGF5OiAnbnVtYmVyJ1xufVxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhbmltYXRpb246IHRydWUsXG4gIGF1dG9oaWRlOiB0cnVlLFxuICBkZWxheTogNTAwMFxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgVG9hc3QgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudClcblxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fdGltZW91dCA9IG51bGxcbiAgICB0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uID0gZmFsc2VcbiAgICB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uID0gZmFsc2VcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgc2hvdygpIHtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XKVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04pXG5cbiAgICAgIHRoaXMuX21heWJlU2NoZWR1bGVIaWRlKClcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9ISURFKSAvLyBAZGVwcmVjYXRlZFxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPV0lORylcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2NvbmZpZy5hbmltYXRpb24pXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcblxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9ISURFKSAvLyBAZGVwcmVjYXRlZFxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORylcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPV0lORylcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9jb25maWcuYW5pbWF0aW9uKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKVxuXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVykpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgfVxuXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pXG4gICAgfVxuXG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSlcblxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9tYXliZVNjaGVkdWxlSGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5hdXRvaGlkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gfHwgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkpXG4gIH1cblxuICBfb25JbnRlcmFjdGlvbihldmVudCwgaXNJbnRlcmFjdGluZykge1xuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICAgICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3RpbmdcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgICB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uID0gaXNJbnRlcmFjdGluZ1xuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBpZiAoaXNJbnRlcmFjdGluZykge1xuICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldFxuICAgIGlmICh0aGlzLl9lbGVtZW50ID09PSBuZXh0RWxlbWVudCB8fCB0aGlzLl9lbGVtZW50LmNvbnRhaW5zKG5leHRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKVxuICB9XG5cbiAgX3NldExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVkVSLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSlcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSlcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgdHJ1ZSkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0ZPQ1VTT1VULCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCBmYWxzZSkpXG4gIH1cblxuICBfY2xlYXJUaW1lb3V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsXG4gIH1cblxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvYXN0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKHRoaXMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihUb2FzdClcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBhZGQgLlRvYXN0IHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvYXN0KVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdFxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiBpbmRleC51bWQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgQWxlcnQgZnJvbSAnLi9zcmMvYWxlcnQnXG5pbXBvcnQgQnV0dG9uIGZyb20gJy4vc3JjL2J1dHRvbidcbmltcG9ydCBDYXJvdXNlbCBmcm9tICcuL3NyYy9jYXJvdXNlbCdcbmltcG9ydCBDb2xsYXBzZSBmcm9tICcuL3NyYy9jb2xsYXBzZSdcbmltcG9ydCBEcm9wZG93biBmcm9tICcuL3NyYy9kcm9wZG93bidcbmltcG9ydCBNb2RhbCBmcm9tICcuL3NyYy9tb2RhbCdcbmltcG9ydCBPZmZjYW52YXMgZnJvbSAnLi9zcmMvb2ZmY2FudmFzJ1xuaW1wb3J0IFBvcG92ZXIgZnJvbSAnLi9zcmMvcG9wb3ZlcidcbmltcG9ydCBTY3JvbGxTcHkgZnJvbSAnLi9zcmMvc2Nyb2xsc3B5J1xuaW1wb3J0IFRhYiBmcm9tICcuL3NyYy90YWInXG5pbXBvcnQgVG9hc3QgZnJvbSAnLi9zcmMvdG9hc3QnXG5pbXBvcnQgVG9vbHRpcCBmcm9tICcuL3NyYy90b29sdGlwJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEFsZXJ0LFxuICBCdXR0b24sXG4gIENhcm91c2VsLFxuICBDb2xsYXBzZSxcbiAgRHJvcGRvd24sXG4gIE1vZGFsLFxuICBPZmZjYW52YXMsXG4gIFBvcG92ZXIsXG4gIFNjcm9sbFNweSxcbiAgVGFiLFxuICBUb2FzdCxcbiAgVG9vbHRpcFxufVxuIiwiJChmdW5jdGlvbiAoKSB7XHJcbiAgICB0b2dnbGVDb25uZWN0aW9uU3RyaW5nQW5kUHJlZml4KCk7XHJcblxyXG4gICAgLy8gU2hvdyBoaWRlIHRoZSBjb25uZWN0aW9uIHN0cmluZyB3aGVuIGEgcHJvdmlkZXIgaXMgc2VsZWN0ZWRcclxuICAgICQoXCIjRGF0YWJhc2VQcm92aWRlclwiKS5jaGFuZ2UoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRvZ2dsZUNvbm5lY3Rpb25TdHJpbmdBbmRQcmVmaXgoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlZnJlc2ggdGhlIHJlY2lwZSBkZXNjcmlwdGlvblxyXG4gICAgJChcIiNyZWNpcGVzIGRpdiBhXCIpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZWZyZXNoRGVzY3JpcHRpb24oJCh0aGlzKSk7XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG4vLyBTaG93IG9yIGhpZGUgdGhlIGNvbm5lY3Rpb24gc3RyaW5nIG9yIHRhYmxlIHByZWZpeCBzZWN0aW9uIHdoZW4gdGhlIGRhdGFiYXNlIHByb3ZpZGVyIGlzIHNlbGVjdGVkXHJcbmZ1bmN0aW9uIHRvZ2dsZUNvbm5lY3Rpb25TdHJpbmdBbmRQcmVmaXgoKSB7XHJcbiAgICAkKFwiI0RhdGFiYXNlUHJvdmlkZXIgb3B0aW9uOnNlbGVjdGVkXCIpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQodGhpcykuZGF0YShcImNvbm5lY3Rpb24tc3RyaW5nXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiXHJcbiAgICAgICAgICAgID8gJChcIi5jb25uZWN0aW9uU3RyaW5nXCIpLnNob3coKVxyXG4gICAgICAgICAgICA6ICQoXCIuY29ubmVjdGlvblN0cmluZ1wiKS5oaWRlKCk7XHJcblxyXG4gICAgICAgICQodGhpcykuZGF0YShcInRhYmxlLXByZWZpeFwiKS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIlxyXG4gICAgICAgICAgICA/ICQoXCIudGFibGVQcmVmaXhcIikuc2hvdygpXHJcbiAgICAgICAgICAgIDogJChcIi50YWJsZVByZWZpeFwiKS5oaWRlKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgJCh0aGlzKS5kYXRhKFwiY29ubmVjdGlvbi1zdHJpbmdcIikudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCJcclxuICAgICAgICAgICAgPyAkKFwiLnB3ZFwiKS5hdHRyKCdyZXF1aXJlZCcsICdyZXF1aXJlZCcpXHJcbiAgICAgICAgICAgIDogJChcIi5wd2RcIikucmVtb3ZlQXR0cigncmVxdWlyZWQnKTtcclxuXHJcbiAgICAgICAgJChcIiNjb25uZWN0aW9uU3RyaW5nSGludFwiKS50ZXh0KCQodGhpcykuZGF0YShcImNvbm5lY3Rpb24tc3RyaW5nLXNhbXBsZVwiKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy8gU2hvdyB0aGUgcmVjaXBlIGRlc2NyaXB0aW9uXHJcbmZ1bmN0aW9uIHJlZnJlc2hEZXNjcmlwdGlvbih0YXJnZXQpIHtcclxuICAgIHZhciByZWNpcGVOYW1lID0gJCh0YXJnZXQpLmRhdGEoXCJyZWNpcGUtbmFtZVwiKTtcclxuICAgIHZhciByZWNpcGVEaXNwbGF5TmFtZSA9ICQodGFyZ2V0KS5kYXRhKFwicmVjaXBlLWRpc3BsYXktbmFtZVwiKTtcclxuICAgIHZhciByZWNpcGVEZXNjcmlwdGlvbiA9ICQodGFyZ2V0KS5kYXRhKFwicmVjaXBlLWRlc2NyaXB0aW9uXCIpO1xyXG4gICAgJChcIiNyZWNpcGVCdXR0b25cIikudGV4dChyZWNpcGVEaXNwbGF5TmFtZSk7XHJcbiAgICAkKFwiI1JlY2lwZU5hbWVcIikudmFsKHJlY2lwZU5hbWUpO1xyXG4gICAgJChcIiNyZWNpcGVCdXR0b25cIikuYXR0cihcInRpdGxlXCIsIHJlY2lwZURlc2NyaXB0aW9uKTtcclxuICAgICQoXCIjcmVjaXBlQnV0dG9uXCIpLmZvY3VzKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldExvY2FsaXphdGlvblVybCgpIHtcclxuICAgIHZhciBjdWx0dXJlc0xpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VsdHVyZXNMaXN0Jyk7XHJcbiAgICB3aW5kb3cubG9jYXRpb24gPSBjdWx0dXJlc0xpc3Qub3B0aW9uc1tjdWx0dXJlc0xpc3Quc2VsZWN0ZWRJbmRleF0uZGF0YXNldC51cmw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eShwYXNzd29yZEN0bCwgdG9nZ2xlUGFzc3dvcmRDdGwpXHJcbntcclxuICAgIC8vIHRvZ2dsZSB0aGUgdHlwZSBhdHRyaWJ1dGVcclxuICAgIHR5cGUgPSBwYXNzd29yZEN0bC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ3Bhc3N3b3JkJyA/ICd0ZXh0JyA6ICdwYXNzd29yZCc7XHJcbiAgICBwYXNzd29yZEN0bC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB0eXBlKTtcclxuXHJcbiAgICAvLyB0b2dnbGUgdGhlIGV5ZSBzbGFzaCBpY29uXHJcbiAgICBpY29uID0gdG9nZ2xlUGFzc3dvcmRDdGwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaWNvbicpWzBdO1xyXG4gICAgaWYoaWNvbi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWNvbicpKXsgLy8gaWYgdGhlIGljb24gaXMgcmVuZGVyZWQgYXMgYSBzdmdcclxuICAgICAgICB0eXBlID09PSAncGFzc3dvcmQnID8gaWNvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtaWNvbicsICdleWUnKSA6IGljb24uc2V0QXR0cmlidXRlKCdkYXRhLWljb24nLCAnZXllLXNsYXNoJyk7XHJcbiAgICB9XHJcbiAgICBlbHNleyAvLyBpZiB0aGUgaWNvbiBpcyBzdGlsbCBhIDxpPiBlbGVtZW50XHJcbiAgICAgICAgdHlwZSA9PT0gJ3Bhc3N3b3JkJyA/IGljb24uY2xhc3NMaXN0LnJlbW92ZSgnZmEtZXllLXNsYXNoJykgOiBpY29uLmNsYXNzTGlzdC5yZW1vdmUoJ2ZhLWV5ZScpO1xyXG4gICAgICAgIHR5cGUgPT09ICdwYXNzd29yZCcgPyBpY29uLmNsYXNzTGlzdC5hZGQoJ2ZhLWV5ZScpIDogaWNvbi5jbGFzc0xpc3QuYWRkKCdmYS1leWUtc2xhc2gnKTtcclxuICAgIH1cclxufVxyXG4iLCIoZnVuY3Rpb24gKCQpIHtcclxuXHJcbiAgICAkLmZuLnN0cmVuZ3RoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgdmFyIHNldHRpbmdzID0gJC5leHRlbmQoe1xyXG4gICAgICAgICAgICBtaW5MZW5ndGg6IDgsXHJcbiAgICAgICAgICAgIHVwcGVyQ2FzZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGxvd2VyQ2FzZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG51bWJlcnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBzcGVjaWFsY2hhcnM6IGZhbHNlLFxyXG4gICAgICAgICAgICB0YXJnZXQ6ICcnLFxyXG4gICAgICAgICAgICBzdHlsZTogJydcclxuICAgICAgICB9LCBvcHRpb25zKTtcclxuXHJcblxyXG4gICAgICAgIHZhciBjYXBpdGFsbGV0dGVycyA9IDA7XHJcbiAgICAgICAgdmFyIGxvd2VybGV0dGVycyA9IDA7XHJcbiAgICAgICAgdmFyIG51bWJlcnMgPSAwO1xyXG4gICAgICAgIHZhciBzcGVjaWFsY2hhcnMgPSAwO1xyXG5cclxuICAgICAgICB2YXIgdXBwZXJDYXNlID0gbmV3IFJlZ0V4cCgnW0EtWl0nKTtcclxuICAgICAgICB2YXIgbG93ZXJDYXNlID0gbmV3IFJlZ0V4cCgnW2Etel0nKTtcclxuICAgICAgICB2YXIgbnVtYmVyID0gbmV3IFJlZ0V4cCgnWzAtOV0nKTtcclxuICAgICAgICB2YXIgc3BlY2lhbGNoYXIgPSBuZXcgUmVnRXhwKCdbXkEtWmEtejAtOV0nKTtcclxuXHJcbiAgICAgICAgdmFyIHZhbGlkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGNyZWF0ZVByb2dyZXNzQmFyKDAsICcnKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0UGVyY2VudGFnZShhLCBiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoKGIgLyBhKSAqIDEwMCkudG9GaXhlZCgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldExldmVsKHZhbHVlKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUgPj0gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJiZy1zdWNjZXNzXCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+PSA1MCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYmctd2FybmluZ1wiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnOyAvLyBncmF5ZWRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFwiYmctZGFuZ2VyXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBjaGVja1N0cmVuZ3RoKHZhbHVlKSB7XHJcblxyXG4gICAgICAgICAgICBtaW5MZW5ndGggPSB2YWx1ZS5sZW5ndGggPj0gc2V0dGluZ3MubWluTGVuZ3RoID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGNhcGl0YWxsZXR0ZXJzID0gIXNldHRpbmdzLnVwcGVyQ2FzZSB8fCB2YWx1ZS5tYXRjaCh1cHBlckNhc2UpID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGxvd2VybGV0dGVycyA9ICFzZXR0aW5ncy5sb3dlckNhc2UgfHwgdmFsdWUubWF0Y2gobG93ZXJDYXNlKSA/IDEgOiAwO1xyXG4gICAgICAgICAgICBudW1iZXJzID0gIXNldHRpbmdzLm51bWJlcnMgfHwgdmFsdWUubWF0Y2gobnVtYmVyKSA/IDEgOiAwO1xyXG4gICAgICAgICAgICBzcGVjaWFsY2hhcnMgPSAhc2V0dGluZ3Muc3BlY2lhbGNoYXJzIHx8IHZhbHVlLm1hdGNoKHNwZWNpYWxjaGFyKSA/IDEgOiAwO1xyXG5cclxuICAgICAgICAgICAgdmFyIHRvdGFsID0gbWluTGVuZ3RoICsgY2FwaXRhbGxldHRlcnMgKyBsb3dlcmxldHRlcnMgKyBudW1iZXJzICsgc3BlY2lhbGNoYXJzO1xyXG4gICAgICAgICAgICB2YXIgcGVyY2VudGFnZSA9IGdldFBlcmNlbnRhZ2UoNSwgdG90YWwpO1xyXG5cclxuICAgICAgICAgICAgdmFsaWQgPSBwZXJjZW50YWdlID49IDEwMDtcclxuXHJcbiAgICAgICAgICAgIGNyZWF0ZVByb2dyZXNzQmFyKHBlcmNlbnRhZ2UsIGdldExldmVsKHBlcmNlbnRhZ2UpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVByb2dyZXNzQmFyKHBlcmNlbnRhZ2UsIGxldmVsKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9ICQoJzxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiIHZhbHVlPVwiJyArIHBlcmNlbnRhZ2UgKyAnXCIgc3R5bGU9XCInICsgc2V0dGluZ3Muc3R5bGUgKyAnXCIgbWF4PVwiMTAwXCIgYXJpYS1kZXNjcmliZWRieT1cIlwiPjxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXIgJyArIGxldmVsICsgJ1wiIHJvbGU9XCJwcm9ncmVzcy1iYXJcIiBzdHlsZT1cIndpZHRoOiAnICsgcGVyY2VudGFnZSArICclO1wiPjwvZGl2PjwvZGl2PicpO1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChzZXR0aW5ncy50YXJnZXQpO1xyXG4gICAgICAgICAgICB0YXJnZXQuZW1wdHkoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZChlbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJpbmQoJ2tleXVwIGtleWRvd24nLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgY2hlY2tTdHJlbmd0aCgkKHRoaXMpLnZhbCgpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJpbmQoJ2Ryb3AnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgY2hlY2tTdHJlbmd0aChldmVudC5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKFwidGV4dFwiKSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50cygnZm9ybScpLm9uKCdzdWJtaXQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbn0oalF1ZXJ5KSk7XHJcbiAgICAiXX0= diff --git a/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.min.js b/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.min.js index 562d5886b09..8dd42379f69 100644 --- a/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.min.js +++ b/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.min.js @@ -1,6 +1,6 @@ function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e) /*! - * jQuery JavaScript Library v3.6.0 + * jQuery JavaScript Library v3.6.1 * https://jquery.com/ * * Includes Sizzle.js @@ -10,13 +10,13 @@ function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof S * Released under the MIT license * https://jquery.org/license * - * Date: 2021-03-02T17:08Z + * Date: 2022-08-26T17:52Z */}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _get(){return _get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=_superPropBase(e,t);if(r){var i=Object.getOwnPropertyDescriptor(r,t);return i.get?i.get.call(arguments.length<3?e:n):i.value}},_get.apply(this,arguments)}function _superPropBase(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=_getPrototypeOf(e)););return e}function ownKeys(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function _objectSpread(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&t-1 in e)}w.fn=w.prototype={jquery:b,constructor:w,length:0,toArray:function(){return i.call(this)},get:function(e){return null==e?i.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(i.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(w.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(w.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}w.fn=w.prototype={jquery:b,constructor:w,length:0,toArray:function(){return i.call(this)},get:function(e){return null==e?i.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(i.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(w.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(w.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n+~]|[\\x20\\t\\r\\n\\f])[\\x20\\t\\r\\n\\f]*"),U=new RegExp(H+"|>"),V=new RegExp(B),X=new RegExp("^"+M+"$"),K={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+R),PSEUDO:new RegExp("^"+B),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)","i"),bool:new RegExp("^(?:"+q+")$","i"),needsContext:new RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,G=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){d()},ae=be((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{N.apply(j=P.call(w.childNodes),w.childNodes),j[w.childNodes.length].nodeType}catch(e){N={apply:j.length?function(e,t){L.apply(e,P.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function se(e,t,r,i){var o,s,l,u,f,h,v,y=t&&t.ownerDocument,w=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==w&&9!==w&&11!==w)return r;if(!i&&(d(t),t=t||p,g)){if(11!==w&&(f=Z.exec(e)))if(o=f[1]){if(9===w){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(y&&(l=y.getElementById(o))&&_(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return N.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return N.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!A[e+" "]&&(!m||!m.test(e))&&(1!==w||"object"!==t.nodeName.toLowerCase())){if(v=e,y=t,1===w&&(U.test(e)||z.test(e))){for((y=ee.test(e)&&ve(t.parentNode)||t)===t&&n.scope||((u=t.getAttribute("id"))?u=u.replace(re,ie):t.setAttribute("id",u=b)),s=(h=a(e)).length;s--;)h[s]=(u?"#"+u:":scope")+" "+_e(h[s]);v=h.join(",")}try{return N.apply(r,y.querySelectorAll(v)),r}catch(t){A(e,!0)}finally{u===b&&t.removeAttribute("id")}}}return c(e.replace(F,"$1"),t,r,i)}function ce(){var e=[];return function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}}function le(e){return e[b]=!0,e}function ue(e){var t=p.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){for(var n=e.split("|"),i=n.length;i--;)r.attrHandle[n[i]]=t}function de(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function pe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function he(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ge(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ae(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function me(e){return le((function(t){return t=+t,le((function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))}))}))}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=se.support={},o=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},d=se.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!=p&&9===a.nodeType&&a.documentElement?(h=(p=a).documentElement,g=!o(p),w!=p&&(i=p.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",oe,!1):i.attachEvent&&i.attachEvent("onunload",oe)),n.scope=ue((function(e){return h.appendChild(e).appendChild(p.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),n.attributes=ue((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=ue((function(e){return e.appendChild(p.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=J.test(p.getElementsByClassName),n.getById=ue((function(e){return h.appendChild(e).id=b,!p.getElementsByName||!p.getElementsByName(b).length})),n.getById?(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],m=[],(n.qsa=J.test(p.querySelectorAll))&&(ue((function(e){var t;h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&m.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),e.querySelectorAll("[selected]").length||m.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|"+q+")"),e.querySelectorAll("[id~="+b+"-]").length||m.push("~="),(t=p.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||m.push("\\[[\\x20\\t\\r\\n\\f]*name[\\x20\\t\\r\\n\\f]*=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),e.querySelectorAll(":checked").length||m.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||m.push(".#.+[+~]"),e.querySelectorAll("\\\f"),m.push("[\\r\\n\\f]")})),ue((function(e){e.innerHTML="";var t=p.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&m.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&m.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&m.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),m.push(",.*:")}))),(n.matchesSelector=J.test(y=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue((function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),v.push("!=",B)})),m=m.length&&new RegExp(m.join("|")),v=v.length&&new RegExp(v.join("|")),t=J.test(h.compareDocumentPosition),_=t||J.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},S=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e==p||e.ownerDocument==w&&_(w,e)?-1:t==p||t.ownerDocument==w&&_(w,t)?1:u?I(u,e)-I(u,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==p?-1:t==p?1:i?-1:o?1:u?I(u,e)-I(u,t):0;if(i===o)return de(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?de(a[r],s[r]):a[r]==w?-1:s[r]==w?1:0},p):p},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(d(e),n.matchesSelector&&g&&!A[t+" "]&&(!v||!v.test(t))&&(!m||!m.test(t)))try{var r=y.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){A(t,!0)}return se(t,p,null,[e]).length>0},se.contains=function(e,t){return(e.ownerDocument||e)!=p&&d(e),_(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=p&&d(e);var i=r.attrHandle[t.toLowerCase()],o=i&&O.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,u=!n.sortStable&&e.slice(0),e.sort(S),f){for(;t=e[o++];)t===e[o]&&(i=r.push(o));for(;i--;)e.splice(r[i],1)}return u=null,e},i=se.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=i(t);return n},r=se.selectors={cacheLength:50,createPseudo:le,match:K,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return K.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|[\\x20\\t\\r\\n\\f])"+e+"("+H+"|$)"))&&E(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(r){var i=se.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace(W," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,c){var l,u,f,d,p,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!c&&!s,_=!1;if(m){if(o){for(;g;){for(d=t;d=d[g];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&y){for(_=(p=(l=(u=(f=(d=m)[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===x&&l[1])&&l[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(_=p=0)||h.pop();)if(1===d.nodeType&&++_&&d===t){u[e]=[x,p,_];break}}else if(y&&(_=p=(l=(u=(f=(d=t)[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===x&&l[1]),!1===_)for(;(d=++p&&d&&d[g]||(_=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++_||(y&&((u=(f=d[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]=[x,_]),d!==t)););return(_-=i)===r||_%r==0&&_/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?le((function(e,n){for(var r,o=i(e,t),a=o.length;a--;)e[r=I(e,o[a])]=!(n[r]=o[a])})):function(e){return i(e,0,n)}):i}},pseudos:{not:le((function(e){var t=[],n=[],r=s(e.replace(F,"$1"));return r[b]?le((function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))})):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}})),has:le((function(e){return function(t){return se(e,t).length>0}})),contains:le((function(e){return e=e.replace(te,ne),function(t){return(t.textContent||i(t)).indexOf(e)>-1}})),lang:le((function(e){return X.test(e||"")||se.error("unsupported lang: "+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return G.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:me((function(){return[0]})),last:me((function(e,t){return[t-1]})),eq:me((function(e,t,n){return[n<0?n+t:n]})),even:me((function(e,t){for(var n=0;nt?t:n;--r>=0;)e.push(r);return e})),gt:me((function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xe(e,t,n,r,i){for(var o,a=[],s=0,c=e.length,l=null!=t;s-1&&(o[l]=!(a[l]=f))}}else v=xe(v===a?v.splice(h,v.length):v),i?i(null,a,v,c):N.apply(a,v)}))}function Ee(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],c=a?1:0,u=be((function(e){return e===t}),s,!0),f=be((function(e){return I(t,e)>-1}),s,!0),d=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?u(e,n,r):f(e,n,r));return t=null,i}];c1&&we(d),c>1&&_e(e.slice(0,c-1).concat({value:" "===e[c-2].type?"*":""})).replace(F,"$1"),n,c0,i=e.length>0,o=function(o,a,s,c,u){var f,h,m,v=0,y="0",_=o&&[],b=[],w=l,k=o||i&&r.find.TAG("*",u),E=x+=null==w?1:Math.random()||.1,C=k.length;for(u&&(l=a==p||a||u);y!==C&&null!=(f=k[y]);y++){if(i&&f){for(h=0,a||f.ownerDocument==p||(d(f),s=!g);m=e[h++];)if(m(f,a||p,s)){c.push(f);break}u&&(x=E)}n&&((f=!m&&f)&&v--,o&&_.push(f))}if(v+=y,n&&y!==v){for(h=0;m=t[h++];)m(_,b,a,s);if(o){if(v>0)for(;y--;)_[y]||b[y]||(b[y]=D.call(c));b=xe(b)}N.apply(c,b),u&&!o&&b.length>0&&v+t.length>1&&se.uniqueSort(c)}return u&&(x=E,l=w),_};return n?le(o):o}(o,i)),s.selector=e}return s},c=se.select=function(e,t,n,i){var o,c,l,u,f,d="function"==typeof e&&e,p=!i&&a(e=d.selector||e);if(n=n||[],1===p.length){if((c=p[0]=p[0].slice(0)).length>2&&"ID"===(l=c[0]).type&&9===t.nodeType&&g&&r.relative[c[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(te,ne),t)||[])[0]))return n;d&&(t=t.parentNode),e=e.slice(c.shift().value.length)}for(o=K.needsContext.test(e)?0:c.length;o--&&(l=c[o],!r.relative[u=l.type]);)if((f=r.find[u])&&(i=f(l.matches[0].replace(te,ne),ee.test(c[0].type)&&ve(t.parentNode)||t))){if(c.splice(o,1),!(e=i.length&&_e(c)))return N.apply(n,i),n;break}}return(d||s(e,p))(i,t,!g,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},n.sortStable=b.split("").sort(S).join("")===b,n.detectDuplicates=!!f,d(),n.sortDetached=ue((function(e){return 1&e.compareDocumentPosition(p.createElement("fieldset"))})),ue((function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")}))||fe("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),n.attributes&&ue((function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||fe("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),ue((function(e){return null==e.getAttribute("disabled")}))||fe(q,(function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null})),se}(e);w.find=k,(w.expr=k.selectors)[":"]=w.expr.pseudos,w.uniqueSort=w.unique=k.uniqueSort,w.text=k.getText,w.isXMLDoc=k.isXML,w.contains=k.contains,w.escapeSelector=k.escape;var E=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},C=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},T=w.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var S=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function O(e,t,n){return h(t)?w.grep(e,(function(e,r){return!!t.call(e,r,e)!==n})):t.nodeType?w.grep(e,(function(e){return e===t!==n})):"string"!=typeof t?w.grep(e,(function(e){return s.call(t,e)>-1!==n})):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,(function(e){return 1===e.nodeType})))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter((function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(O(this,e||[],!1))},not:function(e){return this.pushStack(O(this,e||[],!0))},is:function(e){return!!O(this,"string"==typeof e&&T.test(e)?w(e):e||[],!1).length}});var j,D=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:D.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:m,!0)),S.test(r[1])&&w.isPlainObject(t))for(r in t)h(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=m.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):h(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,j=w(m);var L=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter((function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?s.call(w(e),this[0]):s.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return E(e,"parentNode")},parentsUntil:function(e,t,n){return E(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return E(e,"nextSibling")},prevAll:function(e){return E(e,"previousSibling")},nextUntil:function(e,t,n){return E(e,"nextSibling",n)},prevUntil:function(e,t,n){return E(e,"previousSibling",n)},siblings:function(e){return C((e.parentNode||{}).firstChild,e)},children:function(e){return C(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},(function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(N[e]||w.uniqueSort(i),L.test(e)&&i.reverse()),this.pushStack(i)}}));var I=/[^\x20\t\r\n\f]+/g;function q(e){return e}function H(e){throw e}function M(e,t,n,r){var i;try{e&&h(i=e.promise)?i.call(e).done(t).fail(n):e&&h(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return w.each(e.match(I)||[],(function(e,n){t[n]=!0})),t}(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,c=function(){for(i=i||e.once,r=t=!0;a.length;s=-1)for(n=a.shift();++s-1;)o.splice(n,1),n<=s&&s--})),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred((function(t){w.each(n,(function(n,r){var i=h(e[r[4]])&&e[r[4]];o[r[1]]((function(){var e=i&&i.apply(this,arguments);e&&h(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)}))})),e=null})).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,c=arguments,l=function(){var e,l;if(!(t=o&&(r!==H&&(s=void 0,c=[e]),n.rejectWith(s,c))}};t?u():(w.Deferred.getStackHook&&(u.stackTrace=w.Deferred.getStackHook()),e.setTimeout(u))}}return w.Deferred((function(e){n[0][3].add(a(0,e,h(i)?i:q,e.notifyWith)),n[1][3].add(a(0,e,h(t)?t:q)),n[2][3].add(a(0,e,h(r)?r:H))})).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,(function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add((function(){r=s}),n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith})),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),o=i.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,o[e]=arguments.length>1?i.call(arguments):n,--t||a.resolveWith(r,o)}};if(t<=1&&(M(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||h(o[n]&&o[n].then)))return a.then();for(;n--;)M(o[n],s(n),a.reject);return a.promise()}});var R=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&R.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout((function(){throw t}))};var B=w.Deferred();function W(){m.removeEventListener("DOMContentLoaded",W),e.removeEventListener("load",W),w.ready()}w.fn.ready=function(e){return B.then(e).catch((function(e){w.readyException(e)})),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||B.resolveWith(m,[w]))}}),w.ready.then=B.then,"complete"===m.readyState||"loading"!==m.readyState&&!m.documentElement.doScroll?e.setTimeout(w.ready):(m.addEventListener("DOMContentLoaded",W),e.addEventListener("load",W));var F=function e(t,n,r,i,o,a,s){var c=0,l=t.length,u=null==r;if("object"===_(r))for(c in o=!0,r)e(t,n,c,r[c],!0,a,s);else if(void 0!==i&&(o=!0,h(i)||(s=!0),u&&(s?(n.call(t,i),n=null):(u=n,n=function(e,t,n){return u.call(w(e),n)})),n))for(;c1,null,!0)},removeData:function(e){return this.each((function(){Q.remove(this,e)}))}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){var n=w.queue(e,t=t||"fx"),r=n.length,i=n.shift(),o=w._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,(function(){w.dequeue(e,t)}),o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:w.Callbacks("once memory").add((function(){Y.remove(e,[t+"queue",n])}))})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,ge=/^$|^module$|\/(?:java|ecma)script/i;fe=m.createDocumentFragment().appendChild(m.createElement("div")),(de=m.createElement("input")).setAttribute("type","radio"),de.setAttribute("checked","checked"),de.setAttribute("name","t"),fe.appendChild(de),p.checkClone=fe.cloneNode(!0).cloneNode(!0).lastChild.checked,fe.innerHTML="",p.noCloneChecked=!!fe.cloneNode(!0).lastChild.defaultValue,fe.innerHTML="",p.option=!!fe.lastChild;var me={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?w.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var _e=/<|&#?\w+;/;function be(e,t,n,r,i){for(var o,a,s,c,l,u,f=t.createDocumentFragment(),d=[],p=0,h=e.length;p-1)i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n)for(u=0;o=a[u++];)ge.test(o.type||"")&&n.push(o);return f}var we=/^([^.]*)(?:\.(.+)|)/;function xe(){return!0}function ke(){return!1}function Ee(e,t){return e===function(){try{return m.activeElement}catch(e){}}()==("focus"===t)}function Ce(e,t,n,r,i,o){var a,s;if("object"===_typeof(t)){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ce(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,i=function(e){return w().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=w.guid++)),e.each((function(){w.event.add(this,t,i,r,n)}))}function Te(e,t,n){n?(Y.set(e,t,!1),w.event.add(e,t,{namespace:!1,handler:function(e){var r,o,a=Y.get(this,t);if(1&e.isTrigger&&this[t]){if(a.length)(w.event.special[t]||{}).delegateType&&e.stopPropagation();else if(a=i.call(arguments),Y.set(this,t,a),r=n(this,t),this[t](),a!==(o=Y.get(this,t))||r?Y.set(this,t,!1):o={},a!==o)return e.stopImmediatePropagation(),e.preventDefault(),o&&o.value}else a.length&&(Y.set(this,t,{value:w.event.trigger(w.extend(a[0],w.Event.prototype),a.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,t)&&w.event.add(e,t,xe)}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,c,l,u,f,d,p,h,g,m=Y.get(e);if(X(e))for(n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(re,i),n.guid||(n.guid=w.guid++),(c=m.events)||(c=m.events=Object.create(null)),(a=m.handle)||(a=m.handle=function(t){return w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(I)||[""]).length;l--;)p=g=(s=we.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),p&&(f=w.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=w.event.special[p]||{},u=w.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=c[p])||((d=c[p]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(p,a)),f.add&&(f.add.call(e,u),u.handler.guid||(u.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,u):d.push(u),w.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,a,s,c,l,u,f,d,p,h,g,m=Y.hasData(e)&&Y.get(e);if(m&&(c=m.events)){for(l=(t=(t||"").match(I)||[""]).length;l--;)if(p=g=(s=we.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),p){for(f=w.event.special[p]||{},d=c[p=(r?f.delegateType:f.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;o--;)u=d[o],!i&&g!==u.origType||n&&n.guid!==u.guid||s&&!s.test(u.namespace)||r&&r!==u.selector&&("**"!==r||!u.selector)||(d.splice(o,1),u.selector&&d.delegateCount--,f.remove&&f.remove.call(e,u));a&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,h,m.handle)||w.removeEvent(e,p,m.handle),delete c[p])}else for(p in c)w.event.remove(e,p+t[l],n,r,!0);w.isEmptyObject(c)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),c=w.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[c.type]||[],u=w.event.special[c.type]||{};for(s[0]=c,t=1;t=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,c\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&w(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Le(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Ne(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n1&&"string"==typeof m&&!p.checkClone&&Se.test(m))return e.each((function(i){var o=e.eq(i);v&&(t[0]=m.call(this,i,o.html())),Ie(o,t,n,r)}));if(d&&(a=(i=be(t,e[0].ownerDocument,!1,e,r)).firstChild,1===i.childNodes.length&&(i=a),a||r)){for(c=(s=w.map(ve(i,"script"),De)).length;f0&&ye(a,!c&&ve(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(X(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),w.fn.extend({detach:function(e){return qe(this,e,!0)},remove:function(e){return qe(this,e)},text:function(e){return F(this,(function(e){return void 0===e?w.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return Ie(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)}))},prepend:function(){return Ie(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return Ie(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return Ie(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return w.clone(this,e,t)}))},html:function(e){return F(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!me[(he.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(c+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-c-s-.5))||0),c}function Ze(e,t,n){var r=Me(e),i=(!p.boxSizingReliable()||n)&&"border-box"===w.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(He.test(a)){if(!n)return a;a="auto"}return(!p.boxSizingReliable()&&i||!p.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===w.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===w.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Je(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),c=Ke.test(t),l=e.style;if(c||(t=Ve(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=_typeof(n))&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||c||(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),p.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(c?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Ke.test(t)||(t=Ve(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],(function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!Xe.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,t,r):Re(e,Ye,(function(){return Ze(e,t,r)}))},set:function(e,n,r){var i,o=Me(e),a=!p.scrollboxSize()&&"absolute"===o.position,s=(a||r)&&"border-box"===w.css(e,"boxSizing",!1,o),c=r?Je(e,t,r,s,o):0;return s&&a&&(c-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Je(e,t,"border",!1,o)-.5)),c&&(i=te.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ge(0,n,c)}}})),w.cssHooks.marginLeft=Fe(p.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Re(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),w.each({margin:"",padding:"",border:"Width"},(function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+ne[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ge)})),w.fn.extend({css:function(e,t){return F(this,(function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Me(e),i=t.length;a1)}}),w.Tween=et,et.prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}},et.prototype.init.prototype=et.prototype,et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||!w.cssHooks[e.prop]&&null==e.elem.style[Ve(e.prop)]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},et.propHooks.scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},(w.fx=et.prototype.init).step={};var tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){nt&&(!1===m.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(ot):e.setTimeout(ot,w.fx.interval),w.fx.tick())}function at(){return e.setTimeout((function(){tt=void 0})),tt=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each((function(){w.removeAttr(this,e)}))}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?ut:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!p.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(I);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),ut={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=ft[t]||w.find.attr;ft[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ft[a],ft[a]=i,i=null!=n(e,t,r)?a:null,ft[a]=o),i}}));var dt=/^(?:input|select|textarea|button)$/i,pt=/^(?:a|area)$/i;function ht(e){return(e.match(I)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(I)||[]}w.fn.extend({prop:function(e,t){return F(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[w.propFix[e]||e]}))}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):dt.test(e.nodeName)||pt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),p.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){w.propFix[this.toLowerCase()]=this})),w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,c=0;if(h(e))return this.each((function(t){w(this).addClass(e.call(this,t,gt(this)))}));if((t=mt(e)).length)for(;n=this[c++];)if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){for(a=0;o=t[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,c=0;if(h(e))return this.each((function(t){w(this).removeClass(e.call(this,t,gt(this)))}));if(!arguments.length)return this.attr("class","");if((t=mt(e)).length)for(;n=this[c++];)if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){for(a=0;o=t[a++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=_typeof(e),r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):h(e)?this.each((function(n){w(this).toggleClass(e.call(this,n,gt(this),t),t)})):this.each((function(){var t,i,o,a;if(r)for(i=0,o=w(this),a=mt(e);t=a[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||((t=gt(this))&&Y.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":Y.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+ht(gt(n))+" ").indexOf(t)>-1)return!0;return!1}});var vt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];return arguments.length?(r=h(e),this.each((function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,(function(e){return null==e?"":e+""}))),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))}))):i?(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(vt,""):null==n?"":n:void 0}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:ht(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],c=a?o+1:i.length;for(r=o<0?c:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],(function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},p.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),p.focusin="onfocusin"in e;var yt=/^(?:focusinfocus|focusoutblur)$/,_t=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,r,i){var o,a,s,c,l,f,d,p,v=[r||m],y=u.call(t,"type")?t.type:t,_=u.call(t,"namespace")?t.namespace.split("."):[];if(a=p=s=r=r||m,3!==r.nodeType&&8!==r.nodeType&&!yt.test(y+w.event.triggered)&&(y.indexOf(".")>-1&&(_=y.split("."),y=_.shift(),_.sort()),l=y.indexOf(":")<0&&"on"+y,(t=t[w.expando]?t:new w.Event(y,"object"===_typeof(t)&&t)).isTrigger=i?2:3,t.namespace=_.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+_.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[y]||{},i||!d.trigger||!1!==d.trigger.apply(r,n))){if(!i&&!d.noBubble&&!g(r)){for(c=d.delegateType||y,yt.test(c+y)||(a=a.parentNode);a;a=a.parentNode)v.push(a),s=a;s===(r.ownerDocument||m)&&v.push(s.defaultView||s.parentWindow||e)}for(o=0;(a=v[o++])&&!t.isPropagationStopped();)p=a,t.type=o>1?c:d.bindType||y,(f=(Y.get(a,"events")||Object.create(null))[t.type]&&Y.get(a,"handle"))&&f.apply(a,n),(f=l&&a[l])&&f.apply&&X(a)&&(t.result=f.apply(a,n),!1===t.result&&t.preventDefault());return t.type=y,i||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!X(r)||l&&h(r[y])&&!g(r)&&((s=r[l])&&(r[l]=null),w.event.triggered=y,t.isPropagationStopped()&&p.addEventListener(y,_t),r[y](),t.isPropagationStopped()&&p.removeEventListener(y,_t),w.event.triggered=void 0,s&&(r[l]=s)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each((function(){w.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),p.focusin||w.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this.document||this,i=Y.access(r,t);i||r.addEventListener(e,n,!0),Y.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,i=Y.access(r,t)-1;i?Y.access(r,t,i):(r.removeEventListener(e,n,!0),Y.remove(r,t))}}}));var bt=e.location,wt={guid:Date.now()},xt=/\?/;w.parseXML=function(t){var n,r;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){}return r=n&&n.getElementsByTagName("parsererror")[0],n&&!r||w.error("Invalid XML: "+(r?w.map(r.childNodes,(function(e){return e.textContent})).join("\n"):t)),n};var kt=/\[\]$/,Et=/\r?\n/g,Ct=/^(?:submit|button|image|reset|file)$/i,Tt=/^(?:input|select|textarea|keygen)/i;function At(e,t,n,r){var i;if(Array.isArray(t))w.each(t,(function(t,i){n||kt.test(e)?r(e,i):At(e+"["+("object"===_typeof(i)&&null!=i?t:"")+"]",i,n,r)}));else if(n||"object"!==_(t))r(e,t);else for(i in t)At(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=h(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,(function(){i(this.name,this.value)}));else for(n in e)At(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&Tt.test(this.nodeName)&&!Ct.test(e)&&(this.checked||!pe.test(e))})).map((function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,(function(e){return{name:t.name,value:e.replace(Et,"\r\n")}})):{name:t.name,value:n.replace(Et,"\r\n")}})).get()}});var St=/%20/g,Ot=/#.*$/,jt=/([?&])_=[^&]*/,Dt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Nt=/^\/\//,Pt={},It={},qt="*/".concat("*"),Ht=m.createElement("a");function Mt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(I)||[];if(h(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Rt(e,t,n,r){var i={},o=e===It;function a(s){var c;return i[s]=!0,w.each(e[s]||[],(function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(c=l):void 0:(t.dataTypes.unshift(l),a(l),!1)})),c}return a(t.dataTypes[0])||!i["*"]&&a("*")}function Bt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}Ht.href=bt.href,w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":qt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Bt(Bt(e,w.ajaxSettings),t):Bt(w.ajaxSettings,e)},ajaxPrefilter:Mt(Pt),ajaxTransport:Mt(It),ajax:function(t,n){"object"===_typeof(t)&&(n=t,t=void 0);var r,i,o,a,s,c,l,u,f,d,p=w.ajaxSetup({},n=n||{}),h=p.context||p,g=p.context&&(h.nodeType||h.jquery)?w(h):w.event,v=w.Deferred(),y=w.Callbacks("once memory"),_=p.statusCode||{},b={},x={},k="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=Dt.exec(o);)a[t[1].toLowerCase()+" "]=(a[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=a[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return l?o:null},setRequestHeader:function(e,t){return null==l&&(e=x[e.toLowerCase()]=x[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)E.always(e[E.status]);else for(t in e)_[t]=[_[t],e[t]];return this},abort:function(e){var t=e||k;return r&&r.abort(t),C(0,t),this}};if(v.promise(E),p.url=((t||p.url||bt.href)+"").replace(Nt,bt.protocol+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=(p.dataType||"*").toLowerCase().match(I)||[""],null==p.crossDomain){c=m.createElement("a");try{c.href=p.url,c.href=c.href,p.crossDomain=Ht.protocol+"//"+Ht.host!=c.protocol+"//"+c.host}catch(e){p.crossDomain=!0}}if(p.data&&p.processData&&"string"!=typeof p.data&&(p.data=w.param(p.data,p.traditional)),Rt(Pt,p,n,E),l)return E;for(f in(u=w.event&&p.global)&&0==w.active++&&w.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Lt.test(p.type),i=p.url.replace(Ot,""),p.hasContent?p.data&&p.processData&&0===(p.contentType||"").indexOf("application/x-www-form-urlencoded")&&(p.data=p.data.replace(St,"+")):(d=p.url.slice(i.length),p.data&&(p.processData||"string"==typeof p.data)&&(i+=(xt.test(i)?"&":"?")+p.data,delete p.data),!1===p.cache&&(i=i.replace(jt,"$1"),d=(xt.test(i)?"&":"?")+"_="+wt.guid+++d),p.url=i+d),p.ifModified&&(w.lastModified[i]&&E.setRequestHeader("If-Modified-Since",w.lastModified[i]),w.etag[i]&&E.setRequestHeader("If-None-Match",w.etag[i])),(p.data&&p.hasContent&&!1!==p.contentType||n.contentType)&&E.setRequestHeader("Content-Type",p.contentType),E.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+qt+"; q=0.01":""):p.accepts["*"]),p.headers)E.setRequestHeader(f,p.headers[f]);if(p.beforeSend&&(!1===p.beforeSend.call(h,E,p)||l))return E.abort();if(k="abort",y.add(p.complete),E.done(p.success),E.fail(p.error),r=Rt(It,p,n,E)){if(E.readyState=1,u&&g.trigger("ajaxSend",[E,p]),l)return E;p.async&&p.timeout>0&&(s=e.setTimeout((function(){E.abort("timeout")}),p.timeout));try{l=!1,r.send(b,C)}catch(e){if(l)throw e;C(-1,e)}}else C(-1,"No Transport");function C(t,n,a,c){var f,d,m,b,x,k=n;l||(l=!0,s&&e.clearTimeout(s),r=void 0,o=c||"",E.readyState=t>0?4:0,f=t>=200&&t<300||304===t,a&&(b=function(e,t,n){for(var r,i,o,a,s=e.contents,c=e.dataTypes;"*"===c[0];)c.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){c.unshift(i);break}if(c[0]in n)o=c[0];else{for(i in n){if(!c[0]||e.converters[i+" "+c[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==c[0]&&c.unshift(o),n[o]}(p,E,a)),!f&&w.inArray("script",p.dataTypes)>-1&&w.inArray("json",p.dataTypes)<0&&(p.converters["text script"]=function(){}),b=function(e,t,n,r){var i,o,a,s,c,l={},u=e.dataTypes.slice();if(u[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(o=u.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!c&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),c=o,o=u.shift())if("*"===o)o=c;else if("*"!==c&&c!==o){if(!(a=l[c+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[c+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],u.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+c+" to "+o}}}return{state:"success",data:t}}(p,b,E,f),f?(p.ifModified&&((x=E.getResponseHeader("Last-Modified"))&&(w.lastModified[i]=x),(x=E.getResponseHeader("etag"))&&(w.etag[i]=x)),204===t||"HEAD"===p.type?k="nocontent":304===t?k="notmodified":(k=b.state,d=b.data,f=!(m=b.error))):(m=k,!t&&k||(k="error",t<0&&(t=0))),E.status=t,E.statusText=(n||k)+"",f?v.resolveWith(h,[d,k,E]):v.rejectWith(h,[E,k,m]),E.statusCode(_),_=void 0,u&&g.trigger(f?"ajaxSuccess":"ajaxError",[E,p,f?d:m]),y.fireWith(h,[E,k]),u&&(g.trigger("ajaxComplete",[E,p]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],(function(e,t){w[t]=function(e,n,r,i){return h(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}})),w.ajaxPrefilter((function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")})),w._evalUrl=function(e,t,n){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){w.globalEval(e,t,n)}})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(h(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return h(e)?this.each((function(t){w(this).wrapInner(e.call(this,t))})):this.each((function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=h(e);return this.each((function(n){w(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not("body").each((function(){w(this).replaceWith(this.childNodes)})),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Wt={0:200,1223:204},Ft=w.ajaxSettings.xhr();p.cors=!!Ft&&"withCredentials"in Ft,p.ajax=Ft=!!Ft,w.ajaxTransport((function(t){var n,r;if(p.cors||Ft&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];for(a in t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest"),i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Wt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout((function(){n&&r()}))},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}})),w.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),w.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(r,i){t=w("