MediaWiki:Gadget-Editform Attribution.js
请注意:更新本页面后,您可能需要清除浏览器缓存才能看到所作变更的影响。
Google Chrome、Microsoft Edge、Mozilla Firefox、Safari:按住⇧ Shift,同时单击“刷新”。
Google Chrome、Microsoft Edge、Mozilla Firefox、Safari:按住⇧ Shift,同时单击“刷新”。
本小工具代码采用下列版权许可:
本文件采用知识共享署名-相同方式共享(CC BY-SA 4.0)许可协议授权。
- 您可以自由地:
- 分享 – 在任何媒介以任何形式复制、发行本作品
- 演绎 – 修改、转换或以本作品为基础进行创作
- 惟须遵守下列条件:
- 署名 – 您必须给出适当的署名,提供指向本许可协议的链接,同时标明是否(对原始作品)作了修改。您可以用任何合理的方式来署名,但是不得以任何方式暗示许可人为您或您的使用背书。
- 相同方式共享 – 如果您再混合、转换或者基于本作品进行创作,您必须基于与原先许可协议相同或相兼容的许可协议分发您贡献的作品。
/**
* SPDX-License-Identifier: CC-BY-SA-4.0
* _addText: '{{Gadget Header|license=CC-BY-SA-4.0}}'
*
* @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/Editform_Attribution}
* @license CC-BY-SA-4.0 {@link https://www.qiuwenbaike.cn/wiki/H:CC-BY-SA-4.0}
*/
/**
* +------------------------------------------------------------+
* | === WARNING: GLOBAL GADGET FILE === |
* +------------------------------------------------------------+
* | All changes should be made in the repository, |
* | otherwise they will be lost. |
* +------------------------------------------------------------+
* | Changes to this page may affect many users. |
* | Please discuss changes by opening an issue before editing. |
* +------------------------------------------------------------+
*/
/* <nowiki> */
(() => {
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __esm = (fn, res) => function __init() {
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
};
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/global-this.js
var require_global_this = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/global-this.js"(exports, module2) {
"use strict";
var check = function(it) {
return it && it.Math === Math && it;
};
module2.exports = // eslint-disable-next-line es/no-global-this -- safe
check(typeof globalThis == "object" && globalThis) || check(typeof window == "object" && window) || // eslint-disable-next-line no-restricted-globals -- safe
check(typeof self == "object" && self) || check(typeof global == "object" && global) || check(typeof exports == "object" && exports) || // eslint-disable-next-line no-new-func -- fallback
/* @__PURE__ */ function() {
return this;
}() || Function("return this")();
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/fails.js
var require_fails = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/fails.js"(exports, module2) {
"use strict";
module2.exports = function(exec) {
try {
return !!exec();
} catch (error) {
return true;
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/descriptors.js
var require_descriptors = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/descriptors.js"(exports, module2) {
"use strict";
var fails = require_fails();
module2.exports = !fails(function() {
return Object.defineProperty({}, 1, { get: function() {
return 7;
} })[1] !== 7;
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-bind-native.js
var require_function_bind_native = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-bind-native.js"(exports, module2) {
"use strict";
var fails = require_fails();
module2.exports = !fails(function() {
var test = function() {
}.bind();
return typeof test != "function" || test.hasOwnProperty("prototype");
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-call.js
var require_function_call = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-call.js"(exports, module2) {
"use strict";
var NATIVE_BIND = require_function_bind_native();
var call = Function.prototype.call;
module2.exports = NATIVE_BIND ? call.bind(call) : function() {
return call.apply(call, arguments);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-property-is-enumerable.js
var require_object_property_is_enumerable = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) {
"use strict";
var $propertyIsEnumerable = {}.propertyIsEnumerable;
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);
exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
var descriptor = getOwnPropertyDescriptor(this, V);
return !!descriptor && descriptor.enumerable;
} : $propertyIsEnumerable;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-property-descriptor.js
var require_create_property_descriptor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) {
"use strict";
module2.exports = function(bitmap, value) {
return {
enumerable: !(bitmap & 1),
configurable: !(bitmap & 2),
writable: !(bitmap & 4),
value
};
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this.js
var require_function_uncurry_this = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) {
"use strict";
var NATIVE_BIND = require_function_bind_native();
var FunctionPrototype = Function.prototype;
var call = FunctionPrototype.call;
var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);
module2.exports = NATIVE_BIND ? uncurryThisWithBind : function(fn) {
return function() {
return call.apply(fn, arguments);
};
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/classof-raw.js
var require_classof_raw = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/classof-raw.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var toString = uncurryThis({}.toString);
var stringSlice = uncurryThis("".slice);
module2.exports = function(it) {
return stringSlice(toString(it), 8, -1);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/indexed-object.js
var require_indexed_object = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/indexed-object.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var fails = require_fails();
var classof = require_classof_raw();
var $Object = Object;
var split = uncurryThis("".split);
module2.exports = fails(function() {
return !$Object("z").propertyIsEnumerable(0);
}) ? function(it) {
return classof(it) === "String" ? split(it, "") : $Object(it);
} : $Object;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-null-or-undefined.js
var require_is_null_or_undefined = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) {
"use strict";
module2.exports = function(it) {
return it === null || it === void 0;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/require-object-coercible.js
var require_require_object_coercible = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) {
"use strict";
var isNullOrUndefined = require_is_null_or_undefined();
var $TypeError = TypeError;
module2.exports = function(it) {
if (isNullOrUndefined(it)) throw new $TypeError("Can't call method on " + it);
return it;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-indexed-object.js
var require_to_indexed_object = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) {
"use strict";
var IndexedObject = require_indexed_object();
var requireObjectCoercible = require_require_object_coercible();
module2.exports = function(it) {
return IndexedObject(requireObjectCoercible(it));
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-callable.js
var require_is_callable = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-callable.js"(exports, module2) {
"use strict";
var documentAll = typeof document == "object" && document.all;
module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) {
return typeof argument == "function" || argument === documentAll;
} : function(argument) {
return typeof argument == "function";
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-object.js
var require_is_object = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-object.js"(exports, module2) {
"use strict";
var isCallable = require_is_callable();
module2.exports = function(it) {
return typeof it == "object" ? it !== null : isCallable(it);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-built-in.js
var require_get_built_in = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-built-in.js"(exports, module2) {
"use strict";
var globalThis2 = require_global_this();
var isCallable = require_is_callable();
var aFunction = function(argument) {
return isCallable(argument) ? argument : void 0;
};
module2.exports = function(namespace, method) {
return arguments.length < 2 ? aFunction(globalThis2[namespace]) : globalThis2[namespace] && globalThis2[namespace][method];
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-is-prototype-of.js
var require_object_is_prototype_of = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
module2.exports = uncurryThis({}.isPrototypeOf);
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-user-agent.js
var require_environment_user_agent = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) {
"use strict";
var globalThis2 = require_global_this();
var navigator = globalThis2.navigator;
var userAgent = navigator && navigator.userAgent;
module2.exports = userAgent ? String(userAgent) : "";
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-v8-version.js
var require_environment_v8_version = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) {
"use strict";
var globalThis2 = require_global_this();
var userAgent = require_environment_user_agent();
var process = globalThis2.process;
var Deno = globalThis2.Deno;
var versions = process && process.versions || Deno && Deno.version;
var v8 = versions && versions.v8;
var match;
var version;
if (v8) {
match = v8.split(".");
version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
}
if (!version && userAgent) {
match = userAgent.match(/Edge\/(\d+)/);
if (!match || match[1] >= 74) {
match = userAgent.match(/Chrome\/(\d+)/);
if (match) version = +match[1];
}
}
module2.exports = version;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-constructor-detection.js
var require_symbol_constructor_detection = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) {
"use strict";
var V8_VERSION = require_environment_v8_version();
var fails = require_fails();
var globalThis2 = require_global_this();
var $String = globalThis2.String;
module2.exports = !!Object.getOwnPropertySymbols && !fails(function() {
var symbol = Symbol("symbol detection");
return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
!Symbol.sham && V8_VERSION && V8_VERSION < 41;
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/use-symbol-as-uid.js
var require_use_symbol_as_uid = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) {
"use strict";
var NATIVE_SYMBOL = require_symbol_constructor_detection();
module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol";
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-symbol.js
var require_is_symbol = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-symbol.js"(exports, module2) {
"use strict";
var getBuiltIn = require_get_built_in();
var isCallable = require_is_callable();
var isPrototypeOf = require_object_is_prototype_of();
var USE_SYMBOL_AS_UID = require_use_symbol_as_uid();
var $Object = Object;
module2.exports = USE_SYMBOL_AS_UID ? function(it) {
return typeof it == "symbol";
} : function(it) {
var $Symbol = getBuiltIn("Symbol");
return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/try-to-string.js
var require_try_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/try-to-string.js"(exports, module2) {
"use strict";
var $String = String;
module2.exports = function(argument) {
try {
return $String(argument);
} catch (error) {
return "Object";
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/a-callable.js
var require_a_callable = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/a-callable.js"(exports, module2) {
"use strict";
var isCallable = require_is_callable();
var tryToString = require_try_to_string();
var $TypeError = TypeError;
module2.exports = function(argument) {
if (isCallable(argument)) return argument;
throw new $TypeError(tryToString(argument) + " is not a function");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-method.js
var require_get_method = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-method.js"(exports, module2) {
"use strict";
var aCallable = require_a_callable();
var isNullOrUndefined = require_is_null_or_undefined();
module2.exports = function(V, P) {
var func = V[P];
return isNullOrUndefined(func) ? void 0 : aCallable(func);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/ordinary-to-primitive.js
var require_ordinary_to_primitive = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) {
"use strict";
var call = require_function_call();
var isCallable = require_is_callable();
var isObject = require_is_object();
var $TypeError = TypeError;
module2.exports = function(input, pref) {
var fn, val;
if (pref === "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;
if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;
if (pref !== "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;
throw new $TypeError("Can't convert object to primitive value");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-pure.js
var require_is_pure = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-pure.js"(exports, module2) {
"use strict";
module2.exports = false;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-global-property.js
var require_define_global_property = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-global-property.js"(exports, module2) {
"use strict";
var globalThis2 = require_global_this();
var defineProperty = Object.defineProperty;
module2.exports = function(key, value) {
try {
defineProperty(globalThis2, key, { value, configurable: true, writable: true });
} catch (error) {
globalThis2[key] = value;
}
return value;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared-store.js
var require_shared_store = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared-store.js"(exports, module2) {
"use strict";
var IS_PURE = require_is_pure();
var globalThis2 = require_global_this();
var defineGlobalProperty = require_define_global_property();
var SHARED = "__core-js_shared__";
var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {});
(store.versions || (store.versions = [])).push({
version: "3.41.0",
mode: IS_PURE ? "pure" : "global",
copyright: "© 2014-2025 Denis Pushkarev (zloirock.ru)",
license: "https://github.com/zloirock/core-js/blob/v3.41.0/LICENSE",
source: "https://github.com/zloirock/core-js"
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared.js
var require_shared = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared.js"(exports, module2) {
"use strict";
var store = require_shared_store();
module2.exports = function(key, value) {
return store[key] || (store[key] = value || {});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-object.js
var require_to_object = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-object.js"(exports, module2) {
"use strict";
var requireObjectCoercible = require_require_object_coercible();
var $Object = Object;
module2.exports = function(argument) {
return $Object(requireObjectCoercible(argument));
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/has-own-property.js
var require_has_own_property = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/has-own-property.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var toObject = require_to_object();
var hasOwnProperty = uncurryThis({}.hasOwnProperty);
module2.exports = Object.hasOwn || function hasOwn(it, key) {
return hasOwnProperty(toObject(it), key);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/uid.js
var require_uid = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/uid.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var id = 0;
var postfix = Math.random();
var toString = uncurryThis(1 .toString);
module2.exports = function(key) {
return "Symbol(" + (key === void 0 ? "" : key) + ")_" + toString(++id + postfix, 36);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol.js
var require_well_known_symbol = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) {
"use strict";
var globalThis2 = require_global_this();
var shared = require_shared();
var hasOwn = require_has_own_property();
var uid = require_uid();
var NATIVE_SYMBOL = require_symbol_constructor_detection();
var USE_SYMBOL_AS_UID = require_use_symbol_as_uid();
var Symbol2 = globalThis2.Symbol;
var WellKnownSymbolsStore = shared("wks");
var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol2["for"] || Symbol2 : Symbol2 && Symbol2.withoutSetter || uid;
module2.exports = function(name) {
if (!hasOwn(WellKnownSymbolsStore, name)) {
WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol2, name) ? Symbol2[name] : createWellKnownSymbol("Symbol." + name);
}
return WellKnownSymbolsStore[name];
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-primitive.js
var require_to_primitive = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-primitive.js"(exports, module2) {
"use strict";
var call = require_function_call();
var isObject = require_is_object();
var isSymbol = require_is_symbol();
var getMethod = require_get_method();
var ordinaryToPrimitive = require_ordinary_to_primitive();
var wellKnownSymbol = require_well_known_symbol();
var $TypeError = TypeError;
var TO_PRIMITIVE = wellKnownSymbol("toPrimitive");
module2.exports = function(input, pref) {
if (!isObject(input) || isSymbol(input)) return input;
var exoticToPrim = getMethod(input, TO_PRIMITIVE);
var result;
if (exoticToPrim) {
if (pref === void 0) pref = "default";
result = call(exoticToPrim, input, pref);
if (!isObject(result) || isSymbol(result)) return result;
throw new $TypeError("Can't convert object to primitive value");
}
if (pref === void 0) pref = "number";
return ordinaryToPrimitive(input, pref);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-property-key.js
var require_to_property_key = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-property-key.js"(exports, module2) {
"use strict";
var toPrimitive = require_to_primitive();
var isSymbol = require_is_symbol();
module2.exports = function(argument) {
var key = toPrimitive(argument, "string");
return isSymbol(key) ? key : key + "";
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/document-create-element.js
var require_document_create_element = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/document-create-element.js"(exports, module2) {
"use strict";
var globalThis2 = require_global_this();
var isObject = require_is_object();
var document2 = globalThis2.document;
var EXISTS = isObject(document2) && isObject(document2.createElement);
module2.exports = function(it) {
return EXISTS ? document2.createElement(it) : {};
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/ie8-dom-define.js
var require_ie8_dom_define = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var fails = require_fails();
var createElement = require_document_create_element();
module2.exports = !DESCRIPTORS && !fails(function() {
return Object.defineProperty(createElement("div"), "a", {
get: function() {
return 7;
}
}).a !== 7;
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-descriptor.js
var require_object_get_own_property_descriptor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) {
"use strict";
var DESCRIPTORS = require_descriptors();
var call = require_function_call();
var propertyIsEnumerableModule = require_object_property_is_enumerable();
var createPropertyDescriptor = require_create_property_descriptor();
var toIndexedObject = require_to_indexed_object();
var toPropertyKey = require_to_property_key();
var hasOwn = require_has_own_property();
var IE8_DOM_DEFINE = require_ie8_dom_define();
var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
O = toIndexedObject(O);
P = toPropertyKey(P);
if (IE8_DOM_DEFINE) try {
return $getOwnPropertyDescriptor(O, P);
} catch (error) {
}
if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/v8-prototype-define-bug.js
var require_v8_prototype_define_bug = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var fails = require_fails();
module2.exports = DESCRIPTORS && fails(function() {
return Object.defineProperty(function() {
}, "prototype", {
value: 42,
writable: false
}).prototype !== 42;
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/an-object.js
var require_an_object = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/an-object.js"(exports, module2) {
"use strict";
var isObject = require_is_object();
var $String = String;
var $TypeError = TypeError;
module2.exports = function(argument) {
if (isObject(argument)) return argument;
throw new $TypeError($String(argument) + " is not an object");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-define-property.js
var require_object_define_property = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-define-property.js"(exports) {
"use strict";
var DESCRIPTORS = require_descriptors();
var IE8_DOM_DEFINE = require_ie8_dom_define();
var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug();
var anObject = require_an_object();
var toPropertyKey = require_to_property_key();
var $TypeError = TypeError;
var $defineProperty = Object.defineProperty;
var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
var ENUMERABLE = "enumerable";
var CONFIGURABLE = "configurable";
var WRITABLE = "writable";
exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {
anObject(O);
P = toPropertyKey(P);
anObject(Attributes);
if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
var current = $getOwnPropertyDescriptor(O, P);
if (current && current[WRITABLE]) {
O[P] = Attributes.value;
Attributes = {
configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],
enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
writable: false
};
}
}
return $defineProperty(O, P, Attributes);
} : $defineProperty : function defineProperty(O, P, Attributes) {
anObject(O);
P = toPropertyKey(P);
anObject(Attributes);
if (IE8_DOM_DEFINE) try {
return $defineProperty(O, P, Attributes);
} catch (error) {
}
if ("get" in Attributes || "set" in Attributes) throw new $TypeError("Accessors not supported");
if ("value" in Attributes) O[P] = Attributes.value;
return O;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-non-enumerable-property.js
var require_create_non_enumerable_property = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var definePropertyModule = require_object_define_property();
var createPropertyDescriptor = require_create_property_descriptor();
module2.exports = DESCRIPTORS ? function(object, key, value) {
return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
} : function(object, key, value) {
object[key] = value;
return object;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-name.js
var require_function_name = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-name.js"(exports, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var hasOwn = require_has_own_property();
var FunctionPrototype = Function.prototype;
var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;
var EXISTS = hasOwn(FunctionPrototype, "name");
var PROPER = EXISTS && function something() {
}.name === "something";
var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable);
module2.exports = {
EXISTS,
PROPER,
CONFIGURABLE
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/inspect-source.js
var require_inspect_source = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/inspect-source.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var isCallable = require_is_callable();
var store = require_shared_store();
var functionToString = uncurryThis(Function.toString);
if (!isCallable(store.inspectSource)) {
store.inspectSource = function(it) {
return functionToString(it);
};
}
module2.exports = store.inspectSource;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/weak-map-basic-detection.js
var require_weak_map_basic_detection = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) {
"use strict";
var globalThis2 = require_global_this();
var isCallable = require_is_callable();
var WeakMap = globalThis2.WeakMap;
module2.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared-key.js
var require_shared_key = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared-key.js"(exports, module2) {
"use strict";
var shared = require_shared();
var uid = require_uid();
var keys = shared("keys");
module2.exports = function(key) {
return keys[key] || (keys[key] = uid(key));
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/hidden-keys.js
var require_hidden_keys = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/hidden-keys.js"(exports, module2) {
"use strict";
module2.exports = {};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/internal-state.js
var require_internal_state = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/internal-state.js"(exports, module2) {
"use strict";
var NATIVE_WEAK_MAP = require_weak_map_basic_detection();
var globalThis2 = require_global_this();
var isObject = require_is_object();
var createNonEnumerableProperty = require_create_non_enumerable_property();
var hasOwn = require_has_own_property();
var shared = require_shared_store();
var sharedKey = require_shared_key();
var hiddenKeys = require_hidden_keys();
var OBJECT_ALREADY_INITIALIZED = "Object already initialized";
var TypeError2 = globalThis2.TypeError;
var WeakMap = globalThis2.WeakMap;
var set;
var get;
var has;
var enforce = function(it) {
return has(it) ? get(it) : set(it, {});
};
var getterFor = function(TYPE) {
return function(it) {
var state;
if (!isObject(it) || (state = get(it)).type !== TYPE) {
throw new TypeError2("Incompatible receiver, " + TYPE + " required");
}
return state;
};
};
if (NATIVE_WEAK_MAP || shared.state) {
store = shared.state || (shared.state = new WeakMap());
store.get = store.get;
store.has = store.has;
store.set = store.set;
set = function(it, metadata) {
if (store.has(it)) throw new TypeError2(OBJECT_ALREADY_INITIALIZED);
metadata.facade = it;
store.set(it, metadata);
return metadata;
};
get = function(it) {
return store.get(it) || {};
};
has = function(it) {
return store.has(it);
};
} else {
STATE = sharedKey("state");
hiddenKeys[STATE] = true;
set = function(it, metadata) {
if (hasOwn(it, STATE)) throw new TypeError2(OBJECT_ALREADY_INITIALIZED);
metadata.facade = it;
createNonEnumerableProperty(it, STATE, metadata);
return metadata;
};
get = function(it) {
return hasOwn(it, STATE) ? it[STATE] : {};
};
has = function(it) {
return hasOwn(it, STATE);
};
}
var store;
var STATE;
module2.exports = {
set,
get,
has,
enforce,
getterFor
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/make-built-in.js
var require_make_built_in = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/make-built-in.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var fails = require_fails();
var isCallable = require_is_callable();
var hasOwn = require_has_own_property();
var DESCRIPTORS = require_descriptors();
var CONFIGURABLE_FUNCTION_NAME = require_function_name().CONFIGURABLE;
var inspectSource = require_inspect_source();
var InternalStateModule = require_internal_state();
var enforceInternalState = InternalStateModule.enforce;
var getInternalState = InternalStateModule.get;
var $String = String;
var defineProperty = Object.defineProperty;
var stringSlice = uncurryThis("".slice);
var replace = uncurryThis("".replace);
var join = uncurryThis([].join);
var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() {
return defineProperty(function() {
}, "length", { value: 8 }).length !== 8;
});
var TEMPLATE = String(String).split("String");
var makeBuiltIn = module2.exports = function(value, name, options) {
if (stringSlice($String(name), 0, 7) === "Symbol(") {
name = "[" + replace($String(name), /^Symbol\(([^)]*)\).*$/, "$1") + "]";
}
if (options && options.getter) name = "get " + name;
if (options && options.setter) name = "set " + name;
if (!hasOwn(value, "name") || CONFIGURABLE_FUNCTION_NAME && value.name !== name) {
if (DESCRIPTORS) defineProperty(value, "name", { value: name, configurable: true });
else value.name = name;
}
if (CONFIGURABLE_LENGTH && options && hasOwn(options, "arity") && value.length !== options.arity) {
defineProperty(value, "length", { value: options.arity });
}
try {
if (options && hasOwn(options, "constructor") && options.constructor) {
if (DESCRIPTORS) defineProperty(value, "prototype", { writable: false });
} else if (value.prototype) value.prototype = void 0;
} catch (error) {
}
var state = enforceInternalState(value);
if (!hasOwn(state, "source")) {
state.source = join(TEMPLATE, typeof name == "string" ? name : "");
}
return value;
};
Function.prototype.toString = makeBuiltIn(function toString() {
return isCallable(this) && getInternalState(this).source || inspectSource(this);
}, "toString");
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-in.js
var require_define_built_in = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-in.js"(exports, module2) {
"use strict";
var isCallable = require_is_callable();
var definePropertyModule = require_object_define_property();
var makeBuiltIn = require_make_built_in();
var defineGlobalProperty = require_define_global_property();
module2.exports = function(O, key, value, options) {
if (!options) options = {};
var simple = options.enumerable;
var name = options.name !== void 0 ? options.name : key;
if (isCallable(value)) makeBuiltIn(value, name, options);
if (options.global) {
if (simple) O[key] = value;
else defineGlobalProperty(key, value);
} else {
try {
if (!options.unsafe) delete O[key];
else if (O[key]) simple = true;
} catch (error) {
}
if (simple) O[key] = value;
else definePropertyModule.f(O, key, {
value,
enumerable: false,
configurable: !options.nonConfigurable,
writable: !options.nonWritable
});
}
return O;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/math-trunc.js
var require_math_trunc = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/math-trunc.js"(exports, module2) {
"use strict";
var ceil = Math.ceil;
var floor = Math.floor;
module2.exports = Math.trunc || function trunc(x) {
var n = +x;
return (n > 0 ? floor : ceil)(n);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-integer-or-infinity.js
var require_to_integer_or_infinity = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) {
"use strict";
var trunc = require_math_trunc();
module2.exports = function(argument) {
var number = +argument;
return number !== number || number === 0 ? 0 : trunc(number);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-absolute-index.js
var require_to_absolute_index = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) {
"use strict";
var toIntegerOrInfinity = require_to_integer_or_infinity();
var max = Math.max;
var min = Math.min;
module2.exports = function(index, length) {
var integer = toIntegerOrInfinity(index);
return integer < 0 ? max(integer + length, 0) : min(integer, length);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-length.js
var require_to_length = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-length.js"(exports, module2) {
"use strict";
var toIntegerOrInfinity = require_to_integer_or_infinity();
var min = Math.min;
module2.exports = function(argument) {
var len = toIntegerOrInfinity(argument);
return len > 0 ? min(len, 9007199254740991) : 0;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/length-of-array-like.js
var require_length_of_array_like = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) {
"use strict";
var toLength = require_to_length();
module2.exports = function(obj) {
return toLength(obj.length);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-includes.js
var require_array_includes = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-includes.js"(exports, module2) {
"use strict";
var toIndexedObject = require_to_indexed_object();
var toAbsoluteIndex = require_to_absolute_index();
var lengthOfArrayLike = require_length_of_array_like();
var createMethod = function(IS_INCLUDES) {
return function($this, el, fromIndex) {
var O = toIndexedObject($this);
var length = lengthOfArrayLike(O);
if (length === 0) return !IS_INCLUDES && -1;
var index = toAbsoluteIndex(fromIndex, length);
var value;
if (IS_INCLUDES && el !== el) while (length > index) {
value = O[index++];
if (value !== value) return true;
}
else for (; length > index; index++) {
if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
}
return !IS_INCLUDES && -1;
};
};
module2.exports = {
// `Array.prototype.includes` method
// https://tc39.es/ecma262/#sec-array.prototype.includes
includes: createMethod(true),
// `Array.prototype.indexOf` method
// https://tc39.es/ecma262/#sec-array.prototype.indexof
indexOf: createMethod(false)
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-keys-internal.js
var require_object_keys_internal = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var hasOwn = require_has_own_property();
var toIndexedObject = require_to_indexed_object();
var indexOf = require_array_includes().indexOf;
var hiddenKeys = require_hidden_keys();
var push = uncurryThis([].push);
module2.exports = function(object, names) {
var O = toIndexedObject(object);
var i = 0;
var result = [];
var key;
for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);
while (names.length > i) if (hasOwn(O, key = names[i++])) {
~indexOf(result, key) || push(result, key);
}
return result;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/enum-bug-keys.js
var require_enum_bug_keys = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) {
"use strict";
module2.exports = [
"constructor",
"hasOwnProperty",
"isPrototypeOf",
"propertyIsEnumerable",
"toLocaleString",
"toString",
"valueOf"
];
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-names.js
var require_object_get_own_property_names = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-names.js"(exports) {
"use strict";
var internalObjectKeys = require_object_keys_internal();
var enumBugKeys = require_enum_bug_keys();
var hiddenKeys = enumBugKeys.concat("length", "prototype");
exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
return internalObjectKeys(O, hiddenKeys);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-symbols.js
var require_object_get_own_property_symbols = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) {
"use strict";
exports.f = Object.getOwnPropertySymbols;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/own-keys.js
var require_own_keys = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/own-keys.js"(exports, module2) {
"use strict";
var getBuiltIn = require_get_built_in();
var uncurryThis = require_function_uncurry_this();
var getOwnPropertyNamesModule = require_object_get_own_property_names();
var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
var anObject = require_an_object();
var concat = uncurryThis([].concat);
module2.exports = getBuiltIn("Reflect", "ownKeys") || function ownKeys(it) {
var keys = getOwnPropertyNamesModule.f(anObject(it));
var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/copy-constructor-properties.js
var require_copy_constructor_properties = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) {
"use strict";
var hasOwn = require_has_own_property();
var ownKeys = require_own_keys();
var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor();
var definePropertyModule = require_object_define_property();
module2.exports = function(target, source, exceptions) {
var keys = ownKeys(source);
var defineProperty = definePropertyModule.f;
var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {
defineProperty(target, key, getOwnPropertyDescriptor(source, key));
}
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-forced.js
var require_is_forced = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-forced.js"(exports, module2) {
"use strict";
var fails = require_fails();
var isCallable = require_is_callable();
var replacement = /#|\.prototype\./;
var isForced = function(feature, detection) {
var value = data[normalize(feature)];
return value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection;
};
var normalize = isForced.normalize = function(string) {
return String(string).replace(replacement, ".").toLowerCase();
};
var data = isForced.data = {};
var NATIVE = isForced.NATIVE = "N";
var POLYFILL = isForced.POLYFILL = "P";
module2.exports = isForced;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/export.js
var require_export = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/export.js"(exports, module2) {
"use strict";
var globalThis2 = require_global_this();
var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;
var createNonEnumerableProperty = require_create_non_enumerable_property();
var defineBuiltIn = require_define_built_in();
var defineGlobalProperty = require_define_global_property();
var copyConstructorProperties = require_copy_constructor_properties();
var isForced = require_is_forced();
module2.exports = function(options, source) {
var TARGET = options.target;
var GLOBAL = options.global;
var STATIC = options.stat;
var FORCED, target, key, targetProperty, sourceProperty, descriptor;
if (GLOBAL) {
target = globalThis2;
} else if (STATIC) {
target = globalThis2[TARGET] || defineGlobalProperty(TARGET, {});
} else {
target = globalThis2[TARGET] && globalThis2[TARGET].prototype;
}
if (target) for (key in source) {
sourceProperty = source[key];
if (options.dontCallGetSet) {
descriptor = getOwnPropertyDescriptor(target, key);
targetProperty = descriptor && descriptor.value;
} else targetProperty = target[key];
FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced);
if (!FORCED && targetProperty !== void 0) {
if (typeof sourceProperty == typeof targetProperty) continue;
copyConstructorProperties(sourceProperty, targetProperty);
}
if (options.sham || targetProperty && targetProperty.sham) {
createNonEnumerableProperty(sourceProperty, "sham", true);
}
defineBuiltIn(target, key, sourceProperty, options);
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-string-tag-support.js
var require_to_string_tag_support = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-string-tag-support.js"(exports, module2) {
"use strict";
var wellKnownSymbol = require_well_known_symbol();
var TO_STRING_TAG = wellKnownSymbol("toStringTag");
var test = {};
test[TO_STRING_TAG] = "z";
module2.exports = String(test) === "[object z]";
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/classof.js
var require_classof = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/classof.js"(exports, module2) {
"use strict";
var TO_STRING_TAG_SUPPORT = require_to_string_tag_support();
var isCallable = require_is_callable();
var classofRaw = require_classof_raw();
var wellKnownSymbol = require_well_known_symbol();
var TO_STRING_TAG = wellKnownSymbol("toStringTag");
var $Object = Object;
var CORRECT_ARGUMENTS = classofRaw(/* @__PURE__ */ function() {
return arguments;
}()) === "Arguments";
var tryGet = function(it, key) {
try {
return it[key];
} catch (error) {
}
};
module2.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function(it) {
var O, tag, result;
return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) === "Object" && isCallable(O.callee) ? "Arguments" : result;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-string.js
var require_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-string.js"(exports, module2) {
"use strict";
var classof = require_classof();
var $String = String;
module2.exports = function(argument) {
if (classof(argument) === "Symbol") throw new TypeError("Cannot convert a Symbol value to a string");
return $String(argument);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-keys.js
var require_object_keys = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-keys.js"(exports, module2) {
"use strict";
var internalObjectKeys = require_object_keys_internal();
var enumBugKeys = require_enum_bug_keys();
module2.exports = Object.keys || function keys(O) {
return internalObjectKeys(O, enumBugKeys);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-define-properties.js
var require_object_define_properties = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-define-properties.js"(exports) {
"use strict";
var DESCRIPTORS = require_descriptors();
var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug();
var definePropertyModule = require_object_define_property();
var anObject = require_an_object();
var toIndexedObject = require_to_indexed_object();
var objectKeys = require_object_keys();
exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
anObject(O);
var props = toIndexedObject(Properties);
var keys = objectKeys(Properties);
var length = keys.length;
var index = 0;
var key;
while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);
return O;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/html.js
var require_html = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/html.js"(exports, module2) {
"use strict";
var getBuiltIn = require_get_built_in();
module2.exports = getBuiltIn("document", "documentElement");
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-create.js
var require_object_create = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-create.js"(exports, module2) {
"use strict";
var anObject = require_an_object();
var definePropertiesModule = require_object_define_properties();
var enumBugKeys = require_enum_bug_keys();
var hiddenKeys = require_hidden_keys();
var html = require_html();
var documentCreateElement = require_document_create_element();
var sharedKey = require_shared_key();
var GT = ">";
var LT = "<";
var PROTOTYPE = "prototype";
var SCRIPT = "script";
var IE_PROTO = sharedKey("IE_PROTO");
var EmptyConstructor = function() {
};
var scriptTag = function(content) {
return LT + SCRIPT + GT + content + LT + "/" + SCRIPT + GT;
};
var NullProtoObjectViaActiveX = function(activeXDocument2) {
activeXDocument2.write(scriptTag(""));
activeXDocument2.close();
var temp = activeXDocument2.parentWindow.Object;
activeXDocument2 = null;
return temp;
};
var NullProtoObjectViaIFrame = function() {
var iframe = documentCreateElement("iframe");
var JS = "java" + SCRIPT + ":";
var iframeDocument;
iframe.style.display = "none";
html.appendChild(iframe);
iframe.src = String(JS);
iframeDocument = iframe.contentWindow.document;
iframeDocument.open();
iframeDocument.write(scriptTag("document.F=Object"));
iframeDocument.close();
return iframeDocument.F;
};
var activeXDocument;
var NullProtoObject = function() {
try {
activeXDocument = new ActiveXObject("htmlfile");
} catch (error) {
}
NullProtoObject = typeof document != "undefined" ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument);
var length = enumBugKeys.length;
while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
return NullProtoObject();
};
hiddenKeys[IE_PROTO] = true;
module2.exports = Object.create || function create(O, Properties) {
var result;
if (O !== null) {
EmptyConstructor[PROTOTYPE] = anObject(O);
result = new EmptyConstructor();
EmptyConstructor[PROTOTYPE] = null;
result[IE_PROTO] = O;
} else result = NullProtoObject();
return Properties === void 0 ? result : definePropertiesModule.f(result, Properties);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-slice.js
var require_array_slice = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-slice.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
module2.exports = uncurryThis([].slice);
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-names-external.js
var require_object_get_own_property_names_external = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-names-external.js"(exports, module2) {
"use strict";
var classof = require_classof_raw();
var toIndexedObject = require_to_indexed_object();
var $getOwnPropertyNames = require_object_get_own_property_names().f;
var arraySlice = require_array_slice();
var windowNames = typeof window == "object" && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [];
var getWindowNames = function(it) {
try {
return $getOwnPropertyNames(it);
} catch (error) {
return arraySlice(windowNames);
}
};
module2.exports.f = function getOwnPropertyNames(it) {
return windowNames && classof(it) === "Window" ? getWindowNames(it) : $getOwnPropertyNames(toIndexedObject(it));
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-in-accessor.js
var require_define_built_in_accessor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-in-accessor.js"(exports, module2) {
"use strict";
var makeBuiltIn = require_make_built_in();
var defineProperty = require_object_define_property();
module2.exports = function(target, name, descriptor) {
if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });
if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });
return defineProperty.f(target, name, descriptor);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-wrapped.js
var require_well_known_symbol_wrapped = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-wrapped.js"(exports) {
"use strict";
var wellKnownSymbol = require_well_known_symbol();
exports.f = wellKnownSymbol;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/path.js
var require_path = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/path.js"(exports, module2) {
"use strict";
var globalThis2 = require_global_this();
module2.exports = globalThis2;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-define.js
var require_well_known_symbol_define = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-define.js"(exports, module2) {
"use strict";
var path = require_path();
var hasOwn = require_has_own_property();
var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped();
var defineProperty = require_object_define_property().f;
module2.exports = function(NAME) {
var Symbol2 = path.Symbol || (path.Symbol = {});
if (!hasOwn(Symbol2, NAME)) defineProperty(Symbol2, NAME, {
value: wrappedWellKnownSymbolModule.f(NAME)
});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-define-to-primitive.js
var require_symbol_define_to_primitive = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-define-to-primitive.js"(exports, module2) {
"use strict";
var call = require_function_call();
var getBuiltIn = require_get_built_in();
var wellKnownSymbol = require_well_known_symbol();
var defineBuiltIn = require_define_built_in();
module2.exports = function() {
var Symbol2 = getBuiltIn("Symbol");
var SymbolPrototype = Symbol2 && Symbol2.prototype;
var valueOf = SymbolPrototype && SymbolPrototype.valueOf;
var TO_PRIMITIVE = wellKnownSymbol("toPrimitive");
if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {
defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function(hint) {
return call(valueOf, this);
}, { arity: 1 });
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/set-to-string-tag.js
var require_set_to_string_tag = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/set-to-string-tag.js"(exports, module2) {
"use strict";
var defineProperty = require_object_define_property().f;
var hasOwn = require_has_own_property();
var wellKnownSymbol = require_well_known_symbol();
var TO_STRING_TAG = wellKnownSymbol("toStringTag");
module2.exports = function(target, TAG, STATIC) {
if (target && !STATIC) target = target.prototype;
if (target && !hasOwn(target, TO_STRING_TAG)) {
defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this-clause.js
var require_function_uncurry_this_clause = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this-clause.js"(exports, module2) {
"use strict";
var classofRaw = require_classof_raw();
var uncurryThis = require_function_uncurry_this();
module2.exports = function(fn) {
if (classofRaw(fn) === "Function") return uncurryThis(fn);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-bind-context.js
var require_function_bind_context = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-bind-context.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this_clause();
var aCallable = require_a_callable();
var NATIVE_BIND = require_function_bind_native();
var bind = uncurryThis(uncurryThis.bind);
module2.exports = function(fn, that) {
aCallable(fn);
return that === void 0 ? fn : NATIVE_BIND ? bind(fn, that) : function() {
return fn.apply(that, arguments);
};
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array.js
var require_is_array = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array.js"(exports, module2) {
"use strict";
var classof = require_classof_raw();
module2.exports = Array.isArray || function isArray(argument) {
return classof(argument) === "Array";
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-constructor.js
var require_is_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-constructor.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var fails = require_fails();
var isCallable = require_is_callable();
var classof = require_classof();
var getBuiltIn = require_get_built_in();
var inspectSource = require_inspect_source();
var noop = function() {
};
var construct = getBuiltIn("Reflect", "construct");
var constructorRegExp = /^\s*(?:class|function)\b/;
var exec = uncurryThis(constructorRegExp.exec);
var INCORRECT_TO_STRING = !constructorRegExp.test(noop);
var isConstructorModern = function isConstructor(argument) {
if (!isCallable(argument)) return false;
try {
construct(noop, [], argument);
return true;
} catch (error) {
return false;
}
};
var isConstructorLegacy = function isConstructor(argument) {
if (!isCallable(argument)) return false;
switch (classof(argument)) {
case "AsyncFunction":
case "GeneratorFunction":
case "AsyncGeneratorFunction":
return false;
}
try {
return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));
} catch (error) {
return true;
}
};
isConstructorLegacy.sham = true;
module2.exports = !construct || fails(function() {
var called;
return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function() {
called = true;
}) || called;
}) ? isConstructorLegacy : isConstructorModern;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-species-constructor.js
var require_array_species_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-species-constructor.js"(exports, module2) {
"use strict";
var isArray = require_is_array();
var isConstructor = require_is_constructor();
var isObject = require_is_object();
var wellKnownSymbol = require_well_known_symbol();
var SPECIES = wellKnownSymbol("species");
var $Array = Array;
module2.exports = function(originalArray) {
var C;
if (isArray(originalArray)) {
C = originalArray.constructor;
if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = void 0;
else if (isObject(C)) {
C = C[SPECIES];
if (C === null) C = void 0;
}
}
return C === void 0 ? $Array : C;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-species-create.js
var require_array_species_create = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-species-create.js"(exports, module2) {
"use strict";
var arraySpeciesConstructor = require_array_species_constructor();
module2.exports = function(originalArray, length) {
return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-iteration.js
var require_array_iteration = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-iteration.js"(exports, module2) {
"use strict";
var bind = require_function_bind_context();
var uncurryThis = require_function_uncurry_this();
var IndexedObject = require_indexed_object();
var toObject = require_to_object();
var lengthOfArrayLike = require_length_of_array_like();
var arraySpeciesCreate = require_array_species_create();
var push = uncurryThis([].push);
var createMethod = function(TYPE) {
var IS_MAP = TYPE === 1;
var IS_FILTER = TYPE === 2;
var IS_SOME = TYPE === 3;
var IS_EVERY = TYPE === 4;
var IS_FIND_INDEX = TYPE === 6;
var IS_FILTER_REJECT = TYPE === 7;
var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;
return function($this, callbackfn, that, specificCreate) {
var O = toObject($this);
var self2 = IndexedObject(O);
var length = lengthOfArrayLike(self2);
var boundFunction = bind(callbackfn, that);
var index = 0;
var create = specificCreate || arraySpeciesCreate;
var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : void 0;
var value, result;
for (; length > index; index++) if (NO_HOLES || index in self2) {
value = self2[index];
result = boundFunction(value, index, O);
if (TYPE) {
if (IS_MAP) target[index] = result;
else if (result) switch (TYPE) {
case 3:
return true;
// some
case 5:
return value;
// find
case 6:
return index;
// findIndex
case 2:
push(target, value);
}
else switch (TYPE) {
case 4:
return false;
// every
case 7:
push(target, value);
}
}
}
return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
};
};
module2.exports = {
// `Array.prototype.forEach` method
// https://tc39.es/ecma262/#sec-array.prototype.foreach
forEach: createMethod(0),
// `Array.prototype.map` method
// https://tc39.es/ecma262/#sec-array.prototype.map
map: createMethod(1),
// `Array.prototype.filter` method
// https://tc39.es/ecma262/#sec-array.prototype.filter
filter: createMethod(2),
// `Array.prototype.some` method
// https://tc39.es/ecma262/#sec-array.prototype.some
some: createMethod(3),
// `Array.prototype.every` method
// https://tc39.es/ecma262/#sec-array.prototype.every
every: createMethod(4),
// `Array.prototype.find` method
// https://tc39.es/ecma262/#sec-array.prototype.find
find: createMethod(5),
// `Array.prototype.findIndex` method
// https://tc39.es/ecma262/#sec-array.prototype.findIndex
findIndex: createMethod(6),
// `Array.prototype.filterReject` method
// https://github.com/tc39/proposal-array-filtering
filterReject: createMethod(7)
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.constructor.js
var require_es_symbol_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.constructor.js"() {
"use strict";
var $2 = require_export();
var globalThis2 = require_global_this();
var call = require_function_call();
var uncurryThis = require_function_uncurry_this();
var IS_PURE = require_is_pure();
var DESCRIPTORS = require_descriptors();
var NATIVE_SYMBOL = require_symbol_constructor_detection();
var fails = require_fails();
var hasOwn = require_has_own_property();
var isPrototypeOf = require_object_is_prototype_of();
var anObject = require_an_object();
var toIndexedObject = require_to_indexed_object();
var toPropertyKey = require_to_property_key();
var $toString = require_to_string();
var createPropertyDescriptor = require_create_property_descriptor();
var nativeObjectCreate = require_object_create();
var objectKeys = require_object_keys();
var getOwnPropertyNamesModule = require_object_get_own_property_names();
var getOwnPropertyNamesExternal = require_object_get_own_property_names_external();
var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor();
var definePropertyModule = require_object_define_property();
var definePropertiesModule = require_object_define_properties();
var propertyIsEnumerableModule = require_object_property_is_enumerable();
var defineBuiltIn = require_define_built_in();
var defineBuiltInAccessor = require_define_built_in_accessor();
var shared = require_shared();
var sharedKey = require_shared_key();
var hiddenKeys = require_hidden_keys();
var uid = require_uid();
var wellKnownSymbol = require_well_known_symbol();
var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped();
var defineWellKnownSymbol = require_well_known_symbol_define();
var defineSymbolToPrimitive = require_symbol_define_to_primitive();
var setToStringTag = require_set_to_string_tag();
var InternalStateModule = require_internal_state();
var $forEach = require_array_iteration().forEach;
var HIDDEN = sharedKey("hidden");
var SYMBOL = "Symbol";
var PROTOTYPE = "prototype";
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(SYMBOL);
var ObjectPrototype = Object[PROTOTYPE];
var $Symbol = globalThis2.Symbol;
var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];
var RangeError = globalThis2.RangeError;
var TypeError2 = globalThis2.TypeError;
var QObject = globalThis2.QObject;
var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
var nativeDefineProperty = definePropertyModule.f;
var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
var push = uncurryThis([].push);
var AllSymbols = shared("symbols");
var ObjectPrototypeSymbols = shared("op-symbols");
var WellKnownSymbolsStore = shared("wks");
var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
var fallbackDefineProperty = function(O, P, Attributes) {
var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
nativeDefineProperty(O, P, Attributes);
if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
}
};
var setSymbolDescriptor = DESCRIPTORS && fails(function() {
return nativeObjectCreate(nativeDefineProperty({}, "a", {
get: function() {
return nativeDefineProperty(this, "a", { value: 7 }).a;
}
})).a !== 7;
}) ? fallbackDefineProperty : nativeDefineProperty;
var wrap = function(tag, description) {
var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);
setInternalState(symbol, {
type: SYMBOL,
tag,
description
});
if (!DESCRIPTORS) symbol.description = description;
return symbol;
};
var $defineProperty = function defineProperty(O, P, Attributes) {
if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
anObject(O);
var key = toPropertyKey(P);
anObject(Attributes);
if (hasOwn(AllSymbols, key)) {
if (!Attributes.enumerable) {
if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null)));
O[HIDDEN][key] = true;
} else {
if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
}
return setSymbolDescriptor(O, key, Attributes);
}
return nativeDefineProperty(O, key, Attributes);
};
var $defineProperties = function defineProperties(O, Properties) {
anObject(O);
var properties = toIndexedObject(Properties);
var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));
$forEach(keys, function(key) {
if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);
});
return O;
};
var $create = function create(O, Properties) {
return Properties === void 0 ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
};
var $propertyIsEnumerable = function propertyIsEnumerable(V) {
var P = toPropertyKey(V);
var enumerable = call(nativePropertyIsEnumerable, this, P);
if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;
return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;
};
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
var it = toIndexedObject(O);
var key = toPropertyKey(P);
if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;
var descriptor = nativeGetOwnPropertyDescriptor(it, key);
if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {
descriptor.enumerable = true;
}
return descriptor;
};
var $getOwnPropertyNames = function getOwnPropertyNames(O) {
var names = nativeGetOwnPropertyNames(toIndexedObject(O));
var result = [];
$forEach(names, function(key) {
if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);
});
return result;
};
var $getOwnPropertySymbols = function(O) {
var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
var result = [];
$forEach(names, function(key) {
if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {
push(result, AllSymbols[key]);
}
});
return result;
};
if (!NATIVE_SYMBOL) {
$Symbol = function Symbol2() {
if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError2("Symbol is not a constructor");
var description = !arguments.length || arguments[0] === void 0 ? void 0 : $toString(arguments[0]);
var tag = uid(description);
var setter = function(value) {
var $this = this === void 0 ? globalThis2 : this;
if ($this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);
if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) $this[HIDDEN][tag] = false;
var descriptor = createPropertyDescriptor(1, value);
try {
setSymbolDescriptor($this, tag, descriptor);
} catch (error) {
if (!(error instanceof RangeError)) throw error;
fallbackDefineProperty($this, tag, descriptor);
}
};
if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
return wrap(tag, description);
};
SymbolPrototype = $Symbol[PROTOTYPE];
defineBuiltIn(SymbolPrototype, "toString", function toString() {
return getInternalState(this).tag;
});
defineBuiltIn($Symbol, "withoutSetter", function(description) {
return wrap(uid(description), description);
});
propertyIsEnumerableModule.f = $propertyIsEnumerable;
definePropertyModule.f = $defineProperty;
definePropertiesModule.f = $defineProperties;
getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;
wrappedWellKnownSymbolModule.f = function(name) {
return wrap(wellKnownSymbol(name), name);
};
if (DESCRIPTORS) {
defineBuiltInAccessor(SymbolPrototype, "description", {
configurable: true,
get: function description() {
return getInternalState(this).description;
}
});
if (!IS_PURE) {
defineBuiltIn(ObjectPrototype, "propertyIsEnumerable", $propertyIsEnumerable, { unsafe: true });
}
}
}
$2({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {
Symbol: $Symbol
});
$forEach(objectKeys(WellKnownSymbolsStore), function(name) {
defineWellKnownSymbol(name);
});
$2({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
useSetter: function() {
USE_SETTER = true;
},
useSimple: function() {
USE_SETTER = false;
}
});
$2({ target: "Object", stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {
// `Object.create` method
// https://tc39.es/ecma262/#sec-object.create
create: $create,
// `Object.defineProperty` method
// https://tc39.es/ecma262/#sec-object.defineproperty
defineProperty: $defineProperty,
// `Object.defineProperties` method
// https://tc39.es/ecma262/#sec-object.defineproperties
defineProperties: $defineProperties,
// `Object.getOwnPropertyDescriptor` method
// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors
getOwnPropertyDescriptor: $getOwnPropertyDescriptor
});
$2({ target: "Object", stat: true, forced: !NATIVE_SYMBOL }, {
// `Object.getOwnPropertyNames` method
// https://tc39.es/ecma262/#sec-object.getownpropertynames
getOwnPropertyNames: $getOwnPropertyNames
});
defineSymbolToPrimitive();
setToStringTag($Symbol, SYMBOL);
hiddenKeys[HIDDEN] = true;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-registry-detection.js
var require_symbol_registry_detection = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-registry-detection.js"(exports, module2) {
"use strict";
var NATIVE_SYMBOL = require_symbol_constructor_detection();
module2.exports = NATIVE_SYMBOL && !!Symbol["for"] && !!Symbol.keyFor;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.for.js
var require_es_symbol_for = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.for.js"() {
"use strict";
var $2 = require_export();
var getBuiltIn = require_get_built_in();
var hasOwn = require_has_own_property();
var toString = require_to_string();
var shared = require_shared();
var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection();
var StringToSymbolRegistry = shared("string-to-symbol-registry");
var SymbolToStringRegistry = shared("symbol-to-string-registry");
$2({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
"for": function(key) {
var string = toString(key);
if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
var symbol = getBuiltIn("Symbol")(string);
StringToSymbolRegistry[string] = symbol;
SymbolToStringRegistry[symbol] = string;
return symbol;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.key-for.js
var require_es_symbol_key_for = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.key-for.js"() {
"use strict";
var $2 = require_export();
var hasOwn = require_has_own_property();
var isSymbol = require_is_symbol();
var tryToString = require_try_to_string();
var shared = require_shared();
var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection();
var SymbolToStringRegistry = shared("symbol-to-string-registry");
$2({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
keyFor: function keyFor(sym) {
if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + " is not a symbol");
if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-apply.js
var require_function_apply = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-apply.js"(exports, module2) {
"use strict";
var NATIVE_BIND = require_function_bind_native();
var FunctionPrototype = Function.prototype;
var apply = FunctionPrototype.apply;
var call = FunctionPrototype.call;
module2.exports = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() {
return call.apply(apply, arguments);
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-json-replacer-function.js
var require_get_json_replacer_function = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-json-replacer-function.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var isArray = require_is_array();
var isCallable = require_is_callable();
var classof = require_classof_raw();
var toString = require_to_string();
var push = uncurryThis([].push);
module2.exports = function(replacer) {
if (isCallable(replacer)) return replacer;
if (!isArray(replacer)) return;
var rawLength = replacer.length;
var keys = [];
for (var i = 0; i < rawLength; i++) {
var element = replacer[i];
if (typeof element == "string") push(keys, element);
else if (typeof element == "number" || classof(element) === "Number" || classof(element) === "String") push(keys, toString(element));
}
var keysLength = keys.length;
var root = true;
return function(key, value) {
if (root) {
root = false;
return value;
}
if (isArray(this)) return value;
for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;
};
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.json.stringify.js
var require_es_json_stringify = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.json.stringify.js"() {
"use strict";
var $2 = require_export();
var getBuiltIn = require_get_built_in();
var apply = require_function_apply();
var call = require_function_call();
var uncurryThis = require_function_uncurry_this();
var fails = require_fails();
var isCallable = require_is_callable();
var isSymbol = require_is_symbol();
var arraySlice = require_array_slice();
var getReplacerFunction = require_get_json_replacer_function();
var NATIVE_SYMBOL = require_symbol_constructor_detection();
var $String = String;
var $stringify = getBuiltIn("JSON", "stringify");
var exec = uncurryThis(/./.exec);
var charAt = uncurryThis("".charAt);
var charCodeAt = uncurryThis("".charCodeAt);
var replace = uncurryThis("".replace);
var numberToString = uncurryThis(1 .toString);
var tester = /[\uD800-\uDFFF]/g;
var low = /^[\uD800-\uDBFF]$/;
var hi = /^[\uDC00-\uDFFF]$/;
var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function() {
var symbol = getBuiltIn("Symbol")("stringify detection");
return $stringify([symbol]) !== "[null]" || $stringify({ a: symbol }) !== "{}" || $stringify(Object(symbol)) !== "{}";
});
var ILL_FORMED_UNICODE = fails(function() {
return $stringify("\uDF06\uD834") !== '"\\udf06\\ud834"' || $stringify("\uDEAD") !== '"\\udead"';
});
var stringifyWithSymbolsFix = function(it, replacer) {
var args = arraySlice(arguments);
var $replacer = getReplacerFunction(replacer);
if (!isCallable($replacer) && (it === void 0 || isSymbol(it))) return;
args[1] = function(key, value) {
if (isCallable($replacer)) value = call($replacer, this, $String(key), value);
if (!isSymbol(value)) return value;
};
return apply($stringify, null, args);
};
var fixIllFormed = function(match, offset, string) {
var prev = charAt(string, offset - 1);
var next = charAt(string, offset + 1);
if (exec(low, match) && !exec(hi, next) || exec(hi, match) && !exec(low, prev)) {
return "\\u" + numberToString(charCodeAt(match, 0), 16);
}
return match;
};
if ($stringify) {
$2({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {
// eslint-disable-next-line no-unused-vars -- required for `.length`
stringify: function stringify(it, replacer, space) {
var args = arraySlice(arguments);
var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);
return ILL_FORMED_UNICODE && typeof result == "string" ? replace(result, tester, fixIllFormed) : result;
}
});
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-symbols.js
var require_es_object_get_own_property_symbols = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-symbols.js"() {
"use strict";
var $2 = require_export();
var NATIVE_SYMBOL = require_symbol_constructor_detection();
var fails = require_fails();
var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
var toObject = require_to_object();
var FORCED = !NATIVE_SYMBOL || fails(function() {
getOwnPropertySymbolsModule.f(1);
});
$2({ target: "Object", stat: true, forced: FORCED }, {
getOwnPropertySymbols: function getOwnPropertySymbols(it) {
var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : [];
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.js
var require_es_symbol = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.js"() {
"use strict";
require_es_symbol_constructor();
require_es_symbol_for();
require_es_symbol_key_for();
require_es_json_stringify();
require_es_object_get_own_property_symbols();
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.description.js
var require_es_symbol_description = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.description.js"() {
"use strict";
var $2 = require_export();
var DESCRIPTORS = require_descriptors();
var globalThis2 = require_global_this();
var uncurryThis = require_function_uncurry_this();
var hasOwn = require_has_own_property();
var isCallable = require_is_callable();
var isPrototypeOf = require_object_is_prototype_of();
var toString = require_to_string();
var defineBuiltInAccessor = require_define_built_in_accessor();
var copyConstructorProperties = require_copy_constructor_properties();
var NativeSymbol = globalThis2.Symbol;
var SymbolPrototype = NativeSymbol && NativeSymbol.prototype;
if (DESCRIPTORS && isCallable(NativeSymbol) && (!("description" in SymbolPrototype) || // Safari 12 bug
NativeSymbol().description !== void 0)) {
EmptyStringDescriptionStore = {};
SymbolWrapper = function Symbol2() {
var description = arguments.length < 1 || arguments[0] === void 0 ? void 0 : toString(arguments[0]);
var result = isPrototypeOf(SymbolPrototype, this) ? new NativeSymbol(description) : description === void 0 ? NativeSymbol() : NativeSymbol(description);
if (description === "") EmptyStringDescriptionStore[result] = true;
return result;
};
copyConstructorProperties(SymbolWrapper, NativeSymbol);
SymbolWrapper.prototype = SymbolPrototype;
SymbolPrototype.constructor = SymbolWrapper;
NATIVE_SYMBOL = String(NativeSymbol("description detection")) === "Symbol(description detection)";
thisSymbolValue = uncurryThis(SymbolPrototype.valueOf);
symbolDescriptiveString = uncurryThis(SymbolPrototype.toString);
regexp = /^Symbol\((.*)\)[^)]+$/;
replace = uncurryThis("".replace);
stringSlice = uncurryThis("".slice);
defineBuiltInAccessor(SymbolPrototype, "description", {
configurable: true,
get: function description() {
var symbol = thisSymbolValue(this);
if (hasOwn(EmptyStringDescriptionStore, symbol)) return "";
var string = symbolDescriptiveString(symbol);
var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, "$1");
return desc === "" ? void 0 : desc;
}
});
$2({ global: true, constructor: true, forced: true }, {
Symbol: SymbolWrapper
});
}
var EmptyStringDescriptionStore;
var SymbolWrapper;
var NATIVE_SYMBOL;
var thisSymbolValue;
var symbolDescriptiveString;
var regexp;
var replace;
var stringSlice;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.iterator.js
var require_es_symbol_iterator = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.iterator.js"() {
"use strict";
var defineWellKnownSymbol = require_well_known_symbol_define();
defineWellKnownSymbol("iterator");
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this-accessor.js
var require_function_uncurry_this_accessor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var aCallable = require_a_callable();
module2.exports = function(object, key, method) {
try {
return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));
} catch (error) {
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-possible-prototype.js
var require_is_possible_prototype = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-possible-prototype.js"(exports, module2) {
"use strict";
var isObject = require_is_object();
module2.exports = function(argument) {
return isObject(argument) || argument === null;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/a-possible-prototype.js
var require_a_possible_prototype = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/a-possible-prototype.js"(exports, module2) {
"use strict";
var isPossiblePrototype = require_is_possible_prototype();
var $String = String;
var $TypeError = TypeError;
module2.exports = function(argument) {
if (isPossiblePrototype(argument)) return argument;
throw new $TypeError("Can't set " + $String(argument) + " as a prototype");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-set-prototype-of.js
var require_object_set_prototype_of = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-set-prototype-of.js"(exports, module2) {
"use strict";
var uncurryThisAccessor = require_function_uncurry_this_accessor();
var isObject = require_is_object();
var requireObjectCoercible = require_require_object_coercible();
var aPossiblePrototype = require_a_possible_prototype();
module2.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() {
var CORRECT_SETTER = false;
var test = {};
var setter;
try {
setter = uncurryThisAccessor(Object.prototype, "__proto__", "set");
setter(test, []);
CORRECT_SETTER = test instanceof Array;
} catch (error) {
}
return function setPrototypeOf(O, proto) {
requireObjectCoercible(O);
aPossiblePrototype(proto);
if (!isObject(O)) return O;
if (CORRECT_SETTER) setter(O, proto);
else O.__proto__ = proto;
return O;
};
}() : void 0);
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/proxy-accessor.js
var require_proxy_accessor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/proxy-accessor.js"(exports, module2) {
"use strict";
var defineProperty = require_object_define_property().f;
module2.exports = function(Target, Source, key) {
key in Target || defineProperty(Target, key, {
configurable: true,
get: function() {
return Source[key];
},
set: function(it) {
Source[key] = it;
}
});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/inherit-if-required.js
var require_inherit_if_required = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/inherit-if-required.js"(exports, module2) {
"use strict";
var isCallable = require_is_callable();
var isObject = require_is_object();
var setPrototypeOf = require_object_set_prototype_of();
module2.exports = function($this, dummy, Wrapper) {
var NewTarget, NewTargetPrototype;
if (
// it can work only with native `setPrototypeOf`
setPrototypeOf && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype
) setPrototypeOf($this, NewTargetPrototype);
return $this;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/normalize-string-argument.js
var require_normalize_string_argument = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/normalize-string-argument.js"(exports, module2) {
"use strict";
var toString = require_to_string();
module2.exports = function(argument, $default) {
return argument === void 0 ? arguments.length < 2 ? "" : $default : toString(argument);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/install-error-cause.js
var require_install_error_cause = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/install-error-cause.js"(exports, module2) {
"use strict";
var isObject = require_is_object();
var createNonEnumerableProperty = require_create_non_enumerable_property();
module2.exports = function(O, options) {
if (isObject(options) && "cause" in options) {
createNonEnumerableProperty(O, "cause", options.cause);
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-clear.js
var require_error_stack_clear = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-clear.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var $Error = Error;
var replace = uncurryThis("".replace);
var TEST = function(arg) {
return String(new $Error(arg).stack);
}("zxcasd");
var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);
module2.exports = function(stack, dropEntries) {
if (IS_V8_OR_CHAKRA_STACK && typeof stack == "string" && !$Error.prepareStackTrace) {
while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, "");
}
return stack;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-installable.js
var require_error_stack_installable = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-installable.js"(exports, module2) {
"use strict";
var fails = require_fails();
var createPropertyDescriptor = require_create_property_descriptor();
module2.exports = !fails(function() {
var error = new Error("a");
if (!("stack" in error)) return true;
Object.defineProperty(error, "stack", createPropertyDescriptor(1, 7));
return error.stack !== 7;
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-install.js
var require_error_stack_install = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-install.js"(exports, module2) {
"use strict";
var createNonEnumerableProperty = require_create_non_enumerable_property();
var clearErrorStack = require_error_stack_clear();
var ERROR_STACK_INSTALLABLE = require_error_stack_installable();
var captureStackTrace = Error.captureStackTrace;
module2.exports = function(error, C, stack, dropEntries) {
if (ERROR_STACK_INSTALLABLE) {
if (captureStackTrace) captureStackTrace(error, C);
else createNonEnumerableProperty(error, "stack", clearErrorStack(stack, dropEntries));
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/wrap-error-constructor-with-cause.js
var require_wrap_error_constructor_with_cause = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/wrap-error-constructor-with-cause.js"(exports, module2) {
"use strict";
var getBuiltIn = require_get_built_in();
var hasOwn = require_has_own_property();
var createNonEnumerableProperty = require_create_non_enumerable_property();
var isPrototypeOf = require_object_is_prototype_of();
var setPrototypeOf = require_object_set_prototype_of();
var copyConstructorProperties = require_copy_constructor_properties();
var proxyAccessor = require_proxy_accessor();
var inheritIfRequired = require_inherit_if_required();
var normalizeStringArgument = require_normalize_string_argument();
var installErrorCause = require_install_error_cause();
var installErrorStack = require_error_stack_install();
var DESCRIPTORS = require_descriptors();
var IS_PURE = require_is_pure();
module2.exports = function(FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {
var STACK_TRACE_LIMIT = "stackTraceLimit";
var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;
var path = FULL_NAME.split(".");
var ERROR_NAME = path[path.length - 1];
var OriginalError = getBuiltIn.apply(null, path);
if (!OriginalError) return;
var OriginalErrorPrototype = OriginalError.prototype;
if (!IS_PURE && hasOwn(OriginalErrorPrototype, "cause")) delete OriginalErrorPrototype.cause;
if (!FORCED) return OriginalError;
var BaseError = getBuiltIn("Error");
var WrappedError = wrapper(function(a, b) {
var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, void 0);
var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();
if (message !== void 0) createNonEnumerableProperty(result, "message", message);
installErrorStack(result, WrappedError, result.stack, 2);
if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired(result, this, WrappedError);
if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]);
return result;
});
WrappedError.prototype = OriginalErrorPrototype;
if (ERROR_NAME !== "Error") {
if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);
else copyConstructorProperties(WrappedError, BaseError, { name: true });
} else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) {
proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT);
proxyAccessor(WrappedError, OriginalError, "prepareStackTrace");
}
copyConstructorProperties(WrappedError, OriginalError);
if (!IS_PURE) try {
if (OriginalErrorPrototype.name !== ERROR_NAME) {
createNonEnumerableProperty(OriginalErrorPrototype, "name", ERROR_NAME);
}
OriginalErrorPrototype.constructor = WrappedError;
} catch (error) {
}
return WrappedError;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.error.cause.js
var require_es_error_cause = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.error.cause.js"() {
"use strict";
var $2 = require_export();
var globalThis2 = require_global_this();
var apply = require_function_apply();
var wrapErrorConstructorWithCause = require_wrap_error_constructor_with_cause();
var WEB_ASSEMBLY = "WebAssembly";
var WebAssembly = globalThis2[WEB_ASSEMBLY];
var FORCED = new Error("e", { cause: 7 }).cause !== 7;
var exportGlobalErrorCauseWrapper = function(ERROR_NAME, wrapper) {
var O = {};
O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);
$2({ global: true, constructor: true, arity: 1, forced: FORCED }, O);
};
var exportWebAssemblyErrorCauseWrapper = function(ERROR_NAME, wrapper) {
if (WebAssembly && WebAssembly[ERROR_NAME]) {
var O = {};
O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + "." + ERROR_NAME, wrapper, FORCED);
$2({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O);
}
};
exportGlobalErrorCauseWrapper("Error", function(init) {
return function Error2(message) {
return apply(init, this, arguments);
};
});
exportGlobalErrorCauseWrapper("EvalError", function(init) {
return function EvalError(message) {
return apply(init, this, arguments);
};
});
exportGlobalErrorCauseWrapper("RangeError", function(init) {
return function RangeError(message) {
return apply(init, this, arguments);
};
});
exportGlobalErrorCauseWrapper("ReferenceError", function(init) {
return function ReferenceError2(message) {
return apply(init, this, arguments);
};
});
exportGlobalErrorCauseWrapper("SyntaxError", function(init) {
return function SyntaxError2(message) {
return apply(init, this, arguments);
};
});
exportGlobalErrorCauseWrapper("TypeError", function(init) {
return function TypeError2(message) {
return apply(init, this, arguments);
};
});
exportGlobalErrorCauseWrapper("URIError", function(init) {
return function URIError(message) {
return apply(init, this, arguments);
};
});
exportWebAssemblyErrorCauseWrapper("CompileError", function(init) {
return function CompileError(message) {
return apply(init, this, arguments);
};
});
exportWebAssemblyErrorCauseWrapper("LinkError", function(init) {
return function LinkError(message) {
return apply(init, this, arguments);
};
});
exportWebAssemblyErrorCauseWrapper("RuntimeError", function(init) {
return function RuntimeError(message) {
return apply(init, this, arguments);
};
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-to-string.js
var require_error_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-to-string.js"(exports, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var fails = require_fails();
var anObject = require_an_object();
var normalizeStringArgument = require_normalize_string_argument();
var nativeErrorToString = Error.prototype.toString;
var INCORRECT_TO_STRING = fails(function() {
if (DESCRIPTORS) {
var object = Object.create(Object.defineProperty({}, "name", { get: function() {
return this === object;
} }));
if (nativeErrorToString.call(object) !== "true") return true;
}
return nativeErrorToString.call({ message: 1, name: 2 }) !== "2: 1" || nativeErrorToString.call({}) !== "Error";
});
module2.exports = INCORRECT_TO_STRING ? function toString() {
var O = anObject(this);
var name = normalizeStringArgument(O.name, "Error");
var message = normalizeStringArgument(O.message);
return !name ? message : !message ? name : name + ": " + message;
} : nativeErrorToString;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.error.to-string.js
var require_es_error_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.error.to-string.js"() {
"use strict";
var defineBuiltIn = require_define_built_in();
var errorToString = require_error_to_string();
var ErrorPrototype = Error.prototype;
if (ErrorPrototype.toString !== errorToString) {
defineBuiltIn(ErrorPrototype, "toString", errorToString);
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-close.js
var require_iterator_close = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-close.js"(exports, module2) {
"use strict";
var call = require_function_call();
var anObject = require_an_object();
var getMethod = require_get_method();
module2.exports = function(iterator, kind, value) {
var innerResult, innerError;
anObject(iterator);
try {
innerResult = getMethod(iterator, "return");
if (!innerResult) {
if (kind === "throw") throw value;
return value;
}
innerResult = call(innerResult, iterator);
} catch (error) {
innerError = true;
innerResult = error;
}
if (kind === "throw") throw value;
if (innerError) throw innerResult;
anObject(innerResult);
return value;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/call-with-safe-iteration-closing.js
var require_call_with_safe_iteration_closing = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/call-with-safe-iteration-closing.js"(exports, module2) {
"use strict";
var anObject = require_an_object();
var iteratorClose = require_iterator_close();
module2.exports = function(iterator, fn, value, ENTRIES) {
try {
return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
} catch (error) {
iteratorClose(iterator, "throw", error);
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators.js
var require_iterators = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators.js"(exports, module2) {
"use strict";
module2.exports = {};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array-iterator-method.js
var require_is_array_iterator_method = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array-iterator-method.js"(exports, module2) {
"use strict";
var wellKnownSymbol = require_well_known_symbol();
var Iterators = require_iterators();
var ITERATOR = wellKnownSymbol("iterator");
var ArrayPrototype = Array.prototype;
module2.exports = function(it) {
return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-property.js
var require_create_property = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-property.js"(exports, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var definePropertyModule = require_object_define_property();
var createPropertyDescriptor = require_create_property_descriptor();
module2.exports = function(object, key, value) {
if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));
else object[key] = value;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator-method.js
var require_get_iterator_method = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator-method.js"(exports, module2) {
"use strict";
var classof = require_classof();
var getMethod = require_get_method();
var isNullOrUndefined = require_is_null_or_undefined();
var Iterators = require_iterators();
var wellKnownSymbol = require_well_known_symbol();
var ITERATOR = wellKnownSymbol("iterator");
module2.exports = function(it) {
if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR) || getMethod(it, "@@iterator") || Iterators[classof(it)];
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator.js
var require_get_iterator = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator.js"(exports, module2) {
"use strict";
var call = require_function_call();
var aCallable = require_a_callable();
var anObject = require_an_object();
var tryToString = require_try_to_string();
var getIteratorMethod = require_get_iterator_method();
var $TypeError = TypeError;
module2.exports = function(argument, usingIterator) {
var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;
if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));
throw new $TypeError(tryToString(argument) + " is not iterable");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-from.js
var require_array_from = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-from.js"(exports, module2) {
"use strict";
var bind = require_function_bind_context();
var call = require_function_call();
var toObject = require_to_object();
var callWithSafeIterationClosing = require_call_with_safe_iteration_closing();
var isArrayIteratorMethod = require_is_array_iterator_method();
var isConstructor = require_is_constructor();
var lengthOfArrayLike = require_length_of_array_like();
var createProperty = require_create_property();
var getIterator = require_get_iterator();
var getIteratorMethod = require_get_iterator_method();
var $Array = Array;
module2.exports = function from(arrayLike) {
var O = toObject(arrayLike);
var IS_CONSTRUCTOR = isConstructor(this);
var argumentsLength = arguments.length;
var mapfn = argumentsLength > 1 ? arguments[1] : void 0;
var mapping = mapfn !== void 0;
if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0);
var iteratorMethod = getIteratorMethod(O);
var index = 0;
var length, result, step, iterator, next, value;
if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) {
result = IS_CONSTRUCTOR ? new this() : [];
iterator = getIterator(O, iteratorMethod);
next = iterator.next;
for (; !(step = call(next, iterator)).done; index++) {
value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
createProperty(result, index, value);
}
} else {
length = lengthOfArrayLike(O);
result = IS_CONSTRUCTOR ? new this(length) : $Array(length);
for (; length > index; index++) {
value = mapping ? mapfn(O[index], index) : O[index];
createProperty(result, index, value);
}
}
result.length = index;
return result;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/check-correctness-of-iteration.js
var require_check_correctness_of_iteration = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/check-correctness-of-iteration.js"(exports, module2) {
"use strict";
var wellKnownSymbol = require_well_known_symbol();
var ITERATOR = wellKnownSymbol("iterator");
var SAFE_CLOSING = false;
try {
called = 0;
iteratorWithReturn = {
next: function() {
return { done: !!called++ };
},
"return": function() {
SAFE_CLOSING = true;
}
};
iteratorWithReturn[ITERATOR] = function() {
return this;
};
Array.from(iteratorWithReturn, function() {
throw 2;
});
} catch (error) {
}
var called;
var iteratorWithReturn;
module2.exports = function(exec, SKIP_CLOSING) {
try {
if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
} catch (error) {
return false;
}
var ITERATION_SUPPORT = false;
try {
var object = {};
object[ITERATOR] = function() {
return {
next: function() {
return { done: ITERATION_SUPPORT = true };
}
};
};
exec(object);
} catch (error) {
}
return ITERATION_SUPPORT;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.from.js
var require_es_array_from = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.from.js"() {
"use strict";
var $2 = require_export();
var from = require_array_from();
var checkCorrectnessOfIteration = require_check_correctness_of_iteration();
var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) {
Array.from(iterable);
});
$2({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, {
from
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/add-to-unscopables.js
var require_add_to_unscopables = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/add-to-unscopables.js"(exports, module2) {
"use strict";
var wellKnownSymbol = require_well_known_symbol();
var create = require_object_create();
var defineProperty = require_object_define_property().f;
var UNSCOPABLES = wellKnownSymbol("unscopables");
var ArrayPrototype = Array.prototype;
if (ArrayPrototype[UNSCOPABLES] === void 0) {
defineProperty(ArrayPrototype, UNSCOPABLES, {
configurable: true,
value: create(null)
});
}
module2.exports = function(key) {
ArrayPrototype[UNSCOPABLES][key] = true;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/correct-prototype-getter.js
var require_correct_prototype_getter = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/correct-prototype-getter.js"(exports, module2) {
"use strict";
var fails = require_fails();
module2.exports = !fails(function() {
function F() {
}
F.prototype.constructor = null;
return Object.getPrototypeOf(new F()) !== F.prototype;
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-prototype-of.js
var require_object_get_prototype_of = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-prototype-of.js"(exports, module2) {
"use strict";
var hasOwn = require_has_own_property();
var isCallable = require_is_callable();
var toObject = require_to_object();
var sharedKey = require_shared_key();
var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter();
var IE_PROTO = sharedKey("IE_PROTO");
var $Object = Object;
var ObjectPrototype = $Object.prototype;
module2.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O) {
var object = toObject(O);
if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];
var constructor = object.constructor;
if (isCallable(constructor) && object instanceof constructor) {
return constructor.prototype;
}
return object instanceof $Object ? ObjectPrototype : null;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators-core.js
var require_iterators_core = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators-core.js"(exports, module2) {
"use strict";
var fails = require_fails();
var isCallable = require_is_callable();
var isObject = require_is_object();
var create = require_object_create();
var getPrototypeOf = require_object_get_prototype_of();
var defineBuiltIn = require_define_built_in();
var wellKnownSymbol = require_well_known_symbol();
var IS_PURE = require_is_pure();
var ITERATOR = wellKnownSymbol("iterator");
var BUGGY_SAFARI_ITERATORS = false;
var IteratorPrototype;
var PrototypeOfArrayIteratorPrototype;
var arrayIterator;
if ([].keys) {
arrayIterator = [].keys();
if (!("next" in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
else {
PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
}
}
var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function() {
var test = {};
return IteratorPrototype[ITERATOR].call(test) !== test;
});
if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};
else if (IS_PURE) IteratorPrototype = create(IteratorPrototype);
if (!isCallable(IteratorPrototype[ITERATOR])) {
defineBuiltIn(IteratorPrototype, ITERATOR, function() {
return this;
});
}
module2.exports = {
IteratorPrototype,
BUGGY_SAFARI_ITERATORS
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-create-constructor.js
var require_iterator_create_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-create-constructor.js"(exports, module2) {
"use strict";
var IteratorPrototype = require_iterators_core().IteratorPrototype;
var create = require_object_create();
var createPropertyDescriptor = require_create_property_descriptor();
var setToStringTag = require_set_to_string_tag();
var Iterators = require_iterators();
var returnThis = function() {
return this;
};
module2.exports = function(IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {
var TO_STRING_TAG = NAME + " Iterator";
IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });
setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
Iterators[TO_STRING_TAG] = returnThis;
return IteratorConstructor;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-define.js
var require_iterator_define = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-define.js"(exports, module2) {
"use strict";
var $2 = require_export();
var call = require_function_call();
var IS_PURE = require_is_pure();
var FunctionName = require_function_name();
var isCallable = require_is_callable();
var createIteratorConstructor = require_iterator_create_constructor();
var getPrototypeOf = require_object_get_prototype_of();
var setPrototypeOf = require_object_set_prototype_of();
var setToStringTag = require_set_to_string_tag();
var createNonEnumerableProperty = require_create_non_enumerable_property();
var defineBuiltIn = require_define_built_in();
var wellKnownSymbol = require_well_known_symbol();
var Iterators = require_iterators();
var IteratorsCore = require_iterators_core();
var PROPER_FUNCTION_NAME = FunctionName.PROPER;
var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
var IteratorPrototype = IteratorsCore.IteratorPrototype;
var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
var ITERATOR = wellKnownSymbol("iterator");
var KEYS = "keys";
var VALUES = "values";
var ENTRIES = "entries";
var returnThis = function() {
return this;
};
module2.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
createIteratorConstructor(IteratorConstructor, NAME, next);
var getIterationMethod = function(KIND) {
if (KIND === DEFAULT && defaultIterator) return defaultIterator;
if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];
switch (KIND) {
case KEYS:
return function keys() {
return new IteratorConstructor(this, KIND);
};
case VALUES:
return function values() {
return new IteratorConstructor(this, KIND);
};
case ENTRIES:
return function entries() {
return new IteratorConstructor(this, KIND);
};
}
return function() {
return new IteratorConstructor(this);
};
};
var TO_STRING_TAG = NAME + " Iterator";
var INCORRECT_VALUES_NAME = false;
var IterablePrototype = Iterable.prototype;
var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT];
var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
var anyNativeIterator = NAME === "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator;
var CurrentIteratorPrototype, methods, KEY;
if (anyNativeIterator) {
CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
if (setPrototypeOf) {
setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
} else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {
defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);
}
}
setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
}
}
if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {
if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {
createNonEnumerableProperty(IterablePrototype, "name", VALUES);
} else {
INCORRECT_VALUES_NAME = true;
defaultIterator = function values() {
return call(nativeIterator, this);
};
}
}
if (DEFAULT) {
methods = {
values: getIterationMethod(VALUES),
keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
entries: getIterationMethod(ENTRIES)
};
if (FORCED) for (KEY in methods) {
if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
defineBuiltIn(IterablePrototype, KEY, methods[KEY]);
}
}
else $2({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
}
if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });
}
Iterators[NAME] = defaultIterator;
return methods;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-iter-result-object.js
var require_create_iter_result_object = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-iter-result-object.js"(exports, module2) {
"use strict";
module2.exports = function(value, done) {
return { value, done };
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.iterator.js
var require_es_array_iterator = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.iterator.js"(exports, module2) {
"use strict";
var toIndexedObject = require_to_indexed_object();
var addToUnscopables = require_add_to_unscopables();
var Iterators = require_iterators();
var InternalStateModule = require_internal_state();
var defineProperty = require_object_define_property().f;
var defineIterator = require_iterator_define();
var createIterResultObject = require_create_iter_result_object();
var IS_PURE = require_is_pure();
var DESCRIPTORS = require_descriptors();
var ARRAY_ITERATOR = "Array Iterator";
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);
module2.exports = defineIterator(Array, "Array", function(iterated, kind) {
setInternalState(this, {
type: ARRAY_ITERATOR,
target: toIndexedObject(iterated),
// target
index: 0,
// next index
kind
// kind
});
}, function() {
var state = getInternalState(this);
var target = state.target;
var index = state.index++;
if (!target || index >= target.length) {
state.target = null;
return createIterResultObject(void 0, true);
}
switch (state.kind) {
case "keys":
return createIterResultObject(index, false);
case "values":
return createIterResultObject(target[index], false);
}
return createIterResultObject([index, target[index]], false);
}, "values");
var values = Iterators.Arguments = Iterators.Array;
addToUnscopables("keys");
addToUnscopables("values");
addToUnscopables("entries");
if (!IS_PURE && DESCRIPTORS && values.name !== "values") try {
defineProperty(values, "name", { value: "values" });
} catch (error) {
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-method-has-species-support.js
var require_array_method_has_species_support = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-method-has-species-support.js"(exports, module2) {
"use strict";
var fails = require_fails();
var wellKnownSymbol = require_well_known_symbol();
var V8_VERSION = require_environment_v8_version();
var SPECIES = wellKnownSymbol("species");
module2.exports = function(METHOD_NAME) {
return V8_VERSION >= 51 || !fails(function() {
var array = [];
var constructor = array.constructor = {};
constructor[SPECIES] = function() {
return { foo: 1 };
};
return array[METHOD_NAME](Boolean).foo !== 1;
});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.slice.js
var require_es_array_slice = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.slice.js"() {
"use strict";
var $2 = require_export();
var isArray = require_is_array();
var isConstructor = require_is_constructor();
var isObject = require_is_object();
var toAbsoluteIndex = require_to_absolute_index();
var lengthOfArrayLike = require_length_of_array_like();
var toIndexedObject = require_to_indexed_object();
var createProperty = require_create_property();
var wellKnownSymbol = require_well_known_symbol();
var arrayMethodHasSpeciesSupport = require_array_method_has_species_support();
var nativeSlice = require_array_slice();
var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice");
var SPECIES = wellKnownSymbol("species");
var $Array = Array;
var max = Math.max;
$2({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, {
slice: function slice(start, end) {
var O = toIndexedObject(this);
var length = lengthOfArrayLike(O);
var k = toAbsoluteIndex(start, length);
var fin = toAbsoluteIndex(end === void 0 ? length : end, length);
var Constructor, result, n;
if (isArray(O)) {
Constructor = O.constructor;
if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) {
Constructor = void 0;
} else if (isObject(Constructor)) {
Constructor = Constructor[SPECIES];
if (Constructor === null) Constructor = void 0;
}
if (Constructor === $Array || Constructor === void 0) {
return nativeSlice(O, k, fin);
}
}
result = new (Constructor === void 0 ? $Array : Constructor)(max(fin - k, 0));
for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);
result.length = n;
return result;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-multibyte.js
var require_string_multibyte = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-multibyte.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var toIntegerOrInfinity = require_to_integer_or_infinity();
var toString = require_to_string();
var requireObjectCoercible = require_require_object_coercible();
var charAt = uncurryThis("".charAt);
var charCodeAt = uncurryThis("".charCodeAt);
var stringSlice = uncurryThis("".slice);
var createMethod = function(CONVERT_TO_STRING) {
return function($this, pos) {
var S = toString(requireObjectCoercible($this));
var position = toIntegerOrInfinity(pos);
var size = S.length;
var first, second;
if (position < 0 || position >= size) return CONVERT_TO_STRING ? "" : void 0;
first = charCodeAt(S, position);
return first < 55296 || first > 56319 || position + 1 === size || (second = charCodeAt(S, position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 55296 << 10) + (second - 56320) + 65536;
};
};
module2.exports = {
// `String.prototype.codePointAt` method
// https://tc39.es/ecma262/#sec-string.prototype.codepointat
codeAt: createMethod(false),
// `String.prototype.at` method
// https://github.com/mathiasbynens/String.prototype.at
charAt: createMethod(true)
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.iterator.js
var require_es_string_iterator = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.iterator.js"() {
"use strict";
var charAt = require_string_multibyte().charAt;
var toString = require_to_string();
var InternalStateModule = require_internal_state();
var defineIterator = require_iterator_define();
var createIterResultObject = require_create_iter_result_object();
var STRING_ITERATOR = "String Iterator";
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);
defineIterator(String, "String", function(iterated) {
setInternalState(this, {
type: STRING_ITERATOR,
string: toString(iterated),
index: 0
});
}, function next() {
var state = getInternalState(this);
var string = state.string;
var index = state.index;
var point;
if (index >= string.length) return createIterResultObject(void 0, true);
point = charAt(string, index);
state.index += point.length;
return createIterResultObject(point, false);
});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js
var _DOMTokenList, DOMTokenList_default;
var init_DOMTokenList = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js"() {
_DOMTokenList = function() {
var dpSupport = true;
var defineGetter = function(object, name, fn, configurable) {
if (Object.defineProperty)
Object.defineProperty(object, name, {
configurable: false === dpSupport ? true : !!configurable,
get: fn
});
else object.__defineGetter__(name, fn);
};
try {
defineGetter({}, "support");
} catch (e) {
dpSupport = false;
}
var _DOMTokenList2 = function(el, prop) {
var that = this;
var tokens = [];
var tokenMap = {};
var length = 0;
var maxLength = 0;
var addIndexGetter = function(i) {
defineGetter(that, i, function() {
preop();
return tokens[i];
}, false);
};
var reindex = function() {
if (length >= maxLength)
for (; maxLength < length; ++maxLength) {
addIndexGetter(maxLength);
}
};
var preop = function() {
var error;
var i;
var args = arguments;
var rSpace = /\s+/;
if (args.length) {
for (i = 0; i < args.length; ++i)
if (rSpace.test(args[i])) {
error = new SyntaxError('String "' + args[i] + '" contains an invalid character');
error.code = 5;
error.name = "InvalidCharacterError";
throw error;
}
}
if (typeof el[prop] === "object") {
tokens = ("" + el[prop].baseVal).replace(/^\s+|\s+$/g, "").split(rSpace);
} else {
tokens = ("" + el[prop]).replace(/^\s+|\s+$/g, "").split(rSpace);
}
if ("" === tokens[0]) tokens = [];
tokenMap = {};
for (i = 0; i < tokens.length; ++i)
tokenMap[tokens[i]] = true;
length = tokens.length;
reindex();
};
preop();
defineGetter(that, "length", function() {
preop();
return length;
});
that.toLocaleString = that.toString = function() {
preop();
return tokens.join(" ");
};
that.item = function(idx) {
preop();
return tokens[idx];
};
that.contains = function(token) {
preop();
return !!tokenMap[token];
};
that.add = function() {
preop.apply(that, args = arguments);
for (var args, token, i = 0, l = args.length; i < l; ++i) {
token = args[i];
if (!tokenMap[token]) {
tokens.push(token);
tokenMap[token] = true;
}
}
if (length !== tokens.length) {
length = tokens.length >>> 0;
if (typeof el[prop] === "object") {
el[prop].baseVal = tokens.join(" ");
} else {
el[prop] = tokens.join(" ");
}
reindex();
}
};
that.remove = function() {
preop.apply(that, args = arguments);
for (var args, ignore = {}, i = 0, t = []; i < args.length; ++i) {
ignore[args[i]] = true;
delete tokenMap[args[i]];
}
for (i = 0; i < tokens.length; ++i)
if (!ignore[tokens[i]]) t.push(tokens[i]);
tokens = t;
length = t.length >>> 0;
if (typeof el[prop] === "object") {
el[prop].baseVal = tokens.join(" ");
} else {
el[prop] = tokens.join(" ");
}
reindex();
};
that.toggle = function(token, force) {
preop.apply(that, [token]);
if (void 0 !== force) {
if (force) {
that.add(token);
return true;
} else {
that.remove(token);
return false;
}
}
if (tokenMap[token]) {
that.remove(token);
return false;
}
that.add(token);
return true;
};
that.forEach = Array.prototype.forEach;
return that;
};
return _DOMTokenList2;
}();
DOMTokenList_default = _DOMTokenList;
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.js
var DOMTokenList_exports = {};
var init_DOMTokenList2 = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.js"() {
init_DOMTokenList();
(function(undefined2) {
if (!("DOMTokenList" in self && function(e) {
return !("classList" in e) || !e.classList.toggle("x", false) && !e.className;
}(document.createElement("x")))) {
(function(global2) {
var nativeImpl = "DOMTokenList" in global2 && global2.DOMTokenList;
if (!nativeImpl || !!document.createElementNS && !!document.createElementNS("http://www.w3.org/2000/svg", "svg") && !(document.createElementNS("http://www.w3.org/2000/svg", "svg").classList instanceof DOMTokenList)) {
global2.DOMTokenList = DOMTokenList_default;
}
(function() {
var e = document.createElement("span");
if (!("classList" in e)) return;
e.classList.toggle("x", false);
if (!e.classList.contains("x")) return;
e.classList.constructor.prototype.toggle = function toggle(token) {
var force = arguments[1];
if (force === undefined2) {
var add = !this.contains(token);
this[add ? "add" : "remove"](token);
return add;
}
force = !!force;
this[force ? "add" : "remove"](token);
return force;
};
})();
(function() {
var e = document.createElement("span");
if (!("classList" in e)) return;
e.classList.add("a", "b");
if (e.classList.contains("b")) return;
var native = e.classList.constructor.prototype.add;
e.classList.constructor.prototype.add = function() {
var args = arguments;
var l = arguments.length;
for (var i = 0; i < l; i++) {
native.call(this, args[i]);
}
};
})();
(function() {
var e = document.createElement("span");
if (!("classList" in e)) return;
e.classList.add("a");
e.classList.add("b");
e.classList.remove("a", "b");
if (!e.classList.contains("b")) return;
var native = e.classList.constructor.prototype.remove;
e.classList.constructor.prototype.remove = function() {
var args = arguments;
var l = arguments.length;
for (var i = 0; i < l; i++) {
native.call(this, args[i]);
}
};
})();
})(self);
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js
var DOMTokenList_prototype_replace_exports = {};
var init_DOMTokenList_prototype_replace = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js"() {
init_DOMTokenList();
(function(undefined2) {
if (!("replace" in (document.createElement("div").classList || {}))) {
(function() {
var classList = document.createElement("div").classList;
classList && (classList.constructor.prototype.replace = function(token, newToken) {
var tokenString = "" + token, newTokenString = "" + newToken;
try {
new DOMException();
} catch (e) {
self.DOMException = function(message, name) {
if (!(this instanceof DOMException)) return new DOMException(message, name);
this.message = message;
this.name = name;
};
}
var error;
if (!(tokenString && newTokenString)) error = "SyntaxError";
if (!error && (/\s/.test(tokenString) || /\s/.test(newTokenString))) error = "InvalidCharacterError";
if (error) throw new DOMException("DOMTokenList.replace was provided tokens '" + tokenString + "' and '" + newTokenString + "'", error);
if (!this.contains(tokenString)) return false;
var tokensTobeMoved = [];
var newTokenFound = false;
for (var i = 0; i < this.length; ++i)
if (newTokenString === this.item(i)) newTokenFound = true;
else if (tokenString === this.item(i)) break;
for (; i < this.length; ++i) tokensTobeMoved.push(this.item(i));
for (i = 0; i < tokensTobeMoved.length; ++i) {
var currentToken = tokensTobeMoved[i];
currentToken !== newTokenString && this.remove(currentToken);
currentToken !== tokenString && this.add(currentToken);
currentToken === tokenString && !newTokenFound && (this.remove(newTokenString), this.add(newTokenString));
}
return true;
});
})();
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DocumentFragment.js
var require_DocumentFragment = __commonJS({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DocumentFragment.js"() {
(function(undefined2) {
if (!("DocumentFragment" in self && function() {
try {
return new DocumentFragment(), true;
} catch (n) {
return false;
}
}())) {
(function(global2) {
global2.DocumentFragment = function DocumentFragment2() {
return document.createDocumentFragment();
};
var fragment = document.createDocumentFragment();
global2.DocumentFragment.prototype = Object.create(fragment.constructor.prototype);
})(self);
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_mutation.js
var _mutation, mutation_default;
var init_mutation = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_mutation.js"() {
_mutation = /* @__PURE__ */ function() {
function isNode(object) {
if (typeof Node === "function") {
return object instanceof Node;
}
return object && typeof object === "object" && object.nodeName && object.nodeType >= 1 && object.nodeType <= 12;
}
return function mutation(nodes) {
if (nodes.length === 1) {
return isNode(nodes[0]) ? nodes[0] : document.createTextNode(nodes[0] + "");
}
var fragment = document.createDocumentFragment();
for (var i = 0; i < nodes.length; i++) {
fragment.appendChild(isNode(nodes[i]) ? nodes[i] : document.createTextNode(nodes[i] + ""));
}
return fragment;
};
}();
mutation_default = _mutation;
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DocumentFragment.prototype.prepend.js
var DocumentFragment_prototype_prepend_exports = {};
var init_DocumentFragment_prototype_prepend = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DocumentFragment.prototype.prepend.js"() {
init_mutation();
(function(undefined2) {
if (!("DocumentFragment" in self && "prepend" in DocumentFragment.prototype)) {
(function(global2) {
var fragmentProto = document.createDocumentFragment().constructor.prototype;
fragmentProto.prepend = function prepend() {
this.insertBefore(mutation_default(arguments), this.firstChild);
};
global2.DocumentFragment.prototype.prepend = function prepend() {
this.insertBefore(mutation_default(arguments), this.firstChild);
};
})(self);
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.prepend.js
var Element_prototype_prepend_exports = {};
var init_Element_prototype_prepend = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.prepend.js"() {
init_mutation();
(function(undefined2) {
if (!("Element" in self && "prepend" in Element.prototype)) {
Document.prototype.prepend = Element.prototype.prepend = function prepend() {
this.insertBefore(mutation_default(arguments), this.firstChild);
};
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DocumentFragment.prototype.append.js
var DocumentFragment_prototype_append_exports = {};
var init_DocumentFragment_prototype_append = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DocumentFragment.prototype.append.js"() {
init_mutation();
(function(undefined2) {
if (!("DocumentFragment" in self && "append" in DocumentFragment.prototype)) {
(function(global2) {
var fragmentProto = document.createDocumentFragment().constructor.prototype;
fragmentProto.append = function append() {
this.appendChild(mutation_default(arguments));
};
global2.DocumentFragment.prototype.append = function append() {
this.appendChild(mutation_default(arguments));
};
})(self);
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.append.js
var Element_prototype_append_exports = {};
var init_Element_prototype_append = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.append.js"() {
init_mutation();
(function(undefined2) {
if (!("Element" in self && "append" in Element.prototype)) {
Document.prototype.append = Element.prototype.append = function append() {
this.appendChild(mutation_default(arguments));
};
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.after.js
var Element_prototype_after_exports = {};
var init_Element_prototype_after = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.after.js"() {
init_mutation();
(function(undefined2) {
if (!("Element" in self && "after" in Element.prototype)) {
Document.prototype.after = Element.prototype.after = function after() {
if (this.parentNode) {
var args = Array.prototype.slice.call(arguments), viableNextSibling = this.nextSibling, idx = viableNextSibling ? args.indexOf(viableNextSibling) : -1;
while (idx !== -1) {
viableNextSibling = viableNextSibling.nextSibling;
if (!viableNextSibling) {
break;
}
idx = args.indexOf(viableNextSibling);
}
this.parentNode.insertBefore(mutation_default(arguments), viableNextSibling);
}
};
if ("Text" in self) {
Text.prototype.after = Element.prototype.after;
}
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.after.js
var CharacterData_prototype_after_exports = {};
var init_CharacterData_prototype_after = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.after.js"() {
init_mutation();
(function(undefined2) {
if (!("after" in CharacterData.prototype)) {
CharacterData.prototype.after = Element.prototype.after;
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/does-not-exceed-safe-integer.js
var require_does_not_exceed_safe_integer = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) {
"use strict";
var $TypeError = TypeError;
var MAX_SAFE_INTEGER = 9007199254740991;
module2.exports = function(it) {
if (it > MAX_SAFE_INTEGER) throw $TypeError("Maximum allowed index exceeded");
return it;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.concat.js
var require_es_array_concat = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.concat.js"() {
"use strict";
var $2 = require_export();
var fails = require_fails();
var isArray = require_is_array();
var isObject = require_is_object();
var toObject = require_to_object();
var lengthOfArrayLike = require_length_of_array_like();
var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer();
var createProperty = require_create_property();
var arraySpeciesCreate = require_array_species_create();
var arrayMethodHasSpeciesSupport = require_array_method_has_species_support();
var wellKnownSymbol = require_well_known_symbol();
var V8_VERSION = require_environment_v8_version();
var IS_CONCAT_SPREADABLE = wellKnownSymbol("isConcatSpreadable");
var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function() {
var array = [];
array[IS_CONCAT_SPREADABLE] = false;
return array.concat()[0] !== array;
});
var isConcatSpreadable = function(O) {
if (!isObject(O)) return false;
var spreadable = O[IS_CONCAT_SPREADABLE];
return spreadable !== void 0 ? !!spreadable : isArray(O);
};
var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport("concat");
$2({ target: "Array", proto: true, arity: 1, forced: FORCED }, {
// eslint-disable-next-line no-unused-vars -- required for `.length`
concat: function concat(arg) {
var O = toObject(this);
var A = arraySpeciesCreate(O, 0);
var n = 0;
var i, k, length, len, E;
for (i = -1, length = arguments.length; i < length; i++) {
E = i === -1 ? O : arguments[i];
if (isConcatSpreadable(E)) {
len = lengthOfArrayLike(E);
doesNotExceedSafeInteger(n + len);
for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);
} else {
doesNotExceedSafeInteger(n + 1);
createProperty(A, n++, E);
}
}
A.length = n;
return A;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.find.js
var require_es_array_find = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.find.js"() {
"use strict";
var $2 = require_export();
var $find = require_array_iteration().find;
var addToUnscopables = require_add_to_unscopables();
var FIND = "find";
var SKIPS_HOLES = true;
if (FIND in []) Array(1)[FIND](function() {
SKIPS_HOLES = false;
});
$2({ target: "Array", proto: true, forced: SKIPS_HOLES }, {
find: function find(callbackfn) {
return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0);
}
});
addToUnscopables(FIND);
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-method-is-strict.js
var require_array_method_is_strict = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-method-is-strict.js"(exports, module2) {
"use strict";
var fails = require_fails();
module2.exports = function(METHOD_NAME, argument) {
var method = [][METHOD_NAME];
return !!method && fails(function() {
method.call(null, argument || function() {
return 1;
}, 1);
});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.join.js
var require_es_array_join = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.join.js"() {
"use strict";
var $2 = require_export();
var uncurryThis = require_function_uncurry_this();
var IndexedObject = require_indexed_object();
var toIndexedObject = require_to_indexed_object();
var arrayMethodIsStrict = require_array_method_is_strict();
var nativeJoin = uncurryThis([].join);
var ES3_STRINGS = IndexedObject !== Object;
var FORCED = ES3_STRINGS || !arrayMethodIsStrict("join", ",");
$2({ target: "Array", proto: true, forced: FORCED }, {
join: function join(separator) {
return nativeJoin(toIndexedObject(this), separator === void 0 ? "," : separator);
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/an-instance.js
var require_an_instance = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/an-instance.js"(exports, module2) {
"use strict";
var isPrototypeOf = require_object_is_prototype_of();
var $TypeError = TypeError;
module2.exports = function(it, Prototype) {
if (isPrototypeOf(Prototype, it)) return it;
throw new $TypeError("Incorrect invocation");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.constructor.js
var require_es_iterator_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.constructor.js"() {
"use strict";
var $2 = require_export();
var globalThis2 = require_global_this();
var anInstance = require_an_instance();
var anObject = require_an_object();
var isCallable = require_is_callable();
var getPrototypeOf = require_object_get_prototype_of();
var defineBuiltInAccessor = require_define_built_in_accessor();
var createProperty = require_create_property();
var fails = require_fails();
var hasOwn = require_has_own_property();
var wellKnownSymbol = require_well_known_symbol();
var IteratorPrototype = require_iterators_core().IteratorPrototype;
var DESCRIPTORS = require_descriptors();
var IS_PURE = require_is_pure();
var CONSTRUCTOR = "constructor";
var ITERATOR = "Iterator";
var TO_STRING_TAG = wellKnownSymbol("toStringTag");
var $TypeError = TypeError;
var NativeIterator = globalThis2[ITERATOR];
var FORCED = IS_PURE || !isCallable(NativeIterator) || NativeIterator.prototype !== IteratorPrototype || !fails(function() {
NativeIterator({});
});
var IteratorConstructor = function Iterator() {
anInstance(this, IteratorPrototype);
if (getPrototypeOf(this) === IteratorPrototype) throw new $TypeError("Abstract class Iterator not directly constructable");
};
var defineIteratorPrototypeAccessor = function(key, value) {
if (DESCRIPTORS) {
defineBuiltInAccessor(IteratorPrototype, key, {
configurable: true,
get: function() {
return value;
},
set: function(replacement) {
anObject(this);
if (this === IteratorPrototype) throw new $TypeError("You can't redefine this property");
if (hasOwn(this, key)) this[key] = replacement;
else createProperty(this, key, replacement);
}
});
} else IteratorPrototype[key] = value;
};
if (!hasOwn(IteratorPrototype, TO_STRING_TAG)) defineIteratorPrototypeAccessor(TO_STRING_TAG, ITERATOR);
if (FORCED || !hasOwn(IteratorPrototype, CONSTRUCTOR) || IteratorPrototype[CONSTRUCTOR] === Object) {
defineIteratorPrototypeAccessor(CONSTRUCTOR, IteratorConstructor);
}
IteratorConstructor.prototype = IteratorPrototype;
$2({ global: true, constructor: true, forced: FORCED }, {
Iterator: IteratorConstructor
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterate.js
var require_iterate = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterate.js"(exports, module2) {
"use strict";
var bind = require_function_bind_context();
var call = require_function_call();
var anObject = require_an_object();
var tryToString = require_try_to_string();
var isArrayIteratorMethod = require_is_array_iterator_method();
var lengthOfArrayLike = require_length_of_array_like();
var isPrototypeOf = require_object_is_prototype_of();
var getIterator = require_get_iterator();
var getIteratorMethod = require_get_iterator_method();
var iteratorClose = require_iterator_close();
var $TypeError = TypeError;
var Result = function(stopped, result) {
this.stopped = stopped;
this.result = result;
};
var ResultPrototype = Result.prototype;
module2.exports = function(iterable, unboundFunction, options) {
var that = options && options.that;
var AS_ENTRIES = !!(options && options.AS_ENTRIES);
var IS_RECORD = !!(options && options.IS_RECORD);
var IS_ITERATOR = !!(options && options.IS_ITERATOR);
var INTERRUPTED = !!(options && options.INTERRUPTED);
var fn = bind(unboundFunction, that);
var iterator, iterFn, index, length, result, next, step;
var stop = function(condition) {
if (iterator) iteratorClose(iterator, "normal", condition);
return new Result(true, condition);
};
var callFn = function(value) {
if (AS_ENTRIES) {
anObject(value);
return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
}
return INTERRUPTED ? fn(value, stop) : fn(value);
};
if (IS_RECORD) {
iterator = iterable.iterator;
} else if (IS_ITERATOR) {
iterator = iterable;
} else {
iterFn = getIteratorMethod(iterable);
if (!iterFn) throw new $TypeError(tryToString(iterable) + " is not iterable");
if (isArrayIteratorMethod(iterFn)) {
for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {
result = callFn(iterable[index]);
if (result && isPrototypeOf(ResultPrototype, result)) return result;
}
return new Result(false);
}
iterator = getIterator(iterable, iterFn);
}
next = IS_RECORD ? iterable.next : iterator.next;
while (!(step = call(next, iterator)).done) {
try {
result = callFn(step.value);
} catch (error) {
iteratorClose(iterator, "throw", error);
}
if (typeof result == "object" && result && isPrototypeOf(ResultPrototype, result)) return result;
}
return new Result(false);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator-direct.js
var require_get_iterator_direct = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) {
"use strict";
module2.exports = function(obj) {
return {
iterator: obj,
next: obj.next,
done: false
};
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.find.js
var require_es_iterator_find = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.find.js"() {
"use strict";
var $2 = require_export();
var iterate = require_iterate();
var aCallable = require_a_callable();
var anObject = require_an_object();
var getIteratorDirect = require_get_iterator_direct();
$2({ target: "Iterator", proto: true, real: true }, {
find: function find(predicate) {
anObject(this);
aCallable(predicate);
var record = getIteratorDirect(this);
var counter = 0;
return iterate(record, function(value, stop) {
if (predicate(value, counter++)) return stop(value);
}, { IS_RECORD: true, INTERRUPTED: true }).result;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-to-string.js
var require_object_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-to-string.js"(exports, module2) {
"use strict";
var TO_STRING_TAG_SUPPORT = require_to_string_tag_support();
var classof = require_classof();
module2.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
return "[object " + classof(this) + "]";
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.to-string.js
var require_es_object_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.to-string.js"() {
"use strict";
var TO_STRING_TAG_SUPPORT = require_to_string_tag_support();
var defineBuiltIn = require_define_built_in();
var toString = require_object_to_string();
if (!TO_STRING_TAG_SUPPORT) {
defineBuiltIn(Object.prototype, "toString", toString, { unsafe: true });
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-regexp.js
var require_is_regexp = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-regexp.js"(exports, module2) {
"use strict";
var isObject = require_is_object();
var classof = require_classof_raw();
var wellKnownSymbol = require_well_known_symbol();
var MATCH = wellKnownSymbol("match");
module2.exports = function(it) {
var isRegExp;
return isObject(it) && ((isRegExp = it[MATCH]) !== void 0 ? !!isRegExp : classof(it) === "RegExp");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-flags.js
var require_regexp_flags = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-flags.js"(exports, module2) {
"use strict";
var anObject = require_an_object();
module2.exports = function() {
var that = anObject(this);
var result = "";
if (that.hasIndices) result += "d";
if (that.global) result += "g";
if (that.ignoreCase) result += "i";
if (that.multiline) result += "m";
if (that.dotAll) result += "s";
if (that.unicode) result += "u";
if (that.unicodeSets) result += "v";
if (that.sticky) result += "y";
return result;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-get-flags.js
var require_regexp_get_flags = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-get-flags.js"(exports, module2) {
"use strict";
var call = require_function_call();
var hasOwn = require_has_own_property();
var isPrototypeOf = require_object_is_prototype_of();
var regExpFlags = require_regexp_flags();
var RegExpPrototype = RegExp.prototype;
module2.exports = function(R) {
var flags = R.flags;
return flags === void 0 && !("flags" in RegExpPrototype) && !hasOwn(R, "flags") && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-sticky-helpers.js
var require_regexp_sticky_helpers = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-sticky-helpers.js"(exports, module2) {
"use strict";
var fails = require_fails();
var globalThis2 = require_global_this();
var $RegExp = globalThis2.RegExp;
var UNSUPPORTED_Y = fails(function() {
var re = $RegExp("a", "y");
re.lastIndex = 2;
return re.exec("abcd") !== null;
});
var MISSED_STICKY = UNSUPPORTED_Y || fails(function() {
return !$RegExp("a", "y").sticky;
});
var BROKEN_CARET = UNSUPPORTED_Y || fails(function() {
var re = $RegExp("^r", "gy");
re.lastIndex = 2;
return re.exec("str") !== null;
});
module2.exports = {
BROKEN_CARET,
MISSED_STICKY,
UNSUPPORTED_Y
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/set-species.js
var require_set_species = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/set-species.js"(exports, module2) {
"use strict";
var getBuiltIn = require_get_built_in();
var defineBuiltInAccessor = require_define_built_in_accessor();
var wellKnownSymbol = require_well_known_symbol();
var DESCRIPTORS = require_descriptors();
var SPECIES = wellKnownSymbol("species");
module2.exports = function(CONSTRUCTOR_NAME) {
var Constructor = getBuiltIn(CONSTRUCTOR_NAME);
if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {
defineBuiltInAccessor(Constructor, SPECIES, {
configurable: true,
get: function() {
return this;
}
});
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-unsupported-dot-all.js
var require_regexp_unsupported_dot_all = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-unsupported-dot-all.js"(exports, module2) {
"use strict";
var fails = require_fails();
var globalThis2 = require_global_this();
var $RegExp = globalThis2.RegExp;
module2.exports = fails(function() {
var re = $RegExp(".", "s");
return !(re.dotAll && re.test("\n") && re.flags === "s");
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-unsupported-ncg.js
var require_regexp_unsupported_ncg = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-unsupported-ncg.js"(exports, module2) {
"use strict";
var fails = require_fails();
var globalThis2 = require_global_this();
var $RegExp = globalThis2.RegExp;
module2.exports = fails(function() {
var re = $RegExp("(?<a>b)", "g");
return re.exec("b").groups.a !== "b" || "b".replace(re, "$<a>c") !== "bc";
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.constructor.js
var require_es_regexp_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.constructor.js"() {
"use strict";
var DESCRIPTORS = require_descriptors();
var globalThis2 = require_global_this();
var uncurryThis = require_function_uncurry_this();
var isForced = require_is_forced();
var inheritIfRequired = require_inherit_if_required();
var createNonEnumerableProperty = require_create_non_enumerable_property();
var create = require_object_create();
var getOwnPropertyNames = require_object_get_own_property_names().f;
var isPrototypeOf = require_object_is_prototype_of();
var isRegExp = require_is_regexp();
var toString = require_to_string();
var getRegExpFlags = require_regexp_get_flags();
var stickyHelpers = require_regexp_sticky_helpers();
var proxyAccessor = require_proxy_accessor();
var defineBuiltIn = require_define_built_in();
var fails = require_fails();
var hasOwn = require_has_own_property();
var enforceInternalState = require_internal_state().enforce;
var setSpecies = require_set_species();
var wellKnownSymbol = require_well_known_symbol();
var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all();
var UNSUPPORTED_NCG = require_regexp_unsupported_ncg();
var MATCH = wellKnownSymbol("match");
var NativeRegExp = globalThis2.RegExp;
var RegExpPrototype = NativeRegExp.prototype;
var SyntaxError2 = globalThis2.SyntaxError;
var exec = uncurryThis(RegExpPrototype.exec);
var charAt = uncurryThis("".charAt);
var replace = uncurryThis("".replace);
var stringIndexOf = uncurryThis("".indexOf);
var stringSlice = uncurryThis("".slice);
var IS_NCG = /^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/;
var re1 = /a/g;
var re2 = /a/g;
var CORRECT_NEW = new NativeRegExp(re1) !== re1;
var MISSED_STICKY = stickyHelpers.MISSED_STICKY;
var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
var BASE_FORCED = DESCRIPTORS && (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function() {
re2[MATCH] = false;
return NativeRegExp(re1) !== re1 || NativeRegExp(re2) === re2 || String(NativeRegExp(re1, "i")) !== "/a/i";
}));
var handleDotAll = function(string) {
var length = string.length;
var index2 = 0;
var result = "";
var brackets = false;
var chr;
for (; index2 <= length; index2++) {
chr = charAt(string, index2);
if (chr === "\\") {
result += chr + charAt(string, ++index2);
continue;
}
if (!brackets && chr === ".") {
result += "[\\s\\S]";
} else {
if (chr === "[") {
brackets = true;
} else if (chr === "]") {
brackets = false;
}
result += chr;
}
}
return result;
};
var handleNCG = function(string) {
var length = string.length;
var index2 = 0;
var result = "";
var named = [];
var names = create(null);
var brackets = false;
var ncg = false;
var groupid = 0;
var groupname = "";
var chr;
for (; index2 <= length; index2++) {
chr = charAt(string, index2);
if (chr === "\\") {
chr += charAt(string, ++index2);
} else if (chr === "]") {
brackets = false;
} else if (!brackets) switch (true) {
case chr === "[":
brackets = true;
break;
case chr === "(":
result += chr;
if (stringSlice(string, index2 + 1, index2 + 3) === "?:") {
continue;
}
if (exec(IS_NCG, stringSlice(string, index2 + 1))) {
index2 += 2;
ncg = true;
}
groupid++;
continue;
case (chr === ">" && ncg):
if (groupname === "" || hasOwn(names, groupname)) {
throw new SyntaxError2("Invalid capture group name");
}
names[groupname] = true;
named[named.length] = [groupname, groupid];
ncg = false;
groupname = "";
continue;
}
if (ncg) groupname += chr;
else result += chr;
}
return [result, named];
};
if (isForced("RegExp", BASE_FORCED)) {
RegExpWrapper = function RegExp2(pattern, flags) {
var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);
var patternIsRegExp = isRegExp(pattern);
var flagsAreUndefined = flags === void 0;
var groups = [];
var rawPattern = pattern;
var rawFlags, dotAll, sticky, handled, result, state;
if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {
return pattern;
}
if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {
pattern = pattern.source;
if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);
}
pattern = pattern === void 0 ? "" : toString(pattern);
flags = flags === void 0 ? "" : toString(flags);
rawPattern = pattern;
if (UNSUPPORTED_DOT_ALL && "dotAll" in re1) {
dotAll = !!flags && stringIndexOf(flags, "s") > -1;
if (dotAll) flags = replace(flags, /s/g, "");
}
rawFlags = flags;
if (MISSED_STICKY && "sticky" in re1) {
sticky = !!flags && stringIndexOf(flags, "y") > -1;
if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, "");
}
if (UNSUPPORTED_NCG) {
handled = handleNCG(pattern);
pattern = handled[0];
groups = handled[1];
}
result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);
if (dotAll || sticky || groups.length) {
state = enforceInternalState(result);
if (dotAll) {
state.dotAll = true;
state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);
}
if (sticky) state.sticky = true;
if (groups.length) state.groups = groups;
}
if (pattern !== rawPattern) try {
createNonEnumerableProperty(result, "source", rawPattern === "" ? "(?:)" : rawPattern);
} catch (error) {
}
return result;
};
for (keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index; ) {
proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]);
}
RegExpPrototype.constructor = RegExpWrapper;
RegExpWrapper.prototype = RegExpPrototype;
defineBuiltIn(globalThis2, "RegExp", RegExpWrapper, { constructor: true });
}
var RegExpWrapper;
var keys;
var index;
setSpecies("RegExp");
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.dot-all.js
var require_es_regexp_dot_all = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.dot-all.js"() {
"use strict";
var DESCRIPTORS = require_descriptors();
var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all();
var classof = require_classof_raw();
var defineBuiltInAccessor = require_define_built_in_accessor();
var getInternalState = require_internal_state().get;
var RegExpPrototype = RegExp.prototype;
var $TypeError = TypeError;
if (DESCRIPTORS && UNSUPPORTED_DOT_ALL) {
defineBuiltInAccessor(RegExpPrototype, "dotAll", {
configurable: true,
get: function dotAll() {
if (this === RegExpPrototype) return;
if (classof(this) === "RegExp") {
return !!getInternalState(this).dotAll;
}
throw new $TypeError("Incompatible receiver, RegExp required");
}
});
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-exec.js
var require_regexp_exec = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-exec.js"(exports, module2) {
"use strict";
var call = require_function_call();
var uncurryThis = require_function_uncurry_this();
var toString = require_to_string();
var regexpFlags = require_regexp_flags();
var stickyHelpers = require_regexp_sticky_helpers();
var shared = require_shared();
var create = require_object_create();
var getInternalState = require_internal_state().get;
var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all();
var UNSUPPORTED_NCG = require_regexp_unsupported_ncg();
var nativeReplace = shared("native-string-replace", String.prototype.replace);
var nativeExec = RegExp.prototype.exec;
var patchedExec = nativeExec;
var charAt = uncurryThis("".charAt);
var indexOf = uncurryThis("".indexOf);
var replace = uncurryThis("".replace);
var stringSlice = uncurryThis("".slice);
var UPDATES_LAST_INDEX_WRONG = function() {
var re1 = /a/;
var re2 = /b*/g;
call(nativeExec, re1, "a");
call(nativeExec, re2, "a");
return re1.lastIndex !== 0 || re2.lastIndex !== 0;
}();
var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;
var NPCG_INCLUDED = /()??/.exec("")[1] !== void 0;
var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;
if (PATCH) {
patchedExec = function exec(string) {
var re = this;
var state = getInternalState(re);
var str = toString(string);
var raw = state.raw;
var result, reCopy, lastIndex, match, i, object, group;
if (raw) {
raw.lastIndex = re.lastIndex;
result = call(patchedExec, raw, str);
re.lastIndex = raw.lastIndex;
return result;
}
var groups = state.groups;
var sticky = UNSUPPORTED_Y && re.sticky;
var flags = call(regexpFlags, re);
var source = re.source;
var charsAdded = 0;
var strCopy = str;
if (sticky) {
flags = replace(flags, "y", "");
if (indexOf(flags, "g") === -1) {
flags += "g";
}
strCopy = stringSlice(str, re.lastIndex);
if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== "\n")) {
source = "(?: " + source + ")";
strCopy = " " + strCopy;
charsAdded++;
}
reCopy = new RegExp("^(?:" + source + ")", flags);
}
if (NPCG_INCLUDED) {
reCopy = new RegExp("^" + source + "$(?!\\s)", flags);
}
if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
match = call(nativeExec, sticky ? reCopy : re, strCopy);
if (sticky) {
if (match) {
match.input = stringSlice(match.input, charsAdded);
match[0] = stringSlice(match[0], charsAdded);
match.index = re.lastIndex;
re.lastIndex += match[0].length;
} else re.lastIndex = 0;
} else if (UPDATES_LAST_INDEX_WRONG && match) {
re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
}
if (NPCG_INCLUDED && match && match.length > 1) {
call(nativeReplace, match[0], reCopy, function() {
for (i = 1; i < arguments.length - 2; i++) {
if (arguments[i] === void 0) match[i] = void 0;
}
});
}
if (match && groups) {
match.groups = object = create(null);
for (i = 0; i < groups.length; i++) {
group = groups[i];
object[group[0]] = match[group[1]];
}
}
return match;
};
}
module2.exports = patchedExec;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.exec.js
var require_es_regexp_exec = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.exec.js"() {
"use strict";
var $2 = require_export();
var exec = require_regexp_exec();
$2({ target: "RegExp", proto: true, forced: /./.exec !== exec }, {
exec
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.sticky.js
var require_es_regexp_sticky = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.sticky.js"() {
"use strict";
var DESCRIPTORS = require_descriptors();
var MISSED_STICKY = require_regexp_sticky_helpers().MISSED_STICKY;
var classof = require_classof_raw();
var defineBuiltInAccessor = require_define_built_in_accessor();
var getInternalState = require_internal_state().get;
var RegExpPrototype = RegExp.prototype;
var $TypeError = TypeError;
if (DESCRIPTORS && MISSED_STICKY) {
defineBuiltInAccessor(RegExpPrototype, "sticky", {
configurable: true,
get: function sticky() {
if (this === RegExpPrototype) return;
if (classof(this) === "RegExp") {
return !!getInternalState(this).sticky;
}
throw new $TypeError("Incompatible receiver, RegExp required");
}
});
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.test.js
var require_es_regexp_test = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.test.js"() {
"use strict";
require_es_regexp_exec();
var $2 = require_export();
var call = require_function_call();
var isCallable = require_is_callable();
var anObject = require_an_object();
var toString = require_to_string();
var DELEGATES_TO_EXEC = function() {
var execCalled = false;
var re = /[ac]/;
re.exec = function() {
execCalled = true;
return /./.exec.apply(this, arguments);
};
return re.test("abc") === true && execCalled;
}();
var nativeTest = /./.test;
$2({ target: "RegExp", proto: true, forced: !DELEGATES_TO_EXEC }, {
test: function(S) {
var R = anObject(this);
var string = toString(S);
var exec = R.exec;
if (!isCallable(exec)) return call(nativeTest, R, string);
var result = call(exec, R, string);
if (result === null) return false;
anObject(result);
return true;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.to-string.js
var require_es_regexp_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.to-string.js"() {
"use strict";
var PROPER_FUNCTION_NAME = require_function_name().PROPER;
var defineBuiltIn = require_define_built_in();
var anObject = require_an_object();
var $toString = require_to_string();
var fails = require_fails();
var getRegExpFlags = require_regexp_get_flags();
var TO_STRING = "toString";
var RegExpPrototype = RegExp.prototype;
var nativeToString = RegExpPrototype[TO_STRING];
var NOT_GENERIC = fails(function() {
return nativeToString.call({ source: "a", flags: "b" }) !== "/a/b";
});
var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING;
if (NOT_GENERIC || INCORRECT_NAME) {
defineBuiltIn(RegExpPrototype, TO_STRING, function toString() {
var R = anObject(this);
var pattern = $toString(R.source);
var flags = $toString(getRegExpFlags(R));
return "/" + pattern + "/" + flags;
}, { unsafe: true });
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js
var require_fix_regexp_well_known_symbol_logic = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js"(exports, module2) {
"use strict";
require_es_regexp_exec();
var call = require_function_call();
var defineBuiltIn = require_define_built_in();
var regexpExec = require_regexp_exec();
var fails = require_fails();
var wellKnownSymbol = require_well_known_symbol();
var createNonEnumerableProperty = require_create_non_enumerable_property();
var SPECIES = wellKnownSymbol("species");
var RegExpPrototype = RegExp.prototype;
module2.exports = function(KEY, exec, FORCED, SHAM) {
var SYMBOL = wellKnownSymbol(KEY);
var DELEGATES_TO_SYMBOL = !fails(function() {
var O = {};
O[SYMBOL] = function() {
return 7;
};
return ""[KEY](O) !== 7;
});
var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function() {
var execCalled = false;
var re = /a/;
if (KEY === "split") {
re = {};
re.constructor = {};
re.constructor[SPECIES] = function() {
return re;
};
re.flags = "";
re[SYMBOL] = /./[SYMBOL];
}
re.exec = function() {
execCalled = true;
return null;
};
re[SYMBOL]("");
return !execCalled;
});
if (!DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || FORCED) {
var nativeRegExpMethod = /./[SYMBOL];
var methods = exec(SYMBOL, ""[KEY], function(nativeMethod, regexp, str, arg2, forceStringMethod) {
var $exec = regexp.exec;
if ($exec === regexpExec || $exec === RegExpPrototype.exec) {
if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) };
}
return { done: true, value: call(nativeMethod, str, regexp, arg2) };
}
return { done: false };
});
defineBuiltIn(String.prototype, KEY, methods[0]);
defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);
}
if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], "sham", true);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/advance-string-index.js
var require_advance_string_index = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/advance-string-index.js"(exports, module2) {
"use strict";
var charAt = require_string_multibyte().charAt;
module2.exports = function(S, index, unicode) {
return index + (unicode ? charAt(S, index).length : 1);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-substitution.js
var require_get_substitution = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-substitution.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var toObject = require_to_object();
var floor = Math.floor;
var charAt = uncurryThis("".charAt);
var replace = uncurryThis("".replace);
var stringSlice = uncurryThis("".slice);
var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g;
var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g;
module2.exports = function(matched, str, position, captures, namedCaptures, replacement) {
var tailPos = position + matched.length;
var m = captures.length;
var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
if (namedCaptures !== void 0) {
namedCaptures = toObject(namedCaptures);
symbols = SUBSTITUTION_SYMBOLS;
}
return replace(replacement, symbols, function(match, ch) {
var capture;
switch (charAt(ch, 0)) {
case "$":
return "$";
case "&":
return matched;
case "`":
return stringSlice(str, 0, position);
case "'":
return stringSlice(str, tailPos);
case "<":
capture = namedCaptures[stringSlice(ch, 1, -1)];
break;
default:
var n = +ch;
if (n === 0) return match;
if (n > m) {
var f = floor(n / 10);
if (f === 0) return match;
if (f <= m) return captures[f - 1] === void 0 ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);
return match;
}
capture = captures[n - 1];
}
return capture === void 0 ? "" : capture;
});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-exec-abstract.js
var require_regexp_exec_abstract = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-exec-abstract.js"(exports, module2) {
"use strict";
var call = require_function_call();
var anObject = require_an_object();
var isCallable = require_is_callable();
var classof = require_classof_raw();
var regexpExec = require_regexp_exec();
var $TypeError = TypeError;
module2.exports = function(R, S) {
var exec = R.exec;
if (isCallable(exec)) {
var result = call(exec, R, S);
if (result !== null) anObject(result);
return result;
}
if (classof(R) === "RegExp") return call(regexpExec, R, S);
throw new $TypeError("RegExp#exec called on incompatible receiver");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.replace.js
var require_es_string_replace = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.replace.js"() {
"use strict";
var apply = require_function_apply();
var call = require_function_call();
var uncurryThis = require_function_uncurry_this();
var fixRegExpWellKnownSymbolLogic = require_fix_regexp_well_known_symbol_logic();
var fails = require_fails();
var anObject = require_an_object();
var isCallable = require_is_callable();
var isNullOrUndefined = require_is_null_or_undefined();
var toIntegerOrInfinity = require_to_integer_or_infinity();
var toLength = require_to_length();
var toString = require_to_string();
var requireObjectCoercible = require_require_object_coercible();
var advanceStringIndex = require_advance_string_index();
var getMethod = require_get_method();
var getSubstitution = require_get_substitution();
var regExpExec = require_regexp_exec_abstract();
var wellKnownSymbol = require_well_known_symbol();
var REPLACE = wellKnownSymbol("replace");
var max = Math.max;
var min = Math.min;
var concat = uncurryThis([].concat);
var push = uncurryThis([].push);
var stringIndexOf = uncurryThis("".indexOf);
var stringSlice = uncurryThis("".slice);
var maybeToString = function(it) {
return it === void 0 ? it : String(it);
};
var REPLACE_KEEPS_$0 = function() {
return "a".replace(/./, "$0") === "$0";
}();
var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = function() {
if (/./[REPLACE]) {
return /./[REPLACE]("a", "$0") === "";
}
return false;
}();
var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function() {
var re = /./;
re.exec = function() {
var result = [];
result.groups = { a: "7" };
return result;
};
return "".replace(re, "$<a>") !== "7";
});
fixRegExpWellKnownSymbolLogic("replace", function(_, nativeReplace, maybeCallNative) {
var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? "$" : "$0";
return [
// `String.prototype.replace` method
// https://tc39.es/ecma262/#sec-string.prototype.replace
function replace(searchValue, replaceValue) {
var O = requireObjectCoercible(this);
var replacer = isNullOrUndefined(searchValue) ? void 0 : getMethod(searchValue, REPLACE);
return replacer ? call(replacer, searchValue, O, replaceValue) : call(nativeReplace, toString(O), searchValue, replaceValue);
},
// `RegExp.prototype[@@replace]` method
// https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
function(string, replaceValue) {
var rx = anObject(this);
var S = toString(string);
if (typeof replaceValue == "string" && stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 && stringIndexOf(replaceValue, "$<") === -1) {
var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
if (res.done) return res.value;
}
var functionalReplace = isCallable(replaceValue);
if (!functionalReplace) replaceValue = toString(replaceValue);
var global2 = rx.global;
var fullUnicode;
if (global2) {
fullUnicode = rx.unicode;
rx.lastIndex = 0;
}
var results = [];
var result;
while (true) {
result = regExpExec(rx, S);
if (result === null) break;
push(results, result);
if (!global2) break;
var matchStr = toString(result[0]);
if (matchStr === "") rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
}
var accumulatedResult = "";
var nextSourcePosition = 0;
for (var i = 0; i < results.length; i++) {
result = results[i];
var matched = toString(result[0]);
var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);
var captures = [];
var replacement;
for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));
var namedCaptures = result.groups;
if (functionalReplace) {
var replacerArgs = concat([matched], captures, position, S);
if (namedCaptures !== void 0) push(replacerArgs, namedCaptures);
replacement = toString(apply(replaceValue, void 0, replacerArgs));
} else {
replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
}
if (position >= nextSourcePosition) {
accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;
nextSourcePosition = position + matched.length;
}
}
return accumulatedResult + stringSlice(S, nextSourcePosition);
}
];
}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/whitespaces.js
var require_whitespaces = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/whitespaces.js"(exports, module2) {
"use strict";
module2.exports = " \n\v\f\r \u2028\u2029\uFEFF";
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-trim.js
var require_string_trim = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-trim.js"(exports, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var requireObjectCoercible = require_require_object_coercible();
var toString = require_to_string();
var whitespaces = require_whitespaces();
var replace = uncurryThis("".replace);
var ltrim = RegExp("^[" + whitespaces + "]+");
var rtrim = RegExp("(^|[^" + whitespaces + "])[" + whitespaces + "]+$");
var createMethod = function(TYPE) {
return function($this) {
var string = toString(requireObjectCoercible($this));
if (TYPE & 1) string = replace(string, ltrim, "");
if (TYPE & 2) string = replace(string, rtrim, "$1");
return string;
};
};
module2.exports = {
// `String.prototype.{ trimLeft, trimStart }` methods
// https://tc39.es/ecma262/#sec-string.prototype.trimstart
start: createMethod(1),
// `String.prototype.{ trimRight, trimEnd }` methods
// https://tc39.es/ecma262/#sec-string.prototype.trimend
end: createMethod(2),
// `String.prototype.trim` method
// https://tc39.es/ecma262/#sec-string.prototype.trim
trim: createMethod(3)
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-trim-forced.js
var require_string_trim_forced = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-trim-forced.js"(exports, module2) {
"use strict";
var PROPER_FUNCTION_NAME = require_function_name().PROPER;
var fails = require_fails();
var whitespaces = require_whitespaces();
var non = "
";
module2.exports = function(METHOD_NAME) {
return fails(function() {
return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() !== non || PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME;
});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.trim.js
var require_es_string_trim = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.trim.js"() {
"use strict";
var $2 = require_export();
var $trim = require_string_trim().trim;
var forcedStringTrimMethod = require_string_trim_forced();
$2({ target: "String", proto: true, forced: forcedStringTrimMethod("trim") }, {
trim: function trim() {
return $trim(this);
}
});
}
});
// dist/Editform_Attribution/Editform_Attribution.js
require_es_symbol();
require_es_symbol_description();
require_es_symbol_iterator();
require_es_error_cause();
require_es_error_to_string();
require_es_array_from();
require_es_array_iterator();
require_es_array_slice();
require_es_string_iterator();
init_DOMTokenList2();
init_DOMTokenList_prototype_replace();
require_DocumentFragment();
init_DocumentFragment_prototype_prepend();
init_Element_prototype_prepend();
init_DocumentFragment_prototype_append();
init_Element_prototype_append();
init_Element_prototype_after();
init_CharacterData_prototype_after();
require_es_array_concat();
require_es_array_find();
require_es_array_join();
require_es_iterator_constructor();
require_es_iterator_find();
require_es_object_to_string();
require_es_regexp_constructor();
require_es_regexp_dot_all();
require_es_regexp_exec();
require_es_regexp_sticky();
require_es_regexp_test();
require_es_regexp_to_string();
require_es_string_replace();
require_es_string_trim();
function _createForOfIteratorHelper(r, e) {
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (!t) {
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
t && (r = t);
var _n = 0, F = function F2() {
};
return { s: F, n: function n() {
return _n >= r.length ? { done: true } : { done: false, value: r[_n++] };
}, e: function e2(r2) {
throw r2;
}, f: F };
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var o, a = true, u = false;
return { s: function s() {
t = t.call(r);
}, n: function n() {
var r2 = t.next();
return a = r2.done, r2;
}, e: function e2(r2) {
u = true, o = r2;
}, f: function f() {
try {
a || null == t.return || t.return();
} finally {
if (u) throw o;
}
} };
}
function _unsupportedIterableToArray(r, a) {
if (r) {
if ("string" == typeof r) return _arrayLikeToArray(r, a);
var t = {}.toString.call(r).slice(8, -1);
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
}
}
function _arrayLikeToArray(r, a) {
(null == a || a > r.length) && (a = r.length);
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
return n;
}
//! src/Editform_Attribution/options.json
var configKey = "gadget-Editform_Attribution__Initialized";
var configKeyVe = "gadget-Editform_Attribution__Initialized__VE";
var inputId = "editform_attribution";
var targetWikiEditor = ".editCheckboxes .oo-ui-horizontalLayout";
//! src/Editform_Attribution/modules/util/Editform_Attribution.module.less
var formWrap = "Editform-Attribution-module__formWrap_DP9Z0a__4100";
//! src/Editform_Attribution/modules/i18n.ts
var import_ext_gadget = require("ext.gadget.i18n");
var getI18nMessages = function getI18nMessages2() {
return {
"Add to Edit Summary": (0, import_ext_gadget.localize)({
en: "Add to Edit Summary",
"zh-hans": "添加至编辑摘要",
"zh-hant": "添加至編輯摘要"
}),
Source: (0, import_ext_gadget.localize)({
en: "Source",
"zh-hans": "内容来源",
"zh-hant": "內容來源"
}),
License: (0, import_ext_gadget.localize)({
en: "License",
"zh-hans": "许可证",
"zh-hant": "許可證"
}),
"Other License": (0, import_ext_gadget.localize)({
en: "Other license",
"zh-hans": "其他许可证",
"zh-hant": "其他許可證"
}),
"Please Claim Sources and Licenses": (0, import_ext_gadget.localize)({
en: "If edit content adds any third-party content, please add the source and license of the third-party content separately to the editing summary.",
"zh-hans": "若您向编辑内容中添加了第三方撰写的内容,请将相关第三方内容的来源、许可条款在编辑摘要中分条声明",
"zh-hant": "若您向編輯內容中添加了第三方撰写的內容,請將相关第三方內容的來源、許可條款在編輯摘要中分條聲明"
}),
"Replace With License": (0, import_ext_gadget.localize)({
en: " (Replace with license name and URL)",
"zh-hans": "(替换为许可证名称和网址)",
"zh-hant": "(替換爲許可證名稱和網址)"
})
};
};
var i18nMessages = getI18nMessages();
var getMessage = function getMessage2(key) {
return i18nMessages[key] || key;
};
//! src/Editform_Attribution/modules/constant.ts
var LICENSES = [{
label: "CC BY-SA 4.0",
data: "cc-by-sa:4.0"
}, {
label: "CC BY-SA 3.0",
data: "cc-by-sa:3.0"
}, {
label: "CC BY-SA 3.0 CN",
data: "cc-by-sa:3.0/cn"
}, {
label: "CC BY 4.0",
data: "cc-by:4.0"
}, {
label: "CC BY 3.0",
data: "cc-by:3.0"
}, {
label: "CC BY 3.0 CN",
data: "cc-by:3.0/cn"
}, {
label: "CC0-1.0",
data: "cc-zero:1.0"
}, {
label: "KOGL Type I: Attribution",
data: "https://www.kogl.or.kr/info/licenseType1.do"
}, {
label: getMessage("Other License"),
data: getMessage("Replace With License")
}];
var VALID_INTERWIKI_PREFIX = ["cc-by", "cc-by-sa", "cc-zero", "cc0", "commons", "enwiki", "incubator", "incubator-wp-mnc", "incubator-wt-mnc", "iso639-3", "lexemes", "licence", "licencewiki", "license", "login", "mediawikiwiki", "mozillawiki", "mw", "oldwikisource", "pmid", "rev", "testwikidata", "v", "voy", "wiki", "wikibooks", "wikidata", "wikifunctions", "wikinews", "wikipedia", "wikiquote", "wikisource", "wikiversity", "wikivoyage", "wikt", "wiktionary", "zhwiki", "zhwikisource", "zhwikivoyage"];
//! src/Editform_Attribution/modules/util/getLink.ts
var getLink = function getLink2(_ref) {
var link = _ref.link, text = _ref.text;
var VALID_INTERWIKI_LINK_REGEX = new RegExp("^:?(".concat(VALID_INTERWIKI_PREFIX.join("|"), ")"), "i");
if (VALID_INTERWIKI_LINK_REGEX.test(link)) {
link = ":".concat(link.replace(/^:/, ""));
if (text) {
return "[[".concat(link, "|").concat(text, "]]");
}
return "[[".concat(link, "]]");
}
return encodeURI(decodeURI(link));
};
//! src/Editform_Attribution/modules/util/getAttribution.ts
var getAttribution = function getAttribution2(fieldSetLayout) {
var attributions = [];
var getSelectedItem = function getSelectedItem2(dropdown) {
var selectedItem = dropdown.getMenu().findSelectedItem();
return selectedItem;
};
var getSelectedValue = function getSelectedValue2(dropdown) {
var selectedItem = getSelectedItem(dropdown);
return selectedItem ? selectedItem.getData() : void 0;
};
var getSelectedLabel = function getSelectedLabel2(dropdown) {
var selectedItem = getSelectedItem(dropdown);
return selectedItem ? selectedItem.getLabel() : void 0;
};
var _iterator = _createForOfIteratorHelper(fieldSetLayout.getItems()), _step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done; ) {
var attributionFieldset = _step.value;
var attribution = {};
var _iterator2 = _createForOfIteratorHelper(attributionFieldset.getItems()), _step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
var fieldLayout = _step2.value;
var field = fieldLayout.getField();
if (field.supports("getValue")) {
var link = field.getValue();
if (link) {
attribution.source = getLink({
link
});
}
} else if (field.supports("getMenu")) {
var _link = getSelectedValue(field);
if (_link) {
var text = getSelectedLabel(field);
if (text) {
attribution.license = getLink({
link: _link,
text
});
} else {
attribution.license = getLink({
link: _link
});
}
}
}
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
if (attribution.source && attribution.license) {
attributions[attributions.length] = "".concat(getMessage("Source"), ": ").concat(attribution.source, " (").concat(getMessage("License"), ": ").concat(attribution.license, ") ");
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
return attributions.join(" ");
};
var updateWpAttribution = function updateWpAttribution2(_ref2) {
var $body = _ref2.$body, parentFieldSet = _ref2.parentFieldSet;
var wpAttribution = "";
var $wpAttribution = $("<input>").attr({
id: "wpAttribution",
name: "wpAttribution",
type: "hidden",
value: ""
});
var $originwpAttribution = $body.find("input[name=wpAttribution]");
if (!$originwpAttribution.length) {
$body.prepend($wpAttribution);
}
wpAttribution = getAttribution(parentFieldSet);
$originwpAttribution.val(wpAttribution);
};
//! src/Editform_Attribution/modules/util/appendTextToSummary.ts
var appendTextToSummary = function appendTextToSummary2(_ref3) {
var _$wpSummary$val;
var customSummary = _ref3.customSummary, $wpSummary = _ref3.$wpSummary;
var originSummary = (_$wpSummary$val = $wpSummary.val()) !== null && _$wpSummary$val !== void 0 ? _$wpSummary$val : "";
$wpSummary.val(originSummary.trim() ? "".concat(originSummary, " ").concat(customSummary) : customSummary).trigger("change");
};
//! src/Editform_Attribution/modules/util/generateTextInputWithDropdown.ts
var getTextInput = function getTextInput2() {
var textInput = new OO.ui.TextInputWidget({
placeholder: getMessage("Source")
});
for (var _len = arguments.length, onChanges = new Array(_len), _key = 0; _key < _len; _key++) {
onChanges[_key] = arguments[_key];
}
for (var _i = 0, _onChanges = onChanges; _i < _onChanges.length; _i++) {
var onChange = _onChanges[_i];
textInput.on("change", onChange);
}
return textInput;
};
var getDropDown = function getDropDown2() {
var dropdown = new OO.ui.DropdownWidget({
label: getMessage("License")
});
var menuOptions = [];
for (var _i2 = 0, _LICENSES = LICENSES; _i2 < _LICENSES.length; _i2++) {
var _LICENSES$_i = _LICENSES[_i2], data = _LICENSES$_i.data, label = _LICENSES$_i.label;
menuOptions[menuOptions.length] = new OO.ui.MenuOptionWidget({
data,
label
});
}
dropdown.getMenu().addItems(menuOptions);
for (var _len2 = arguments.length, onSelects = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
onSelects[_key2] = arguments[_key2];
}
for (var _i3 = 0, _onSelects = onSelects; _i3 < _onSelects.length; _i3++) {
var onSelect = _onSelects[_i3];
dropdown.getMenu().on("select", onSelect);
}
return dropdown;
};
var getAddItemButton = function getAddItemButton2() {
var addItemButton = new OO.ui.ButtonInputWidget({
label: getMessage("Add to Edit Summary")
});
for (var _len3 = arguments.length, onClicks = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
onClicks[_key3] = arguments[_key3];
}
for (var _i4 = 0, _onClicks = onClicks; _i4 < _onClicks.length; _i4++) {
var onClick = _onClicks[_i4];
addItemButton.on("click", onClick);
}
return addItemButton;
};
var generateTextInputWithDropdown = function generateTextInputWithDropdown2(_ref4) {
var $body = _ref4.$body, $wpSummary = _ref4.$wpSummary;
var initialFieldset = new OO.ui.FieldsetLayout();
var parentFieldSet = new OO.ui.FieldsetLayout({
label: getMessage("Please Claim Sources and Licenses")
});
var inputOnChange = function inputOnChange2() {
updateWpAttribution({
$body,
parentFieldSet
});
};
var textInput = getTextInput(inputOnChange);
var dropDown = getDropDown(inputOnChange);
var addItemOnClick = function addItemOnClick2() {
var wpAttribution = "";
var $wpAttribution = $("<input>").attr({
id: "wpAttribution",
name: "wpAttribution",
type: "hidden",
value: ""
});
var $originwpAttribution = $body.find("input[name=wpAttribution]");
if (!$originwpAttribution.length) {
$body.prepend($wpAttribution);
}
wpAttribution = getAttribution(parentFieldSet);
$originwpAttribution.val(wpAttribution);
appendTextToSummary({
customSummary: $originwpAttribution.val() ? "[".concat($originwpAttribution.val(), "]") : "",
$wpSummary
});
textInput.setValue("");
dropDown.getMenu().unselectItem();
};
var addItemButton = getAddItemButton(addItemOnClick);
initialFieldset.addItems([new OO.ui.FieldLayout(textInput, {
label: getMessage("Source"),
align: "inline"
}), new OO.ui.FieldLayout(dropDown, {
label: getMessage("License"),
align: "inline"
}), new OO.ui.FieldLayout(addItemButton, {
align: "inline"
})]);
parentFieldSet.addItems([initialFieldset]);
return parentFieldSet;
};
//! src/Editform_Attribution/modules/util/generateLayout.ts
var generateVisualEditorLayout = function generateVisualEditorLayout2(_ref5) {
var $body = _ref5.$body;
var target = window.ve.init.target;
var $wpSummary = target.saveDialog.editSummaryInput.$input;
var textInputWithDropdown = generateTextInputWithDropdown({
$body,
$wpSummary
});
var $layout = $("<div>").attr("id", inputId).addClass(formWrap);
$layout.append(textInputWithDropdown.$element);
return $layout;
};
var generateWikiEditorLayout = function generateWikiEditorLayout2(_ref6) {
var $body = _ref6.$body, $editForm = _ref6.$editForm;
var $wpSummary = $editForm.find("input[name=wpSummary]");
var textInputWithDropdown = generateTextInputWithDropdown({
$body,
$wpSummary
});
var $layout = $("<div>").attr("id", inputId).addClass(formWrap);
$layout.append(textInputWithDropdown.$element);
return $layout;
};
//! src/Editform_Attribution/modules/processVisualEditor.ts
var processVisualEditor = function processVisualEditor2(_ref7) {
var $body = _ref7.$body;
if (mw.config.get(configKeyVe)) {
return;
}
var target = window.ve.init.target;
var saveDialog = target.saveDialog;
var $saveOptions = saveDialog.$saveOptions;
if (!$saveOptions.length) {
return;
}
mw.config.set(configKeyVe, true);
var $layout = generateVisualEditorLayout({
$body
});
if (!$body.find("#".concat(inputId)).length) {
$saveOptions.append($layout);
}
mw.hook("ve.activationComplete").add(function() {
if (mw.config.get(configKeyVe)) {
mw.config.set(configKeyVe, false);
}
});
};
//! src/Editform_Attribution/modules/processWikiEditor.ts
var processWikiEditor = function processWikiEditor2(_ref8) {
var $body = _ref8.$body, $editForm = _ref8.$editForm;
if (mw.config.get(configKey)) {
return;
}
var $target = $editForm.find(targetWikiEditor);
if (!$target.length) {
return;
}
mw.config.set(configKey, true);
var $layout = generateWikiEditorLayout({
$body,
$editForm
});
if (!$body.find("#".concat(inputId)).length) {
$target.after($layout);
}
};
//! src/Editform_Attribution/Editform_Attribution.ts
void $.ready.then(function editForm() {
var $body = $("body");
mw.hook("wikipage.editform").add(function($editForm) {
processWikiEditor({
$body,
$editForm
});
});
mw.hook("ve.saveDialog.stateChanged").add(function() {
processVisualEditor({
$body
});
});
});
})();
/* </nowiki> */
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93cmFwLWVycm9yLWNvbnN0cnVjdG9yLXdpdGgtY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19ET01Ub2tlbkxpc3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RPTVRva2VuTGlzdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZXBsYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9Eb2N1bWVudEZyYWdtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnByZXBlbmQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0VsZW1lbnQucHJvdG90eXBlLnByZXBlbmQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLmFwcGVuZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9FbGVtZW50LnByb3RvdHlwZS5hZnRlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuYWZ0ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5maW5kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZG90LWFsbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5zdGlja3kuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRlc3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiLCAic3JjL0VkaXRmb3JtX0F0dHJpYnV0aW9uL29wdGlvbnMuanNvbiIsICJzcmMvRWRpdGZvcm1fQXR0cmlidXRpb24vbW9kdWxlcy91dGlsL0VkaXRmb3JtX0F0dHJpYnV0aW9uLm1vZHVsZS5sZXNzIiwgInNyYy9FZGl0Zm9ybV9BdHRyaWJ1dGlvbi9tb2R1bGVzL2kxOG4udHMiLCAic3JjL0VkaXRmb3JtX0F0dHJpYnV0aW9uL21vZHVsZXMvY29uc3RhbnQudHMiLCAic3JjL0VkaXRmb3JtX0F0dHJpYnV0aW9uL21vZHVsZXMvdXRpbC9nZXRMaW5rLnRzIiwgInNyYy9FZGl0Zm9ybV9BdHRyaWJ1dGlvbi9tb2R1bGVzL3V0aWwvZ2V0QXR0cmlidXRpb24udHMiLCAic3JjL0VkaXRmb3JtX0F0dHJpYnV0aW9uL21vZHVsZXMvdXRpbC9hcHBlbmRUZXh0VG9TdW1tYXJ5LnRzIiwgInNyYy9FZGl0Zm9ybV9BdHRyaWJ1dGlvbi9tb2R1bGVzL3V0aWwvZ2VuZXJhdGVUZXh0SW5wdXRXaXRoRHJvcGRvd24udHMiLCAic3JjL0VkaXRmb3JtX0F0dHJpYnV0aW9uL21vZHVsZXMvdXRpbC9nZW5lcmF0ZUxheW91dC50cyIsICJzcmMvRWRpdGZvcm1fQXR0cmlidXRpb24vbW9kdWxlcy9wcm9jZXNzVmlzdWFsRWRpdG9yLnRzIiwgInNyYy9FZGl0Zm9ybV9BdHRyaWJ1dGlvbi9tb2R1bGVzL3Byb2Nlc3NXaWtpRWRpdG9yLnRzIiwgInNyYy9FZGl0Zm9ybV9BdHRyaWJ1dGlvbi9FZGl0Zm9ybV9BdHRyaWJ1dGlvbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJlxuICAhU3ltYm9sLnNoYW0gJiZcbiAgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjQxLjAnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjQxLjAvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gJiYgZ2xvYmFsVGhpc1tUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWFzc2lnbm1lbnQgLS0gYXZvaWQgbWVtb3J5IGxlYWtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKFtdLnNsaWNlKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBhcnJheVNsaWNlKHdpbmRvd05hbWVzKTtcbiAgfVxufTtcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIGNsYXNzb2YoaXQpID09PSAnV2luZG93J1xuICAgID8gZ2V0V2luZG93TmFtZXMoaXQpXG4gICAgOiAkZ2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5nZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3IuZ2V0LCBuYW1lLCB7IGdldHRlcjogdHJ1ZSB9KTtcbiAgaWYgKGRlc2NyaXB0b3Iuc2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLnNldCwgbmFtZSwgeyBzZXR0ZXI6IHRydWUgfSk7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpcztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIFRBRywgU1RBVElDKSB7XG4gIGlmICh0YXJnZXQgJiYgIVNUQVRJQykgdGFyZ2V0ID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgaWYgKHRhcmdldCAmJiAhaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgW10sIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSAkQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsQXJyYXkpKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbCAmJiAkU3ltYm9sW1BST1RPVFlQRV07XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbFRoaXMuUmFuZ2VFcnJvcjtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsVGhpcy5RT2JqZWN0O1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoTywgUCwgQXR0cmlidXRlcykge1xuICB2YXIgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIFApO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcikgZGVsZXRlIE9iamVjdFByb3RvdHlwZVtQXTtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yICYmIE8gIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZSwgUCwgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcik7XG4gIH1cbn07XG5cbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9PSA3O1xufSkgPyBmYWxsYmFja0RlZmluZVByb3BlcnR5IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZShTeW1ib2xQcm90b3R5cGUpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmF0aXZlT2JqZWN0Q3JlYXRlKG51bGwpKSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNPd24oTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwoJHByb3BlcnR5SXNFbnVtZXJhYmxlLCBwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IGNhbGwobmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUsIHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzT3duKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHB1c2gocmVzdWx0LCBBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmIChpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICFhcmd1bWVudHMubGVuZ3RoIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogJHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHRhZyA9IHVpZChkZXNjcmlwdGlvbik7XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyICR0aGlzID0gdGhpcyA9PT0gdW5kZWZpbmVkID8gZ2xvYmFsVGhpcyA6IHRoaXM7XG4gICAgICBpZiAoJHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSkgY2FsbChzZXR0ZXIsIE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXNPd24oJHRoaXMsIEhJRERFTikgJiYgaGFzT3duKCR0aGlzW0hJRERFTl0sIHRhZykpICR0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0U3ltYm9sRGVzY3JpcHRvcigkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgICBmYWxsYmFja0RlZmluZVByb3BlcnR5KCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIFVTRV9TRVRURVIpIHNldFN5bWJvbERlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6IHNldHRlciB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcsIGRlc2NyaXB0aW9uKTtcbiAgfTtcblxuICBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sW1BST1RPVFlQRV07XG5cbiAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnRhZztcbiAgfSk7XG5cbiAgZGVmaW5lQnVpbHRJbigkU3ltYm9sLCAnd2l0aG91dFNldHRlcicsIGZ1bmN0aW9uIChkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiB3cmFwKHVpZChkZXNjcmlwdGlvbiksIGRlc2NyaXB0aW9uKTtcbiAgfSk7XG5cbiAgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgZGVmaW5lUHJvcGVydGllc01vZHVsZS5mID0gJGRlZmluZVByb3BlcnRpZXM7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUlTX1BVUkUpIHtcbiAgICAgIGRlZmluZUJ1aWx0SW4oT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gZmFsc2U7IH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCBTWU1CT0wpO1xuXG5oaWRkZW5LZXlzW0hJRERFTl0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHNhZmUgKi9cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJiAhIVN5bWJvbFsnZm9yJ10gJiYgISFTeW1ib2wua2V5Rm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5mb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoa2V5KTtcbiAgICBpZiAoaGFzT3duKFN0cmluZ1RvU3ltYm9sUmVnaXN0cnksIHN0cmluZykpIHJldHVybiBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ107XG4gICAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKHN0cmluZyk7XG4gICAgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddID0gc3ltYm9sO1xuICAgIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltYm9sXSA9IHN0cmluZztcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wua2V5Rm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmtleWZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IG5ldyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoc3ltKSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG4gICAgaWYgKGhhc093bihTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5LCBzeW0pKSByZXR1cm4gU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1dO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCwgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG4iLCAiLy8gYFN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25gIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLmRlc2NyaXB0aW9uXG4ndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcblxudmFyIE5hdGl2ZVN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9IE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wucHJvdG90eXBlO1xuXG5pZiAoREVTQ1JJUFRPUlMgJiYgaXNDYWxsYWJsZShOYXRpdmVTeW1ib2wpICYmICghKCdkZXNjcmlwdGlvbicgaW4gU3ltYm9sUHJvdG90eXBlKSB8fFxuICAvLyBTYWZhcmkgMTIgYnVnXG4gIE5hdGl2ZVN5bWJvbCgpLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWRcbikpIHtcbiAgdmFyIEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSA9IHt9O1xuICAvLyB3cmFwIFN5bWJvbCBjb25zdHJ1Y3RvciBmb3IgY29ycmVjdCB3b3JrIHdpdGggdW5kZWZpbmVkIGRlc2NyaXB0aW9uXG4gIHZhciBTeW1ib2xXcmFwcGVyID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIHZhciBkZXNjcmlwdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgcmVzdWx0ID0gaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9pbmNvbnNpc3RlbnQtZnVuY3Rpb24tY2FsbCAtLSBva1xuICAgICAgPyBuZXcgTmF0aXZlU3ltYm9sKGRlc2NyaXB0aW9uKVxuICAgICAgLy8gaW4gRWRnZSAxMywgU3RyaW5nKFN5bWJvbCh1bmRlZmluZWQpKSA9PT0gJ1N5bWJvbCh1bmRlZmluZWQpJ1xuICAgICAgOiBkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkID8gTmF0aXZlU3ltYm9sKCkgOiBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pO1xuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gJycpIEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZVtyZXN1bHRdID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoU3ltYm9sV3JhcHBlciwgTmF0aXZlU3ltYm9sKTtcbiAgU3ltYm9sV3JhcHBlci5wcm90b3R5cGUgPSBTeW1ib2xQcm90b3R5cGU7XG4gIFN5bWJvbFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN5bWJvbFdyYXBwZXI7XG5cbiAgdmFyIE5BVElWRV9TWU1CT0wgPSBTdHJpbmcoTmF0aXZlU3ltYm9sKCdkZXNjcmlwdGlvbiBkZXRlY3Rpb24nKSkgPT09ICdTeW1ib2woZGVzY3JpcHRpb24gZGV0ZWN0aW9uKSc7XG4gIHZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2xQcm90b3R5cGUudmFsdWVPZik7XG4gIHZhciBzeW1ib2xEZXNjcmlwdGl2ZVN0cmluZyA9IHVuY3VycnlUaGlzKFN5bWJvbFByb3RvdHlwZS50b1N0cmluZyk7XG4gIHZhciByZWdleHAgPSAvXlN5bWJvbFxcKCguKilcXClbXildKyQvO1xuICB2YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xuICB2YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgdmFyIHN5bWJvbCA9IHRoaXNTeW1ib2xWYWx1ZSh0aGlzKTtcbiAgICAgIGlmIChoYXNPd24oRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlLCBzeW1ib2wpKSByZXR1cm4gJyc7XG4gICAgICB2YXIgc3RyaW5nID0gc3ltYm9sRGVzY3JpcHRpdmVTdHJpbmcoc3ltYm9sKTtcbiAgICAgIHZhciBkZXNjID0gTkFUSVZFX1NZTUJPTCA/IHN0cmluZ1NsaWNlKHN0cmluZywgNywgLTEpIDogcmVwbGFjZShzdHJpbmcsIHJlZ2V4cCwgJyQxJyk7XG4gICAgICByZXR1cm4gZGVzYyA9PT0gJycgPyB1bmRlZmluZWQgOiBkZXNjO1xuICAgIH1cbiAgfSk7XG5cbiAgJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgU3ltYm9sOiBTeW1ib2xXcmFwcGVyXG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGFyZ3VtZW50KSB8fCBhcmd1bWVudCA9PT0gbnVsbDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc1Bvc3NpYmxlUHJvdG90eXBlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIE87XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUYXJnZXQsIFNvdXJjZSwga2V5KSB7XG4gIGtleSBpbiBUYXJnZXQgfHwgZGVmaW5lUHJvcGVydHkoVGFyZ2V0LCBrZXksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTb3VyY2Vba2V5XTsgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBTb3VyY2Vba2V5XSA9IGl0OyB9XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSwgc29uYXJqcy9zbG93LXJlZ2V4IC0tIHNhZmVcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSyAmJiB0eXBlb2Ygc3RhY2sgPT0gJ3N0cmluZycgJiYgISRFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdhJyk7XG4gIGlmICghKCdzdGFjaycgaW4gZXJyb3IpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIDcpKTtcbiAgcmV0dXJuIGVycm9yLnN0YWNrICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXInKTtcbnZhciBFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZScpO1xuXG4vLyBub24tc3RhbmRhcmQgVjhcbnZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlcnJvciwgQywgc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkge1xuICAgIGlmIChjYXB0dXJlU3RhY2tUcmFjZSkgY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIEMpO1xuICAgIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjbGVhckVycm9yU3RhY2soc3RhY2ssIGRyb3BFbnRyaWVzKSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIHByb3h5QWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3InKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xudmFyIGluc3RhbGxFcnJvckNhdXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UnKTtcbnZhciBpbnN0YWxsRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoRlVMTF9OQU1FLCB3cmFwcGVyLCBGT1JDRUQsIElTX0FHR1JFR0FURV9FUlJPUikge1xuICB2YXIgU1RBQ0tfVFJBQ0VfTElNSVQgPSAnc3RhY2tUcmFjZUxpbWl0JztcbiAgdmFyIE9QVElPTlNfUE9TSVRJT04gPSBJU19BR0dSRUdBVEVfRVJST1IgPyAyIDogMTtcbiAgdmFyIHBhdGggPSBGVUxMX05BTUUuc3BsaXQoJy4nKTtcbiAgdmFyIEVSUk9SX05BTUUgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gIHZhciBPcmlnaW5hbEVycm9yID0gZ2V0QnVpbHRJbi5hcHBseShudWxsLCBwYXRoKTtcblxuICBpZiAoIU9yaWdpbmFsRXJyb3IpIHJldHVybjtcblxuICB2YXIgT3JpZ2luYWxFcnJvclByb3RvdHlwZSA9IE9yaWdpbmFsRXJyb3IucHJvdG90eXBlO1xuXG4gIC8vIFY4IDkuMy0gYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyMDA2XG4gIGlmICghSVNfUFVSRSAmJiBoYXNPd24oT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgJ2NhdXNlJykpIGRlbGV0ZSBPcmlnaW5hbEVycm9yUHJvdG90eXBlLmNhdXNlO1xuXG4gIGlmICghRk9SQ0VEKSByZXR1cm4gT3JpZ2luYWxFcnJvcjtcblxuICB2YXIgQmFzZUVycm9yID0gZ2V0QnVpbHRJbignRXJyb3InKTtcblxuICB2YXIgV3JhcHBlZEVycm9yID0gd3JhcHBlcihmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBtZXNzYWdlID0gbm9ybWFsaXplU3RyaW5nQXJndW1lbnQoSVNfQUdHUkVHQVRFX0VSUk9SID8gYiA6IGEsIHVuZGVmaW5lZCk7XG4gICAgdmFyIHJlc3VsdCA9IElTX0FHR1JFR0FURV9FUlJPUiA/IG5ldyBPcmlnaW5hbEVycm9yKGEpIDogbmV3IE9yaWdpbmFsRXJyb3IoKTtcbiAgICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0LCAnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgIGluc3RhbGxFcnJvclN0YWNrKHJlc3VsdCwgV3JhcHBlZEVycm9yLCByZXN1bHQuc3RhY2ssIDIpO1xuICAgIGlmICh0aGlzICYmIGlzUHJvdG90eXBlT2YoT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgdGhpcykpIGluaGVyaXRJZlJlcXVpcmVkKHJlc3VsdCwgdGhpcywgV3JhcHBlZEVycm9yKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IE9QVElPTlNfUE9TSVRJT04pIGluc3RhbGxFcnJvckNhdXNlKHJlc3VsdCwgYXJndW1lbnRzW09QVElPTlNfUE9TSVRJT05dKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICBXcmFwcGVkRXJyb3IucHJvdG90eXBlID0gT3JpZ2luYWxFcnJvclByb3RvdHlwZTtcblxuICBpZiAoRVJST1JfTkFNRSAhPT0gJ0Vycm9yJykge1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoV3JhcHBlZEVycm9yLCBCYXNlRXJyb3IpO1xuICAgIGVsc2UgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhXcmFwcGVkRXJyb3IsIEJhc2VFcnJvciwgeyBuYW1lOiB0cnVlIH0pO1xuICB9IGVsc2UgaWYgKERFU0NSSVBUT1JTICYmIFNUQUNLX1RSQUNFX0xJTUlUIGluIE9yaWdpbmFsRXJyb3IpIHtcbiAgICBwcm94eUFjY2Vzc29yKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvciwgU1RBQ0tfVFJBQ0VfTElNSVQpO1xuICAgIHByb3h5QWNjZXNzb3IoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yLCAncHJlcGFyZVN0YWNrVHJhY2UnKTtcbiAgfVxuXG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yKTtcblxuICBpZiAoIUlTX1BVUkUpIHRyeSB7XG4gICAgLy8gU2FmYXJpIDEzLSBidWc6IFdlYkFzc2VtYmx5IGVycm9ycyBkb2VzIG5vdCBoYXZlIGEgcHJvcGVyIGAubmFtZWBcbiAgICBpZiAoT3JpZ2luYWxFcnJvclByb3RvdHlwZS5uYW1lICE9PSBFUlJPUl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgJ25hbWUnLCBFUlJPUl9OQU1FKTtcbiAgICB9XG4gICAgT3JpZ2luYWxFcnJvclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdyYXBwZWRFcnJvcjtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gIHJldHVybiBXcmFwcGVkRXJyb3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBmdW5jdGlvbnMgYC5sZW5ndGhgICovXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93cmFwLWVycm9yLWNvbnN0cnVjdG9yLXdpdGgtY2F1c2UnKTtcblxudmFyIFdFQl9BU1NFTUJMWSA9ICdXZWJBc3NlbWJseSc7XG52YXIgV2ViQXNzZW1ibHkgPSBnbG9iYWxUaGlzW1dFQl9BU1NFTUJMWV07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1lcnJvci1jYXVzZSAtLSBmZWF0dXJlIGRldGVjdGlvblxudmFyIEZPUkNFRCA9IG5ldyBFcnJvcignZScsIHsgY2F1c2U6IDcgfSkuY2F1c2UgIT09IDc7XG5cbnZhciBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIChFUlJPUl9OQU1FLCB3cmFwcGVyKSB7XG4gIHZhciBPID0ge307XG4gIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIE8pO1xufTtcblxudmFyIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIgPSBmdW5jdGlvbiAoRVJST1JfTkFNRSwgd3JhcHBlcikge1xuICBpZiAoV2ViQXNzZW1ibHkgJiYgV2ViQXNzZW1ibHlbRVJST1JfTkFNRV0pIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShXRUJfQVNTRU1CTFkgKyAnLicgKyBFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAgICQoeyB0YXJnZXQ6IFdFQl9BU1NFTUJMWSwgc3RhdDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCBPKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uYXRpdmVlcnJvclxuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ0Vycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdFdmFsRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRXZhbEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdSYW5nZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1JlZmVyZW5jZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdTeW50YXhFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTeW50YXhFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVHlwZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFR5cGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVVJJRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignQ29tcGlsZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIENvbXBpbGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdMaW5rRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTGlua0Vycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ1J1bnRpbWVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xuXG52YXIgbmF0aXZlRXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIENocm9tZSAzMi0gaW5jb3JyZWN0bHkgY2FsbCBhY2Nlc3NvclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIHZhciBvYmplY3QgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ25hbWUnLCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMgPT09IG9iamVjdDtcbiAgICB9IH0pKTtcbiAgICBpZiAobmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKG9iamVjdCkgIT09ICd0cnVlJykgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gRkYxMC0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIG5vbi1zdHJpbmdzXG4gIHJldHVybiBuYXRpdmVFcnJvclRvU3RyaW5nLmNhbGwoeyBtZXNzYWdlOiAxLCBuYW1lOiAyIH0pICE9PSAnMjogMSdcbiAgICAvLyBJRTggZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGRlZmF1bHRzXG4gICAgfHwgbmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKHt9KSAhPT0gJ0Vycm9yJztcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IElOQ09SUkVDVF9UT19TVFJJTkcgPyBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgdmFyIE8gPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIG5hbWUgPSBub3JtYWxpemVTdHJpbmdBcmd1bWVudChPLm5hbWUsICdFcnJvcicpO1xuICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KE8ubWVzc2FnZSk7XG4gIHJldHVybiAhbmFtZSA/IG1lc3NhZ2UgOiAhbWVzc2FnZSA/IG5hbWUgOiBuYW1lICsgJzogJyArIG1lc3NhZ2U7XG59IDogbmF0aXZlRXJyb3JUb1N0cmluZztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBlcnJvclRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZycpO1xuXG52YXIgRXJyb3JQcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbi8vIGBFcnJvci5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBmaXhcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZXJyb3IucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoRXJyb3JQcm90b3R5cGUudG9TdHJpbmcgIT09IGVycm9yVG9TdHJpbmcpIHtcbiAgZGVmaW5lQnVpbHRJbihFcnJvclByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZXJyb3JUb1N0cmluZyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgVU5TQ09QQUJMRVMgPSB3ZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEFycmF5UHJvdG90eXBlLCBVTlNDT1BBQkxFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogY3JlYXRlKG51bGwpXG4gIH0pO1xufVxuXG4vLyBhZGQgYSBrZXkgdG8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gJE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9ICFpc09iamVjdChJdGVyYXRvclByb3RvdHlwZSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICBkZWZpbmVCdWlsdEluKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQsIEVOVU1FUkFCTEVfTkVYVCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCshRU5VTUVSQUJMRV9ORVhULCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcblxuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsYWJsZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICAgICAgICAgIGRlZmluZUJ1aWx0SW4oQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgaWYgKCFJU19QVVJFICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsICduYW1lJywgVkFMVUVTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIGNhbGwobmF0aXZlSXRlcmF0b3IsIHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHN3aXRjaCAoc3RhdGUua2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChpbmRleCwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHRhcmdldFtpbmRleF0sIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBmYWxzZSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3RcbnZhciB2YWx1ZXMgPSBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcblxuLy8gVjggfiBDaHJvbWUgNDUtIGJ1Z1xuaWYgKCFJU19QVVJFICYmIERFU0NSSVBUT1JTICYmIHZhbHVlcy5uYW1lICE9PSAndmFsdWVzJykgdHJ5IHtcbiAgZGVmaW5lUHJvcGVydHkodmFsdWVzLCAnbmFtZScsIHsgdmFsdWU6ICd2YWx1ZXMnIH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCAiXG4vLyBfRE9NVG9rZW5MaXN0XG4vKlxuQ29weXJpZ2h0IChjKSAyMDE2LCBKb2huIEdhcmRuZXJcblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKi9cbnZhciBfRE9NVG9rZW5MaXN0ID0gKGZ1bmN0aW9uKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cdHZhciBkcFN1cHBvcnQgPSB0cnVlO1xuXHR2YXIgZGVmaW5lR2V0dGVyID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgZm4sIGNvbmZpZ3VyYWJsZSkge1xuXHRcdGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpXG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBuYW1lLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UgPT09IGRwU3VwcG9ydCA/IHRydWUgOiAhIWNvbmZpZ3VyYWJsZSxcblx0XHRcdFx0Z2V0OiBmblxuXHRcdFx0fSk7XG5cblx0XHRlbHNlIG9iamVjdC5fX2RlZmluZUdldHRlcl9fKG5hbWUsIGZuKTtcblx0fTtcblxuXHQvKiogRW5zdXJlIHRoZSBicm93c2VyIGFsbG93cyBPYmplY3QuZGVmaW5lUHJvcGVydHkgdG8gYmUgdXNlZCBvbiBuYXRpdmUgSmF2YVNjcmlwdCBvYmplY3RzLiAqL1xuXHR0cnkge1xuXHRcdGRlZmluZUdldHRlcih7fSwgXCJzdXBwb3J0XCIpO1xuXHR9XG5cdGNhdGNoIChlKSB7XG5cdFx0ZHBTdXBwb3J0ID0gZmFsc2U7XG5cdH1cblxuXG5cdHZhciBfRE9NVG9rZW5MaXN0ID0gZnVuY3Rpb24gKGVsLCBwcm9wKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXHRcdHZhciB0b2tlbnMgPSBbXTtcblx0XHR2YXIgdG9rZW5NYXAgPSB7fTtcblx0XHR2YXIgbGVuZ3RoID0gMDtcblx0XHR2YXIgbWF4TGVuZ3RoID0gMDtcblx0XHR2YXIgYWRkSW5kZXhHZXR0ZXIgPSBmdW5jdGlvbiAoaSkge1xuXHRcdFx0ZGVmaW5lR2V0dGVyKHRoYXQsIGksIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cHJlb3AoKTtcblx0XHRcdFx0cmV0dXJuIHRva2Vuc1tpXTtcblx0XHRcdH0sIGZhbHNlKTtcblxuXHRcdH07XG5cdFx0dmFyIHJlaW5kZXggPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdC8qKiBEZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgYXJyYXktbGlrZSBhY2Nlc3MgdG8gdGhlIHRva2VuTGlzdCdzIGNvbnRlbnRzLiAqL1xuXHRcdFx0aWYgKGxlbmd0aCA+PSBtYXhMZW5ndGgpXG5cdFx0XHRcdGZvciAoOyBtYXhMZW5ndGggPCBsZW5ndGg7ICsrbWF4TGVuZ3RoKSB7XG5cdFx0XHRcdFx0YWRkSW5kZXhHZXR0ZXIobWF4TGVuZ3RoKTtcblx0XHRcdFx0fVxuXHRcdH07XG5cblx0XHQvKiogSGVscGVyIGZ1bmN0aW9uIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBjbGFzcyBtZXRob2QuIEludGVybmFsIHVzZSBvbmx5LiAqL1xuXHRcdHZhciBwcmVvcCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBlcnJvcjtcblx0XHRcdHZhciBpO1xuXHRcdFx0dmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0XHR2YXIgclNwYWNlID0gL1xccysvO1xuXG5cdFx0XHQvKiogVmFsaWRhdGUgdGhlIHRva2VuL3MgcGFzc2VkIHRvIGFuIGluc3RhbmNlIG1ldGhvZCwgaWYgYW55LiAqL1xuXHRcdFx0aWYgKGFyZ3MubGVuZ3RoKVxuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSlcblx0XHRcdFx0XHRpZiAoclNwYWNlLnRlc3QoYXJnc1tpXSkpIHtcblx0XHRcdFx0XHRcdGVycm9yID0gbmV3IFN5bnRheEVycm9yKCdTdHJpbmcgXCInICsgYXJnc1tpXSArICdcIiAnICsgXCJjb250YWluc1wiICsgJyBhbiBpbnZhbGlkIGNoYXJhY3RlcicpO1xuXHRcdFx0XHRcdFx0ZXJyb3IuY29kZSA9IDU7XG5cdFx0XHRcdFx0XHRlcnJvci5uYW1lID0gXCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3JcIjtcblx0XHRcdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0XHRcdH1cblxuXG5cdFx0XHQvKiogU3BsaXQgdGhlIG5ldyB2YWx1ZSBhcGFydCBieSB3aGl0ZXNwYWNlKi9cblx0XHRcdGlmICh0eXBlb2YgZWxbcHJvcF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0dG9rZW5zID0gKFwiXCIgKyBlbFtwcm9wXS5iYXNlVmFsKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBcIlwiKS5zcGxpdChyU3BhY2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG9rZW5zID0gKFwiXCIgKyBlbFtwcm9wXSkucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgXCJcIikuc3BsaXQoclNwYWNlKTtcblx0XHRcdH1cblxuXHRcdFx0LyoqIEF2b2lkIHRyZWF0aW5nIGJsYW5rIHN0cmluZ3MgYXMgc2luZ2xlLWl0ZW0gdG9rZW4gbGlzdHMgKi9cblx0XHRcdGlmIChcIlwiID09PSB0b2tlbnNbMF0pIHRva2VucyA9IFtdO1xuXG5cdFx0XHQvKiogUmVwb3B1bGF0ZSB0aGUgaW50ZXJuYWwgdG9rZW4gbGlzdHMgKi9cblx0XHRcdHRva2VuTWFwID0ge307XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgKytpKVxuXHRcdFx0XHR0b2tlbk1hcFt0b2tlbnNbaV1dID0gdHJ1ZTtcblx0XHRcdGxlbmd0aCA9IHRva2Vucy5sZW5ndGg7XG5cdFx0XHRyZWluZGV4KCk7XG5cdFx0fTtcblxuXHRcdC8qKiBQb3B1bGF0ZSBvdXIgaW50ZXJuYWwgdG9rZW4gbGlzdCBpZiB0aGUgdGFyZ2V0ZWQgYXR0cmlidXRlIG9mIHRoZSBzdWJqZWN0IGVsZW1lbnQgaXNuJ3QgZW1wdHkuICovXG5cdFx0cHJlb3AoKTtcblxuXHRcdC8qKiBSZXR1cm4gdGhlIG51bWJlciBvZiB0b2tlbnMgaW4gdGhlIHVuZGVybHlpbmcgc3RyaW5nLiBSZWFkLW9ubHkuICovXG5cdFx0ZGVmaW5lR2V0dGVyKHRoYXQsIFwibGVuZ3RoXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdHByZW9wKCk7XG5cdFx0XHRyZXR1cm4gbGVuZ3RoO1xuXHRcdH0pO1xuXG5cdFx0LyoqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHRvU3RyaW5nL3RvTG9jYWxlU3RyaW5nIG1ldGhvZHMgdG8gcmV0dXJuIGEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgdG9rZW5zIHdoZW4gdHlwZWNhc3QuICovXG5cdFx0dGhhdC50b0xvY2FsZVN0cmluZyA9XG5cdFx0XHR0aGF0LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRwcmVvcCgpO1xuXHRcdFx0XHRyZXR1cm4gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0fTtcblxuXHRcdHRoYXQuaXRlbSA9IGZ1bmN0aW9uIChpZHgpIHtcblx0XHRcdHByZW9wKCk7XG5cdFx0XHRyZXR1cm4gdG9rZW5zW2lkeF07XG5cdFx0fTtcblxuXHRcdHRoYXQuY29udGFpbnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcblx0XHRcdHByZW9wKCk7XG5cdFx0XHRyZXR1cm4gISF0b2tlbk1hcFt0b2tlbl07XG5cdFx0fTtcblxuXHRcdHRoYXQuYWRkID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cHJlb3AuYXBwbHkodGhhdCwgYXJncyA9IGFyZ3VtZW50cyk7XG5cblx0XHRcdGZvciAodmFyIGFyZ3MsIHRva2VuLCBpID0gMCwgbCA9IGFyZ3MubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG5cdFx0XHRcdHRva2VuID0gYXJnc1tpXTtcblx0XHRcdFx0aWYgKCF0b2tlbk1hcFt0b2tlbl0pIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh0b2tlbik7XG5cdFx0XHRcdFx0dG9rZW5NYXBbdG9rZW5dID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvKiogVXBkYXRlIHRoZSB0YXJnZXRlZCBhdHRyaWJ1dGUgb2YgdGhlIGF0dGFjaGVkIGVsZW1lbnQgaWYgdGhlIHRva2VuIGxpc3QncyBjaGFuZ2VkLiAqL1xuXHRcdFx0aWYgKGxlbmd0aCAhPT0gdG9rZW5zLmxlbmd0aCkge1xuXHRcdFx0XHRsZW5ndGggPSB0b2tlbnMubGVuZ3RoID4+PiAwO1xuXHRcdFx0XHRpZiAodHlwZW9mIGVsW3Byb3BdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0ZWxbcHJvcF0uYmFzZVZhbCA9IHRva2Vucy5qb2luKFwiIFwiKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbFtwcm9wXSA9IHRva2Vucy5qb2luKFwiIFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZWluZGV4KCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoYXQucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cHJlb3AuYXBwbHkodGhhdCwgYXJncyA9IGFyZ3VtZW50cyk7XG5cblx0XHRcdC8qKiBCdWlsZCBhIGhhc2ggb2YgdG9rZW4gbmFtZXMgdG8gY29tcGFyZSBhZ2FpbnN0IHdoZW4gcmVjb2xsZWN0aW5nIG91ciB0b2tlbiBsaXN0LiAqL1xuXHRcdFx0Zm9yICh2YXIgYXJncywgaWdub3JlID0ge30sIGkgPSAwLCB0ID0gW107IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdGlnbm9yZVthcmdzW2ldXSA9IHRydWU7XG5cdFx0XHRcdGRlbGV0ZSB0b2tlbk1hcFthcmdzW2ldXTtcblx0XHRcdH1cblxuXHRcdFx0LyoqIFJ1biB0aHJvdWdoIG91ciB0b2tlbnMgbGlzdCBhbmQgcmVhc3NpZ24gb25seSB0aG9zZSB0aGF0IGFyZW4ndCBkZWZpbmVkIGluIHRoZSBoYXNoIGRlY2xhcmVkIGFib3ZlLiAqL1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7ICsraSlcblx0XHRcdFx0aWYgKCFpZ25vcmVbdG9rZW5zW2ldXSkgdC5wdXNoKHRva2Vuc1tpXSk7XG5cblx0XHRcdHRva2VucyA9IHQ7XG5cdFx0XHRsZW5ndGggPSB0Lmxlbmd0aCA+Pj4gMDtcblxuXHRcdFx0LyoqIFVwZGF0ZSB0aGUgdGFyZ2V0ZWQgYXR0cmlidXRlIG9mIHRoZSBhdHRhY2hlZCBlbGVtZW50LiAqL1xuXHRcdFx0aWYgKHR5cGVvZiBlbFtwcm9wXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRlbFtwcm9wXS5iYXNlVmFsID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxbcHJvcF0gPSB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHR9XG5cdFx0XHRyZWluZGV4KCk7XG5cdFx0fTtcblxuXHRcdHRoYXQudG9nZ2xlID0gZnVuY3Rpb24gKHRva2VuLCBmb3JjZSkge1xuXHRcdFx0cHJlb3AuYXBwbHkodGhhdCwgW3Rva2VuXSk7XG5cblx0XHRcdC8qKiBUb2tlbiBzdGF0ZSdzIGJlaW5nIGZvcmNlZC4gKi9cblx0XHRcdGlmICh1bmRlZmluZWQgIT09IGZvcmNlKSB7XG5cdFx0XHRcdGlmIChmb3JjZSkge1xuXHRcdFx0XHRcdHRoYXQuYWRkKHRva2VuKTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGF0LnJlbW92ZSh0b2tlbik7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8qKiBUb2tlbiBhbHJlYWR5IGV4aXN0cyBpbiB0b2tlbkxpc3QuIFJlbW92ZSBpdCwgYW5kIHJldHVybiBGQUxTRS4gKi9cblx0XHRcdGlmICh0b2tlbk1hcFt0b2tlbl0pIHtcblx0XHRcdFx0dGhhdC5yZW1vdmUodG9rZW4pO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdC8qKiBPdGhlcndpc2UsIGFkZCB0aGUgdG9rZW4gYW5kIHJldHVybiBUUlVFLiAqL1xuXHRcdFx0dGhhdC5hZGQodG9rZW4pO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fTtcblxuXHRcdHRoYXQuZm9yRWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xuXG5cdFx0cmV0dXJuIHRoYXQ7XG5cdH07XG5cblx0cmV0dXJuIF9ET01Ub2tlbkxpc3Q7XG59KCkpO1xuZXhwb3J0IGRlZmF1bHQgX0RPTVRva2VuTGlzdDtcbiIsICJpbXBvcnQgX0RPTVRva2VuTGlzdCBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fRE9NVG9rZW5MaXN0XCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIkRPTVRva2VuTGlzdFwiaW4gc2VsZiYmZnVuY3Rpb24oZSl7cmV0dXJuIShcImNsYXNzTGlzdFwiaW4gZSl8fCFlLmNsYXNzTGlzdC50b2dnbGUoXCJ4XCIsITEpJiYhZS5jbGFzc05hbWV9KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ4XCIpKVxuKSkge1xuLy8gRE9NVG9rZW5MaXN0XG4vKiBnbG9iYWwgX0RPTVRva2VuTGlzdCAqL1xuKGZ1bmN0aW9uIChnbG9iYWwpIHtcblx0dmFyIG5hdGl2ZUltcGwgPSBcIkRPTVRva2VuTGlzdFwiIGluIGdsb2JhbCAmJiBnbG9iYWwuRE9NVG9rZW5MaXN0O1xuXG5cdGlmIChcblx0XHRcdCFuYXRpdmVJbXBsIHx8XG5cdFx0XHQoXG5cdFx0XHRcdCEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TICYmXG5cdFx0XHRcdCEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdzdmcnKSAmJlxuXHRcdFx0XHQhKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwic3ZnXCIpLmNsYXNzTGlzdCBpbnN0YW5jZW9mIERPTVRva2VuTGlzdClcblx0XHRcdClcblx0XHQpIHtcblx0XHRnbG9iYWwuRE9NVG9rZW5MaXN0ID0gX0RPTVRva2VuTGlzdDtcblx0fVxuXG5cdC8vIEFkZCBzZWNvbmQgYXJndW1lbnQgdG8gbmF0aXZlIERPTVRva2VuTGlzdC50b2dnbGUoKSBpZiBuZWNlc3Nhcnlcblx0KGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRpZiAoISgnY2xhc3NMaXN0JyBpbiBlKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LnRvZ2dsZSgneCcsIGZhbHNlKTtcblx0XHRpZiAoIWUuY2xhc3NMaXN0LmNvbnRhaW5zKCd4JykpIHJldHVybjtcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gdG9nZ2xlKHRva2VuIC8qLCBmb3JjZSovKSB7XG5cdFx0XHR2YXIgZm9yY2UgPSBhcmd1bWVudHNbMV07XG5cdFx0XHRpZiAoZm9yY2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR2YXIgYWRkID0gIXRoaXMuY29udGFpbnModG9rZW4pO1xuXHRcdFx0XHR0aGlzW2FkZCA/ICdhZGQnIDogJ3JlbW92ZSddKHRva2VuKTtcblx0XHRcdFx0cmV0dXJuIGFkZDtcblx0XHRcdH1cblx0XHRcdGZvcmNlID0gISFmb3JjZTtcblx0XHRcdHRoaXNbZm9yY2UgPyAnYWRkJyA6ICdyZW1vdmUnXSh0b2tlbik7XG5cdFx0XHRyZXR1cm4gZm9yY2U7XG5cdFx0fTtcblx0fSgpKTtcblxuXHQvLyBBZGQgbXVsdGlwbGUgYXJndW1lbnRzIHRvIG5hdGl2ZSBET01Ub2tlbkxpc3QuYWRkKCkgaWYgbmVjZXNzYXJ5XG5cdChmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0aWYgKCEoJ2NsYXNzTGlzdCcgaW4gZSkpIHJldHVybjtcblx0XHRlLmNsYXNzTGlzdC5hZGQoJ2EnLCAnYicpO1xuXHRcdGlmIChlLmNsYXNzTGlzdC5jb250YWlucygnYicpKSByZXR1cm47XG5cdFx0dmFyIG5hdGl2ZSA9IGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5hZGQ7XG5cdFx0ZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBhcmdzID0gYXJndW1lbnRzO1xuXHRcdFx0dmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0bmF0aXZlLmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSgpKTtcblxuXHQvLyBBZGQgbXVsdGlwbGUgYXJndW1lbnRzIHRvIG5hdGl2ZSBET01Ub2tlbkxpc3QucmVtb3ZlKCkgaWYgbmVjZXNzYXJ5XG5cdChmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0aWYgKCEoJ2NsYXNzTGlzdCcgaW4gZSkpIHJldHVybjtcblx0XHRlLmNsYXNzTGlzdC5hZGQoJ2EnKTtcblx0XHRlLmNsYXNzTGlzdC5hZGQoJ2InKTtcblx0XHRlLmNsYXNzTGlzdC5yZW1vdmUoJ2EnLCAnYicpO1xuXHRcdGlmICghZS5jbGFzc0xpc3QuY29udGFpbnMoJ2InKSkgcmV0dXJuO1xuXHRcdHZhciBuYXRpdmUgPSBlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVtb3ZlO1xuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0XHRcdHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdG5hdGl2ZS5jYWxsKHRoaXMsIGFyZ3NbaV0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0oKSk7XG5cbn0oc2VsZikpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiaW1wb3J0IF9ET01Ub2tlbkxpc3QgZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0RPTVRva2VuTGlzdFwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJyZXBsYWNlXCJpbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLmNsYXNzTGlzdHx8e30pXG4pKSB7XG4vLyBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlcGxhY2VcbihmdW5jdGlvbiAoKSB7XG5cdHZhciBjbGFzc0xpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5jbGFzc0xpc3Q7XG5cdGNsYXNzTGlzdCAmJiAoY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZXBsYWNlID1cblx0XHRmdW5jdGlvbiAodG9rZW4sIG5ld1Rva2VuKSB7XG5cdFx0XHR2YXIgdG9rZW5TdHJpbmcgPSAnJyArIHRva2VuLCBuZXdUb2tlblN0cmluZyA9ICcnICsgbmV3VG9rZW47XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdG5ldyBET01FeGNlcHRpb24oKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0c2VsZi5ET01FeGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSwgbmFtZSkge1xuXHRcdFx0XHRcdGlmICghKHRoaXMgaW5zdGFuY2VvZiBET01FeGNlcHRpb24pKSByZXR1cm4gbmV3IERPTUV4Y2VwdGlvbihtZXNzYWdlLCBuYW1lKTtcblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXHRcdFx0XHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyIGVycm9yO1xuXHRcdFx0aWYgKCEodG9rZW5TdHJpbmcgJiYgbmV3VG9rZW5TdHJpbmcpKSBlcnJvciA9ICdTeW50YXhFcnJvcic7XG5cdFx0XHRpZiAoIWVycm9yICYmICgvXFxzLy50ZXN0KHRva2VuU3RyaW5nKSB8fCAvXFxzLy50ZXN0KG5ld1Rva2VuU3RyaW5nKSkpIGVycm9yID0gJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcic7XG5cdFx0XHRpZiAoZXJyb3IpIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0RPTVRva2VuTGlzdC5yZXBsYWNlIHdhcyBwcm92aWRlZCB0b2tlbnMgXFwnJyArIHRva2VuU3RyaW5nICsgJ1xcJyBhbmQgXFwnJyArIG5ld1Rva2VuU3RyaW5nICsgJ1xcJycsIGVycm9yKTtcblxuXHRcdFx0aWYgKCF0aGlzLmNvbnRhaW5zKHRva2VuU3RyaW5nKSkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHQvLyB0b2tlbnNUb2JlTW92ZWQgYXJlIFwidG9rZW5TdHJpbmdcIiBhbmQgYWxsIHRva2VucyBmb3VuZCBhZnRlciBpdFxuXHRcdFx0dmFyIHRva2Vuc1RvYmVNb3ZlZCA9IFtdO1xuXHRcdFx0dmFyIG5ld1Rva2VuRm91bmQgPSBmYWxzZTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSlcblx0XHRcdFx0aWYgKG5ld1Rva2VuU3RyaW5nID09PSB0aGlzLml0ZW0oaSkpIG5ld1Rva2VuRm91bmQgPSB0cnVlO1xuXHRcdFx0XHRlbHNlIGlmICh0b2tlblN0cmluZyA9PT0gdGhpcy5pdGVtKGkpKSBicmVhaztcblx0XHRcdGZvciAoOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkgdG9rZW5zVG9iZU1vdmVkLnB1c2godGhpcy5pdGVtKGkpKTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCB0b2tlbnNUb2JlTW92ZWQubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dmFyIGN1cnJlbnRUb2tlbiA9IHRva2Vuc1RvYmVNb3ZlZFtpXTtcblx0XHRcdFx0Y3VycmVudFRva2VuICE9PSBuZXdUb2tlblN0cmluZyAmJiB0aGlzLnJlbW92ZShjdXJyZW50VG9rZW4pO1xuXHRcdFx0XHRjdXJyZW50VG9rZW4gIT09IHRva2VuU3RyaW5nICYmIHRoaXMuYWRkKGN1cnJlbnRUb2tlbik7XG5cdFx0XHRcdGN1cnJlbnRUb2tlbiA9PT0gdG9rZW5TdHJpbmcgJiYgIW5ld1Rva2VuRm91bmQgJiYgKHRoaXMucmVtb3ZlKG5ld1Rva2VuU3RyaW5nKSwgdGhpcy5hZGQobmV3VG9rZW5TdHJpbmcpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0KTtcbn0pKCk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICIoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIkRvY3VtZW50RnJhZ21lbnRcImluIHNlbGYmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgRG9jdW1lbnRGcmFnbWVudCwhMH1jYXRjaChuKXtyZXR1cm4hMX19KClcbikpIHtcbi8vIERvY3VtZW50RnJhZ21lbnRcbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdGdsb2JhbC5Eb2N1bWVudEZyYWdtZW50ID0gZnVuY3Rpb24gRG9jdW1lbnRGcmFnbWVudCgpIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHR9O1xuXG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0Z2xvYmFsLkRvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcmFnbWVudC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUpXG59KHNlbGYpKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIlxuLy8gX211dGF0aW9uXG52YXIgX211dGF0aW9uID0gKGZ1bmN0aW9uICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG5cdGZ1bmN0aW9uIGlzTm9kZShvYmplY3QpIHtcblx0XHQvLyBET00sIExldmVsMlxuXHRcdGlmICh0eXBlb2YgTm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIE5vZGU7XG5cdFx0fVxuXHRcdC8vIE9sZGVyIGJyb3dzZXJzLCBjaGVjayBpZiBpdCBsb29rcyBsaWtlIGEgTm9kZSBpbnN0YW5jZSlcblx0XHRyZXR1cm4gb2JqZWN0ICYmXG5cdFx0XHR0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHRvYmplY3Qubm9kZU5hbWUgJiZcblx0XHRcdG9iamVjdC5ub2RlVHlwZSA+PSAxICYmXG5cdFx0XHRvYmplY3Qubm9kZVR5cGUgPD0gMTI7XG5cdH1cblxuXHQvLyBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jbXV0YXRpb24tbWV0aG9kLW1hY3JvXG5cdHJldHVybiBmdW5jdGlvbiBtdXRhdGlvbihub2Rlcykge1xuXHRcdGlmIChub2Rlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBpc05vZGUobm9kZXNbMF0pID8gbm9kZXNbMF0gOiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShub2Rlc1swXSArICcnKTtcblx0XHR9XG5cblx0XHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaXNOb2RlKG5vZGVzW2ldKSA/IG5vZGVzW2ldIDogZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZXNbaV0gKyAnJykpO1xuXG5cdFx0fVxuXHRcdHJldHVybiBmcmFnbWVudDtcblx0fTtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBfbXV0YXRpb247XG4iLCAiaW1wb3J0IF9tdXRhdGlvbiBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb25cIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRG9jdW1lbnRGcmFnbWVudFwiaW4gc2VsZiYmXCJwcmVwZW5kXCJpbiBEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZVxuKSkge1xuLy8gRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucHJlcGVuZFxuLyogZ2xvYmFsIF9tdXRhdGlvbiAqL1xuKGZ1bmN0aW9uIChnbG9iYWwpIHtcblx0dmFyIGZyYWdtZW50UHJvdG8gPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuY29uc3RydWN0b3IucHJvdG90eXBlO1xuXHRmcmFnbWVudFByb3RvLnByZXBlbmQgPSBmdW5jdGlvbiBwcmVwZW5kKCkge1xuXHRcdHRoaXMuaW5zZXJ0QmVmb3JlKF9tdXRhdGlvbihhcmd1bWVudHMpLCB0aGlzLmZpcnN0Q2hpbGQpO1xuXHR9O1xuXG5cdGdsb2JhbC5Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gcHJlcGVuZCgpIHtcblx0XHR0aGlzLmluc2VydEJlZm9yZShfbXV0YXRpb24oYXJndW1lbnRzKSwgdGhpcy5maXJzdENoaWxkKTtcblx0fTtcbn0oc2VsZikpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiaW1wb3J0IF9tdXRhdGlvbiBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb25cIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRWxlbWVudFwiaW4gc2VsZiYmXCJwcmVwZW5kXCJpbiBFbGVtZW50LnByb3RvdHlwZVxuKSkge1xuLy8gRWxlbWVudC5wcm90b3R5cGUucHJlcGVuZFxuLyogZ2xvYmFsIF9tdXRhdGlvbiAqL1xuRG9jdW1lbnQucHJvdG90eXBlLnByZXBlbmQgPSBFbGVtZW50LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gcHJlcGVuZCgpIHtcblx0dGhpcy5pbnNlcnRCZWZvcmUoX211dGF0aW9uKGFyZ3VtZW50cyksIHRoaXMuZmlyc3RDaGlsZCk7XG59O1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiaW1wb3J0IF9tdXRhdGlvbiBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb25cIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRG9jdW1lbnRGcmFnbWVudFwiaW4gc2VsZiYmXCJhcHBlbmRcImluIERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlXG4pKSB7XG4vLyBEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5hcHBlbmRcbi8qIGdsb2JhbCBfbXV0YXRpb24gKi9cbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdHZhciBmcmFnbWVudFByb3RvID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblx0ZnJhZ21lbnRQcm90by5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQoKSB7XG5cdFx0dGhpcy5hcHBlbmRDaGlsZChfbXV0YXRpb24oYXJndW1lbnRzKSk7XG5cdH07XG5cblx0Z2xvYmFsLkRvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZCgpIHtcblx0XHR0aGlzLmFwcGVuZENoaWxkKF9tdXRhdGlvbihhcmd1bWVudHMpKTtcblx0fTtcbn0oc2VsZikpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiaW1wb3J0IF9tdXRhdGlvbiBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb25cIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRWxlbWVudFwiaW4gc2VsZiYmXCJhcHBlbmRcImluIEVsZW1lbnQucHJvdG90eXBlXG4pKSB7XG4vLyBFbGVtZW50LnByb3RvdHlwZS5hcHBlbmRcbi8qIGdsb2JhbCBfbXV0YXRpb24gKi9cbkRvY3VtZW50LnByb3RvdHlwZS5hcHBlbmQgPSBFbGVtZW50LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQoKSB7XG5cdHRoaXMuYXBwZW5kQ2hpbGQoX211dGF0aW9uKGFyZ3VtZW50cykpO1xufTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgImltcG9ydCBfbXV0YXRpb24gZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX211dGF0aW9uXCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIkVsZW1lbnRcImluIHNlbGYmJlwiYWZ0ZXJcImluIEVsZW1lbnQucHJvdG90eXBlXG4pKSB7XG4vLyBFbGVtZW50LnByb3RvdHlwZS5hZnRlclxuLyogZ2xvYmFsIF9tdXRhdGlvbiAqL1xuRG9jdW1lbnQucHJvdG90eXBlLmFmdGVyID0gRWxlbWVudC5wcm90b3R5cGUuYWZ0ZXIgPSBmdW5jdGlvbiBhZnRlcigpIHtcblx0aWYgKHRoaXMucGFyZW50Tm9kZSkge1xuXHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxcblx0XHRcdFx0dmlhYmxlTmV4dFNpYmxpbmcgPSB0aGlzLm5leHRTaWJsaW5nLFxuXHRcdFx0XHRpZHggPSB2aWFibGVOZXh0U2libGluZyA/IGFyZ3MuaW5kZXhPZih2aWFibGVOZXh0U2libGluZykgOiAtMTtcblxuXHRcdHdoaWxlIChpZHggIT09IC0xKSB7XG5cdFx0XHR2aWFibGVOZXh0U2libGluZyA9IHZpYWJsZU5leHRTaWJsaW5nLm5leHRTaWJsaW5nO1xuXHRcdFx0aWYgKCF2aWFibGVOZXh0U2libGluZykge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlkeCA9IGFyZ3MuaW5kZXhPZih2aWFibGVOZXh0U2libGluZyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShfbXV0YXRpb24oYXJndW1lbnRzKSwgdmlhYmxlTmV4dFNpYmxpbmcpO1xuXHR9XG59O1xuXG4vLyBOb3QgYWxsIFVBcyBzdXBwb3J0IHRoZSBUZXh0IGNvbnN0cnVjdG9yLiAgUG9seWZpbGwgb24gdGhlIFRleHQgY29uc3RydWN0b3Igb25seSB3aGVyZSBpdCBleGlzdHNcbi8vIFRPRE86IEFkZCBhIHBvbHlmaWxsIGZvciB0aGUgVGV4dCBjb25zdHJ1Y3RvciwgYW5kIG1ha2UgaXQgYSBkZXBlbmRlbmN5IG9mIHRoaXMgcG9seWZpbGwuXG5pZiAoXCJUZXh0XCIgaW4gc2VsZikge1xuXHRUZXh0LnByb3RvdHlwZS5hZnRlciA9IEVsZW1lbnQucHJvdG90eXBlLmFmdGVyO1xufVxufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiaW1wb3J0IF9tdXRhdGlvbiBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb25cIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiYWZ0ZXJcImluIENoYXJhY3RlckRhdGEucHJvdG90eXBlXG4pKSB7XG4vLyBDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5hZnRlclxuQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuYWZ0ZXIgPSBFbGVtZW50LnByb3RvdHlwZS5hZnRlclxufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmluZDtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG52YXIgRklORCA9ICdmaW5kJztcbnZhciBTS0lQU19IT0xFUyA9IHRydWU7XG5cbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZpbmQgLS0gdGVzdGluZ1xuaWYgKEZJTkQgaW4gW10pIEFycmF5KDEpW0ZJTkRdKGZ1bmN0aW9uICgpIHsgU0tJUFNfSE9MRVMgPSBmYWxzZTsgfSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTS0lQU19IT0xFUyB9LCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcyhGSU5EKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbmF0aXZlSm9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgRVMzX1NUUklOR1MgPSBJbmRleGVkT2JqZWN0ICE9PSBPYmplY3Q7XG52YXIgRk9SQ0VEID0gRVMzX1NUUklOR1MgfHwgIWFycmF5TWV0aG9kSXNTdHJpY3QoJ2pvaW4nLCAnLCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmpvaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuam9pblxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gbmF0aXZlSm9pbih0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFByb3RvdHlwZSkge1xuICBpZiAoaXNQcm90b3R5cGVPZihQcm90b3R5cGUsIGl0KSkgcmV0dXJuIGl0O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcignSW5jb3JyZWN0IGludm9jYXRpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIENPTlNUUlVDVE9SID0gJ2NvbnN0cnVjdG9yJztcbnZhciBJVEVSQVRPUiA9ICdJdGVyYXRvcic7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTmF0aXZlSXRlcmF0b3IgPSBnbG9iYWxUaGlzW0lURVJBVE9SXTtcblxuLy8gRkY1Ni0gaGF2ZSBub24tc3RhbmRhcmQgZ2xvYmFsIGhlbHBlciBgSXRlcmF0b3JgXG52YXIgRk9SQ0VEID0gSVNfUFVSRVxuICB8fCAhaXNDYWxsYWJsZShOYXRpdmVJdGVyYXRvcilcbiAgfHwgTmF0aXZlSXRlcmF0b3IucHJvdG90eXBlICE9PSBJdGVyYXRvclByb3RvdHlwZVxuICAvLyBGRjQ0LSBub24tc3RhbmRhcmQgYEl0ZXJhdG9yYCBwYXNzZXMgcHJldmlvdXMgdGVzdHNcbiAgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHsgTmF0aXZlSXRlcmF0b3Ioe30pOyB9KTtcblxudmFyIEl0ZXJhdG9yQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBJdGVyYXRvcigpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gIGlmIChnZXRQcm90b3R5cGVPZih0aGlzKSA9PT0gSXRlcmF0b3JQcm90b3R5cGUpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBYnN0cmFjdCBjbGFzcyBJdGVyYXRvciBub3QgZGlyZWN0bHkgY29uc3RydWN0YWJsZScpO1xufTtcblxudmFyIGRlZmluZUl0ZXJhdG9yUHJvdG90eXBlQWNjZXNzb3IgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoSXRlcmF0b3JQcm90b3R5cGUsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChyZXBsYWNlbWVudCkge1xuICAgICAgICBhbk9iamVjdCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMgPT09IEl0ZXJhdG9yUHJvdG90eXBlKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIllvdSBjYW4ndCByZWRlZmluZSB0aGlzIHByb3BlcnR5XCIpO1xuICAgICAgICBpZiAoaGFzT3duKHRoaXMsIGtleSkpIHRoaXNba2V5XSA9IHJlcGxhY2VtZW50O1xuICAgICAgICBlbHNlIGNyZWF0ZVByb3BlcnR5KHRoaXMsIGtleSwgcmVwbGFjZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2UgSXRlcmF0b3JQcm90b3R5cGVba2V5XSA9IHZhbHVlO1xufTtcblxuaWYgKCFoYXNPd24oSXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSBkZWZpbmVJdGVyYXRvclByb3RvdHlwZUFjY2Vzc29yKFRPX1NUUklOR19UQUcsIElURVJBVE9SKTtcblxuaWYgKEZPUkNFRCB8fCAhaGFzT3duKEl0ZXJhdG9yUHJvdG90eXBlLCBDT05TVFJVQ1RPUikgfHwgSXRlcmF0b3JQcm90b3R5cGVbQ09OU1RSVUNUT1JdID09PSBPYmplY3QpIHtcbiAgZGVmaW5lSXRlcmF0b3JQcm90b3R5cGVBY2Nlc3NvcihDT05TVFJVQ1RPUiwgSXRlcmF0b3JDb25zdHJ1Y3Rvcik7XG59XG5cbkl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gSXRlcmF0b3JQcm90b3R5cGU7XG5cbi8vIGBJdGVyYXRvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXRlcmF0b3JcbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIEl0ZXJhdG9yOiBJdGVyYXRvckNvbnN0cnVjdG9yXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19SRUNPUkQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfUkVDT1JEKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19SRUNPUkQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlLml0ZXJhdG9yO1xuICB9IGVsc2UgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gSVNfUkVDT1JEID8gaXRlcmFibGUubmV4dCA6IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYEdldEl0ZXJhdG9yRGlyZWN0KG9iailgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvI3NlYy1nZXRpdGVyYXRvcmRpcmVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgaXRlcmF0b3I6IG9iaixcbiAgICBuZXh0OiBvYmoubmV4dCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxuLy8gYEl0ZXJhdG9yLnByb3RvdHlwZS5maW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXRlcmF0b3IucHJvdG90eXBlLmZpbmRcbiQoeyB0YXJnZXQ6ICdJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUpIHtcbiAgICBhbk9iamVjdCh0aGlzKTtcbiAgICBhQ2FsbGFibGUocHJlZGljYXRlKTtcbiAgICB2YXIgcmVjb3JkID0gZ2V0SXRlcmF0b3JEaXJlY3QodGhpcyk7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHJldHVybiBpdGVyYXRlKHJlY29yZCwgZnVuY3Rpb24gKHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBjb3VudGVyKyspKSByZXR1cm4gc3RvcCh2YWx1ZSk7XG4gICAgfSwgeyBJU19SRUNPUkQ6IHRydWUsIElOVEVSUlVQVEVEOiB0cnVlIH0pLnJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICBkZWZpbmVCdWlsdEluKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIHRvU3RyaW5nLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbi8vIGBJc1JlZ0V4cGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzcmVnZXhwXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjbGFzc29mKGl0KSA9PT0gJ1JlZ0V4cCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUikge1xuICB2YXIgZmxhZ3MgPSBSLmZsYWdzO1xuICByZXR1cm4gZmxhZ3MgPT09IHVuZGVmaW5lZCAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSAmJiAhaGFzT3duKFIsICdmbGFncycpICYmIGlzUHJvdG90eXBlT2YoUmVnRXhwUHJvdG90eXBlLCBSKVxuICAgID8gY2FsbChyZWdFeHBGbGFncywgUikgOiBmbGFncztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJ2EnLCAneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnYWJjZCcpICE9PSBudWxsO1xufSk7XG5cbi8vIFVDIEJyb3dzZXIgYnVnXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTAwOFxudmFyIE1JU1NFRF9TVElDS1kgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEkUmVnRXhwKCdhJywgJ3knKS5zdGlja3k7XG59KTtcblxudmFyIEJST0tFTl9DQVJFVCA9IFVOU1VQUE9SVEVEX1kgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM2ODdcbiAgdmFyIHJlID0gJFJlZ0V4cCgnXnInLCAnZ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ3N0cicpICE9PSBudWxsO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCUk9LRU5fQ0FSRVQ6IEJST0tFTl9DQVJFVCxcbiAgTUlTU0VEX1NUSUNLWTogTUlTU0VEX1NUSUNLWSxcbiAgVU5TVVBQT1JURURfWTogVU5TVVBQT1JURURfWVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcuJywgJ3MnKSAtPiAvLi9zIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCcuJywgJ3MnKTtcbiAgcmV0dXJuICEocmUuZG90QWxsICYmIHJlLnRlc3QoJ1xcbicpICYmIHJlLmZsYWdzID09PSAncycpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJyg/PGE+YiknLCAnZycpIC0+IC8oPzxhPmIpL2cgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHByb3h5QWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmVuZm9yY2U7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZycpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG52YXIgTmF0aXZlUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gTmF0aXZlUmVnRXhwLnByb3RvdHlwZTtcbnZhciBTeW50YXhFcnJvciA9IGdsb2JhbFRoaXMuU3ludGF4RXJyb3I7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKFJlZ0V4cFByb3RvdHlwZS5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBUT0RPOiBVc2Ugb25seSBwcm9wZXIgUmVnRXhwSWRlbnRpZmllck5hbWVcbnZhciBJU19OQ0cgPSAvXlxcPzxbXlxcc1xcZCEjJSYqKzw9PkBeXVteXFxzISMlJiorPD0+QF5dKj4vO1xudmFyIHJlMSA9IC9hL2c7XG52YXIgcmUyID0gL2EvZztcblxuLy8gXCJuZXdcIiBzaG91bGQgY3JlYXRlIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdcbnZhciBDT1JSRUNUX05FVyA9IG5ldyBOYXRpdmVSZWdFeHAocmUxKSAhPT0gcmUxO1xuXG52YXIgTUlTU0VEX1NUSUNLWSA9IHN0aWNreUhlbHBlcnMuTUlTU0VEX1NUSUNLWTtcbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZO1xuXG52YXIgQkFTRV9GT1JDRUQgPSBERVNDUklQVE9SUyAmJlxuICAoIUNPUlJFQ1RfTkVXIHx8IE1JU1NFRF9TVElDS1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0cgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJlMltNQVRDSF0gPSBmYWxzZTtcbiAgICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2luY29uc2lzdGVudC1mdW5jdGlvbi1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgcmV0dXJuIE5hdGl2ZVJlZ0V4cChyZTEpICE9PSByZTEgfHwgTmF0aXZlUmVnRXhwKHJlMikgPT09IHJlMiB8fCBTdHJpbmcoTmF0aXZlUmVnRXhwKHJlMSwgJ2knKSkgIT09ICcvYS9pJztcbiAgfSkpO1xuXG52YXIgaGFuZGxlRG90QWxsID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgYnJhY2tldHMgPSBmYWxzZTtcbiAgdmFyIGNocjtcbiAgZm9yICg7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgICBpZiAoY2hyID09PSAnXFxcXCcpIHtcbiAgICAgIHJlc3VsdCArPSBjaHIgKyBjaGFyQXQoc3RyaW5nLCArK2luZGV4KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWJyYWNrZXRzICYmIGNociA9PT0gJy4nKSB7XG4gICAgICByZXN1bHQgKz0gJ1tcXFxcc1xcXFxTXSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaHIgPT09ICdbJykge1xuICAgICAgICBicmFja2V0cyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGNociA9PT0gJ10nKSB7XG4gICAgICAgIGJyYWNrZXRzID0gZmFsc2U7XG4gICAgICB9IHJlc3VsdCArPSBjaHI7XG4gICAgfVxuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgaGFuZGxlTkNHID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgbmFtZWQgPSBbXTtcbiAgdmFyIG5hbWVzID0gY3JlYXRlKG51bGwpO1xuICB2YXIgYnJhY2tldHMgPSBmYWxzZTtcbiAgdmFyIG5jZyA9IGZhbHNlO1xuICB2YXIgZ3JvdXBpZCA9IDA7XG4gIHZhciBncm91cG5hbWUgPSAnJztcbiAgdmFyIGNocjtcbiAgZm9yICg7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgICBpZiAoY2hyID09PSAnXFxcXCcpIHtcbiAgICAgIGNociArPSBjaGFyQXQoc3RyaW5nLCArK2luZGV4KTtcbiAgICB9IGVsc2UgaWYgKGNociA9PT0gJ10nKSB7XG4gICAgICBicmFja2V0cyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIWJyYWNrZXRzKSBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgY2hyID09PSAnWyc6XG4gICAgICAgIGJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNociA9PT0gJygnOlxuICAgICAgICByZXN1bHQgKz0gY2hyO1xuICAgICAgICAvLyBpZ25vcmUgbm9uLWNhcHR1cmluZyBncm91cHNcbiAgICAgICAgaWYgKHN0cmluZ1NsaWNlKHN0cmluZywgaW5kZXggKyAxLCBpbmRleCArIDMpID09PSAnPzonKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4ZWMoSVNfTkNHLCBzdHJpbmdTbGljZShzdHJpbmcsIGluZGV4ICsgMSkpKSB7XG4gICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICBuY2cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGdyb3VwaWQrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICBjYXNlIGNociA9PT0gJz4nICYmIG5jZzpcbiAgICAgICAgaWYgKGdyb3VwbmFtZSA9PT0gJycgfHwgaGFzT3duKG5hbWVzLCBncm91cG5hbWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdJbnZhbGlkIGNhcHR1cmUgZ3JvdXAgbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzW2dyb3VwbmFtZV0gPSB0cnVlO1xuICAgICAgICBuYW1lZFtuYW1lZC5sZW5ndGhdID0gW2dyb3VwbmFtZSwgZ3JvdXBpZF07XG4gICAgICAgIG5jZyA9IGZhbHNlO1xuICAgICAgICBncm91cG5hbWUgPSAnJztcbiAgICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuY2cpIGdyb3VwbmFtZSArPSBjaHI7XG4gICAgZWxzZSByZXN1bHQgKz0gY2hyO1xuICB9IHJldHVybiBbcmVzdWx0LCBuYW1lZF07XG59O1xuXG4vLyBgUmVnRXhwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAtY29uc3RydWN0b3JcbmlmIChpc0ZvcmNlZCgnUmVnRXhwJywgQkFTRV9GT1JDRUQpKSB7XG4gIHZhciBSZWdFeHBXcmFwcGVyID0gZnVuY3Rpb24gUmVnRXhwKHBhdHRlcm4sIGZsYWdzKSB7XG4gICAgdmFyIHRoaXNJc1JlZ0V4cCA9IGlzUHJvdG90eXBlT2YoUmVnRXhwUHJvdG90eXBlLCB0aGlzKTtcbiAgICB2YXIgcGF0dGVybklzUmVnRXhwID0gaXNSZWdFeHAocGF0dGVybik7XG4gICAgdmFyIGZsYWdzQXJlVW5kZWZpbmVkID0gZmxhZ3MgPT09IHVuZGVmaW5lZDtcbiAgICB2YXIgZ3JvdXBzID0gW107XG4gICAgdmFyIHJhd1BhdHRlcm4gPSBwYXR0ZXJuO1xuICAgIHZhciByYXdGbGFncywgZG90QWxsLCBzdGlja3ksIGhhbmRsZWQsIHJlc3VsdCwgc3RhdGU7XG5cbiAgICBpZiAoIXRoaXNJc1JlZ0V4cCAmJiBwYXR0ZXJuSXNSZWdFeHAgJiYgZmxhZ3NBcmVVbmRlZmluZWQgJiYgcGF0dGVybi5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgfVxuXG4gICAgaWYgKHBhdHRlcm5Jc1JlZ0V4cCB8fCBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgcGF0dGVybikpIHtcbiAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNvdXJjZTtcbiAgICAgIGlmIChmbGFnc0FyZVVuZGVmaW5lZCkgZmxhZ3MgPSBnZXRSZWdFeHBGbGFncyhyYXdQYXR0ZXJuKTtcbiAgICB9XG5cbiAgICBwYXR0ZXJuID0gcGF0dGVybiA9PT0gdW5kZWZpbmVkID8gJycgOiB0b1N0cmluZyhwYXR0ZXJuKTtcbiAgICBmbGFncyA9IGZsYWdzID09PSB1bmRlZmluZWQgPyAnJyA6IHRvU3RyaW5nKGZsYWdzKTtcbiAgICByYXdQYXR0ZXJuID0gcGF0dGVybjtcblxuICAgIGlmIChVTlNVUFBPUlRFRF9ET1RfQUxMICYmICdkb3RBbGwnIGluIHJlMSkge1xuICAgICAgZG90QWxsID0gISFmbGFncyAmJiBzdHJpbmdJbmRleE9mKGZsYWdzLCAncycpID4gLTE7XG4gICAgICBpZiAoZG90QWxsKSBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsIC9zL2csICcnKTtcbiAgICB9XG5cbiAgICByYXdGbGFncyA9IGZsYWdzO1xuXG4gICAgaWYgKE1JU1NFRF9TVElDS1kgJiYgJ3N0aWNreScgaW4gcmUxKSB7XG4gICAgICBzdGlja3kgPSAhIWZsYWdzICYmIHN0cmluZ0luZGV4T2YoZmxhZ3MsICd5JykgPiAtMTtcbiAgICAgIGlmIChzdGlja3kgJiYgVU5TVVBQT1JURURfWSkgZmxhZ3MgPSByZXBsYWNlKGZsYWdzLCAveS9nLCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU1VQUE9SVEVEX05DRykge1xuICAgICAgaGFuZGxlZCA9IGhhbmRsZU5DRyhwYXR0ZXJuKTtcbiAgICAgIHBhdHRlcm4gPSBoYW5kbGVkWzBdO1xuICAgICAgZ3JvdXBzID0gaGFuZGxlZFsxXTtcbiAgICB9XG5cbiAgICByZXN1bHQgPSBpbmhlcml0SWZSZXF1aXJlZChOYXRpdmVSZWdFeHAocGF0dGVybiwgZmxhZ3MpLCB0aGlzSXNSZWdFeHAgPyB0aGlzIDogUmVnRXhwUHJvdG90eXBlLCBSZWdFeHBXcmFwcGVyKTtcblxuICAgIGlmIChkb3RBbGwgfHwgc3RpY2t5IHx8IGdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUocmVzdWx0KTtcbiAgICAgIGlmIChkb3RBbGwpIHtcbiAgICAgICAgc3RhdGUuZG90QWxsID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucmF3ID0gUmVnRXhwV3JhcHBlcihoYW5kbGVEb3RBbGwocGF0dGVybiksIHJhd0ZsYWdzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGlja3kpIHN0YXRlLnN0aWNreSA9IHRydWU7XG4gICAgICBpZiAoZ3JvdXBzLmxlbmd0aCkgc3RhdGUuZ3JvdXBzID0gZ3JvdXBzO1xuICAgIH1cblxuICAgIGlmIChwYXR0ZXJuICE9PSByYXdQYXR0ZXJuKSB0cnkge1xuICAgICAgLy8gZmFpbHMgaW4gb2xkIGVuZ2luZXMsIGJ1dCB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlcyBmb3IgdW5zdXBwb3J0ZWQgcmVnZXggc3ludGF4XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0LCAnc291cmNlJywgcmF3UGF0dGVybiA9PT0gJycgPyAnKD86KScgOiByYXdQYXR0ZXJuKTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGZvciAodmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKE5hdGl2ZVJlZ0V4cCksIGluZGV4ID0gMDsga2V5cy5sZW5ndGggPiBpbmRleDspIHtcbiAgICBwcm94eUFjY2Vzc29yKFJlZ0V4cFdyYXBwZXIsIE5hdGl2ZVJlZ0V4cCwga2V5c1tpbmRleCsrXSk7XG4gIH1cblxuICBSZWdFeHBQcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWdFeHBXcmFwcGVyO1xuICBSZWdFeHBXcmFwcGVyLnByb3RvdHlwZSA9IFJlZ0V4cFByb3RvdHlwZTtcbiAgZGVmaW5lQnVpbHRJbihnbG9iYWxUaGlzLCAnUmVnRXhwJywgUmVnRXhwV3JhcHBlciwgeyBjb25zdHJ1Y3RvcjogdHJ1ZSB9KTtcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLUBAc3BlY2llc1xuc2V0U3BlY2llcygnUmVnRXhwJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmdldDtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZG90QWxsYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZG90YWxsXG5pZiAoREVTQ1JJUFRPUlMgJiYgVU5TVVBQT1JURURfRE9UX0FMTCkge1xuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUmVnRXhwUHJvdG90eXBlLCAnZG90QWxsJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGRvdEFsbCgpIHtcbiAgICAgIGlmICh0aGlzID09PSBSZWdFeHBQcm90b3R5cGUpIHJldHVybjtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvciBiZWNhdXNlXG4gICAgICAvLyB3ZSBkb24ndCBhZGQgbWV0YWRhdGEgZm9yIHJlZ2V4cHMgY3JlYXRlZCBieSBhIGxpdGVyYWwuXG4gICAgICBpZiAoY2xhc3NvZih0aGlzKSA9PT0gJ1JlZ0V4cCcpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kb3RBbGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCBSZWdFeHAgcmVxdWlyZWQnKTtcbiAgICB9XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgY2FsbChuYXRpdmVFeGVjLCByZTEsICdhJyk7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRztcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHJpbmcpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocmUpO1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByYXcgPSBzdGF0ZS5yYXc7XG4gICAgdmFyIHJlc3VsdCwgcmVDb3B5LCBsYXN0SW5kZXgsIG1hdGNoLCBpLCBvYmplY3QsIGdyb3VwO1xuXG4gICAgaWYgKHJhdykge1xuICAgICAgcmF3Lmxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIHJlc3VsdCA9IGNhbGwocGF0Y2hlZEV4ZWMsIHJhdywgc3RyKTtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJhdy5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHM7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IGNhbGwocmVnZXhwRmxhZ3MsIHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gcmVwbGFjZShmbGFncywgJ3knLCAnJyk7XG4gICAgICBpZiAoaW5kZXhPZihmbGFncywgJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gc3RyaW5nU2xpY2Uoc3RyLCByZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgY2hhckF0KHN0ciwgcmUubGFzdEluZGV4IC0gMSkgIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IGNhbGwobmF0aXZlRXhlYywgc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gc3RyaW5nU2xpY2UobWF0Y2guaW5wdXQsIGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IHN0cmluZ1NsaWNlKG1hdGNoWzBdLCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24ndCB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBleGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmV4ZWNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLmV4ZWNcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAvLi8uZXhlYyAhPT0gZXhlYyB9LCB7XG4gIGV4ZWM6IGV4ZWNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE1JU1NFRF9TVElDS1kgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzJykuTUlTU0VEX1NUSUNLWTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG5cbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnN0aWNreWAgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLnN0aWNreVxuaWYgKERFU0NSSVBUT1JTICYmIE1JU1NFRF9TVElDS1kpIHtcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFJlZ0V4cFByb3RvdHlwZSwgJ3N0aWNreScsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBzdGlja3koKSB7XG4gICAgICBpZiAodGhpcyA9PT0gUmVnRXhwUHJvdG90eXBlKSByZXR1cm47XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IgYmVjYXVzZVxuICAgICAgLy8gd2UgZG9uJ3QgYWRkIG1ldGFkYXRhIGZvciByZWdleHBzIGNyZWF0ZWQgYnkgYSBsaXRlcmFsLlxuICAgICAgaWYgKGNsYXNzb2YodGhpcykgPT09ICdSZWdFeHAnKSB7XG4gICAgICAgIHJldHVybiAhIWdldEludGVybmFsU3RhdGUodGhpcykuc3RpY2t5O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgUmVnRXhwIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gIHZhciByZSA9IC9bYWNdLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gLy4vLmV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHJlLnRlc3QoJ2FiYycpID09PSB0cnVlICYmIGV4ZWNDYWxsZWQ7XG59KCk7XG5cbnZhciBuYXRpdmVUZXN0ID0gLy4vLnRlc3Q7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRlc3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRlc3RcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhREVMRUdBVEVTX1RPX0VYRUMgfSwge1xuICB0ZXN0OiBmdW5jdGlvbiAoUykge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKFMpO1xuICAgIHZhciBleGVjID0gUi5leGVjO1xuICAgIGlmICghaXNDYWxsYWJsZShleGVjKSkgcmV0dXJuIGNhbGwobmF0aXZlVGVzdCwgUiwgc3RyaW5nKTtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbChleGVjLCBSLCBzdHJpbmcpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICBhbk9iamVjdChyZXN1bHQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MnKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT09ICcvYS9iJzsgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxudmFyIElOQ09SUkVDVF9OQU1FID0gUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgbmF0aXZlVG9TdHJpbmcubmFtZSAhPT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChOT1RfR0VORVJJQyB8fCBJTkNPUlJFQ1RfTkFNRSkge1xuICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwYXR0ZXJuID0gJHRvU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgZmxhZ3MgPSAkdG9TdHJpbmcoZ2V0UmVnRXhwRmxhZ3MoUikpO1xuICAgIHJldHVybiAnLycgKyBwYXR0ZXJuICsgJy8nICsgZmxhZ3M7XG4gIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBGT1JDRUQsIFNIQU0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIEZPUkNFRFxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICB2YXIgJGV4ZWMgPSByZWdleHAuZXhlYztcbiAgICAgIGlmICgkZXhlYyA9PT0gcmVnZXhwRXhlYyB8fCAkZXhlYyA9PT0gUmVnRXhwUHJvdG90eXBlLmV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IGNhbGwobmF0aXZlUmVnRXhwTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVNZXRob2QsIHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW4oU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgU1lNQk9MLCBtZXRob2RzWzFdKTtcbiAgfVxuXG4gIGlmIChTSEFNKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwUHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJidgXXxcXGR7MSwyfXw8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkezEsMn0pL2c7XG5cbi8vIGBHZXRTdWJzdGl0dXRpb25gIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgfVxuICByZXR1cm4gcmVwbGFjZShyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgIHZhciBjYXB0dXJlO1xuICAgIHN3aXRjaCAoY2hhckF0KGNoLCAwKSkge1xuICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICBjYXNlICdgJzogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgMCwgcG9zaXRpb24pO1xuICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgdGFpbFBvcyk7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbc3RyaW5nU2xpY2UoY2gsIDEsIC0xKV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2hhckF0KGNoLCAxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoYXJBdChjaCwgMSk7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmIChpc0NhbGxhYmxlKGV4ZWMpKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNhbGwoZXhlYywgUiwgUyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYW5PYmplY3QocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpID09PSAnUmVnRXhwJykgcmV0dXJuIGNhbGwocmVnZXhwRXhlYywgUiwgUyk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbicpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gSUUgPD0gMTEgcmVwbGFjZXMgJDAgd2l0aCB0aGUgd2hvbGUgbWF0Y2gsIGFzIGlmIGl0IHdhcyAkJlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAyNDY2Ni9nZXR0aW5nLWllLXRvLXJlcGxhY2UtYS1yZWdleC13aXRoLXRoZS1saXRlcmFsLXN0cmluZy0wXG52YXIgUkVQTEFDRV9LRUVQU18kMCA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvcHJlZmVyLWVzY2FwZS1yZXBsYWNlbWVudC1kb2xsYXItY2hhciAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gJ2EnLnJlcGxhY2UoLy4vLCAnJDAnKSA9PT0gJyQwJztcbn0pKCk7XG5cbi8vIFNhZmFyaSA8PSAxMy4wLjMoPykgc3Vic3RpdHV0ZXMgbnRoIGNhcHR1cmUgd2hlcmUgbj5tIHdpdGggYW4gZW1wdHkgc3RyaW5nXG52YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAoLy4vW1JFUExBQ0VdKSB7XG4gICAgcmV0dXJuIC8uL1tSRVBMQUNFXSgnYScsICckMCcpID09PSAnJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KSgpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tdXNlbGVzcy1kb2xsYXItcmVwbGFjZW1lbnRzIC0tIGZhbHNlIHBvc2l0aXZlXG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygncmVwbGFjZScsIGZ1bmN0aW9uIChfLCBuYXRpdmVSZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciByZXBsYWNlciA9IGlzTnVsbE9yVW5kZWZpbmVkKHNlYXJjaFZhbHVlKSA/IHVuZGVmaW5lZCA6IGdldE1ldGhvZChzZWFyY2hWYWx1ZSwgUkVQTEFDRSk7XG4gICAgICByZXR1cm4gcmVwbGFjZXJcbiAgICAgICAgPyBjYWxsKHJlcGxhY2VyLCBzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IGNhbGwobmF0aXZlUmVwbGFjZSwgdG9TdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChzdHJpbmcsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PSAnc3RyaW5nJyAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgJyQ8JykgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVSZXBsYWNlLCByeCwgUywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSBpc0NhbGxhYmxlKHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSB0b1N0cmluZyhyZXBsYWNlVmFsdWUpO1xuXG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHB1c2gocmVzdWx0cywgcmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuXG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50O1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIHB1c2goY2FwdHVyZXMsIG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IGNvbmNhdChbbWF0Y2hlZF0sIGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcHVzaChyZXBsYWNlckFyZ3MsIG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gdG9TdHJpbmcoYXBwbHkocmVwbGFjZVZhbHVlLCB1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gc3RyaW5nU2xpY2UoUywgbmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSwgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIHx8ICFSRVBMQUNFX0tFRVBTXyQwIHx8IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBhIHN0cmluZyBvZiBhbGwgdmFsaWQgdW5pY29kZSB3aGl0ZXNwYWNlc1xubW9kdWxlLmV4cG9ydHMgPSAnXFx1MDAwOVxcdTAwMEFcXHUwMDBCXFx1MDAwQ1xcdTAwMERcXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUyMDAwXFx1MjAwMVxcdTIwMDInICtcbiAgJ1xcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGx0cmltID0gUmVnRXhwKCdeWycgKyB3aGl0ZXNwYWNlcyArICddKycpO1xudmFyIHJ0cmltID0gUmVnRXhwKCcoXnxbXicgKyB3aGl0ZXNwYWNlcyArICddKVsnICsgd2hpdGVzcGFjZXMgKyAnXSskJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbSwgdHJpbVN0YXJ0LCB0cmltRW5kLCB0cmltTGVmdCwgdHJpbVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzKSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBsdHJpbSwgJycpO1xuICAgIGlmIChUWVBFICYgMikgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIHJ0cmltLCAnJDEnKTtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbUxlZnQsIHRyaW1TdGFydCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4gIHRyaW06IGNyZWF0ZU1ldGhvZCgzKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBub24gPSAnXFx1MjAwQlxcdTAwODVcXHUxODBFJztcblxuLy8gY2hlY2sgdGhhdCBhIG1ldGhvZCB3b3JrcyB3aXRoIHRoZSBjb3JyZWN0IGxpc3Rcbi8vIG9mIHdoaXRlc3BhY2VzIGFuZCBoYXMgYSBjb3JyZWN0IG5hbWVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdKClcbiAgICAgIHx8IG5vbltNRVRIT0RfTkFNRV0oKSAhPT0gbm9uXG4gICAgICB8fCAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdLm5hbWUgIT09IE1FVEhPRF9OQU1FKTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuIiwgIntcblx0XCJjb25maWdLZXlcIjogXCJnYWRnZXQtRWRpdGZvcm1fQXR0cmlidXRpb25fX0luaXRpYWxpemVkXCIsXG5cdFwiY29uZmlnS2V5VmVcIjogXCJnYWRnZXQtRWRpdGZvcm1fQXR0cmlidXRpb25fX0luaXRpYWxpemVkX19WRVwiLFxuXHRcImlucHV0SWRcIjogXCJlZGl0Zm9ybV9hdHRyaWJ1dGlvblwiLFxuXHRcInRhcmdldFdpa2lFZGl0b3JcIjogXCIuZWRpdENoZWNrYm94ZXMgLm9vLXVpLWhvcml6b250YWxMYXlvdXRcIlxufVxuIiwgImltcG9ydCBcImVzYnVpbGQtY3NzLW1vZHVsZXMtcGx1Z2luLW5zLWNzczpzcmMvRWRpdGZvcm1fQXR0cmlidXRpb24vbW9kdWxlcy91dGlsL0VkaXRmb3JtX0F0dHJpYnV0aW9uLm1vZHVsZS5sZXNzXCI7XG5leHBvcnQgY29uc3QgZm9ybVdyYXAgPSBcIkVkaXRmb3JtLUF0dHJpYnV0aW9uLW1vZHVsZV9fZm9ybVdyYXBfRFA5WjBhX180MTAwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCJmb3JtV3JhcFwiOiBmb3JtV3JhcFxufTtcbiAgICAgICIsICJpbXBvcnQge2xvY2FsaXplfSBmcm9tICdleHQuZ2FkZ2V0LmkxOG4nO1xuXG5jb25zdCBnZXRJMThuTWVzc2FnZXMgPSAoKSA9PiB7XG5cdHJldHVybiB7XG5cdFx0J0FkZCB0byBFZGl0IFN1bW1hcnknOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0FkZCB0byBFZGl0IFN1bW1hcnknLFxuXHRcdFx0J3poLWhhbnMnOiAn5re75Yqg6Iez57yW6L6R5pGY6KaBJyxcblx0XHRcdCd6aC1oYW50JzogJ+a3u+WKoOiHs+e3qOi8r+aRmOimgScsXG5cdFx0fSksXG5cdFx0U291cmNlOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1NvdXJjZScsXG5cdFx0XHQnemgtaGFucyc6ICflhoXlrrnmnaXmupAnLFxuXHRcdFx0J3poLWhhbnQnOiAn5YWn5a655L6G5rqQJyxcblx0XHR9KSxcblx0XHRMaWNlbnNlOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0xpY2Vuc2UnLFxuXHRcdFx0J3poLWhhbnMnOiAn6K645Y+v6K+BJyxcblx0XHRcdCd6aC1oYW50JzogJ+ioseWPr+itiScsXG5cdFx0fSksXG5cdFx0J090aGVyIExpY2Vuc2UnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ090aGVyIGxpY2Vuc2UnLFxuXHRcdFx0J3poLWhhbnMnOiAn5YW25LuW6K645Y+v6K+BJyxcblx0XHRcdCd6aC1oYW50JzogJ+WFtuS7luioseWPr+itiScsXG5cdFx0fSksXG5cdFx0J1BsZWFzZSBDbGFpbSBTb3VyY2VzIGFuZCBMaWNlbnNlcyc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnSWYgZWRpdCBjb250ZW50IGFkZHMgYW55IHRoaXJkLXBhcnR5IGNvbnRlbnQsIHBsZWFzZSBhZGQgdGhlIHNvdXJjZSBhbmQgbGljZW5zZSBvZiB0aGUgdGhpcmQtcGFydHkgY29udGVudCBzZXBhcmF0ZWx5IHRvIHRoZSBlZGl0aW5nIHN1bW1hcnkuJyxcblx0XHRcdCd6aC1oYW5zJzogJ+iLpeaCqOWQkee8lui+keWGheWuueS4rea3u+WKoOS6huesrOS4ieaWueaSsOWGmeeahOWGheWuue+8jOivt+WwhuebuOWFs+esrOS4ieaWueWGheWuueeahOadpea6kOOAgeiuuOWPr+adoeasvuWcqOe8lui+keaRmOimgeS4reWIhuadoeWjsOaYjicsXG5cdFx0XHQnemgtaGFudCc6ICfoi6XmgqjlkJHnt6jovK/lhaflrrnkuK3mt7vliqDkuobnrKzkuInmlrnmkrDlhpnnmoTlhaflrrnvvIzoq4vlsIfnm7jlhbPnrKzkuInmlrnlhaflrrnnmoTkvobmupDjgIHoqLHlj6/mop3mrL7lnKjnt6jovK/mkZjopoHkuK3liIbmop3ogbLmmI4nLFxuXHRcdH0pLFxuXHRcdCdSZXBsYWNlIFdpdGggTGljZW5zZSc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnIChSZXBsYWNlIHdpdGggbGljZW5zZSBuYW1lIGFuZCBVUkwpJyxcblx0XHRcdCd6aC1oYW5zJzogJ++8iOabv+aNouS4uuiuuOWPr+ivgeWQjeensOWSjOe9keWdgO+8iScsXG5cdFx0XHQnemgtaGFudCc6ICfvvIjmm7/mj5vniLLoqLHlj6/orYnlkI3nqLHlkozntrLlnYDvvIknLFxuXHRcdH0pLFxuXHR9O1xufTtcblxuY29uc3QgaTE4bk1lc3NhZ2VzID0gZ2V0STE4bk1lc3NhZ2VzKCk7XG5cbmNvbnN0IGdldE1lc3NhZ2U6IEdldE1lc3NhZ2VzPHR5cGVvZiBpMThuTWVzc2FnZXM+ID0gKGtleSkgPT4ge1xuXHRyZXR1cm4gaTE4bk1lc3NhZ2VzW2tleV0gfHwga2V5O1xufTtcblxuZXhwb3J0IHtnZXRNZXNzYWdlfTtcbiIsICJpbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4vaTE4bic7XG5cbmNvbnN0IExJQ0VOU0VTID0gW1xuXHR7XG5cdFx0bGFiZWw6ICdDQyBCWS1TQSA0LjAnLFxuXHRcdGRhdGE6ICdjYy1ieS1zYTo0LjAnLFxuXHR9LFxuXHR7XG5cdFx0bGFiZWw6ICdDQyBCWS1TQSAzLjAnLFxuXHRcdGRhdGE6ICdjYy1ieS1zYTozLjAnLFxuXHR9LFxuXHR7XG5cdFx0bGFiZWw6ICdDQyBCWS1TQSAzLjAgQ04nLFxuXHRcdGRhdGE6ICdjYy1ieS1zYTozLjAvY24nLFxuXHR9LFxuXHR7XG5cdFx0bGFiZWw6ICdDQyBCWSA0LjAnLFxuXHRcdGRhdGE6ICdjYy1ieTo0LjAnLFxuXHR9LFxuXHR7XG5cdFx0bGFiZWw6ICdDQyBCWSAzLjAnLFxuXHRcdGRhdGE6ICdjYy1ieTozLjAnLFxuXHR9LFxuXHR7XG5cdFx0bGFiZWw6ICdDQyBCWSAzLjAgQ04nLFxuXHRcdGRhdGE6ICdjYy1ieTozLjAvY24nLFxuXHR9LFxuXHR7XG5cdFx0bGFiZWw6ICdDQzAtMS4wJyxcblx0XHRkYXRhOiAnY2MtemVybzoxLjAnLFxuXHR9LFxuXHR7XG5cdFx0bGFiZWw6ICdLT0dMIFR5cGUgSTogQXR0cmlidXRpb24nLFxuXHRcdGRhdGE6ICdodHRwczovL3d3dy5rb2dsLm9yLmtyL2luZm8vbGljZW5zZVR5cGUxLmRvJyxcblx0fSxcblx0e1xuXHRcdGxhYmVsOiBnZXRNZXNzYWdlKCdPdGhlciBMaWNlbnNlJyksXG5cdFx0ZGF0YTogZ2V0TWVzc2FnZSgnUmVwbGFjZSBXaXRoIExpY2Vuc2UnKSxcblx0fSxcbl07XG5cbmNvbnN0IFZBTElEX0lOVEVSV0lLSV9QUkVGSVggPSBbXG5cdCdjYy1ieScsXG5cdCdjYy1ieS1zYScsXG5cdCdjYy16ZXJvJyxcblx0J2NjMCcsXG5cdCdjb21tb25zJyxcblx0J2Vud2lraScsXG5cdCdpbmN1YmF0b3InLFxuXHQnaW5jdWJhdG9yLXdwLW1uYycsXG5cdCdpbmN1YmF0b3Itd3QtbW5jJyxcblx0J2lzbzYzOS0zJyxcblx0J2xleGVtZXMnLFxuXHQnbGljZW5jZScsXG5cdCdsaWNlbmNld2lraScsXG5cdCdsaWNlbnNlJyxcblx0J2xvZ2luJyxcblx0J21lZGlhd2lraXdpa2knLFxuXHQnbW96aWxsYXdpa2knLFxuXHQnbXcnLFxuXHQnb2xkd2lraXNvdXJjZScsXG5cdCdwbWlkJyxcblx0J3JldicsXG5cdCd0ZXN0d2lraWRhdGEnLFxuXHQndicsXG5cdCd2b3knLFxuXHQnd2lraScsXG5cdCd3aWtpYm9va3MnLFxuXHQnd2lraWRhdGEnLFxuXHQnd2lraWZ1bmN0aW9ucycsXG5cdCd3aWtpbmV3cycsXG5cdCd3aWtpcGVkaWEnLFxuXHQnd2lraXF1b3RlJyxcblx0J3dpa2lzb3VyY2UnLFxuXHQnd2lraXZlcnNpdHknLFxuXHQnd2lraXZveWFnZScsXG5cdCd3aWt0Jyxcblx0J3dpa3Rpb25hcnknLFxuXHQnemh3aWtpJyxcblx0J3pod2lraXNvdXJjZScsXG5cdCd6aHdpa2l2b3lhZ2UnLFxuXTtcblxuZXhwb3J0IHtMSUNFTlNFUywgVkFMSURfSU5URVJXSUtJX1BSRUZJWH07XG4iLCAiaW1wb3J0IHtWQUxJRF9JTlRFUldJS0lfUFJFRklYfSBmcm9tICcuLi9jb25zdGFudCc7XG5cbmNvbnN0IGdldExpbmsgPSAoe2xpbmssIHRleHR9OiB7bGluazogc3RyaW5nOyB0ZXh0Pzogc3RyaW5nfSk6IHN0cmluZyA9PiB7XG5cdGNvbnN0IFZBTElEX0lOVEVSV0lLSV9MSU5LX1JFR0VYID0gbmV3IFJlZ0V4cChgXjo/KCR7VkFMSURfSU5URVJXSUtJX1BSRUZJWC5qb2luKCd8Jyl9KWAsICdpJyk7XG5cblx0aWYgKFZBTElEX0lOVEVSV0lLSV9MSU5LX1JFR0VYLnRlc3QobGluaykpIHtcblx0XHRsaW5rID0gYDoke2xpbmsucmVwbGFjZSgvXjovLCAnJyl9YDtcblx0XHRpZiAodGV4dCkge1xuXHRcdFx0cmV0dXJuIGBbWyR7bGlua318JHt0ZXh0fV1dYDtcblx0XHR9XG5cdFx0cmV0dXJuIGBbWyR7bGlua31dXWA7XG5cdH1cblxuXHRyZXR1cm4gZW5jb2RlVVJJKGRlY29kZVVSSShsaW5rKSk7XG59O1xuXG5leHBvcnQge2dldExpbmt9O1xuIiwgImltcG9ydCB7Z2V0TGlua30gZnJvbSAnLi9nZXRMaW5rJztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi4vaTE4bic7XG5cbmNvbnN0IGdldEF0dHJpYnV0aW9uID0gKGZpZWxkU2V0TGF5b3V0OiBPTy51aS5GaWVsZHNldExheW91dCkgPT4ge1xuXHRjb25zdCBhdHRyaWJ1dGlvbnMgPSBbXTtcblxuXHRjb25zdCBnZXRTZWxlY3RlZEl0ZW0gPSAoZHJvcGRvd246IE9PLnVpLkRyb3Bkb3duV2lkZ2V0KTogT08udWkuT3B0aW9uV2lkZ2V0IHwgbnVsbCA9PiB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRJdGVtOiBPTy51aS5PcHRpb25XaWRnZXQgfCBudWxsID0gZHJvcGRvd25cblx0XHRcdC5nZXRNZW51KClcblx0XHRcdC5maW5kU2VsZWN0ZWRJdGVtKCkgYXMgT08udWkuT3B0aW9uV2lkZ2V0IHwgbnVsbDtcblx0XHRyZXR1cm4gc2VsZWN0ZWRJdGVtO1xuXHR9O1xuXG5cdGNvbnN0IGdldFNlbGVjdGVkVmFsdWUgPSAoZHJvcGRvd246IE9PLnVpLkRyb3Bkb3duV2lkZ2V0KTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0XHRjb25zdCBzZWxlY3RlZEl0ZW0gPSBnZXRTZWxlY3RlZEl0ZW0oZHJvcGRvd24pO1xuXHRcdHJldHVybiBzZWxlY3RlZEl0ZW0gPyAoc2VsZWN0ZWRJdGVtLmdldERhdGEoKSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkO1xuXHR9O1xuXG5cdGNvbnN0IGdldFNlbGVjdGVkTGFiZWwgPSAoZHJvcGRvd246IE9PLnVpLkRyb3Bkb3duV2lkZ2V0KTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0XHRjb25zdCBzZWxlY3RlZEl0ZW0gPSBnZXRTZWxlY3RlZEl0ZW0oZHJvcGRvd24pO1xuXHRcdHJldHVybiBzZWxlY3RlZEl0ZW0gPyAoc2VsZWN0ZWRJdGVtLmdldExhYmVsKCkgYXMgc3RyaW5nKSA6IHVuZGVmaW5lZDtcblx0fTtcblxuXHRmb3IgKGNvbnN0IGF0dHJpYnV0aW9uRmllbGRzZXQgb2YgZmllbGRTZXRMYXlvdXQuZ2V0SXRlbXMoKSBhcyBPTy51aS5GaWVsZHNldExheW91dFtdKSB7XG5cdFx0Y29uc3QgYXR0cmlidXRpb246IHtzb3VyY2U/OiBzdHJpbmc7IGxpY2Vuc2U/OiBzdHJpbmd9ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGZpZWxkTGF5b3V0IG9mIGF0dHJpYnV0aW9uRmllbGRzZXQuZ2V0SXRlbXMoKSBhcyBPTy51aS5GaWVsZExheW91dFtdKSB7XG5cdFx0XHRjb25zdCBmaWVsZCA9IGZpZWxkTGF5b3V0LmdldEZpZWxkKCk7XG5cblx0XHRcdGlmIChmaWVsZC5zdXBwb3J0cygnZ2V0VmFsdWUnKSkge1xuXHRcdFx0XHRjb25zdCBsaW5rID0gKGZpZWxkIGFzIE9PLnVpLlRleHRJbnB1dFdpZGdldCkuZ2V0VmFsdWUoKTtcblx0XHRcdFx0aWYgKGxpbmspIHtcblx0XHRcdFx0XHRhdHRyaWJ1dGlvbi5zb3VyY2UgPSBnZXRMaW5rKHtsaW5rfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoZmllbGQuc3VwcG9ydHMoJ2dldE1lbnUnKSkge1xuXHRcdFx0XHRjb25zdCBsaW5rID0gZ2V0U2VsZWN0ZWRWYWx1ZShmaWVsZCBhcyBPTy51aS5Ecm9wZG93bldpZGdldCk7XG5cblx0XHRcdFx0aWYgKGxpbmspIHtcblx0XHRcdFx0XHRjb25zdCB0ZXh0ID0gZ2V0U2VsZWN0ZWRMYWJlbChmaWVsZCBhcyBPTy51aS5Ecm9wZG93bldpZGdldCk7XG5cblx0XHRcdFx0XHRpZiAodGV4dCkge1xuXHRcdFx0XHRcdFx0YXR0cmlidXRpb24ubGljZW5zZSA9IGdldExpbmsoe2xpbmssIHRleHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YXR0cmlidXRpb24ubGljZW5zZSA9IGdldExpbmsoe2xpbmt9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYXR0cmlidXRpb24uc291cmNlICYmIGF0dHJpYnV0aW9uLmxpY2Vuc2UpIHtcblx0XHRcdGF0dHJpYnV0aW9uc1thdHRyaWJ1dGlvbnMubGVuZ3RoXSA9XG5cdFx0XHRcdGAke2dldE1lc3NhZ2UoJ1NvdXJjZScpfTogJHthdHRyaWJ1dGlvbi5zb3VyY2V9ICgke2dldE1lc3NhZ2UoJ0xpY2Vuc2UnKX06ICR7YXR0cmlidXRpb24ubGljZW5zZX0pIGA7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGF0dHJpYnV0aW9ucy5qb2luKCcgJyk7XG59O1xuXG5jb25zdCB1cGRhdGVXcEF0dHJpYnV0aW9uID0gKHtcblx0JGJvZHksXG5cdHBhcmVudEZpZWxkU2V0LFxufToge1xuXHQkYm9keTogSlF1ZXJ5PEhUTUxFbGVtZW50Pjtcblx0cGFyZW50RmllbGRTZXQ6IE9PLnVpLkZpZWxkc2V0TGF5b3V0O1xufSkgPT4ge1xuXHRsZXQgd3BBdHRyaWJ1dGlvbjogc3RyaW5nID0gJyc7XG5cblx0Y29uc3QgJHdwQXR0cmlidXRpb246IEpRdWVyeSA9ICQoJzxpbnB1dD4nKS5hdHRyKHtcblx0XHRpZDogJ3dwQXR0cmlidXRpb24nLFxuXHRcdG5hbWU6ICd3cEF0dHJpYnV0aW9uJyxcblx0XHR0eXBlOiAnaGlkZGVuJyxcblx0XHR2YWx1ZTogJycsXG5cdH0pO1xuXHRjb25zdCAkb3JpZ2lud3BBdHRyaWJ1dGlvbjogSlF1ZXJ5ID0gJGJvZHkuZmluZCgnaW5wdXRbbmFtZT13cEF0dHJpYnV0aW9uXScpO1xuXHRpZiAoISRvcmlnaW53cEF0dHJpYnV0aW9uLmxlbmd0aCkge1xuXHRcdCRib2R5LnByZXBlbmQoJHdwQXR0cmlidXRpb24pO1xuXHR9XG5cblx0d3BBdHRyaWJ1dGlvbiA9IGdldEF0dHJpYnV0aW9uKHBhcmVudEZpZWxkU2V0KTtcblx0JG9yaWdpbndwQXR0cmlidXRpb24udmFsKHdwQXR0cmlidXRpb24pO1xufTtcblxuZXhwb3J0IHtnZXRBdHRyaWJ1dGlvbiwgdXBkYXRlV3BBdHRyaWJ1dGlvbn07XG4iLCAiY29uc3QgYXBwZW5kVGV4dFRvU3VtbWFyeSA9ICh7Y3VzdG9tU3VtbWFyeSwgJHdwU3VtbWFyeX06IHtjdXN0b21TdW1tYXJ5OiBzdHJpbmc7ICR3cFN1bW1hcnk6IEpRdWVyeX0pOiB2b2lkID0+IHtcblx0Y29uc3Qgb3JpZ2luU3VtbWFyeTogc3RyaW5nID0gKCR3cFN1bW1hcnkudmFsKCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyAnJztcblxuXHQkd3BTdW1tYXJ5LnZhbChvcmlnaW5TdW1tYXJ5LnRyaW0oKSA/IGAke29yaWdpblN1bW1hcnl9ICR7Y3VzdG9tU3VtbWFyeX1gIDogY3VzdG9tU3VtbWFyeSkudHJpZ2dlcignY2hhbmdlJyk7XG59O1xuXG5leHBvcnQge2FwcGVuZFRleHRUb1N1bW1hcnl9O1xuIiwgImltcG9ydCB7Z2V0QXR0cmlidXRpb24sIHVwZGF0ZVdwQXR0cmlidXRpb259IGZyb20gJy4vZ2V0QXR0cmlidXRpb24nO1xuaW1wb3J0IHtMSUNFTlNFU30gZnJvbSAnLi4vY29uc3RhbnQnO1xuaW1wb3J0IHthcHBlbmRUZXh0VG9TdW1tYXJ5fSBmcm9tICcuL2FwcGVuZFRleHRUb1N1bW1hcnknO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuLi9pMThuJztcblxuY29uc3QgZ2V0VGV4dElucHV0ID0gKC4uLm9uQ2hhbmdlczogKCgpID0+IHZvaWQpW10pID0+IHtcblx0Y29uc3QgdGV4dElucHV0ID0gbmV3IE9PLnVpLlRleHRJbnB1dFdpZGdldCh7XG5cdFx0cGxhY2Vob2xkZXI6IGdldE1lc3NhZ2UoJ1NvdXJjZScpLFxuXHR9KTtcblxuXHRmb3IgKGNvbnN0IG9uQ2hhbmdlIG9mIG9uQ2hhbmdlcykge1xuXHRcdHRleHRJbnB1dC5vbignY2hhbmdlJywgb25DaGFuZ2UpO1xuXHR9XG5cblx0cmV0dXJuIHRleHRJbnB1dDtcbn07XG5cbmNvbnN0IGdldERyb3BEb3duID0gKC4uLm9uU2VsZWN0czogKCgpID0+IHZvaWQpW10pID0+IHtcblx0Y29uc3QgZHJvcGRvd246IE9PLnVpLkRyb3Bkb3duV2lkZ2V0ID0gbmV3IE9PLnVpLkRyb3Bkb3duV2lkZ2V0KHtcblx0XHRsYWJlbDogZ2V0TWVzc2FnZSgnTGljZW5zZScpLFxuXHR9KTtcblxuXHRjb25zdCBtZW51T3B0aW9uczogT08udWkuTWVudU9wdGlvbldpZGdldFtdID0gW107XG5cblx0Zm9yIChjb25zdCB7ZGF0YSwgbGFiZWx9IG9mIExJQ0VOU0VTKSB7XG5cdFx0bWVudU9wdGlvbnNbbWVudU9wdGlvbnMubGVuZ3RoXSA9IG5ldyBPTy51aS5NZW51T3B0aW9uV2lkZ2V0KHtcblx0XHRcdGRhdGEsXG5cdFx0XHRsYWJlbCxcblx0XHR9KTtcblx0fVxuXG5cdGRyb3Bkb3duLmdldE1lbnUoKS5hZGRJdGVtcyhtZW51T3B0aW9ucyk7XG5cblx0Zm9yIChjb25zdCBvblNlbGVjdCBvZiBvblNlbGVjdHMpIHtcblx0XHRkcm9wZG93bi5nZXRNZW51KCkub24oJ3NlbGVjdCcsIG9uU2VsZWN0KTtcblx0fVxuXG5cdHJldHVybiBkcm9wZG93bjtcbn07XG5cbmNvbnN0IGdldEFkZEl0ZW1CdXR0b24gPSAoLi4ub25DbGlja3M6ICgoKSA9PiB2b2lkKVtdKTogT08udWkuQnV0dG9uSW5wdXRXaWRnZXQgPT4ge1xuXHRjb25zdCBhZGRJdGVtQnV0dG9uID0gbmV3IE9PLnVpLkJ1dHRvbklucHV0V2lkZ2V0KHtcblx0XHRsYWJlbDogZ2V0TWVzc2FnZSgnQWRkIHRvIEVkaXQgU3VtbWFyeScpLFxuXHR9KTtcblxuXHRmb3IgKGNvbnN0IG9uQ2xpY2sgb2Ygb25DbGlja3MpIHtcblx0XHRhZGRJdGVtQnV0dG9uLm9uKCdjbGljaycsIG9uQ2xpY2spO1xuXHR9XG5cblx0cmV0dXJuIGFkZEl0ZW1CdXR0b247XG59O1xuXG5jb25zdCBnZW5lcmF0ZVRleHRJbnB1dFdpdGhEcm9wZG93biA9ICh7JGJvZHksICR3cFN1bW1hcnl9OiB7JGJvZHk6IEpRdWVyeTxIVE1MRWxlbWVudD47ICR3cFN1bW1hcnk6IEpRdWVyeX0pID0+IHtcblx0Y29uc3QgaW5pdGlhbEZpZWxkc2V0ID0gbmV3IE9PLnVpLkZpZWxkc2V0TGF5b3V0KCk7XG5cdGNvbnN0IHBhcmVudEZpZWxkU2V0ID0gbmV3IE9PLnVpLkZpZWxkc2V0TGF5b3V0KHtcblx0XHRsYWJlbDogZ2V0TWVzc2FnZSgnUGxlYXNlIENsYWltIFNvdXJjZXMgYW5kIExpY2Vuc2VzJyksXG5cdH0pO1xuXG5cdGNvbnN0IGlucHV0T25DaGFuZ2UgPSAoKSA9PiB7XG5cdFx0dXBkYXRlV3BBdHRyaWJ1dGlvbih7JGJvZHksIHBhcmVudEZpZWxkU2V0fSk7XG5cdH07XG5cblx0Y29uc3QgdGV4dElucHV0ID0gZ2V0VGV4dElucHV0KGlucHV0T25DaGFuZ2UpO1xuXHRjb25zdCBkcm9wRG93biA9IGdldERyb3BEb3duKGlucHV0T25DaGFuZ2UpO1xuXG5cdGNvbnN0IGFkZEl0ZW1PbkNsaWNrID0gKCkgPT4ge1xuXHRcdGxldCB3cEF0dHJpYnV0aW9uOiBzdHJpbmcgPSAnJztcblxuXHRcdGNvbnN0ICR3cEF0dHJpYnV0aW9uOiBKUXVlcnkgPSAkKCc8aW5wdXQ+JykuYXR0cih7XG5cdFx0XHRpZDogJ3dwQXR0cmlidXRpb24nLFxuXHRcdFx0bmFtZTogJ3dwQXR0cmlidXRpb24nLFxuXHRcdFx0dHlwZTogJ2hpZGRlbicsXG5cdFx0XHR2YWx1ZTogJycsXG5cdFx0fSk7XG5cblx0XHRjb25zdCAkb3JpZ2lud3BBdHRyaWJ1dGlvbjogSlF1ZXJ5PEhUTUxJbnB1dEVsZW1lbnQ+ID1cblx0XHRcdCRib2R5LmZpbmQ8SFRNTElucHV0RWxlbWVudD4oJ2lucHV0W25hbWU9d3BBdHRyaWJ1dGlvbl0nKTtcblx0XHRpZiAoISRvcmlnaW53cEF0dHJpYnV0aW9uLmxlbmd0aCkge1xuXHRcdFx0JGJvZHkucHJlcGVuZCgkd3BBdHRyaWJ1dGlvbik7XG5cdFx0fVxuXG5cdFx0d3BBdHRyaWJ1dGlvbiA9IGdldEF0dHJpYnV0aW9uKHBhcmVudEZpZWxkU2V0KTtcblx0XHQkb3JpZ2lud3BBdHRyaWJ1dGlvbi52YWwod3BBdHRyaWJ1dGlvbik7XG5cblx0XHRhcHBlbmRUZXh0VG9TdW1tYXJ5KHtcblx0XHRcdGN1c3RvbVN1bW1hcnk6ICRvcmlnaW53cEF0dHJpYnV0aW9uLnZhbCgpID8gYFskeyRvcmlnaW53cEF0dHJpYnV0aW9uLnZhbCgpfV1gIDogJycsXG5cdFx0XHQkd3BTdW1tYXJ5LFxuXHRcdH0pO1xuXG5cdFx0dGV4dElucHV0LnNldFZhbHVlKCcnKTtcblx0XHRkcm9wRG93bi5nZXRNZW51KCkudW5zZWxlY3RJdGVtKCk7XG5cdH07XG5cblx0Y29uc3QgYWRkSXRlbUJ1dHRvbiA9IGdldEFkZEl0ZW1CdXR0b24oYWRkSXRlbU9uQ2xpY2spO1xuXG5cdGluaXRpYWxGaWVsZHNldC5hZGRJdGVtcyhbXG5cdFx0bmV3IE9PLnVpLkZpZWxkTGF5b3V0KHRleHRJbnB1dCwge2xhYmVsOiBnZXRNZXNzYWdlKCdTb3VyY2UnKSwgYWxpZ246ICdpbmxpbmUnfSksXG5cdFx0bmV3IE9PLnVpLkZpZWxkTGF5b3V0KGRyb3BEb3duLCB7bGFiZWw6IGdldE1lc3NhZ2UoJ0xpY2Vuc2UnKSwgYWxpZ246ICdpbmxpbmUnfSksXG5cdFx0bmV3IE9PLnVpLkZpZWxkTGF5b3V0KGFkZEl0ZW1CdXR0b24sIHthbGlnbjogJ2lubGluZSd9KSxcblx0XSk7XG5cblx0cGFyZW50RmllbGRTZXQuYWRkSXRlbXMoW2luaXRpYWxGaWVsZHNldF0pO1xuXG5cdHJldHVybiBwYXJlbnRGaWVsZFNldDtcbn07XG5cbmV4cG9ydCB7Z2VuZXJhdGVUZXh0SW5wdXRXaXRoRHJvcGRvd259O1xuIiwgImltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnfi9FZGl0Zm9ybV9BdHRyaWJ1dGlvbi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtmb3JtV3JhcH0gZnJvbSAnLi9FZGl0Zm9ybV9BdHRyaWJ1dGlvbi5tb2R1bGUubGVzcyc7XG5pbXBvcnQge2dlbmVyYXRlVGV4dElucHV0V2l0aERyb3Bkb3dufSBmcm9tICcuL2dlbmVyYXRlVGV4dElucHV0V2l0aERyb3Bkb3duJztcblxuaW50ZXJmYWNlIExheW91dFByb3BzIHtcblx0JGJvZHk6IEpRdWVyeTxIVE1MRWxlbWVudD47XG59XG5cbmNvbnN0IGdlbmVyYXRlVmlzdWFsRWRpdG9yTGF5b3V0ID0gKHskYm9keX06IExheW91dFByb3BzKTogSlF1ZXJ5PEhUTUxFbGVtZW50PiA9PiB7XG5cdGNvbnN0IHt0YXJnZXR9ID0gd2luZG93LnZlLmluaXQ7XG5cdGNvbnN0ICR3cFN1bW1hcnkgPSB0YXJnZXQuc2F2ZURpYWxvZy5lZGl0U3VtbWFyeUlucHV0LiRpbnB1dDtcblx0Y29uc3QgdGV4dElucHV0V2l0aERyb3Bkb3duID0gZ2VuZXJhdGVUZXh0SW5wdXRXaXRoRHJvcGRvd24oeyRib2R5LCAkd3BTdW1tYXJ5fSk7XG5cdC8vIE1lc3NhZ2VzIHRoYXQgY2FuIGJlIHVzZWQgaGVyZTpcblx0Ly8gKiBzZWUgYWJvdmUgaW1wb3J0ZWQgb3B0aW9ucy5qc29uXG5cdC8vICogZm9yIG1vcmUgaW5mb3JtYXRpb25cblx0Y29uc3QgJGxheW91dCA9ICQoJzxkaXY+JykuYXR0cignaWQnLCBPUFRJT05TLmlucHV0SWQpLmFkZENsYXNzKGZvcm1XcmFwKTtcblx0JGxheW91dC5hcHBlbmQodGV4dElucHV0V2l0aERyb3Bkb3duLiRlbGVtZW50KTtcblxuXHRyZXR1cm4gJGxheW91dDtcbn07XG5cbmNvbnN0IGdlbmVyYXRlV2lraUVkaXRvckxheW91dCA9ICh7JGJvZHksICRlZGl0Rm9ybX06IExheW91dFByb3BzICYgeyRlZGl0Rm9ybTogSlF1ZXJ5fSk6IEpRdWVyeTxIVE1MRWxlbWVudD4gPT4ge1xuXHRjb25zdCAkd3BTdW1tYXJ5ID0gJGVkaXRGb3JtLmZpbmQoJ2lucHV0W25hbWU9d3BTdW1tYXJ5XScpO1xuXHRjb25zdCB0ZXh0SW5wdXRXaXRoRHJvcGRvd24gPSBnZW5lcmF0ZVRleHRJbnB1dFdpdGhEcm9wZG93bih7JGJvZHksICR3cFN1bW1hcnl9KTtcblx0Y29uc3QgJGxheW91dCA9ICQoJzxkaXY+JykuYXR0cignaWQnLCBPUFRJT05TLmlucHV0SWQpLmFkZENsYXNzKGZvcm1XcmFwKTtcblx0JGxheW91dC5hcHBlbmQodGV4dElucHV0V2l0aERyb3Bkb3duLiRlbGVtZW50KTtcblxuXHRyZXR1cm4gJGxheW91dDtcbn07XG5cbmV4cG9ydCB7Z2VuZXJhdGVWaXN1YWxFZGl0b3JMYXlvdXQsIGdlbmVyYXRlV2lraUVkaXRvckxheW91dH07XG4iLCAiaW1wb3J0ICogYXMgT1BUSU9OUyBmcm9tICd+L0VkaXRmb3JtX0F0dHJpYnV0aW9uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge2dlbmVyYXRlVmlzdWFsRWRpdG9yTGF5b3V0fSBmcm9tICcuL3V0aWwvZ2VuZXJhdGVMYXlvdXQnO1xuXG5jb25zdCBwcm9jZXNzVmlzdWFsRWRpdG9yID0gKHskYm9keX06IHskYm9keTogSlF1ZXJ5PEhUTUxCb2R5RWxlbWVudD59KTogdm9pZCA9PiB7XG5cdC8vIEd1YXJkIGFnYWluc3QgZG91YmxlIGluY2x1c2lvbnNcblx0aWYgKG13LmNvbmZpZy5nZXQoT1BUSU9OUy5jb25maWdLZXlWZSkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCB7dGFyZ2V0fSA9IHdpbmRvdy52ZS5pbml0O1xuXHRjb25zdCB7c2F2ZURpYWxvZ30gPSB0YXJnZXQ7XG5cdGNvbnN0IHskc2F2ZU9wdGlvbnN9ID0gc2F2ZURpYWxvZztcblx0aWYgKCEkc2F2ZU9wdGlvbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU2V0IGd1YXJkXG5cdG13LmNvbmZpZy5zZXQoT1BUSU9OUy5jb25maWdLZXlWZSwgdHJ1ZSk7XG5cblx0Y29uc3QgJGxheW91dCA9IGdlbmVyYXRlVmlzdWFsRWRpdG9yTGF5b3V0KHskYm9keX0pO1xuXG5cdGlmICghJGJvZHkuZmluZChgIyR7T1BUSU9OUy5pbnB1dElkfWApLmxlbmd0aCkge1xuXHRcdCRzYXZlT3B0aW9ucy5hcHBlbmQoJGxheW91dCk7XG5cdH1cblxuXHQvLyBSZWluaXRpYWxpemF0aW9uIGlzIHJlcXVpcmVkIGZvciBzd2l0Y2hpbmcgYmV0d2VlbiBWaXN1YWxFZGl0b3IgYW5kIE5ldyBXaWtpdGV4dCBFZGl0b3IgKDIwMTcpXG5cdG13Lmhvb2soJ3ZlLmFjdGl2YXRpb25Db21wbGV0ZScpLmFkZCgoKSA9PiB7XG5cdFx0aWYgKG13LmNvbmZpZy5nZXQoT1BUSU9OUy5jb25maWdLZXlWZSkpIHtcblx0XHRcdG13LmNvbmZpZy5zZXQoT1BUSU9OUy5jb25maWdLZXlWZSwgZmFsc2UpO1xuXHRcdH1cblx0fSk7XG59O1xuXG5leHBvcnQge3Byb2Nlc3NWaXN1YWxFZGl0b3J9O1xuIiwgImltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnfi9FZGl0Zm9ybV9BdHRyaWJ1dGlvbi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtnZW5lcmF0ZVdpa2lFZGl0b3JMYXlvdXR9IGZyb20gJy4vdXRpbC9nZW5lcmF0ZUxheW91dCc7XG5cbmNvbnN0IHByb2Nlc3NXaWtpRWRpdG9yID0gKHskYm9keSwgJGVkaXRGb3JtfTogeyRib2R5OiBKUXVlcnk8SFRNTEJvZHlFbGVtZW50PjsgJGVkaXRGb3JtOiBKUXVlcnl9KTogdm9pZCA9PiB7XG5cdC8vIEd1YXJkIGFnYWluc3QgZG91YmxlIGluY2x1c2lvbnNcblx0aWYgKG13LmNvbmZpZy5nZXQoT1BUSU9OUy5jb25maWdLZXkpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgJHRhcmdldDogSlF1ZXJ5ID0gJGVkaXRGb3JtLmZpbmQoT1BUSU9OUy50YXJnZXRXaWtpRWRpdG9yKTtcblx0aWYgKCEkdGFyZ2V0Lmxlbmd0aCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdG13LmNvbmZpZy5zZXQoT1BUSU9OUy5jb25maWdLZXksIHRydWUpO1xuXG5cdGNvbnN0ICRsYXlvdXQgPSBnZW5lcmF0ZVdpa2lFZGl0b3JMYXlvdXQoeyRib2R5LCAkZWRpdEZvcm19KTtcblxuXHRpZiAoISRib2R5LmZpbmQoYCMke09QVElPTlMuaW5wdXRJZH1gKS5sZW5ndGgpIHtcblx0XHQkdGFyZ2V0LmFmdGVyKCRsYXlvdXQpO1xuXHR9XG59O1xuXG5leHBvcnQge3Byb2Nlc3NXaWtpRWRpdG9yfTtcbiIsICJpbXBvcnQge3Byb2Nlc3NWaXN1YWxFZGl0b3J9IGZyb20gJy4vbW9kdWxlcy9wcm9jZXNzVmlzdWFsRWRpdG9yJztcbmltcG9ydCB7cHJvY2Vzc1dpa2lFZGl0b3J9IGZyb20gJy4vbW9kdWxlcy9wcm9jZXNzV2lraUVkaXRvcic7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIOesrOS4ieaWueadpea6kOeJueauiuWjsOaYjlxuICovXG52b2lkICQucmVhZHkudGhlbihmdW5jdGlvbiBlZGl0Rm9ybSgpOiB2b2lkIHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdG13Lmhvb2soJ3dpa2lwYWdlLmVkaXRmb3JtJykuYWRkKCgkZWRpdEZvcm0pOiB2b2lkID0+IHtcblx0XHRwcm9jZXNzV2lraUVkaXRvcih7XG5cdFx0XHQkYm9keSxcblx0XHRcdCRlZGl0Rm9ybSxcblx0XHR9KTtcblx0fSk7XG5cblx0bXcuaG9vaygndmUuc2F2ZURpYWxvZy5zdGF0ZUNoYW5nZWQnKS5hZGQoKCk6IHZvaWQgPT4ge1xuXHRcdHByb2Nlc3NWaXN1YWxFZGl0b3IoeyRib2R5fSk7XG5cdH0pO1xufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFD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RUFDRDtBQUVBNEYsS0FBR0MsT0FBT0csSUFBWWpLLFdBQVcsSUFBSTtBQUVyQyxNQUFNb0osVUFBVUkseUJBQXlCO0lBQUNwRjtJQUFPc0Y7RUFBUyxDQUFDO0FBRTNELE1BQUksQ0FBQ3RGLE1BQU1VLEtBQUEsSUFBQXJELE9BQWlCdkIsT0FBTyxDQUFFLEVBQUUrRCxRQUFRO0FBQzlDcUcsWUFBUUMsTUFBTW5CLE9BQU87RUFDdEI7QUFDRDs7QUNmQSxLQUFLNUUsRUFBRWdHLE1BQU1DLEtBQUssU0FBU0MsV0FBaUI7QUFDM0MsTUFBTXRHLFFBQVFJLEVBQUUsTUFBTTtBQUN0QnFGLEtBQUdLLEtBQUssbUJBQW1CLEVBQUVDLElBQUksU0FBQ1QsV0FBb0I7QUFDckRVLHNCQUFrQjtNQUNqQmhHO01BQ0FzRjtJQUNELENBQUM7RUFDRixDQUFDO0FBRURHLEtBQUdLLEtBQUssNEJBQTRCLEVBQUVDLElBQUksV0FBWTtBQUNyRFIsd0JBQW9CO01BQUN2RjtJQUFLLENBQUM7RUFDNUIsQ0FBQztBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImFjdGl2ZVhEb2N1bWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJzZWxmIiwgIiQiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICIkIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIiQiLCAiJCIsICJnbG9iYWxUaGlzIiwgIlN5bWJvbCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgImdsb2JhbFRoaXMiLCAiRXJyb3IiLCAiUmVmZXJlbmNlRXJyb3IiLCAiU3ludGF4RXJyb3IiLCAiVHlwZUVycm9yIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiX0RPTVRva2VuTGlzdCIsICJpbml0X0RPTVRva2VuTGlzdCIsICJ1bmRlZmluZWQiLCAiZ2xvYmFsIiwgInVuZGVmaW5lZCIsICJ1bmRlZmluZWQiLCAiZ2xvYmFsIiwgIkRvY3VtZW50RnJhZ21lbnQiLCAidW5kZWZpbmVkIiwgImdsb2JhbCIsICJ1bmRlZmluZWQiLCAidW5kZWZpbmVkIiwgImdsb2JhbCIsICJ1bmRlZmluZWQiLCAidW5kZWZpbmVkIiwgInVuZGVmaW5lZCIsICJtb2R1bGUiLCAiJCIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZ2xvYmFsVGhpcyIsICJTeW50YXhFcnJvciIsICJpbmRleCIsICJSZWdFeHAiLCAibW9kdWxlIiwgIiQiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAiY29uZmlnS2V5IiwgImNvbmZpZ0tleVZlIiwgImlucHV0SWQiLCAidGFyZ2V0V2lraUVkaXRvciIsICJmb3JtV3JhcCIsICJpbXBvcnRfZXh0X2dhZGdldCIsICJyZXF1aXJlIiwgImdldEkxOG5NZXNzYWdlcyIsICJsb2NhbGl6ZSIsICJlbiIsICJTb3VyY2UiLCAiTGljZW5zZSIsICJpMThuTWVzc2FnZXMiLCAiZ2V0TWVzc2FnZSIsICJrZXkiLCAiTElDRU5TRVMiLCAibGFiZWwiLCAiZGF0YSIsICJWQUxJRF9JTlRFUldJS0lfUFJFRklYIiwgImdldExpbmsiLCAiX3JlZiIsICJsaW5rIiwgInRleHQiLCAiVkFMSURfSU5URVJXSUtJX0xJTktfUkVHRVgiLCAiUmVnRXhwIiwgImNvbmNhdCIsICJqb2luIiwgInRlc3QiLCAicmVwbGFjZSIsICJlbmNvZGVVUkkiLCAiZGVjb2RlVVJJIiwgImdldEF0dHJpYnV0aW9uIiwgImZpZWxkU2V0TGF5b3V0IiwgImF0dHJpYnV0aW9ucyIsICJnZXRTZWxlY3RlZEl0ZW0iLCAiZHJvcGRvd24iLCAic2VsZWN0ZWRJdGVtIiwgImdldE1lbnUiLCAiZmluZFNlbGVjdGVkSXRlbSIsICJnZXRTZWxlY3RlZFZhbHVlIiwgImdldERhdGEiLCAiZ2V0U2VsZWN0ZWRMYWJlbCIsICJnZXRMYWJlbCIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiZ2V0SXRlbXMiLCAiX3N0ZXAiLCAicyIsICJuIiwgImRvbmUiLCAiYXR0cmlidXRpb25GaWVsZHNldCIsICJ2YWx1ZSIsICJhdHRyaWJ1dGlvbiIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJmaWVsZExheW91dCIsICJmaWVsZCIsICJnZXRGaWVsZCIsICJzdXBwb3J0cyIsICJnZXRWYWx1ZSIsICJzb3VyY2UiLCAibGljZW5zZSIsICJlcnIiLCAiZSIsICJmIiwgImxlbmd0aCIsICJ1cGRhdGVXcEF0dHJpYnV0aW9uIiwgIl9yZWYyIiwgIiRib2R5IiwgInBhcmVudEZpZWxkU2V0IiwgIndwQXR0cmlidXRpb24iLCAiJHdwQXR0cmlidXRpb24iLCAiJCIsICJhdHRyIiwgImlkIiwgIm5hbWUiLCAidHlwZSIsICIkb3JpZ2lud3BBdHRyaWJ1dGlvbiIsICJmaW5kIiwgInByZXBlbmQiLCAidmFsIiwgImFwcGVuZFRleHRUb1N1bW1hcnkiLCAiX3JlZjMiLCAiXyR3cFN1bW1hcnkkdmFsIiwgImN1c3RvbVN1bW1hcnkiLCAiJHdwU3VtbWFyeSIsICJvcmlnaW5TdW1tYXJ5IiwgInRyaW0iLCAidHJpZ2dlciIsICJnZXRUZXh0SW5wdXQiLCAidGV4dElucHV0IiwgIk9PIiwgInVpIiwgIlRleHRJbnB1dFdpZGdldCIsICJwbGFjZWhvbGRlciIsICJfbGVuIiwgImFyZ3VtZW50cyIsICJvbkNoYW5nZXMiLCAiQXJyYXkiLCAiX2tleSIsICJfaSIsICJfb25DaGFuZ2VzIiwgIm9uQ2hhbmdlIiwgIm9uIiwgImdldERyb3BEb3duIiwgIkRyb3Bkb3duV2lkZ2V0IiwgIm1lbnVPcHRpb25zIiwgIl9pMiIsICJfTElDRU5TRVMiLCAiX0xJQ0VOU0VTJF9pIiwgIk1lbnVPcHRpb25XaWRnZXQiLCAiYWRkSXRlbXMiLCAiX2xlbjIiLCAib25TZWxlY3RzIiwgIl9rZXkyIiwgIl9pMyIsICJfb25TZWxlY3RzIiwgIm9uU2VsZWN0IiwgImdldEFkZEl0ZW1CdXR0b24iLCAiYWRkSXRlbUJ1dHRvbiIsICJCdXR0b25JbnB1dFdpZGdldCIsICJfbGVuMyIsICJvbkNsaWNrcyIsICJfa2V5MyIsICJfaTQiLCAiX29uQ2xpY2tzIiwgIm9uQ2xpY2siLCAiZ2VuZXJhdGVUZXh0SW5wdXRXaXRoRHJvcGRvd24iLCAiX3JlZjQiLCAiaW5pdGlhbEZpZWxkc2V0IiwgIkZpZWxkc2V0TGF5b3V0IiwgImlucHV0T25DaGFuZ2UiLCAiZHJvcERvd24iLCAiYWRkSXRlbU9uQ2xpY2siLCAic2V0VmFsdWUiLCAidW5zZWxlY3RJdGVtIiwgIkZpZWxkTGF5b3V0IiwgImFsaWduIiwgImdlbmVyYXRlVmlzdWFsRWRpdG9yTGF5b3V0IiwgIl9yZWY1IiwgInRhcmdldCIsICJ3aW5kb3ciLCAidmUiLCAiaW5pdCIsICJzYXZlRGlhbG9nIiwgImVkaXRTdW1tYXJ5SW5wdXQiLCAiJGlucHV0IiwgInRleHRJbnB1dFdpdGhEcm9wZG93biIsICIkbGF5b3V0IiwgImFkZENsYXNzIiwgImFwcGVuZCIsICIkZWxlbWVudCIsICJnZW5lcmF0ZVdpa2lFZGl0b3JMYXlvdXQiLCAiX3JlZjYiLCAiJGVkaXRGb3JtIiwgInByb2Nlc3NWaXN1YWxFZGl0b3IiLCAiX3JlZjciLCAibXciLCAiY29uZmlnIiwgImdldCIsICIkc2F2ZU9wdGlvbnMiLCAic2V0IiwgImhvb2siLCAiYWRkIiwgInByb2Nlc3NXaWtpRWRpdG9yIiwgIl9yZWY4IiwgIiR0YXJnZXQiLCAiYWZ0ZXIiLCAicmVhZHkiLCAidGhlbiIsICJlZGl0Rm9ybSJdCn0K